jueves, enero 29, 2009

Negocios y Biblia


Este fin de semana pasado, terminé de leer este excelente libro:
Los Negocios y la Biblia, Una guia completa de principios bíblicos para hombres y mujeres de negocios. Autor: Larry Bucket. Se publicó en 1990, y lleva ya su 14 reimpresion.

Esta dividido en tres partes:
1. Los negocios y La Palabra de Dios.
2. Los principios para decisiones criticas.
3. Su vida y los negocios.

Este libro no es para cualquiera, solo es para aquellos que realmente quieren hacer negocios honestos en todo el sentido de la palabra. Asi de simple. Nótese que dije honestos, no legales. hay negocios que son legales, pero que no son honestos o éticos.

Este libro está escrito desde un punto de vista muy lejos de como lo veria cualquier persona acostumbrada a los rudimentos actuales; es un libro duro porque realmente da enfoques e indica que debe de actuarse diferente a como lo hace la sociedad hoy en dia: No endeudarse con creditos a largo plazo, No pagar lo menor posible a los empleados, No realizar demandas de lo que sea, No aumentar precios solo como engaño, Medidas falsas, etc.
Por ejemplo, uno de los primero parrafos que subrayé del libro indica:
"Si tomamos las decisiones basadas en nuestra seguridad y bienestar, nos resultará dificil seguir el sendero que Dios nos marca. Rara vez el llamado de Dios coincide con nuestros deseos humanos. Como dijo el profeta 'Escogeos hoy a quien sirvais'".
Así que a partir de ahí, debe uno de indicar la linea si uno va a dejarse llevar por "los negocios jugosos", o bien el de incluso perder, o ceder para hacer negocios honrados.
Como en su título indica, los consejos y conceptos que muestra estan basados en la Biblia, asi que el creer en Dios es un punto fundamental para entender el qué y el por qué, de cada principio mostrado. Una de las principales razones para poner un negocio generalmente es: 1. Detectar una necesidad, y 2. Tener una ganancia. Desde el punto de vista biblico es: 1. Predicar el evangelio. 2. Honrar a Dios con nuestros negocios.


Actualmente vemos como las economicas globales se estan colapsando, por decirlo de alguna manera, de como esta el desempleo rampante en el mundo, todo se desacelera. Unos le hechan la culpa a los bancos, otros a los bienes raices, otro a la especulacion en los mercados. Etc.
Hubo incluso que algunos predijeron este colapso, y creo que sin modelos matematicos esto era obvio que sucediera, no se sabia cuando pero creo era evidente, ya que tenemos recursos finitos.
Debo hacer mención que este libro, sin hacer enfasis en "predecir", advertia acerca de este mismo colapso económico, aunque la crisis actual muchos indican que fue por causa de creditos a personas insolventes en el area de bienes raices, lo que indica el libro es que era inminente un colapso económico sobre todo debido a los préstamos, en que la mayor parte de la economia se estaba basando en préstamos, digamos un dinero que esta, pero no esta, o aparece y desaparece.

Me tomó cierto tiempo en creer la cantidad de des-honestidad que existe en Latinoamerica, o para ser mas exactos en México, reconozco para pena mia, que tenemos una cultura de "el que no tranza, no avanza", una cultura donde se cree que "el vivo se come al bobo", no importa si con mentiras, trampas y chantajes. Creo que estas conductas se estan generalizando en todo el mundo, el robo el chantaje, el querer sacar ventaja a costa de cualquier cosa, pero desafortunadamente en Latinoamerica y en Mexico esta muy muy acentuado. Creo que nuestros políticos, y las instituciones gubernamentales son los mejores ponentes y exponentes de esos vicios.

Regresando a el libro, el autor Larry Bucket, desde su perspectiva anglosajona, vio una costumbre mexicana, y que aunque duela reconocer es muy cierta:
"En muchos lugares regatear o pedir rebajas es muy comun. Recuerdo cuando visité Mexico y traté de comprar algunas cosas en las ferias de la calle. Muy pronto aprendí que el precio que pedian de inicio era sumamente elevado y que el vendedor terminaba arreglando por una fraccion del ofrecimiento original.
Dudo que los vendedores mexicanos se detuvieran a pensar si lo que hacian era ético o bíblico. Para ellos era simplemente una tradición en la que se criaron y que todo el mundo seguia.
Pero es esa la filosofia que debe adoptar un creyente?
Cuando comenzamos a permitir que nuestros principio se ajusten a las normas del mundo, corremos el riesgo de volvernos iguales a los demas. Cuando alguien adopta la costumbre de reatear el precio, se vuelve casi imposible descubrir si dice o no la verdad. En le caso de los vendedores mexicanos, me di cuenta que no podía depender de sus palabras. Me decian: --Este es el precio más bajo que le puedo dar. Ni un centavo menos-. Pero cuando me veian alejarme bajaban mas el precio. Quizas no tenian conciencia de que lo que hacian era deshonesto. Pero lo era."
Aun con eso, el mismo reconoce...
" En esencia, no existe ninguna diferencia en la mayoria de los vendedores de México y Estados Unidos. El precio que cobran depende a menudo de la habilidad negociadora del comprador"

