Compendio de Código y AntiPatrones : “HYPER IF”

Continuando con esta peculiar colección de bloques de código inusuales o curiosos, recuerdo una ocasión en donde me fue asignada la inspección de código de un proyecto en producción con la finalidad de intentar optimizar su rendimiento. Conforme fui entrando en las entrañas del código encontré la siguiente condición IF bastante peculiar:

Odkn7vp

(NOTA: La imagen anterior no muestra ni la mitad del total de las condiciones)

Verdaderamente me causo un gran asombro en mi expresión y ante tal ingenio, magnitud y poder de la condición IF, decidí nombrar a este tipo de patrón de múltiples condicionantes como “Hyper-IF”. En verdad se nota que la persona que realizó la implementación invirtió una gran cantidad de su tiempo ideando, calculando y esforzandose por cubrir todas las posibles combinaciones o variantes, incluso llegue a pensar que erá una especie de ASCII Art y trate de mover la cabeza en varias direcciones con la finalidad de encontrar la figura escondida (ó era una acaso un mensaje cifrado?).

Al parecer los autores intentaban analizar cada uno de los carácteres de una cadena con la finalidad de determinar si son correctos. Al final de mi revisión les mande una serie de recomendaciones y entre ellas les suplicaba que aprendieran el uso de “Expresiones Regulares”.

Finalmente la solución se resolvió en una sola linea de código empleado una expresión regular para verificar carácteres alfanuméricos y final feliz!.

Por favor recuerda que si requieres hacer uso de análisis de cadenas y antes de caer en la implementación de un “Hyper-IF” considera el uso de patrones de expresiones regulares,  te pueden ayudar a simplificar bastante tu código.

Algunas referencias interesantes:

http://www.regular-expressions.info/

http://regexlib.com

Facebook Twitter Email Delicious Reddit Posterous

Posted in Development | Tagged , | Leave a comment

Compendio de Código y AntiPatrones : “Double Play Try/Catch”

Con el paso del tiempo en mi experiencia laboral (la cual ya cuenta con algunos años en el desarrollo de aplicaciones) y después de interactuado con diferentes personas, equipos  ó diferentes empresas,  siempre guardo algunos recuerdos de los proyectos en los que he participado. Y el simple hecho de haber participado y ser testigo de toda una gran variedad en la toma de decisiones que se ha aplicado al momento de intentar resolver un problema de implementación mediante el código fuente final, los cuales ( ya sea de forma consciente o inconsciente) es muchas ocasiones resulta ser que se tomó una muy mala decisión, que en ocasiones generan más problemas ó que simplemente no aportando nada al resultado final. Creo que a muchos nos ha pasado, cierto? Y más cuando se revisa código de terceros, cierto?

Es debido a este andar por varios proyectos que tome la decision de crear mi propio compendio de bloques de códigos “peculiares” (ya sea horrores, antipatrones, etc.) que debido a su estructura y contenido me han causado asombro, lagrimas y con frecuencia risas.

Como elemento de inicio he seleccionado el siguiente patrón de código que he denominado “Double Play Try/Catch”, y para tratar de explicarlo una breve introducción:

Imagina a un desarrollador al que se le asigna agregar el manejo de excepciones a un bloque de código y con base a su gran “iniciativa” ha decidido hacer una implementación tratando de aplicar las “Best Practices” que leyó en alguna revista. Una vez puestas las manos en marcha realiza la implementación logrando con ello algo muy parecido a lo siguiente:

MyFunction(…)
Try
something()
Catch Exception ex
Throw ex

Al final sin querer el desarrollador termina aplicando un antipatrón que en mi caso he nombrado el “Double Play Try /Catch”. El nombre lo he tomado de una famosa jugada del Béisbol conocida como el DOUBLE PLAY, en donde dos jugadores de ofensiva son puestos OUT al momento de una jugada continua (aunque en nuestro ejemplo parece ser que el out es así mismo).

Para el caso del bloque de código anterior, en el manejo de excepciones implementado se “atrapa” una excepción en la primer sentencia Catch (Primer OUT) y se decide volver a lanzar nuevamente la misma excepción, esperando que en algún punto más adelante se logre atrapar nuevamente a dicha excepción (Segundo OUT) y DOUBLE PLAY!.

Con lo anterior, es por demás decir que se trata de un manejo totalmente INCORRECTO de las excepciones y debido a su estructura y logica? simplemente no tuvo ningún caso el bloque Try/Catch.

La generación de una excepción tiene un costo ALTO en el procesamiento y performance de las aplicaciones; por tanto es muy importante tener mucho cuidado al momento de aplicar un manejo adecuado y tomar en cuenta las siguientes consideraciones:

a) Agregar un manejo de excepciones no es una cuestión de performance, solo de buenas costumbres al momento de prevenir flujos excepcionales, pero como todo en EXCESO puedo ser contraproducente.

b) El manejo de excepciones debe de proporcionar información detallada sobre los síntomas que provocan el flujo Excepcional, con la intención de ofrecer alternativas sobre como intentar reaccionar a ellas, el simple hecho de colocar un bloque Try/Catch no soluciona nada.

