Tag Archives: programacion

Principio de “Tell, Don’t ask” en Programación Orientada a Objetos

tell dont ask

El “Tell, Don’t ask” es un principio que nos indica que no tenemos que usar los objetos para pedirles cosas y según la información que nos devuelven tomar decisiones, sino que debemos decirles a los objetos que hagan cosas y estos objetos internamente tomaran sus propias decisiones según su estado.

Este principio casa perfectamente con la idea de que un objeto se define por su comportamiento; y además es fundamental para sacar partido al polimorfismo y la inversión de control. Es decir si nos dedicamos a preguntar y tomar nosotros las decisiones estaremos acoplándonos, será prácticamente imposible hacer cambios al objeto, estaremos incumpliendo el principio Open/Close, nuestro sistema será más difícil de mantener, y por lo tanto más caro.

Al exponer el estado de una clase a las demás para que pueda ser manipulada estamos violando su encapsulamiento y asumiendo riesgos, ademas de que estamos moviendo responsabilidades a las clases de mayor nivel.

El principio fundamental de la programación orientada a objetos es la unificación de métodos y datos, por lo que lo correcto es que cuando una clase requiere conocer el estado de otra, es importante evaluar que uso se le darán a esos datos, y realizar el procesamiento de esa información en la clase expuesta, evitando la dispersión y propagación de estado.

Para mas información pueden consultar los artículos de Carles Climent o Alejandro Pérez García

ParamArray: qué es y como usarlo? (Visual Basic 6)

ParamArray

ParamArray

Se refiere a la habilidad que puede tener un procedimiento o función de aceptar una lista indefinida de parámetros de un mismo tipo de datos.

Dicho parámetro siempre debe estar definido como el último argumento de la lista y siempre debe declararse como un parámetro por valor (ByVal).

Un ejemplo de una función que use ParamArray sería:

Public Function Sumar(ParamArray Elementos() As Integer) As Integer
   Dim resultado as Integer
   
   For i = 0 To UBound(Elementos) 'Hacer desde el primer valor del array Elementos hasta el ultimo valor 
      resultado = resultado + Elementos(i)
   Next

   Sumar = resultado
End Function

Para usarla basta con ejecutar lo siguiente:

MsgBox Sumar(23, 45, 233, 123, 122, 10)
MsgBox Sumar(1, 2, 3)

Dim resultadoSuma as Integer
resultadoSuma = Sumar(934, 125)
MsgBox "El resultado de la suma es " & resultadoSuma

Sin embargo si quieren ver un ejemplo más completo y utilizando una base de datos, les dejo el siguiente repositorio de Github donde pueden encontrar el código fuente de una pequeña aplicación que cree para cargar datos de alumnos utilizando ParamArray en unas funciones que construyen los Insert, Update y Delete sin necesidad de decirle los nombres de los campos. Enjoy!!!

Code Smells

O también conocidos como bad smells, se refiere a cualquier sintoma en el código fuente de un programa que posiblemente indica un problema mas profundo. No son bugs y en realidad no impiden que tu programa funcione correctamente, sin embargo, sugieren deficiencias que pueden generar tiempos de desarrollo mas extensos o riesgo de errores a futuro.

Determinar un code smell es con frecuencia un proceso subjetivo y puede variar según el lenguaje de programación, la metodología de desarrollo y finalmente el desarrollador.

Para simplificar la categorización de los mismos, se crearon los siguientes grandes grupos:

Bloasters

Son bloques de código, métodos y/o clases que han aumentado en tales proporciones gigantescas que son difíciles de trabajar. Por lo general, estos code smells no surgen de inmediato, sino que se acumulan con el tiempo a medida que evoluciona el programa. (sobre todo cuando nadie realiza un esfuerzo por mitigarlos)

Object-orientation Abusers

Están basados en la utilización de manera incompleta o incorrecta de los principios de la programación orientada a objetos.

Change Preventers

