jueves, 7 de febrero de 2013

Alternativas a Visual Studio

SharpDevelop http://www.icsharpcode.net/OpenSource/SD/
Sencillo de instalar, ligero, solo 15MB, bonito, codigo y diseñador, personalizable.
Gratuito
Requiere instalar manualmente los SDK's.


Web, extraño pero un IDE en web.
No corre en Opera.
Gratuito

Comercial

Gratuito, pero solo para web, no es un IDE para Windows

lunes, 22 de octubre de 2012

Code Snippets en Visual Studio

Hola,

Hace un rato me dispuse a implementar unos Code Snippets ( porciones de código preestablecidos, que insertas directamente en tu programa ) en Visual Studio. Curiosamente nunca lo había hecho, aunque los utilizo con regularidad, nunca me había dado por hacer los míos.

Bueno, resulta que el procedimiento es la mar de sencillo. Primeramente lo que necesitas es el código a insertar. El primero que hice fue para establecer tres regiones que comunmente utilizo en las clases: Constructors, Properties y Methods. El snippet se ve como esto:


#region Constructors


#endregion


#region Properties


#endregion


#region Methods


#endregion

Una vez que tenemos nuestro snippet, debemos crear un archivo xml que sirve para su configuración y para que Visual Studio lo pueda leer como Code Snippet.

La estructura básica es la siguiente:

<CodeSnippets
    xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
    <CodeSnippet Format="1.0.0">
        <Header>
            <Title>
                - El Titulo o nombre del snippet -
            </Title>
        </Header>
        <Snippet>
            <Code Language="CSharp">
                <![CDATA[ - Aqui va el snippet -]]>
            </Code>
        </Snippet>
    </CodeSnippet>
</CodeSnippets>


Dentro de  Title ingresamos el nombre del snippet y dentro de CDATA[] el contenido de nuesto código. El lenguaje que utilzo normalmente es "CSharp", pero puedes hacer snippets para cualquier lenguaje que maneje el IDE, como VB .Net ó Javascript.

Ahora solo hay que guardar el documento con la extensión *.snippet en la carpeta de los snippets de Visual Studio, normalmente es:

C:\Users\{Usuario de Windows}\Documents\Visual Studio {Año de la versión de VS}\Code Snippets\{Lenguaje del Snippet}\My Code Snippets\

Por ejemplo, la ruta completa del snippet quedó así:

C:\Users\Luis\Documents\Visual Studio 2010\Code Snippets\Visual C#\My Code Snippets\My_Regions.snippet

Ahora, automáticamente aparecerá al insertar un Code Snippet ( Clic derecho, "Insert Snippet" ó Ctrl + K, Ctrl + X), dentro de la categoría "My Code Snippets".

También es posible configurar el snippet para que acepte sustitución de caracteres, como los snippets predeterminados de Visual Studio. Cómo mencione antes, es la mar de sencillo y sobre todo bastante útil.

Link: Nuevo sitio

jueves, 13 de septiembre de 2012

PHP 5.2 y operaciones de fecha

Recientemente me encontraba desarrollando una aplicación web para PHP y configuré mi ambiente de desarrollo con un WAMP, que contenía una versión de PHP superior a la 5.3.  Encantado comencé a utilizar operaciones y funciones de su orientación a objetos, pero al pasar a ambiente de producción, me doy cuenta de que utilizaba una versión anterior de PHP ¡que no soporta funciones de objeto DateTime!

Especificamente, sumar y restar fechas, DateTime::add y DateTime:sub, ni sus equivalentes en procedural date_add() y date_sub.

Esto implicó una recodificación (aunque no tan larga) y la creación de funciones que permitiran hacer las operaciones con una facilidad parecida a la de las funciones no soportadas.

Para resolver el problema, en una librería general codifiqué funciones para agregar las fechas, sean positivas o negativas, eliminando la necesidad de tener un date_add y un date_sub. Una función por cada intervalo que necesitaba, como lo maneja C#.

