martes, 24 de febrero de 2015

Guia de Estilo AngularJS

Version original: https://github.com/johnpapa/angularjs-styleguide

Responsabilidad Única:
Regla de 1

Definir un componente por archivo.
Los siguientes ejemplos definen el modulo "app" y sus dependencias, define el controlador y un "factory", todo en el mismo archivo:


/* Evitar */
angular
    .module('app', ['ngRoute'])
    .controller('SomeController', SomeController)
    .factory('someFactory', someFactory);

function SomeController() { }

function someFactory() { }

El mismo componente, ahora separado en archivos

Archivo: app.module.js

/* recommended */

// app.module.js
angular
    .module('app', ['ngRoute']);

Archivo: controlador1.js
/* recommended */
angular
    .module('app')
    .controller('SomeController', SomeController);

function SomeController() { }


Archivo factory1.js
// factory1.js
angular
    .module('app')
    .factory('someFactory', someFactory);

function someFactory() { }
D

IIFE (Invoked Function Expression - Expresión de Invocación de Funcion)
JavaScript Closures

Envuelve los componentes de AngularJS en una IIFE.

Porque?: un IIFE remueve las variables del alcance global. Esto ayuda a prevenir que las variables y las declaraciones de funciones vivan mas de los esperado en el alcance global, lo cual también ayuda a prevenir colisiones entre nombres.

Porque?: Cuando comprimas y reduzcas tu código para colocar en producción, podrías tener muchas colisiones de variables si tienes muchas globales declaradas. Una IIFE te protege contra esto encapsulando las variables en el alcance de cada archivo.

Evitar!!!
// logger.js
angular
    .module('app')
    .factory('logger', logger);

// logger function is added as a global variable
function logger() { }

// storage.js
angular
    .module('app')
    .factory('storage', storage);

// storage function is added as a global variable
function storage() { 

}


Recomendado!!

// logger.js
(function() {
    'use strict';

    angular
        .module('app')
        .factory('logger', logger);

    function logger() { }
})();

// storage.js
(function() {
    'use strict';

    angular
        .module('app')
        .factory('storage', storage);

    function storage() { }
})();


Nota: Solo por brevedad omitiremos la sintaxis IIFE para el resto de la guía

Nota: IIFE's evita las pruebas del código limitando el alcance a los miembros privados con expresiones regulares o funciones de ayuda; las cuales pueden ser lo suficientemente buenas para las pruebas unitarias directamente sobre el mismo objeto, mas no externamente. Sin embargo usted puede probar a través de miembros accesibles o exponiéndolos a través de su propio componente. Por ejemplo, colocando funciones de ayuda, expresiones regulares o constantes en sus propias Factory.








lunes, 23 de febrero de 2015

Outlook no encuentra correos

Hola, este es un caso típico de las locura de Outlook. Estuve durante varios meses buscando la forma de que Outlook me busque correos, incluso teniendo las opciones de indexación de los PST los OST activas, nunca me encontraba correos, ni recién recibidos ni los mas antiguos. El problema se presenta con mayor incidencia con las cuentas relacionadas con Exchange, y todos los tutoriales o soluciones dicen que debe tener activa la opcion de "Intercambio de Cache" pero en mi caso esto no funcionó, fue todo lo contrario. Cuando desactivé la función "Intercambio de cache" empezó a buscar algunos correos, y cuando le quite la indexacion con el windows search, ahí empezó a buscar todos los correos. Se demoraba mas pero los encontraba, cosa que no pasaba con la indexacion normal.
Mi plataforma es windows 7 con Office 2010.
PD: Probé con office 2013 y tiene el mismo inconveniente. No he probado si la solución también aplica, pero debería. 

jueves, 5 de febrero de 2015

Leer cantidad paginas - imagenes TIFF en C#


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Collections;
using System.ComponentModel;
using System.Data;


namespace ContadorPaginasTIFF
{
    class Program
    {
        static void Main(string[] args)
        {
            string ruta1 = "F:\\archivosTIFF\\";
            string[] archivos1 = Directory.GetFiles(ruta1);

            long cantidad_imagenes = 0;
            Image tiffImage;
            Guid objGuid;
            FrameDimension dimension;

            Console.WriteLine("cantidad archivos: " + archivos1.Length);

            foreach (string archivo in archivos1)
            {
                Console.WriteLine("Imagenes: " + cantidad_imagenes);
                tiffImage = Image.FromFile(archivo);
                objGuid = tiffImage.FrameDimensionsList[0];
                dimension = new FrameDimension(objGuid);
                int NumberOfPages = tiffImage.GetFrameCount(dimension);
                cantidad_imagenes += NumberOfPages;
                tiffImage.Dispose(); // Importante para evitar out of memory

                dimension = null;
                tiffImage = null;
                Console.Clear();
            }
            Console.WriteLine("carpeta 1: " + cantidad_imagenes);

         }
    }
}