Se basa en el problema de que al cambiar algo en tu código, terminas haciendo muchos cambios en muchos otros lugares, por lo tanto el desarrollo de software se convierte en algo mucho mas costoso y complicado.

Dispensables

Es algo inútil e innecesario cuya ausencia haría que el código sea más limpio, eficiente y fácil de entender.

Couplers

Contribuyen al excesivo acoplamiento entre clases o muestran lo que sucede si el acoplamiento se sustituye por delegación excesiva.

Para mas información sobre este tema pueden visitar los siguientes enlaces:

Los geek actuales y sus metodologias

dilbert-agile_programming_0

Diego: Buenas noches profesor
Profesor: Buenas noches Ramirez
Diego: Profesor, queria ver con usted mi nota
Profesor: Ah si, hubo un error cuando la cargaron en la pagina.
Diego: Ah, me imaginaba. Que me saque?
Profesor: Un 2
Diego: Como un 2!!??
Profesor: Y.. si. Un 2 Ramirez. Su evaluacion no estaba nada bien.
Diego: Pero no puede ser! Si yo hice todo lo necesario! Mi evaluacion no merece menos que un 10
Profesor: Un 10 !!! ?? Usted no sabe lo que dice..
Diego: No profesor. Y se lo puedo demostrar. Mire, ve mi tarjetita: dice “Gerente de Desarrollo”. Y al otro lado dice “psicofxp.com” Sabe lo que significa?
Profesor: No, la verdad que no. Pero eso no cambia el 2 que se saco.
Diego: No, no, no. Usted no esta teniendo en cuenta que yo trabajo en una “punto-com”. Eso cambia todo
Profesor: No veo en que puede cambiar!
Diego: Espereme un segundo. Vamos a revisarla juntos, analicemos todos los puntos, cuantifiquemos el total de las consignas sugeridas, evaluemos cuanto tiempo usted nos dio para hacer el examen, y cuanto en realidad podia hacer yo. Y ahi llegamos al primer indicador
Profesor: Que indicador Ramirez? Usted tenia 8 ejercicios, e hizo 4. Y todos mal. El 2 en realidad se lo estoy regalando.
Diego: Bueno, ve: hice 4 ejercicios porque cuantifique que en este sprint no podia hacer mas. La semana que viene, en el proximo sprint hago los otros 4
Profesor: Ramirez, disculpeme pero no le entiendo.. Usted sugiere que esta bien que hiciera 4 puntos, cuando todo el mundo hizo 8?
Diego: Por supuesto. Mire: 8 puntos era el product backlog, pero en este sprint solamente podian entrar 4. Como soy proactivo hice mi propia estimacion. Ahi ya tengo un punto.
Profesor: Usted esta loco? y de todas formas, aunque aceptara que solo hiciera 4, los 4 están mal.
Diego: Porque mal? Fijese el primer ejercicio: “Ingresar las edades de 10 personas, determinar el máximo, el minimo y el promedio de edad. Imprimir los 3 resultados”
Profesor: Usted solamente hizo el calculo y la impresión. No hizo el ingreso de datos.
Diego: Claro, porque este calculo es invocado por un ajax que le pasa los parametros. El ejercicio esta perfecto. Ahi ya van dos puntos.
Profesor: Ramirez usted me esta tomando el pelo?
Diego: Para nada Profesor. Veamos el siguiente ejercicio: “Generar una matriz de 4×4 con los números de 1 a 16”
Profesor: Aca dejo un espacio vacio.
Diego: Pero claro: esta es la vista del HTML. Pero la tabla la dibuja el CSS
Profesor: Que!!? Y los datos?
Diego: Los escribe el JQuery!
Profesor: Ramirez, estoy a punto de perder la paciencia!
Diego: Eso por lo menos fueron dos puntos mas y van 4. Que sigue? Ah, si: “Comprobar que un numero de cédula sea correcto”
Profesor: Y usted solamente puso una direccion de pagina web
Diego: Error. Yo puse una invocación a un servicio RESTFUL del SAIME que me devuelve true o false. Un punto mas.
Profesor: Ramirez, estoy a punto de expulsarlo de mi clase
Diego: Profesor, ya terminamos: Miremos el ultimo ejercicio: “Realice un programa que solicite nombre y apellido e imprima el resultado”
Profesor: Ramirez: usted dibujo tres cuadraditos.
Diego: Son los dos campos del formulario, y el boton Submit
Profesor: Y la logica!?
Diego: Obviamente no esta aca! Usted no oyo hablar del patron MVC. Bueno, esta es la Vista. El modelo y el controlador lo hizo mi compañero, que es del otro team.
Profesor: Que compañero? Que team? De que me habla?!!
Diego: Que yo dividi las tareas con mis compañeros para poder terminar el sprint. Encima hice su trabajo de Scrum Master. Por lo menos dos puntos mas me merezco por eso.
Profesor: Ramirez, suponiendo que acceda a todas sus locuras, esta llegando a un 6. Y usted sabe que se aprueba con 7
Diego: Pero usted se esta olvidando que el examen valida, no vio que le puse “This exam is XHTML 1.0 valid” Ahi tengo un punto mas.
Profesor: Pero…
Diego: Y ademas, antes de entregarlo hice una copia para llevarme, con lo cual esta commiteado en el versionador. Otro punto. Si sumamos que el examen no ocupa mas de media carilla, quiere decir que esta minificado. Otro punto mas. Y finalmente antes de irme puse en Twitter y en Facebook “Acabo de terminar un examen de Programación. Me voy a comer una pizza y ver Lost. Hasta mañana followers”. Eso por supuesto, me suma otro punto y llego al 10
Profesor: Ramirez, sabe que? Me harto. Le voy a poner el 10 solamente para que se calle y se siente. Total esto es una universidad privada, asi que poco importa si usted aprende o no.
Diego: Gracias Profesor, pero no me ponga un 10. Mejor pongame un 9 y en la parte superior de mi examen pongame un circulito pintado de verde manzana que diga “Beta”. Así todos piensan que queda algo por mejorar.