c) Las excepciones tienen un impacto en el performance y por tanto no es conveniente tratarlas como un mecanismo de decisión en la lógica de procesamiento!, en cuanto te sea posible mejor evitarlas.

Finalmente algunos recursos que permiten explicar el costo de las excepciones y algunas buenas recomendaciones sobre su manejo:

- Design Guidelines: Exception Throwing por Krzysztof Cwalina

- Error Handling

- When you can´t throw an exception

En fin, conforme vaya recordando vivencias o encontrando en mi recorrido algunos bloques de código “interesantes” por supuesto que los intentare clasificar y anexar a este compendio.

Facebook Twitter Email Delicious Reddit Posterous

Posted in Architecture, Development, Tips & Tricks | Tagged , , | Leave a comment

New series book – Service Design Patterns

New series book – Service Design Patterns:

 

“Addison-Wesley has published a new book. It’s by Robert Daigneau and it’s called Service Design Patterns. It’s a topic that’s already had too many books on it, but I added this one to the series because I think Robert has done a particularly good job of collecting together the best advice on the topic and organizing it into a useful handbook. This is the book that I think ought to become the standard book on the topic.”

 

(Via Martin Fowler’s Bliki)

Facebook Twitter Email Delicious Reddit Posterous

Posted in Software | Leave a comment

Thanks Mr. Jobs (1955-2011)

5Lh9p

Facebook Twitter Email Delicious Reddit Posterous

Posted in Apple, General | Tagged , , | Leave a comment

Young founders seem to be enthralled with building fun but meaningless apps. They’re building “companies” based on want, not need

Read more: http://www.businessinsider.com/generation-y-startups-2011-9#ixzz1ZbMEr8RY

Facebook Twitter Email Delicious Reddit Posterous

Posted in Software | Leave a comment

“In biology, you learn that grass absorbs 10% of the sun’s energy. The cows that eat the grass absorb some of the energy, but not as much energy as the grass. When you build off a company’s API, you get further and further from the source.”

Read more: http://www.businessinsider.com/generation-y-startups-2011-9#ixzz1ZbEoAPCt

Facebook Twitter Email Delicious Reddit Posterous

Posted in Software | Leave a comment

Su tiempo es limitado, no lo gastes viviendo la vida de otras persona. No se dejen atrapar por el dogma que implica vivir entre los resultados de los pensamientos y creencias de otros. No permitan que el ruido del pensamiento de otras personas ahogue su voz interior. Y lo más importante: tengan el coraje de seguir su corazón y su intuición. De algún modo estos ya saben lo que ustedes quieren llegar a ser. Todo lo demás es secundario.

Facebook Twitter Email Delicious Reddit Posterous

Posted in Software | Leave a comment

Habilitar el soporte de NTFS (Windows) en MacOSX

A partir de la versión 10.6 de Mac OSX se incluye el soporte nativo (lectura y escritura) de particiones NTFS. En versiones anteriores solo se contaba con soporte de “solo lectura” o erá necesario emplear otras herramientas como Mac FUSE.

El soporte de NTFS no se encuentra habilitado por default y para activarlo hay que realizar los siguientes pasos:

1. Abrir una instancia de “Terminal” y escribir el comando diskutil info /Volumnes/<VOLUME-EXTERNO>, en donde VOLUME-EXTERNO es el nombre de la partición NTFS.

2. Con la información resultante copiar los datos de la sección Volume UUID

3. Escribir el comando sudo nano /etc/fstab

4. Una vez dentro del editor, escribir UUID = y en seguida copiar la información de Volume UUID del paso 2, agregar un espacio en blanco y escribir none ntfs rw. El resultado final deberá ser muy parecido a: UUID=9999-9999-999 none ntfs rw.

5. Guardar los cambios en el archivo y quitar nano (Control-X, Y, ENTER).

6. Reiniciar el equipo.

Una vez realizado los pasos anteriores se podrá tener acceso de lectura y escritura a particiones o unidades externas con formato NTFS.

 

Facebook Twitter Email Delicious Reddit Posterous

Posted in Apple, Mac, Software, Tips & Tricks | Tagged , , | Leave a comment

Usar tu Mac como pantalla de Apple TV

Una de las tecnologías recientemente anunciadas por Apple es AirPlay, con la cual es posible comunicarse vía “Wireless” con cualquier dispositivo (Docks, AV, etc.) que soporte este comunicación para reproducir música y vídeos.

Dentro de los dispositivos que soportan esta comunicación se encuentra Apple TV, pero para los que aun no somos afortunados en tener uno, existe una forma de emplear nuestra Mac como una pantalla de “AppleTV”, como se logra esto?..muy fácil mediante “AirPlayer“, esta aplicación para MacOSX  permite crear un servicio que emula un “Apple TV” en nuestra Mac de forma que cualquier iDevice (dispositivo basado en iOS) pueda transmitir información directamente hacia la Mac.

La aplicación esta disponible de forma libre en esta ruta, además de ser un excelente “Hack”!.

 

Facebook Twitter Email Delicious Reddit Posterous

Posted in Apple, Mac, Tips & Tricks | Leave a comment

Sample from tumblr

Facebook Twitter Email Delicious Reddit Posterous

Posted in Software | Leave a comment