Por último mostrar solo unas pocas ideas o frases que quiero resaltar:

  • La mentalidad de riqueza fácil nos lleva a tres errores básicos: 1) Involucrarse en asunto de los que no se sabe lo suficiente. 2) arriesgar fondos que uno no puede permitirse el lujo de perder. 3) hacer decisiones apresuradas.

  • Estoy firmemente convencido de que Dios quiere que su gente prospere, pero no al punto de que nos gratifiquemos con cualquier novedad de las que nuestra sociedad produce a diario (ni que se lo permitamos a nuestros hijos).

  • Lo que nuestra sociedad necesita es una buena dosis de ética bíblica del pueblo de Dios. Esa clase de ética que nos exige cumplir con nuestras promesas sin importar lo que nos cueste.

El libro no creo que se pueda resumir en una sola frase, pero lo que sí me queda claro, es que una premisa importante y constante en todo el libro y que debiera tenerse en cuenta en todo negocio, es la siguiente, (tomada del mismo):

Las personas son mas importantes que las ganancias.



domingo, enero 25, 2009

Apuntadores en C o C++ -Ejemplo-

Debido a una peticion de poner un ejemplo acerca de el uso de apuntadores ver post Apuntadores en C o C++ -Conceptos-, expondré un ejemplo práctico del uso de apuntadores.

Este ejemplo trataré de que sea sencillo, simplemente es una lista donde se almacenan números,
se dan de alta y se pueden dar de baja y se pueden listar. Eso es todo lo que haría el programita.

Primero mostraré el ejemplo ejecutándose, y al finalizar mostraré el código fuente.
Como es por demas evidente, la importancia de esto no es el "qué", sino el "cómo", en otras palabras, no se usará ningun programa visual, ni UI ni mucho menos.


Este seria la pantalla principal












Al seleccionar la opcion 1, podemos insertar el numero, digamos el 100
El programa lo inserta en la lista, y si hay más de uno lo insertará al final.
Insertemos algunos numeros...







Los listamos














Digamos que ahora queremos borrar el dato
"102" que ocupa la posicion 3 de la lista.
(no me salgas que es la posicion 2 OK?)










Los volvemos a listar:









Ahora el codigo fuente:

void Menu();

void Insertar();

void Eliminar();

int MostrarDatos();

void Salir();



typedef struct Lista

    {

       int dato;

       struct Lista *siguiente;

     } tipoNodo;

     

Lista *Inicio;  //Apuntador al inicio de la lista

tipoNodo *pNodo;

typedef tipoNodo *List;



int main(int argc, char* argv[])

{

    Menu();

    getch();

    return 0;

}



//--- Funciones --------------

void Menu(){

int opc;

clrscr();

cout<<"1.- Insertar elemento en la lista"<<endl;

cout<<"2.- Eliminar Elemento de la lista"<<endl;

cout<<"3.- Mostrar datos de la lista"<<endl;

cout<<"4.- Salir"<<endl;

cin>>opc;



   switch(opc){

      case 1:

          Insertar();

          getch();

          Menu();

          break;

       case 2:

          Eliminar();

          MostrarDatos();

          getch();

          Menu();

          break;

       case 3:

          MostrarDatos();

          getch();

          Menu();

          break;

      case 4:

          Salir();

          break;



      default:

       cout<<"Esa opcion no existe, elige una de las disponibles"<<endl;

       getch();

       Menu();

       break;

 }

}



void Insertar(){

    tipoNodo *ante, *ptr;

    /// ante    apuntador que apunta al registro anterior

    // ptr apuntador que se va a ir moviendo.... pNodo siempre apunta al principio

    Lista *tmpNodo= new(tipoNodo);

    // tmpNodo  apuntador temporal,  es el nuevo registro que se va a insertar.

    if(!tmpNodo)  //verifica si pudo obtener memoria

    {

    cout<<"Memoria Agotada";

    return;

    }

     cout<<"Ingresa el numero"<<endl;

     cin>>tmpNodo->dato;

     cout<< "Dato Ingresado: ";

     cout<< tmpNodo->dato;



    if (!pNodo)

    { /*si esta vacia la lista, lo pone al inicio*/

        tmpNodo->siguiente=NULL;

        pNodo=tmpNodo;

        return;

    }

    ante=NULL;  //apuntador que apunta al registro anterior

    ptr=pNodo;   //apuntador que se va a ir moviendo.... pNodo siempre apunta al principio

    while (ptr)

    {

        ante=ptr;

        ptr=ptr->siguiente;

    }

    /* inserto al final  */

     ante->siguiente=tmpNodo;

     tmpNodo->siguiente=NULL;

     return;

}