Via: minimalart

Cifrar cadena en Base64 en Javascript

Gracias a mi amigo Gonzalo hace poco conocí las funciones atob btoa de Javascript que sirven para cifrar una cadena de caracteres de manera que podamos enviarla a través de cualquier mecanismo (post, get, ajax, restful, etc) evitando perdida de información por el tipo codificación de caracteres y/o hacer visible la información que enviamos a través de una url.

Para ver un ejemplo de la función pueden observar el siguiente bloque de código:

O hacer uso de la excelente documentación que pueden conseguir en http://www.w3schools.com/

Qué es NodeJS? y como instalarlo en MacOS

Node.js es un entorno en tiempo de ejecución multiplataforma, de código abierto, para la capa del servidor (pero no limitándose a ello) basado en el lenguaje de programación ECMAScript, asíncrono, con I/O de datos en una arquitectura orientada a eventos y basado en el motor V8 de Google.

Node.js ejecuta V8 JavaScript. Espere… ¿qué? ¿JavaScript en el servidor? Sí, leyó correctamente. El JavaScript del lado del servidor puede ser un concepto nuevo para cualquiera que haya trabajado exclusivamente con JavaScript del lado del cliente, pero la idea en sí no es tan inverosímil — ¿por qué no utilizar el mismo lenguaje de programación que usted usa en el cliente del lado del servidor?

Node.js es similar en su propósito a Twisted o Tornado de Python, Perl Object Environment de Perl, React de PHP, libevent o libev de C, EventMachine de Ruby, vibe.d de D y de Java existe Apache MINA, Netty, Akka, Vert.x, Grizzly o Xsocket. Al contrario que la mayoría del código JavaScript, no se ejecuta en un navegador, sino en el servidor. Node.js implementa algunas especificaciones de CommonJS.

Lo que Node.js definitivamente no es

