sábado, 11 de febrero de 2017

ReactJS- Express - NodeJS

Para crear un proyecto con ReactJS y NodeJS, debemos seguir los siguientes pasos:

NODE JS
Para iniciar un proyecto con NodeJS vamos a la carpeta que creamos para el proyecto y por consola digitamos lo siguiente:

npm init

Diligenciamos todas las opciones que se nos muestra en la interfaz. Al finalizar se debe crear un archivo llamado package.json el cual tiene toda la configuración del aplicativo.

REACT JS
React no es un framework como Angular, es únicamente una librería (como podía ser jQuery, o Polymer) diseñada únicamente para la interfaz gráfica. Puedes combinarla con cualquier framework o utilizar Vanilla JavaScript. React js es muy usado para hacer la V(View) en MVC tal cual se recomienda en su guía oficial, el uso de estándar CommonJS, para ello puedes usar Browserify o Webpack.

Instalamor primero Express:
npm install --save express

Instalamos el WebPack que es lo que nos ayuda a que no tengamos que agregar manualmente la referencia de los archivos js en cualquier archivo. Vamos al directorio donde tenemos nuestros directorios de js, css, img. En mi caso lo tengo en la carpeta SRC:
npm install webpack --save

eLuego creamos el archivo webpack.config.js donde vamos a configurar todo lo que lleva dicho archivo:
module.exports = {
    entry: "./src/test.js",
    output: {
        path: __dirname + "/src",
        filename: "bundle.js"    },
    module:{
        loaders: [
            {
                exclude: /(node_modules)/,
                loader: 'babel',
                query: {
                    presets: ['es2015', 'react']
                }
            }
        ]
    },
    watch: true}

Instalar:
npm install --save react react-dom 
npm install --save redux react-redux 
npm install --save babel-loader babel-core
npm install --save babel-preset-es2015 babel-preset-react
 
Para ejecutar el servidor solo necesitamos ejecutar el siguiente comando:
npm run webpack

Estructura del directorio del proyecto

tutorial React JS

¿QUE ES JSX? 

JSX es una extensión de JavaScript creada por Facebook para el uso con su librería React. Sirve de preprocesador (como Sass o Stylus a CSS) y transforma el código a JavaScript. ... Recuerda, no es escribir HTML dentro de JS, es una forma de crear JS de una manera más práctica ;)

Flux
Facebook por su parte diseñó Flux, una arquitectura para crear aplicaciones web con React, pero sin usar ningún Framework, únicamente JavaScript puro sin añadidos.
El patrón de diseño que nos proporciona React es componetizar nuestras aplicaciones (No es lo mismo que webcomponents).
No pienses en un MVC completo para la aplicación.
Piensa en pequeños átomos (componentes) que conforman la materia (aplicación completa). Cada átomo tiene sus propiedades y estados.
Es una definición un poco complicada de digerir al principio, pero una vez que la conoces, no quieres desarrollar de otra manera :D

 

sábado, 12 de noviembre de 2016

Definiciones de Terminos Tecnológicos

En esta entrada vamos a dar una guia o definición de algunos términos tecnológicos que nos encontramos por ahí y que a veces no nos es claro de que se trata.
  • GIT
Git es un sistema de control de versiones que registra los cambios realizados sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo que puedas recuperar versiones específicas más adelante. A pesar de que los ejemplos de este libro muestran código fuente como archivos bajo control de versiones, en realidad cualquier tipo de archivo que encuentres en un ordenador puede ponerse bajo control de versiones. Si eres diseñador gráfico o web, y quieres mantener cada versión de una imagen o diseño (algo que sin duda quieres), un sistema de control de versiones (Version Control System o VCS en inglés) es una elección muy sabia. Te permite revertir archivos a un estado anterior, revertir el proyecto entero a un estado anterior, comparar cambios a lo largo del tiempo, ver quién modificó por última vez algo que puede estar causando un problema, quién introdujo un error y cuándo, y mucho más. Usar un VCS también significa generalmente que si fastidias o pierdes archivos, puedes recuperarlos fácilmente. Además, obtienes todos estos beneficios a un coste muy bajo.   Tutorial
  • MONGODB
"MongoDB es un sistema de base de datos multiplataforma orientado a documentos, de esquema libre. Como ya os expliqué, esto significa que cada entrada o registro puede tener un esquema de datos diferente, con atributos o “columnas” que no tienen por qué repetirse de un registro a otro. Está escrito en C++, lo que le confiere cierta cercanía al bare metal, o recursos de hardware de la máquina, de modo que es bastante rápido a la hora de ejecutar sus tareas. Además, está licenciado como GNU AGPL 3.0, de modo que se trata de un software de licencia libre. Funciona en sistemas operativos Windows, Linux, OS X y Solaris.

Las características que más destacaría de MongoDB son su velocidad y su rico pero sencillo sistema de consulta de los contenidos de la base de datos. Se podría decir que alcanza un balance perfecto entre rendimiento y funcionalidad, incorporando muchos de los tipos de consulta que utilizaríamos en nuestro sistema relacional preferido, pero sin sacrificar en rendimiento.

Si queremos usar nuestro lenguaje de programación favorito, existen drivers para un gran número de ellos. Hay drivers oficiales para C#, Java, Node.js, PHP, Python, Ruby, C, C++, Perl o Scala. Aunque estos drivers están soportados por MongoDB, no todos están en el mismo estado de madurez. Por ejemplo el de C es una versión alpha. Si queremos utilizar un lenguaje concreto, es mejor revisar los drivers disponibles para comprobar si son adecuados para un entorno de producción."     fuente

