viernes, 20 de septiembre de 2013

En Venezuela, el pobre es más pobre y el rico es más rico.


Venezuela es un país donde la inflación golpea tan duro que el rico es cada vez más rico y el pobre es cada vez más pobre. La razón es simple, con un dolar paralelo e innombrable que tiene un valor siete veces más alto que el valor oficial del dolar que vende el BCV, la posibilidad de acceder a productos y servicios importados para las clases trabajadoras es realmente difícil. El problema se acentúa cuando estamos conscientes de las balanzas de pagos de Venezuela tienden mayormente a la importación, mientras que la exportación es otra cosa completamente distinta.

Importaciones: 59.339 Millones de Dolares
Exportaciones no petroleras: 3.771 Millones de Dolares
Exportaciones Petroleras: 93.569 Millones de Dolares
Total exportaciones: 97.930 Millones de Dolares

El problema es el siguiente y por muy alto que sean los montos solo hay que saber restar.

Exportaciones no Petroleras – Importaciones = - 55968 Millones de Dolares

¿Por que? Somos un país donde todo es importado, ese monto de importaciones es el dinero que gastamos en productos y servicios que podrían ser producidos aquí para luego ser exportados. Hablamos de zapatos, textiles, artículos de oficina, tecnología y un largo etcétera. El objetivo es reducir ese déficit entre las exportaciones no petroleras y las importaciones, exportar más cosas que no sean petroleo para dejar de importar esas mismas cosas.

La solución es que, si Venezuela hiciera más zapatos y dejara de comprar zapatos a china, hiciera más artículos de oficina y dejara de importarlos, implantara una planta de producción de teléfonos celulares y los exportáramos a mercados emergentes como nuestros vecinos de Brasil, Colombia México podríamos obtener dolares, pero no hablo de cualquier cosa hablo de productos de calidad hechos en Venezuela.

Ahora, si es tan malo para Venezuela como país importar ¿Por qué lo hacemos?

Simple, un zapatero Venezolano crea un par de zapatos que cuesta 300 Bsf producir. Lo vende en el mercado nacional a 390 Bsf. (ganando el 30%) Decide exportarlos y obtiene el siguiente monto en dolares por los zapatos que produjo.

390 Bsf / 6.30 = 61,90 usd.

Ahora, ese mismo productor al ver que la competencia internacional pone zapatos de similar calidad(mismo precio en dolares) (zapatos chinos o ponga su país favorito aquí) en Venezuela a 1000 Bsf, observa la siguiente irregularidad.

61,90*6.30 = 389,97 bsf. (El estado se los paga a este precio)
1000 – 389,97= 610, 03 bsf

(El estado falla en controlar el margen de ganancia), si hablamos de 30% de ganancia el importador gana 117 bs por cada par que importa, mientras el productor nacional solo 90 por cada par que exporta. El caso planteado es peor, el importador se gana 610,03 Bsf por cada zapato importado, un 61% de ganancia.

El detalle es el siguiente, el importador obtiene un mayor margen de ganancia en Bolívares por sus dolares, los mismos dolares que el productor obtuvo por exportar sus zapatos. La cosa es aún peor si se calcula el margen de ganancia del importador a dolar negro.


En cuanto a la inflación.

Un venezolano que gana sueldo mínimo obtiene 2702,73 Bs mensuales, el empresario “rico” que tiene un negocio vende sus productos o servicios a determinado precios. Hablemos del cartón de huevos.

Un Cartón de huevos en enero de 2013 tenia un precio de 25 bsf. Hoy, 19 de septiembre de 2013 105,5. El aumento fue de 422%. Igualmente hubo un aumento en el sueldo mínimo, a principios de año era de 2402,00 para la fecha es de 2702 como dijimos anteriormente, solo 300 bs de aumento.

Veamos, sueldo transformado en cartones de huevos:

Principio de año: 2402 bs / 25 bsf/cartón = 96 cartones
Hoy: 2702/105,5 bsf/cartón = 25 cartones.

Aún con el aumento de sueldo, un empleado ahora solo puede comprar 25 cartones de huevos lo que representa una disminución de 74% de su poder adquisitivo.

Con una inflación que ronda el 41% anual, y la demostración es la evaluación que vimos con los cartones de huevos porque el que produce esos cartones, al aumentar sus costos de producción ya sea por materia prima, o mano de obra sencillamente decide aumentar el precio del cartón de huevos para mantener su poder adquisitivo.