Sí, Node.js es un programa de servidor. Sin embargo, el producto base de Node.js definitivamente No es como ApacheTomcat. Esos servidores básicamente son productos para servidor listos para instalar y que están listos para implementar aplicaciones instantáneamente. Usted podría tener un servidor estar listo y en operación en un minuto con estos productos. Node.js definitivamente no es esto. De forma similar a como Apache puede agregar un módulo PHP para permitir a los desarrolladores crear páginas Web dinámicas, y un módulo SSL para conexiones seguras, Node.js también tiene el concepto de módulos que se pueden agregar a su núcleo mismo. Literalmente hay cientos de módulos de los que se puede escoger con Node.js, y la comunidad es bastante activa en cuanto a producir, publicar y actualizar docenas de módulos por día. 

Dicho esto, ahora podemos entrar en los pasos para la instalación de Node.js en MacOS

Existen dos maneras fundamentales de hacer esto de forma sencilla:

La primera pasa por entrar en la página de Node.js y descargar la versión que quieras instalar (LTS o Stable), lo cual te bajara un archivo .pkg que podrás instalar mediante la interfaz gráfica.

Actualmente pueden descargar las siguientes versiones:

La segunda manera (y es la que recomiendo) es instalar a través de HomeBrew con los siguientes pasos:

  • Abrir un terminal de consola
  • Escribir el comando “brew install node”
  • Validar que se instalo correctamente con los comandos “node -v” (para ver la versión que instaló de Node.js) y “npm -v” (para ver la versión de NPM que se instaló)
  • En caso de querer actualizar la versión que tienes instalada de Node.js solo debes abrir la consola y ejecutar los siguientes comandos:
    1. brew update
    2. brew upgrade node

Para mas información puedes consultar la guía de Dave McFarland

Qué es Laravel?

Laravel-5

Es un framework escrito en php que busca escribir código de manera elegante, evitando el llamado código espagueti.  Fue creado por Taylor Otwell en el año 2011 basandose en conceptos de Ruby On Rails y Asp .Net MVC.

La influencia de Laravel ha crecido rápidamente desde su lanzamiento. En la comunidad de desarrolladores es considerado como alternativa sencilla de usar pero que tiene todas las funcionalidades que debe tener un framework. Ha sido descargado más de 320.000 veces, y se espera que supere en popularidad a otros frameworks ya establecidos más antiguos.

Para ver mas sobre esta tendencia podemos visitar este articulo donde se comparan algunos de los frameworks mas importantes para PHPhttp://webrevisions.com/tutorials/php-framework-the-best-php-framework-for-2013/#.VoyPWJPhD-Z

Captura de pantalla 2016-01-05 a las 11.23.51 p.m.

Finalmente me gustaría dejarles el siguiente curso de Laravel de la mano de Raul Palacios para que no tengan excusas para dar el primero paso.

Tiempo de validación en la App Store

Captura de pantalla 2016-01-03 a las 1.01.16 a.m.

Quiero compartir con ustedes un recurso muy interesante que encontré en la red, mediante el cual puedes tener un estimado del tiempo de revisión por parte de Apple al subir tu aplicación en la AppStore.

Para esto se toma el feedback de la comunidad en indicar los tiempos en que tardaron sus aplicaciones en ser revisadas y se realiza un promedio del mismo.

La pagina muestra la información de las aplicaciones para iPhone / iPad y para MacOS:

http://appreviewtimes.com/ 

El mejor comentario es un buen nombre para tus métodos

Code comments best practices

Los comentarios son usualmente creados con la mejor intención, cuando el programador realiza esto es debido a que su código no es obvio o intuitivo. En tales casos, los comentarios son como un desodorante enmascarando el olor de un pescado.

La mejor forma de comentar tu código es elegir buenos nombres para tus métodos o clases.

Si sientes que un fragmento de código no puede ser entendido sin comentarios, entonces intenta cambiar la estructura del código de manera que los comentarios no sean necesarios.

Fuente: https://refactoring.guru