ORM, ¿en verdad una maravilla?

Vivimos en un mundo sustentado por la tecnología que nos hace tener que estar muy atentos cada día para saber como adaptarnos. Como desarrollador de software que soy ése es mi día a día, ver nuevas maneras de resolver los problemas en mi trabajo, intentar encontrar la solución más sencilla para con ello ahorrarme tiempo, dolores de cabeza e incluso ser más conciso a la hora de codificar.

Con este mar de cambios hay gente que vivió el cambio de la programación estructurada a la programación orientada a objetos. El tiempo cada vez nos mostraba como la gente gustaba de hacer sus abstracciones de software cada vez más por medio de objetos.

Incluso a día de hoy cada vez que sale un lenguaje con ideas nuevas o que representa un contraste total en nuestra manera de pensar (paradigma) es difícil que se haga de un trozo del mercado. En fin, vamos que la programación orientada a objetos está sobrevaluada.

¿Alguien conoce Scala o Clojure?

Bueno, Scala y Clojure son dos lenguajes de programación muy interesantes que corren sobre la máquina virtual de Java (Scala también corre sobre la plataforma .NET). Por un lado, Scala es un lenguaje de programación híbrido entre funcional (no puro, dado que acepta variables y valores) y orientado a objetos. Clojure por otra parte, es un lenguaje de programación completamente funcional, es un dialecto de Lisp. ¿Cuál de estos dos lenguajes creen qué tiene más seguidores?… Exacto, Scala, porqué nos permite usar objetos.

Y este es el problema, el siguiente paso a nivel de desarrollo de software era en pensar como explotar las capacidades multi-core, servicios asíncronos, el ser conciso en lo que se codifica, escalabilidad horizontal, etc. Para vista está en como se busca que la información sea escalable a los lados, con movimientos como NoSQL que proponen hacer de las bases de datos almacenes y dejar el procesamiento/consulta de esos datos a las aplicaciones.

¿Y los ORM?

Pues parte de eso, ¿qué pasa si necesito hacer una consulta entre los alumnos que han reprobado una de las siguientes materias: matemáticas, física y literatura?… Tendría que abogarme a buscar los objetos para cada una de las materias, de ahí buscar qué alumnos llevan esas materias y después aplicar un filtro de quién reprobó. Ahí estoy haciendo varias consultas, algo que con una sola sentencia SQL pude haber hecho y recibir una tupla con los datos necesarios para un reporte, por decir algo.

En fin, creo que o estoy comenzando a entender un poco de esto o simplemente estoy perdiendo el norte, es lo bueno de ser alguien curioso, no se aceptan dogmas ni se busca ser fiduciario, más bien se busca ser concreto y buscar lo que mejor funcione para según que caso.

¿No debo usar un ORM?

No, esto no es lo que dije. Yo creo que es bien cómodo usar un ORM, me gusta la idea e incluso considero que son algo muy práctico para cierto tipo de aplicaciones. Sin embargo, creo que con los ORM tenemos un ejemplo de “uso el destapador de sodas para construirme un atril” y en general creo que ese es el problema que se sufre con la programación orientada a objetos.

Lo que si que recomiendo es, evaluar que necesitas para cada trabajo. Es como si yo quisiera usar Rails para crear una aplicación móvil. ¿Qué se puede? Pues si, pero no es lo más indicado, menos considerando que Rails fue creado para hacer aplicaciones web alojadas en un servidor, mientras que la aplicación móvil se ejecutará en un entorno completamente distinto.

Espero no haber ofendido a nadie y si tienes una mejor manera de decir las cosas, este es tu medio.

Bueno, sin más por este día, solo me queda agradecer la visita 🙂

¿Y qué es el dolor?

¿Y qué es el dolor a fin de cuentas?…¿El dolor existe?, nadie lo ha visto; ¿producto de la mente? ¿y qué mente quiere experimentar dicho sentir, que lo peor no se ve?.

¿A caso la vida atrae sufrimiento?…Pero, ¿qué es el sufrimiento, si nadie lo ve?. No por ello deja de ser palpable, ¿es que el dolor se parece al sufrimiento? ¿o el sufrimiento es sucedido del dolor?