void Eliminar(){

    int DatoAEliminar, contador, numelementos;

    tipoNodo *ante, *ptr;

    contador=0;

    ante=NULL;  //apuntador que apunta al registro anterior

    ptr=pNodo;   //apuntador que se va a ir moviendo.... pNodo siempre apunta al principio

    numelementos=MostrarDatos(); //Muestra los datos como referencia al usuario.

    cout<< "\n\r  Dame el # del dato a eliminar: ";

    cin>> DatoAEliminar;

    if (DatoAEliminar>numelementos){

    cout<< "Elemento no existe, seleccione uno de la lista";

    return;

    }



    while (ptr)

    {

        ++contador;

        if (contador == DatoAEliminar){ // lo encontro, entonces lo borra



            if (pNodo->siguiente == NULL) {  //Es el primer elemento y el unico

                pNodo=NULL;

                return;

            }

            if (pNodo->siguiente == ptr->siguiente){ //es el primero, pero hay otros enlazados

                pNodo=ptr->siguiente;

                return;

            }

            if (ptr->siguiente != NULL){ // es alguien de enmedio a borrar

                ante->siguiente=ptr->siguiente;

                ptr=NULL;

                return;

            } else {     //es el ultimo

                ante->siguiente=NULL;

                ptr=NULL;

                return;

            }

        }

        //se va al siguiente

        ante=ptr;

        ptr=ptr->siguiente;

    }

    return;

}



int MostrarDatos(){

    tipoNodo *ptr, *ante;

    int contador;

    contador=0;



    ptr=pNodo;

    clrscr();

    cout<< "- Listado - \n\r";

    cout<< "\n\r";

    cout<< " # : Dato \n\r";

    cout<< "---  ----- \n\r";

    while(ptr)

    {

        ante=ptr;

        cout<< ++contador;

        cout<< "  : ";

        cout<<ante->dato;

        cout <<"\n\r";

        ptr=ptr->siguiente;

    }

    return contador;

}

void Salir(){

    cout<<"Pulsa una tecla para salir"<<endl;

}

sábado, enero 24, 2009

Respaldos (backups) de Disco Duro

Despues de haber leido lo que le sucedió a benjismith, he estado replanteando la forma en que mantengo mis respaldos.
Por lo regular la mayor creación o generación de documentos o información es en el trabajo, y ahí tenemos un sistema de respaldo diario en cintas, asi que no me preocupa tanto, pero lo poco o mucho que genero en la oficina de la casa, es lo que me ocupa esta vez.

La forma en como tengo organizada la informacion en la PC es la siguiente:
Tengo dos discos duros en la PC.
Disco 1 (2 particiones):
Particion C = System -reside el sistema operativo y programas solamente.
Particion E = Backup -mantengo el backup del Disco 2.
Disco 2 (1 particion):
Particion D = Data -tengo todos mis documentos y archivos de todo tipo.

La forma en como mantengo mis respaldos o backups es simple, usaba (uso) el backup que viene en Windows XP (ntbackup.exe) , seleccionaba mi disco D, y lo mandaba a la particion E.

Hasta ahora no he tenido necesidad de utilizar el backup para restablecer archivos, aún así quisiera mejorar y redundar más mis archivos.

Al usar ntbackup, necesito de esa tercer aplicación para recuperar los archivos.
Por lo regular, o mejor dicho no ejecuto diariamente ese programa para mantener el backup actualizado, lo hago rara vez.

Debido a que quiero mantener el respaldo idéntico de D:\, y tenerlo siempre actualizado y sin necesidad de una aplicación intermediaria.

El planteamiento que tengo es el siguiente:

Mantener el sistema de backup como actualmente lo tengo, pero solo ejecutarlo cada 3 o 6 meses. Implementar el uso de xcopy, realizar el backup como una simple copia de los archivos sin comprimir o codificar.

El mecanismo es que solo copie los archivos nuevos que están en D:\, y mantener la copia exacta en E:\, y debido a que solo va a copiar los archivos nuevos o modificados, puedo ejecutarlo diariamente.

Para en el caso de que los dos discos duros fallen, se roben mi PC, o un desastre suceda, tendre que recurrir a un tercer respaldo que es mantenerlo en web, o mantener unos 15 DVDs en la oficina del trabajo (que es a lo que asciende mi informacion, sin contar musica, videos, etc); pero como eso requiere mas tiempo, por lo pronto lo dejo en los dos discos duros.

El scrip que estoy implementando usando xcopy es el siguiente:

@echo off
:: variables
set drive=E:\
set backupcmd=xcopy /s /c /d /e /h /i /r /y

echo ### Backing up Personal Data...
%backupcmd% "D:\MC" "%drive%\Backup\MC"

echo ### Backing up MEDIA Files...
%backupcmd% "D:\MEDIA" "%drive%\Backup\MEDIA"

echo BACKUP COMPLETE!
@pause
Espero te sea útil y te dé algunas ideas de cómo realizar o mantener tus backups.

Ese script fue modificado del articulo "How to backup using batch files".