Instalación y configuracion de MongoDB
  
  • SISTEMAS CRUD
"En computación CRUD es el acrónimo de Crear, Leer, Actualizar y Borrar (del original en inglés: Create, Read, Update and Delete). Se usa para referirse a las funciones básicas en bases de datos o la capa de persistencia en un software."       fuente

"CRUD se usa como un Backend o panel de administración que te permite realizar las operaciones básicas. No se si alguna vez has usado phpmyadmin, pues algo parecido.

El tema ORM, para que lo entiendas, es una manera de trabajar con tu base de datos pero usando código orientado a objetos. Es decir, imagínate que quieres obtener de una tabla usuarios, aquel cuyo id es el 78. En sql tradicional, tendrías que hacer en tu código:

$sql = 'SELECT name FROM users WHERE id = 78';
mysql_query ... etc

en cambio, con un ORM, simplemente podrías hacer:

$user = new User(78);
echo $user->getName();

Es un ejemplo para que te hagas una idea, como ves, el ORM te ha creado a través de tu base de datos, unos objetos que representan tus tablas, para poder trabajar con ellos de manera cómoda y a otro nivel."    fuente

miércoles, 6 de julio de 2016

Controlar Evento Cambio de Focus en Fechas

Para controlar el cambio de foco en fechas se hace lo siguiente:
Creamos una bandera para saber si se presiono la tecla tabuladora o la tecla shift, tambien nos servira para cuando el control de la fecha pierda el foco.
bool banderaFrom = false;

Activamos el evento KeyDown del control.
void dateFrom_KeyDown(object sender, ystem.Windows.Forms.KeyEventArgs e) {
  if (e.KeyCode != Keys.Tab && e.KeyCode != Keys.ShiftKey) {
        banderaFrom = true;
        dateFrom.EditValueChanged -= dateFrom_EditValueChanged;
  }
  else if (banderaFrom) {
        banderaFrom = false;
        dateFrom_EditValueChanged(sender, new EventArgs());
        dateFrom.EditValueChanged += dateFrom_EditValueChanged;
  }
 }
Creamos el metodo LostFocus ya que este no se encuentra en el control:
void dateFrom_LostFocus(object sender, System.EventArgs e) {
   BaseRuntime.Trace("hcecli", "histórico", "dateFrom_LostFocus");

  if (banderaFrom) {
       banderaFrom = false;
       dateFrom_EditValueChanged(sender, new EventArgs());
       dateFrom.EditValueChanged += dateFrom_EditValueChanged;
  }
}
Pegamos al control en la parte del Designer el evento de la siguiente forma:
this.dateFrom.LostFocus += new System.EventHandler(this.dateFrom_LostFocus);

Errores en HCECLI

Estos son los errores presentados en HCECLI:


1.


Solución: Estos son errores relacionados con el WorkFlow (en nuestro caso el de NOTASI). Lo mas ideal es dirigirse al Trace y observar en que parte del flujo de trabajo revento.

2.



Solución: Lo mas seguro es que la consulta a la base de datos se esta realizando en un hilo diferente al principal del programa. Se debe buscar el hilo o método donde se esta realizando la consulta, y llamar al método CultureConfig.SetRegionalConfiguration(). Esto asegura que al traer los datos de la tabla, tengan el formato correcto y no provoque un crashOverrider del programa.

3.



Solución: El datareader se utiliza dentro de un using(), asi como en la imagen siguiente:

4.



Solución: Cuando son errores de asignación de tipos de datos en los queries de informix, debemos setear la configuración regional en el hilo donde se esta realizando la lógica, pues lo más seguro es que se perdió la configuración regional por alguna razón.

Creación ToolTip

private void authorizedtoolTipController_GetActiveObjectInfo(object sender, ToolTipControllerGetActiveObjectInfoEventArgs e) 
{
GridHitInfo hi =      normalView.CalcHitInfo(normalView.GridControl.PointToClient(Control.MousePosition));
 ToolTipControlInfo info = null;

 if (hi != null && hi.RowHandle >= 0) 
 {
   string str = e.SelectedControl.ToString();
   object o = hi.HitTest.ToString() + hi.RowHandle.ToString();
   if (hi.InRowCell) 
   {
     string text = String.Empty;
     if (hi.Column == colAuthorizedState) 
     {
       var colValue = normalView.GetRowCellValue(hi.RowHandle, colAuthorizedState);
       switch (colValue.ToStringValue()) 
       {
         case "AP":
           if (dtimage != null) {
           text = (from item in dtimage.AsEnumerable()
           where item.Field("indimaind") == "ACAU"
           select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         case "PE":
           if (dtimage != null) 
           {
             text = (from item in dtimage.AsEnumerable()
             where item.Field("indimaind") == "PEAU"
             select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         case "NO":
           if (dtimage != null) 
           {
            text = (from item in dtimage.AsEnumerable()
            where item.Field("indimaind") == "NOAU"
            select item.Field("ctedetdes")).SingleOrDefault();
           }
           break;
         default:
           break;
       }
    }
    if (hi.Column == colObservation) 
    {
    text = normalView.GetRowCellValue(hi.RowHandle, colObservation).ToStringValue();
    }
    info = new ToolTipControlInfo(o, text);
   }
 }
   if (info != null)
      e.Info = info;
}