A continuación expongo un ejemplo de la función para agregar días.


    /**
    *
    * Agrega dias a una fecha
    * @param datetime $date
    * @param int $days
    * @return DateTime
    */
    function add_days($date, $days)
    {
      // Inicializamos el símbolo, como "más" ( + )
      $symbol = '+';
     
      //    Si días es menor a 0, es decir, negativo
      if ( $days < 0 )
      {
            //    Configuramos el símbolo como "menos" ( - )
            $symbol = '-';
      }
     
      //    Hacemos la operación y la guardamos en result
      //    Convirtiendo a UNIXTIME mediante strtotime
      //    el intervalo y la fecha
      $result = strtotime (
            '+' . $days . ' day' ,
            strtotime (
                  date_format($date, 'Y-m-d')
            )
      );
     
      //    Regresamos una fecha, a partir del resultado
      //    transformado a formato Y-m-d
      return date_create( date( 'Y-m-d', $result ) );

    } // end function add_days
 
Siguiendo este ejemplo, podemos codificar las funciones para semanas, meses, años, etc.

martes, 4 de septiembre de 2012

Como reestablecer los archivos recuperados por ChkDsk

Cuando utilizas el ChkDsk (o cuando al iniciar Windows este lo corre automáticamente) y este arroja errores, los archivos que este "recupera" normalmente los almacena dentro de un archivo found.000, en el directorio raíz del disco que contenia los errores.

Este archivo actua como una carpeta en realidad, y dentro de la misma ChkDsk guarda archivos *.chk, con la siguiente nomenclatura dirXXXX.chk, donde XXXX comienza en 0000 y se va elevando según el número de archivos, es decir, puede contener el archivo dir0000.chk, dir0001.chk, dir0002.chk, y así sucesivamente.

Pues bien, estos archivos tambien actuan como carpetas y dentro contienen los archivos recuperados por ChkDsk.

Normalmente estos archivos son invisibles y no pueden ser navegados desde el explorador de Windows Para recuperarlos totalmente al sistema de archivos, utiliza el command.exe (ó simbolo de sistema, como lo llama Windows) y mediante comandos DOS podrás realizar las operaciones para la recuperación.

Primero que nada, asegurate de usar command.exe con privilegios de administrador.

Ahora, busca dentro del directorio raiz del disco que tuvo los errores el archivo found.000. Puedes realizar la busqueda con el comando:
dir *.000

Si no lo encuentras, puedes usar la excelente aplicación freeware Space Sniffer, en la que podrás visualizar el contenido de todo el disco.

Una vez localizado el archivo, tratalo como un directorio, navegando hacia el con el comando cd:
cd found.000

Una vez que hayas navegado al archivo, realiza el comando dir. Este te mostrará los archivos *.chk que contiene el archivo found.000.

Ahora, cada archivo *.chk se comporta como una carpeta, por lo que puedes copiar su contenido a otro directorio. Crea una nueva carpeta llamada Recovery en el disco duro (preferentemente en uno diferente al que tuvo errores). Dentro de esa carpeta, crea tantos directorios como archivos *.chk tengas dentro de found.000.

Es decir, para el archivo found.000/dir0000.chk, crea la carpeta Recovery/dir0000, para el archivo found.000/dir0001.chk, crea la carpeta Recovery/dir0001 y así sucesivamente.

Posteriormente, navega a cada archivo *.chk con el comando cd, dentro de found.000 usa el comando:
cd dir0000.chk

Posteriormente utilza el comando cp con la siguiente sintaxis: cp -apv . [directorio destino]
Ejemplo:
cp -apv . Recovery/dir0000

Esto copiará el contenido del archivo dir0000.chk a la carpeta dir0000.

Realiza la misma operación con todos los archivos *.chk que existan dentro de found.000.