Entedemos, pero ¿qué?; al final encontramos cosas cómo ¿para qué? o ¿y qué sigue?. Lo que sólo nos indica, la posibilidad de lo imposible, ver lo invisible, sentir lo intagible; para al fin darnos cuenta: Humanos somos, algo tan simple, tan complejo y tan auténtico, que nos vuelve vulnerables al dolor…Pero yo digo ¿qué es el dolor? 😉

¿Había dicho qué las chicas que cantan son mi debilidad?

Este es un post offtopic, que también escribiré uno de los que “me caracterizan”.

El día de hoy me levanté a prepararme desayuno, encendí la TV y estaba escuchando-viendo vídeos de música que pasaban… De repente escucho una voz femenina que me pareció bastante agradable y buena, la canción era “Safe and Sound” de Tailor Swift, para quien no la haya escuchado o visto el vídeo:

Siendo honesto, si hubiera escuchado ese tema interpretado por un hombre, no me hubiera agradado de la misma manera e incluso lo hubiese visto como algo pésimo.

Esto no quiere decir que me encante escuchar a cualquier mujer, no. Por ejemplo, me parece de masoquista escuchar cualquier canción de Nicki Minaj en la que no le arreglen la voz (o bueno, en la que no se la arreglen tanto), porqué para mi gusto la que lanzó con David Guetta estuvo bastante bien (todo sea dicho, benditas mezclas, dj y edición de audio, que la voz de la chica esa no se me hace de lo mejor).