El dinero se convierte en algo más fácil de ganar para el empresario dado que ya tiene un activo, para ser claros activos fijos tangibles fáciles de vender(su inventario) mientras que el empleado sigue percibiendo el mismo sueldo.

Ejemplo, mi curso de ingles.

Pague 360 bsf por él hace seis semanas, ahora el mismo curso hoy cuesta 440 bsf lo que represento un aumento de 80 bsf, es decir el 22,4%.


Yo sigo ganando lo mismo, pero el empresario del curso de ingles esta ganando mucho más todo ajustado a la inflación que el percibe en su negocio.  

jueves, 29 de agosto de 2013

Instalar postgresql en Debian Wheezy


Hola, este es un post básico. ¿Como instalar postgresql en Debian Wheezy?


  • Paso 1: En una terminal como super usuario tecleas el siguiente comando:
$aptitude install potgresql

  • Paso 2: La post instalación de postgres crea un usuario postgres para el sistema operativo y una cuenta postgres en el sistema gestor de base de datos que no tiene contraseña,  para configurarlo adecuadamente en  la terminal y ejecutamos el siguiente comando.
$passwd postgres

  • Paso 3: establecemos la contraseña que nos pidió el paso anterior.

  • Paso 4: Entramos a postgres
$su postgres -c "psql template1"

  • Paso 5: Establecemos la nueva contraseña del usuario postgres para la base de datos
template1=# ALTER ROLE postgres PASSWORD '123'


  • De ahora en adelante podemos entrar usando el comando 
psql -U postgres -W template1

martes, 14 de mayo de 2013

Punteros y archivos en c++

En una entrada anterior, hable acerca de los array dinamicos con punteros. Sin embargo, no puse un ejemplo muy avanzado si no algo realmente sencillo. Para remediar eso, traigo este ejemplo usando C++. Algo si, hay un error en la función imprimir dado que no me quería recibir los parámetros tal cual lo declare para iterar sobre el array, entonces esa la dejo para que ustedes la corrijan.

En cuanto al resto, pueden leer y analizar el código a continuación.

El programa solicita nombres y apellidos de una persona, los guarda en un archivo de texto y posteriormente los imprime tras leerlos desde el archivo.

Sin más preámbulo.