Una vez que hayas recueperado todos tus archivos, debemos eliminar el archivo found.000, ya que no lo necesitaremos más. Esto no puede efectuarse desde Windows, así que debemos utilizar un live CD como los que distribuye Ubutu, para bootear desde el CD y usar el sistema operativo desde el mismo.

Para ello, inserta el Live CD dentro del drive de Disco, reinicia la computadora y entra a BIOS para cambiar el dispositivo de booteo al drive del CD. Luego graba los cambios y sal del BIOS. La computadora arrancará ahora desde el CD que contiene Ubuntu.

Una vez que hayas ingresado a Ubuntu, este te preguntará si deseas intentar el Live CD o instalar Ubuntu. Como solo queremos borrar un archivo. ingresaremos al Live CD.

Una vez dentro, en "Places" selecciona el disco duro que contiene found.000. Ubuntu lo tratará como una carpeta, así que la puedes eliminar sin problemas. Cerciorate tambien de eliminarla de la Bandeja de Basura (Trash). Con esto podemos salir de Ubuntu, regresar a Windows y verificar que realmente el archivo found.000 ya no existe.

lunes, 18 de junio de 2012

Técnica sencilla para passwords seguros

Hola,

Hoy les traigo una técnica sencilla pero efectiva para asegurar nuestros passwords. Contendrá la mayoría de los requisitos para los "strongspasswords", será fácil de memorizar y además única para cada sitio o aplicación a la que tengamos que configurar usuario y contraseña ¿Genial no?

Pues bien, comúnmente, por flojera, costumbre, "mala memoria" o lo que sea, "se nos hace fácil" ponerle el mismo password a todas nuestras cuentas, a la de Google, a la Twitter, Facebook, a la computadora personal, y peor aún: PayPal y cuentas bancarias. ¡Esto es un error gravísimo! Si alguién "adivinara" o nos "hackeara" el password estaríamos perdidos, podría entrar a todas nuestras cuentas ¡y acceder a toda nuestra información!

La mayoría de los sitios cuentan con un verificador de "fortaleza" de la contraseña, pero aunque nuestro password sea fuerte, si lo usamos en todas nuestras cuentas corremos un gran riesgo.

No obstante, con tantos y tantos servicios de hoy en día, tener una contraseña para cada uno se vuelve una pesadilla, y es mucho más sencillo tener una "clave maestra", sin embargo, el riesgo es grande.

Pues bien, como una alternativa tenemos este algoritmo.

1. Toma tu "clave maestra", supongámos que es pachoncito.

2. Ahora la transformamos a lenguaje "l33t" básico, sustituyendo vocales por números, quedaría p4ch0nc1t0.

3. Ahora la "entrecomillamos" con un caracter especial de tu elección, como *, % ó $ (ó más de uno, si lo deseas). Nos quedaría así: *p4ch0nc1t0*. Esta será nuestra clave maestra básica.

4. Ahora, para hacerla única para cada sitio, repetimos la misma operación, con el nombre de cada sitio y se la agregaremos a la "clave maestra cifrada".Por ejemplo, para nuestro correo de Gmail, tomamos la palabra gmail y la pasamos a "l33t": gm41l.

5. Luego la entrecomillamos con un caracter especial (otro, por supuesto) de nuestra elección. Yo prefiero los paréntesis o corchetes como [], {} o (). Eligiendo los cuadrados nos queda [gm41l]

6. Ahora se la agregamos a la "clave maestra cifrada" como prefijo o sufijo, como quieran. Como sufijo nos queda: *p4ch0nc1t0*[gm41l]

7. Y listo, tenemos una clave bastante fuerte (letras, números, caracteres especiales y algo larga), fácil de recordar (siempre es la misma base), maestra y personalizada para cada sitio o aplicación.

Este password obtuvo 100% en el passwordmeter.
Podemos hacer lo mismo con cada sitio o aplicación que tengamos usuario y contraseña, y con esto asegurar aún más nuestros datos, tan importantes hoy en día.