Voces de mujeres que me gustaba escuchar desde antes:

  1. Tarja Turunen.
  2. Cristina Scabbia.
  3. Lacey Mosley (en algunas canciones sé que parece algo rara, pero en otras, vaya voz).
  4. Hayley Williams.
  5. Desde hoy en la mañana Tailor Swift (que lo único que sabía de ella era que se dedicaba a la música, desde hoy le pondré algo de antención.
  6. Maki de la banda High and Mighty Color
  7. Inga Scharf

No son todas y probablemente existirá más de una voz femenina que me haga ampliar esta lista (que siempre estoy abierto).

Creo que ya hablé mucho de mujeres y esto va pareciendo Fox LIFE o Discover Home & Health, de modo que terminaré esta entrada con música de un hombre. Dado a que últimamente, me llama la atención la música country (porqué es difícil de tocar e interpretar) pondré algo de ese estilo.

 


Espero les haya gustado la entrada y la sigan pasando bien.

Y el origen nos dice: “Me voy yo, pero les dejo lo mío” | Dennis MacAlistair Ritchie, Descanse en paz

¡Hola!, Espero que se encuentren de lo mejor.

El día de ayer me enteré que el señorón Dennis MacAlistair Ritchie había fallecido, una noticia que seguro nos afecta a más de un informático. Este señor es uno de los pilares de la informática cómo la conocemos y si que ha dejado un gran legado. Muerto a la edad casi exacta de 70 años y un mes.

Ahora, ¿porqué digo que ha dejado un gran legado?
Primero que nada, cada programador (y en menor grado otro tipo de personas que se dedican a las TI) tenemos la obligación de saber quien es el señor Dennis MacAlistair Ritchie.

Dennis MacAlistair Ritchie

Pero, ¿porqué nuestra obligación? Primero que nada porque como programadores nuestra herramienta del día a día son los sistemas operativos; y este señor es uno de los padres del legendario sistema operativo, que a pesar de ser un sistema del año 1971, aún sigue presente en varios sistemas operativos modernos cómo: BSD, GNU/Linux (en cuanto a Linux, no es en manera de código, recordemos que GNU/Linux nace como una alternativa a UNIX que era propietario), MacOS X (sí, incluso en el sitio de Apple es una de las ventajas que remarcan de OS X). Me dirán:

Va, ¿pero que dices?, esos sistemas sólo los geek y Dios los conocen

Probablemente sea cierto. Sin embargo, recordemos que el primer Windows copió unas cosas del sistema operativo de la manzana, por lo que si no es en código, muchos conceptos de Windows heredan de UNIX.

Otra cosa importante en nuestra vida diaria cómo programadores es el lenguaje de programación que usamos. Mencionemos algunos: C, C++, Objective C, Java, Python, Ruby, Scala, Perl, Groovy, C# y seguro se me escapa alguno. ¿Saben qué tienen estos lenguajes en común? Todos de una forma u otra tienen algo que ver con el señor Ritchie. El lenguaje C fue creado por este señor y este lenguaje ha sido la base e influencia para muchos otros. Otra cosa importante es que la mayoría de sistemas operativos de nuestros tiempos están escritos parcial o completamente en C o algún derivado de C. ¿Ahora entienden la importancia de esta personalidad?

Creo que la cosa está clara, sin este señor no hubiéramos tenido ni Windows, ni GNU/Linux, ni Mac OS, ni Android, ni iOS…En fin, la informática no sería lo que es; por eso le puse a ésta entrada “Y el origen”, porqué tal parece que Dennis MacAlistair Ritchie es el origen de la informática cómo la conocemos y este es su legado.

Dennis MacAlistair Ritchie puede dejar el mundo con una sonrisa. Cómo dice la frase: “Genio y figura, hasta la sepultura”.

Telcel dice: “¿Veo qué quieres un plan?…Comienza a rezar”

Bueno el día 24 de Julio del presente año, después de mucho pensar y analizar, me decidí a ir a un centro de atención a clientes de Telcel, porqué pues de entrada todas las personas que conozco tienen sus teléfonos activados con Telcel y segundo, porqué la cobertura de otras compañías se queda corta respecto a Telcel.
Así que fui y pedí una solicitud para un Plan. Dicha solicitud se envía a una agencia de investigación, y se supone, que esta investigación dura de 3 a 5 días, después de esto, uno puede ir a por su plan, y, dependiendo de la investigación uno da de 1 a 3 rentas de garantía y fin. Pero, en realidad esto es una mentira.

Cómo bien mencioné fui el domingo pasado a pedir cotización de un teléfono nokia (C7) con un plan. Algo que se me hizo increíble fue ver que me tuvieron ahí por más de 45 minutos (habiendo sólo 3 personas en fila) para atenderme (se veía claramente cómo había varios módulos de atención activos y sin gente), de ahí otra larga entrevista durando otros 20 minutos más, para que me dijeran: “Regrese el Jueves para ver lo de su plan.”; a lo que le respondí amablemente a quien me atendió: “De acuerdo, muchas gracias.”; le respondí de manera amable porqué su trato fue amable y hasta disculpas me pidió por haber durado tanto en atenderme, y cómo digo: “Está bien, una vez a todos nos puede pasar.”

Se llegó el Jueves y pensé que no era una buena idea ir el día que me dijeron, porqué por cualquier causa podía haber ocurrido algo o simplemente para darles otro día más de tiempo y que no hubiese problemas.
Se llega el viernes y fui, me dijo la persona que me atendió que pasara directo con él, lo único que necesitaba era un turno. Pues pedí mi turno, esperé a que me atendiera porqué estaba a mitad de una venta cuando llegué y pues vamos de vuelta:
-Agente: “¿Sería tan amable de recordarme su nombre?”
-Yo: “Claro”, le dije mi nombre.
-Agente: “Ok, déjeme revisar el sistema”

[Pasaron 10 minutos, pasaron 20 minutos, pasaron 30 minutos…]

Después de esto el agente de ventas del centro de atención a clientes habla con su supervisor y le dice:
-Agente: “Oye, fíjate que capturé la solicitud de esta persona y no me aparece en el sistema.”
-Supervisor: “¡Uy!, es que fíjate que las que se hicieron antes del 27 de julio se borraron.”
-Agente: “¿y qué hago?”
-Supervisor: “Vuelve a capturarlo y a mandarlo a investigación”

Lo que me hizo exclamar en lo profundo de mi ser: ¡¿QUÉ, VOLVER A ESPERAR MÁS?!

Digo, en lo veo en mi caso. Yo hago sistemas para computadora o para la web, y, comparándome con Telcel es cómo si un hipotético cliente viniera a mi y recrearamos la situación:
-Hipotético cliente: “Oye, fíjate que en mi negocio necesito un sistema de control de unidades de carga, con el fin de monitorear su actividad”
-Yo: “Bueno mira aquí las cosas son así, déjame toda tu información. La capturo y la envío a investigación, misma que durará un lapso de 3 a 5 días. De pasar la investigación, tendrías que dejarme el costo de 1 a 3 honorarios por adelantado.”

O sea, está bien, tienes que ver si tu cliente te va a poder pagar, para ello ¿qué se hace?…Pues pedir comprobantes de ingreso, y en algunos casos, pedir garantías. Algo que es muy molesto para cualquier consumidor es tener que esperar por algo que vas a pagar.
Por lo general los consumidores quieren sus productos o servicios ya, no los quieren dentro de 3 a 5 días.

Veo con una grande oportunidad a las otras empresas operadoras de telecomunicaciones, si éstas hicieran los trámites menos burocráticos y un poco más analíticos tendrían gente comprando planes tarifarios por montones.

En fin. Voy a esperar a ver si me llaman de Telcel (que quedaron en llamarme) para ver si me autorizan mi plan. En caso de que no me llamen, pues así de simple a buscar otra operadora, que lo que me interesa es el teléfono =P.

Si quieren ver lo buena compañía que es telcel basta con dar aquí para que se fijen que es lo que dice la gente.

Gittin desde OS X

Esta de nuevo es una entrada rápida sobre cómo resolver unos problemas comunes con Git mientras utilizas Mac OS X (o algún otro sistema operativo base UNIX) con SSH.

Primero que nada, necesitas un repositorio. Cómo trato de recopilar la información encontrada en lugar de volver a hacer un post, pues primero aquí.

Después de tus primeros pasos en Git puedes ahora hacer un clone, quizás batalles y te salga un error parecido al siguiente:

bash: git-upload-pack: command not found
fatal: The remote end hung up unexpectedly

Eso se arregla sencillo, existen dos maneras una está aquí, la sugerida por Brian Hawkins. La otra es simplemente copiar los archivos en el directorio “/usr/local/git/bin” al directorio “/bin”.
Después de esto agreguemos los archivos/directorios que queramos y tratemos de hacer push, en mi caso experimenté un error parecido al de esta pregunta, esto también se resuelve con una respuesta encontrada ahí mismo propuesta por alguien que se hace llamar John.

Después de tanto que me enojaba al ver que a cada pregunta que hacía veía una respuesta de Stackoverflow y de escuchar/leer a toda la gente que decía que StackOverflow es la ley, vean a donde vine a resolver mis problemas 😉

Saludos comentarios aceptados

Comprobar login en Play! Framework

Bueno, desde hace tiempo que tenía ganas de dar una entrada sobre Play!. Es rápida y es (para mí al menos) muy útil.

¿A quién no le ha pasado que desea saber si alguien ha iniciado sesión en una aplicación web?. Claro que la gente que utilice alguna solución en base a la Servlet API puede conseguirlo editando los filtros en su web.xml, aunque claro está que para los que preferimos movernos hacia adelante (al menos cronológicamente) tenemos esta simple solución con Play!.

De entrada necesitamos una clase que extienda de play.mvc.Controller, con lo que sea necesario para validar el login:

package controllers;

import models.User;
import play.mvc.Before;

public class Controller extends play.mvc.Controller {

@Before static void isLogged(){
String usuario = session.get("usuario");
String otrofactor = session.get("otrofactor");
Long id = Long.parseLong(session.get("id"));
if(!sessionContainsBasics() || !isRealUserAndPass(usuario, otrofactor, id)){
redirect("/");
}
}

static boolean sessionContainsBasics(){
return
session.contains("usuario") &&
session.contains("otrofactor") &&
session.contains("id");
}

static boolean isRealUserAndFactor(String usuario, String otrofactor, Long id){
User a = User.findById(id);
if(a != null){
if(!a.otrofactor.equals(otro) || !a.usuario.equals(usuario){
session.remove("usuario");
session.remove("otrofactor");
session.remove("id");
return false;
}else if(a.otrofactor.equals(otrofactor) && a.usuario.equals(usuario)){
return true;
}
}
return false;
}
}

Cómo podemos apreciar esta clase nos permite por medio de tres validaciones (campos existentes en la clase User) comparar si lo que hay en sesión es válido con dos métodos y el que funciona cómo nuestro filtro. El método “sessionContainsBasics” nos permite ver si la sesión contiene los parámetros básicos para poder seguir, mientras que “isRealUserAndFactor” compara si los valores dados en dicha sesión son existentes en algún mecanismo de persistencia existente o del que nuestro sistema haga uso (en mi caso una base de datos). Con esto nos basta poner esta clase (con todo y nombre de archivo, tal y cómo está: ‘Controller’ y ‘Controller.java’) y que nuestros controladores pues sólo extiendan de esta clase.
En fin, es muy simple.

Bueno, gracias por la visita, nos vemos luego. Comentarios aceptados.