#include <iostream>
#include <fstream>
#include <cstdlib>
#include "split_class.h"
using namespace std;
string* datos=NULL;
struct Persona
{
    string Nombre;
    Persona * cargar_personas(int &n, Persona lista_personas[])
    {
    }
    /*void imprimir(Persona * plista_personas, int n)
    {
        cout<<lista_personas[i].Nombre<<" "<<lista_personas[i].Apellido<<" "<<lista_personas[i].Cedula<<endl;
    }
}
*/
void guardar(Persona lista_personas[], int n, char nombre_archivo[])
{
    fstream archivo(nombre_archivo, ios::in |
    archivo.close();
    void leer_archivo(char nombre_archivo[], int n)
    {
        fstream archivo(nombre_archivo, ios::in |
        char letra=NULL;
        int main()
        {
            int n=0;
            lista_personas= new Persona[n];
            char nombre_archivo[50];
            string Apellido;
            int Cedula;
        }
        ;
        cout<<"||Bienvenido||"<<endl;
        cout<<"Por favor ingrese los datos de la Persona n"<<endl;
        for(int i=0;
        i<n;
        i++)
        {
            cout<<"Nombre: "<<endl;
            cin>>lista_personas[i].Nombre;
            cout<<"Apellido: "<<endl;
            cin>>lista_personas[i].Apellido;
            cout<<"Cedula: "<<endl;
            cin>>lista_personas[i].Cedula;
        }
        Persona * p_lista_personas=lista_personas;
        return p_lista_personas;
        cout <<"pos"<<* plista_personas[0].Nombre;
        Persona * lista_personas=NULL;
        lista_personas=new Persona[n];
        lista_personas= plista_personas;
        cout<<"Imprimo "<< n <<endl;
        for (int i=0;
        i<n;
        i++)
        {
            ios::out | ios::trunc);
            for(int i=0;
            i<n;
            i++)
            {
                archivo << lista_personas[i].Cedula <<"||"<<lista_personas[i].Nombre<<"||"<<lista_personas[i].Apellido<<"n"<<flush;
            }
        }
        ios::out);
        string linea="";
        datos= new string[n];
        //string datos[n];
        archivo.seekg(0L, ios::end);
        //int longitud = archivo.tellg();
        int j=0;
        for(int i=0L;
        i<n;
        i++)
        {
            linea="";
            while(letra!='n')
            {
                //cout << letra;
                archivo.seekg(j,ios::beg);
                archivo.get(letra);
                //cout << letra;
                linea=linea+letra;
                j++;
            }
            letra=NULL;
            datos[i]=linea;
            cout<<datos[i]<<endl;
        }
        string * p_datos=datos;
        cout<<"imprimiendo antes de enviar"<<endl;
        /*for(int i=0;
        i<n;
        i++)
        {
            cout<<datos[i]<<endl;
        }
        */
    }
    Persona * lista_personas=NULL;
    cout<<"Este programa solicita los datos de dos personas y luego los muestra en pantallar"<<endl;
    cout<<"Cuantas personas desea registrar: "<<endl;
    cin>>n;
    Persona * p_lista_persona=cargar_personas(n, lista_personas);
    lista_personas=p_lista_persona;
    cout <<"Ingrese el nombre del archivo: ";
    cin >> nombre_archivo;
    guardar(lista_personas, n, nombre_archivo);
    leer_archivo(nombre_archivo, n);
    cout<<"---------------------------------"<<endl;
    cout<<"Imprimiendo la salida del archivo"<<endl;
    for(int i=0;
    i<n;
    i++)
    {
        //cout <<"se pego el for";
        splitstring cadena(datos[i]);
        vector<string> campos=cadena.split('|',1);
        lista_personas=NULL;
        lista_personas=new Persona[n];
        /*
        cout<<"Depuracion"<<endl;
        for (int k = 0;
        k < campos.size();
        k++)
        cout << k << " => " << campos[k] << endl;
        cout<<"Fin_Depuracion"<<endl;
        */
        for(int j=0;
        j<campos.size();
        j++)
        {
            if(j==0)
            {
                // caso de cedula
                lista_personas[i].Cedula=atoi(campos[j].c_str());
            }
            else if(j==2)
            {
                // caso de nombre
                const char* nombre_char = campos[j].c_str();
                lista_personas[i].Nombre= nombre_char;
            }
            else if(j==4)
            {
                // caso de apellido
                lista_personas[i].Apellido=campos[j].c_str();
            }
        }
        cout<<i<<")"<<lista_personas[i].Cedula<<";
        "<<lista_personas[i].Nombre<<";
        "<<lista_personas[i].Apellido<<endl;
    }
    //imprimir(lista_personas,n);
    cout<<""<<endl;
}

domingo, 28 de abril de 2013

Array Dinámico con C++

Leyendo a Fred Swartz en sus notas acerca de c++ consigo algo que me traía cabezón desde hace días, aunque me la llevo bastante bien con lenguajes de programación como python y php, mi dolor de cabeza siempre ha sido C/C++ con su manejo de memoria a bajo nivel y los benditos punteros que tanto detesto. 

Una de las cosas que siempre me ha costado es manejar array dinámicos a mi completo y total antojo. Siempre se cometía errores como:


  • Declarar el array con una cantidad de elementos en exceso (100000 posiciones) lo que constituye perdida de memoria y que si por andanzas de los ángeles de la programación son 100.001 posiciones a ser ocupadas aparecerá un error como "overflow memory ....  no seas bruto chico".(Recordando a mi profesor† de matemáticas(2014))
  • Declarar el array de esta forma conllevara a malgastar memoria y que existan colisiones entre los valores de memoria.  
Debo primero inicializar un puntero del tipo que deseo utilizar, luego proceder a solicitar al usuario el tamaño de mi array usando cin o scanf (según los gustos), colocar todas las posiciones en 0, luego usarlo como normalmente y por ultimo eliminarlo.
  
   int* a = NULL;   
   int n;           
   cin >> n;        
   a = new int[n];  
   for (int i=0; i<n; i++){

   a[i]=0;
   
   }
   delete []  a;
   a=NULL;
   
   

Espero les sea de utilidad.
/*
Comentario del Autor. Esta es la página más vista del blog.!!!!
*/