Aunque alguien adivien nuestra contraseña maestra mediante social engineering y conociera que utilizas este pequeño algorito (algo ya difícil de saber) tendría que pasarla a "l33t" (bueno, no es tan difícil), adivinar también el caracter especial para entrecomillarla, pasar a l33t la segunda palabra (según el sitio que quiera acceder a tu información) y adivinar el segundo caracter especial. Algo no tan sencillo de hacer, además de que tendría que adivinar si es sufijo o prefijo.

Asimismo, los robots utilizados para creackear los passwords basados en palabras de diccionario y en generador de claves aleatorias no podrían crackear la contraseña fácilmente, por la longitud y diversificación de caracteres posibles.

Puede ser algo difícil acostumbrarse al principio, pero una vez que se tiene dominada la técnica uno lo hace naturalmente.

Espero que le sirva, y si no, al menos consideren fortalecer la seguridad de sus contraseñas.

sábado, 16 de junio de 2012

Objetivos, Estrategias, Indicadores y Metas Cuantitativas


a) Los Objetivos

Una vez que conocemos la situación actual, nos será más sencillo elaborar este importante artefacto. Deberemos plasmar de forma clara, todos y cada uno de los objetivos que tenga la organización, incluyendo los objetivos de calidad.

Los objetivos son la expresión de los resultados que necesitamos para el cumplimiento de la Misión y la Visión. Para encontrarlos, debemos responder a la pregunta: ¿Qué quiera lograr la organización? El resultado deberá ser la finalidad a la cual debe dirigir sus esfuerzos para cumplir sus propósitos.

Los objetivos tienen las siguientes características:

  • Son asequibles: Puesto que debemos poder conseguirlos, ¿No nos vamos a poner objetivos imposibles, verdad?.
  • Son significativos: Por que importan, nos son provechosos, ¿No nos vamos a poner objetivos inútiles, verdad?
  • Son generales: Por que les falta detalle, no se preocupen por ahora, ya llegaremos a eso.
  • Establecen directivas claras: Nos dicen que hacer, simple y llanamente.
  • Buscan cumplir con la misión y/o visión de la organización: ¿Ven por que es importante establecerlas primero? Los objetivos deben estar orientados a cumplir el propósito de la organización y a posicionarla en el mercado.
  • Son observables: Son notorios, podemos monitorear su avance, caso contrario, resultaría inútil el tenerlos.
  • Conllevan actividades implícitamente: Nos dicen que hacer y podemos inferir que tendrémos que hacer para lograrlo.
  • Son organizacionales: Estos comunmente se relacionan con Incrementar los Ingresos y Reducir los Costos, para Maximizar la Utilidad. Todos los objetivos de derivan de esto.

Ejemplos de objetivos son:
  1. Incrementar las ventas con relación al año anterior.
  2. Aumentar la eficiencia del proceso de desarrollo para reducir los tiempos de entrega.
  3. Abrir una nueva área de mercado, integrando más productos y servicios a nuestro catálogo.


¿Que no son objetivos?
Sentencias como: “Ser una empresa líder en el ramo” ó “Brindar a nuestros clientes el mayor grado de satisfacción”. Enunciados como los anteriores pertenecen a la misión y/o a la visión, no a los objetivos, ya que son demasiado generales y aunque establecen un propósito organizacional no cumplen con todas las caracterísitcas arriba citadas.

Es altamente recomendable enumerar e identificar por clave cada objetivo específico, y priorizarlos por orden de importancia para al organización.


b) Las Estrategias

Si los objetivos son el que, las estrategias son el cómo. Debemos tener bien definidos los objetivos para poder determinar las estrategias, es lógico, debemos saber que tenemos que hacer para después ponernos a pensar cómo vamos a hacer para lograr cumplir con los objetivos.

Para obtenerla, debemos realizarnos la pregunta ¿Cómo puedo conseguir mis objetivos?, y responderla para cada uno de los objetivos en particular.

Es altamente recomendable enumerar e identificar a las estrategias por clave, tal y como con los objetivos y establecer una tabla de referencias cruzadas entre las estrategias y los objetivos.


c) Los indicadores

Un indicador es una magnitud que se utiliza para medir en concreto un resultado obtenido cuantitativamente y nos permite calificar un concepto abstracto. En español plano, es la unidad de medida del éxito de nuestros objetivos.

En el ejemplo de incremento de las ventas, el indicador principal será el total de facturación, independientemente de la cantidad de ventas realizadas, por ejemplo.

Para obtenerlos, simplemente nos haremos la pregunta ¿Qué usaremos para medir nuestro éxito? Debemos establecer al menos un indicador para cada objetivo que hayamos establecido.

Asimismo, es conveniente enumerar e identificar por clave a nuestros indicadores, y establecer una referencia cruzada con nuestros objetivos. Esta manera de “mapear” la información nos será muy útil.


d) Las metas


Las metas son la cuantificación de nuestros objetivos. Nos permiten medir la eficacia de nuestras estrategias.

Una vez que tenemos determinados nuestros indicadores, establacemos la meta de manera cuantitativa con los mismos.

En nuestro ejemplo, el indicador para incremento de ventas es el total de facturación. Entonces, le ponemos número a este factor, ya sea directamente o en porcentaje, ejemplo:

Nuestra meta para el total de facturación de este año deberá ser de $ 500,000.00.

ó

El total de facturación deberá ser 20% mayor que el año anterior.

Es vital establecer cuantitativamente las metas y establecerlas lo mas claro posible. Es altamente recomendable enumerarlas e identificarlas por clave, así como establecer una tabla de referencias cruzadas con nuestros objetivos.

Entender la Situación Actual


La situación actual abarca factores tanto externos como internos. Para ello echamos mano del análisis FODA. ¿Qué es el FODA? Es un documento en donde plasmamos nuestras:
  • Fortalezas
  • Oportunidades
  • Debilidades
  • Amenazas

Podemos representarla fácilmente mediante esta matriz

Situación actual
Factores Externos
Factores Internos
Oportunidades
Amenazas
Fortalezas
Debilidades
1
2
3
1
2
3
1
2
3
1
2
3
...

Para determinar las oportunidades debemos tomar en cuenta:
El mercado: Detectar oportunidades es más sencillo si ya se tienen clientes, mediante estudios de semáforo, para determinar sus necesidades. Si no se cuenta con una cartera establecida de clientes, la cosa se complica, pero no es imposible, mediante el estudio de las tendencias y la demanda en servicios de tecnologías de información.

Para determinar las amenazas debemos tomar en cuenta:
A la competencia: Un buen estudio de benchmarking nos arrojará información valiosa para compararnos con nuestros competidores en precio, servicio, calidad y oferta.
A nuestros clientes: Una buena encuesta de grado de satisfacción nos podrá alertar si algún cliente desea prescindir de nuestros servicios.

Para detectar nuestras fortalezas debemos tomar en cuenta:
  1. Nuestros objetivos.- De nada nos sirve una ventaja que no esté orientada a cumplir con nuestros objetivos
  2. Métricas.- Debemos determinar de manera cuantitativa nuestra ventaja.

Debemos plasmar claramente cuáles son nuestros puntos fuertes.

Para detectar nuestras debilidades debemos tomar en cuenta:
Métricas.- Determinar objetivamente en que estamos fallando
Clientes.- De nuevo, hechando mano de un estudio de semáforo, podemos averiguar nuestros puntos débiles desde el mejor punto de vista: El de nuestros clientes.
Evaluaciones externas.- Las evaluaciones de un tercero son buena referencia también, ya que podemos encontrar en ellas nuestras áreas de oportunidad de mejora.