Blog personal de Moisés Gallego

From the Blog

feb
02
Posted by Moises Gallego at 11:50 am

PicmntAprende. Enseña. Comenta
La nueva forma de disfrutar la fotografía

Hace ya un tiempo que ni escribo por aquí ni por twitter ni facebook ni nada, y aquí viene  la explicación.

Hace unos meses que os contaba por twitter que estaba migrando de servidor, los que seáis asiduos sabréis que hace un tiempo era normal que el servidor se cayese casi todos los días, eso ya parece estar solucionado, pero van apareciendo otros errores que poco a poco, según voy teniendo tiempo, voy arreglando.

A parte de eso también me encuentro en una etapa profesional en la que me empiezo a plantear cambios y eso no es nada fácil, me paso mas tiempo estudiando, asistiendo a conferencias y cursos que en casa disfrutando de mi familia.

Debido a ese cambio profesional que me estoy planteando he decidido comenzar con algunos proyectos personales, y hoy os quería presentar a la joya de la corona, Picmnt, un nuevo sitio de fotografía que ya os iré descubriendo en que consiste.

Os adelanto de que no se va a tratar de un blog, ni de un foro, ni de una red social, aunque espero que englobe parte de todo eso. Por ahora estoy con el desarrollo de la versión 1, aunque estoy a poco de terminarla y poder lanzarla, así que si estáis interesados pasaos por la web http://picmnt.com y registraos para estar informados, y así poder disfrutar de esta nueva experiencia desde el comienzo.

En breve os iré contanto mas detalles sobre el proyecto.

Como estoy intentando aprender todo lo que se puede sobre el mundo del desarrollo ágil, Symfony etc, pues creo que debería aprovechar para devolver a la comunidad todo lo que estoy aprendiendo gracias a ponencias, tutoriales, blogs… que mucha gente comparte por el mero hecho de ayudar. Así que aquí está mi primera pequeña aportación, que espero que no sea la última, un vídeo donde monto Capifony para desplegar aplicaciones Symfony2. El vídeo no es gran cosa, a mi se me oye regulero :) , se oye mas a la niña de fondo llorar, y encima he cortado el último minuto de vídeo, la despedida, pero por el lado bueno, es un minuto menos que tenéis que aguantarme :) Aquí tenéis el vídeo y la presentación que he usado como guión. Espero que os sea de utilidad, para cualquier cosa ya sabéis como contactar conmigo.

Vídeo

Desplegando Proyectos Symfony2 con Capistrano-Capifony y Git from moises gallego on Vimeo.

Presentación

sep
02
Posted by Moises Gallego at 9:58 pm
symfony madrid

Symfony Madrid - Code Kata 2ª Reunión

El pasado miércoles día 31 de Agosto tuvo lugar la tercera reunión del grupo Symfony Madrid y esto es de lo que hablamos y las impresiones que me llevé de dicho encuentro.

He de contar que aunque sea la tercera reunión el grupo aún no había acabado de arrancar completamente, ya que la segunda reunión no tuvo que ver nada con la primera y se retomó la lista de correo para comenzar de nuevo con este grupo, por eso quizás esta reunión debería ser la segunda y no la tercera.

Como ya he dicho llevábamos desde la anterior reunión reviviendo la lista de correo y a través de esta estuvimos tratando los temas que íbamos a tocar en la reunión.

El tema mas importante era “que temas íbamos a tratar” :) y como pensábamos llevar el grupo, a parte de dar algún tipo de charla.

 

Presentación

Empezamos como debe ser, conociéndonos todos, Symfony_Madrid pretende ser un grupo abierto lo mas horizontal posible y para eso nada mejor que sentarnos todos en circulo, hacer una pequeña presentación de nosotros y tratar los puntos que habíamos discutido por la lista de correo.

Los puntos que se trataron, si no se me olvida ninguno fueron:

  • Portal a desarrollar
  • Fechas y lugares de reuniones (aunque esto ya estaba decidido)
  • Cuentas de difusión (Twitter, Lista de Correo, Facebook, Google+)
  • Método de trabajo para el proyecto del grupo a través de GitHub
Después de discutir un poco los puntos y de un problema con el portátil de @Osukaru pasamos a presentar lo que había hasta la fecha del proyecto

El Proyecto

Como no siempre hay un tema del que hablar o alguien dispuesto a dar el tipo y salir a la palestra a contarnos algo decidimos crear un proyecto colaborativo que fuésemos desarrollando entre toda la comunidad y del que pudiésemos hablar en las siguientes reuniones. Así aprenderíamos con la experiencia, ya no solamente Symfony que era nuestro cometido, si no aprender a desenvolvernos en este tipo de proyectos.

El proyecto, para que no fuese el típico “Pet Project” y nos sirviese de utilidad decidimos que no habría nada mejor que crear el portal de la propia comunidad, así que eso es lo que estamos haciendo, crear www.symfony-madrid.es.

En principio a fecha de hoy la aplicación tiene poca funcionalidad, pero mas o menos se puede ver en que estamos trabajando y esperemos que con el tiempo se convierta en un punto de referencia para la gente que quiere comenzar a desarrollar con SF2.

 

El “otro” proyecto

Después de la charla inicial de Oscar y de discutir las funcionalidades que mas prisa corrían (aunque se desarrollará dependiendo de quien pueda o quiera y del tiempo que pueda disponer) Carlos Benitez (@EtnasSoft) nos contó en primicia el proyecto que al día siguiente pretendía presentar a través de Twitter.

El proyecto en cuestión, aunque se trata de un proyecto suyo (enfocado a la comunidad open source), estaba muy enfocado a nuestro grupo, ya que pretende construir la nueva versión (v3) de Openlibra en una plataforma SF2 y a través de GitHub, así que nada mejor que nuestra comunidad para dar a conocer el proyecto y quizás así sacar alguna buena aportación, que seguro que la sacará viendo la gran idea del proyecto y el nivel técnico que se ve en el grupo.

Aquí tenéis toda la información sobre el proyecto, que aunque no estéis interesados en colaborar os recomiendo estar al tanto del desarrollo y sobre todo de cuando lo lancen

Resumiendo

En esta reunión fijamos las bases de lo que será tanto esta comunidad, como el proyecto que acabamos de comenzar. En la reunión se vio muy buen rollo, mucho nivel y sobre todo muchas ganas de aprender y colaborar, que es lo que hace que este tipo de iniciativas salga adelante.
Desde aquí os animo a que os paséis por el portal que estamos montando (Symfony-madrid) que aunque apenas cuenta con funcionalidad si que podéis encontrar enlaces en la cabecera, como por ejemplo, la cuenta de Twitter oficial y el grupo de trabajo en GitHub donde se encuentra el proyecto. Y sobre todo no dejéis de pasaros por la lista de correo donde podemos tratar todo lo que queráis.

 

Nos vemos en el próximo Symfony_Madrid ;)

 

Como ya os he explicado anteriormente el motivo por el que estoy escribiendo este blog es por el hecho de compartir las cosas que voy aprendiendo o uso a diario y creo que pueden llegar a interesar a otras personas.

Con este post en especial me gustaría empezar una serie de artículos en los que ir montando un entorno de desarrollo lo mas productivo posible y con un coste 0, si, a través de software libre o en su defecto gratuito. Como por ejemplo, control de versiones, integración continua, test unitarios, etc.

Para los ejemplos y herramientas que voy a explicar usaré un ejemplo de desarrollo en Symfony2 que es lo que estoy desarrollando a título personal en estos momentos, pero muchos de los ejemplos servirán para varios lenguajes o entornos de desarrollo.

¿Que es un máquina vitual?

Desde mi punto de vista uno de los mayores avances que se han dado en los últimos años en este mundo ha sido la virtualización de equipos, tanto en nuestros propios PCs como en la nube, término que está actualmente en boca de todos.

Creo que la wikipedia deja muy claro lo que es en su definición En informática una máquina virtual es un software que emula a una computadora y puede ejecutar programas como si fuese una computadora real. Aún así me voy a tirar a la piscina y os voy a explicar yo mismo en que consiste la virtualización.

¿un ejemplo?

Imaginemos que tenemos un equipo de desarrollo Windows , todo muy bonito, un 7,  muy potente, 8 núcleos y 16Gb de RAM, pero por desgracia nuestro entorno de producción no va a ser así de bonito. Se tratará de una máquina con un solo núcleo, y 512Mb de RAM. pero eso sí, con un sistema operativo de los buenos, con un GNU/Linux.

Hasta aquí bien, ahora tenenos dos opciones.

  1.  Podemos desarrollar nuestra aplicación web,  subirla al servidor de producción y rezar al FSM para que todo salga bien y no tengamos que restaurar todo.
  2. Podemos montar un servidor de testing o preproducción igual al de producción y probar todo lo que hagamos antes de subirlo al servidor de producción.

Creo que queda clara cual es la opción correcta, a no ser que tengamos mucha fe en el FSM. Y aquí entran en juego las máquinas virtuales.

¿Por que una máquina virtual?

Si estamos desarrollando en la nube ya de por si lo haremos con máquinas virtuales, pero imaginemos por un momento que desarrollamos en máquinas propias, para poder realizar el ejemplo anterior deberíamos comprar dos máquinas iguales para que los entornos sean iguales y no haya problemas, pero y si os dijera que podemos crear una máquina igual que la que tenemos dentro de otra máquina, independientemente de arquitetectura, SO, etc. Pues para eso usaremos una máquina virtual.

Dentro un equipo cualquiera, incluso dentro de nuestro flamante equipo de desarrollo del que ya hemos hablado anteriormente, podremos montar el equipo que queramos, con las especificaciones de hardware que deseemos, y así ahorrarnos bastantes quebraderos de cabeza y sobre todo dinero.

VirtualBox

Virtualbox es un software de virtualización disponible para varías plataformas, existen varios pero para el caso que vamos  a tratar creo que este software nos da todas las prestaciones que necesitamos.

Yo, aunque os haya puesto el ejemplo del entorno Windows he de reconocer que no lo uso, soy usuario de GNU/Linux desde hace muchisimos años y solo uso Windows por que por desgracia me obligan en el trabajo, así que todo el ejemplo que váis a ver a continuación está realizado en una distribución Ubuntu.

(más…)

 

No se si os sobrará el tiempo, a mi personalmente no, por este motivo he decidido compartir mis trucos, técnicas, consejos, como queráis llamarlo con todos vosotros, para hacer que el día nos cunda un poco mas, que a mi personalmente siempre me faltan algunas horas.

Hay días en los que estamos mas ociosos, cansados, desmotivados y por que no reconocerlo, nos gusta procastinar de vez en cuando. En esos momentos abrimos nuestro agregador de RSS o nuestras redes sociales y empezamos a buscar información, a veces leyendo por leer y desaprovechando totalmente el tiempo, con lo cual lo único que conseguimos es tener aún menos ganas de hacer lo que realmente deberíamos estar haciendo, sea lo que sea.

Para esos momentos os voy a hablar de una herramienta, Instapaper.

¿Que es Instapaper?

Instapaper es un sencillo servicio online totalmente gratuito que sirve para almacenar enlaces a páginas web que queremos leer en otro momento.

Cuando estamos buscando información o sencillamente encontramos algo pero no es el momento de leerlo recurrimos a acciones como guardarlo en favoritos, usar servicios como evernote e incluso apuntarlo en un post-it y para evitar todo eso es por lo que vamos a usar Instapaper.

El uso de instapaper es tan sencillo como pulsar un enlace, ese enlace que nos lo suministran en la misma web en forma de botón se agrega a favoritos, cuando queramos almacenar la dirección de la web que estamos visitando pulsamos sobre dicho enlace y ya está, así de sencillo, ya tenemos guardado el enlace para cuando queramos consultarlo.

Una vez almaceno tenemos la opción de leerlo (para eso está diseñado), almacenarlo y alguna cosa mas.

 

Integración con Twitter

¿Quien de los aquí presentes usuarios de Twitter no ha marcado como favorito nunca un Twit por que contiene un enlace que queremos leer en otro momento? Yo personalmente lo he hecho muchas veces hasta que encontré herramientas como Instapaper o ReadItLater.

Estas herramientas se integran perfectamente con la mayoría de aplicaciones móvil, no de solo de twitter, también otras como la applicación de IOS de reddit o muchas mas.

Y esto es lo mas sencillo, una vez tenemos un twit con enlace y no queremos leerlo en ese momento, bien por que no podamos, no queramos o la conexión no sea muy buena, pulsamos en “leer despues” y automáticamente se almacena en nuestra lista.

 

Integración con Kindle

Como ya he dicho existen mas servicios de este tipo, pero aquí viene el porque he decidido usar y hablar de Instapaper, por su integración con Kindle.

A parte de la opción que vemos en la pantalla principal de exportar a varios formatos, instapaper cuenta con la opción de enviarnos las webs en formato mobi a nuestro Kindle, simplemente tenemos que configurarlo tal y como nos explican en la web.

Podemos seleccionar que nos los envía una vez al día o cada dos días, y nos enviará un archivo con todos los artículos preparados para el Kindle, entre los cuales podremos saltar con las teclas de cursor.

Así que así de sencillo, yo por ejemplo, que cuento con Wifi en el trabajo, antes de irme a casa sincronizo el Kindle y así puedo leer todo lo que no he podido en el trabajo durante mi trayecto en el metro, aprovechando mas las horas de trabajo y siendo mas productivo.

Espero que os haya servido de ayuda, como podéis ver estas herramientas tan sencillas se pueden exprimir hasta límites insospechados, espero poder explicaros mas cosillas, que aún siendo tan sencillas pueden llegar a ser muy útiles.

jul
11

El pasado día 1 de Julio tuve el placer de estar en Castellón en  las Jornadas Desymfony y os voy  a contar un poco la impresión que me ha quedado.

Mis primeras jornadas

He de ser sincero y decir que #desynfony fueron las primeras jornadas, talleres, ponencias o como queráis llamarlo a las que he asistido, bueno una vez estuve en una conferencia de RMS pero no es lo mismo.

Al principio estaba un poco nervioso, solo conocía a una persona de todas las jornadas y encima los dos íbamos, a parte de a aprender,  a hacer algo de networking ya que estamos replanteándonos un cambio en nuestra trayectoria profesional.

Llegamos a Castellón el jueves por la tarde y aprovechamos para ir a tomarnos unas cañas por el pueblo, eso sí, sin pasarnos, que al día siguiente sería un gran día.

 

El primer día

Estaba un poco perdido, no sabía si me iba a enterar de que es lo que se hablaba allí y de si yo estaría a la altura. Portátil en mano, arranqué Ubuntu y abrí mi flamante Emacs, dispuesto a comenzar a tocar código.

Al principio intenté revisar el código a la vez que lo explicaban en las diferentes ponencias, pero al final me di cuenta de que no era capaz de estar a las dos cosas a la vez, cerré el portatil, me acomodé en la silla y a disfrutar de las ponencias. Fue lo mejor que pude hacer,  parando de vez en cuando para tomar algún que otro apunte, pero sobre todo prestando atención en intentando enfocar lo explicado con el proyecto que tengo entre manos.

Llegó la hora de la comida.

Nos metimos una paellita muy rica, y unas cervecitas. Conocí a unos chicos muy majos de Ofertix y comencé a obsesionarme un poco menos con las ponencias, comprendí que despues de casi 5 meses que llevo trasteando con Symfony2 hay pocas cosas que me den miedo.

Después de la comida todo fue coser y cantar, unas cuantas ponencias, muy interesantes y útiles todas y a cenar.

La cena fue para mi uno de los puntos mas interesantes del día, yo, no familiarizado con este tipo de eventos no me podía imaginar la cercanía con la que me llegaría a encontrar con los ponentes durante la cena, charlando distendidamente sobre todo tipo de temas, sobre todo técnicos, claro.

 

Segundo día.

Mucho mas relajado, aunque no habiendo dormido mucho, comenzamos con muchas ganas nuestro segundo día de ponencias. A cada cual mas interesante y esta vez no todas trataban directamente con Symfony2, algunas trataban de rendimiento o herramientas en concreto y otras sobre Symfony1.

De comer Fideuá (no se si se escribe así, no aparece en rojo en el corrector así que será así :) )

La tarde, he de reconocer se me hizo un poco mas pesada que la anterior, pero no por las ponencias, ni mucho menos, la verdad es que ya se empezaba a notar un poco el cansancio, y he de reconocer que al no conocer Symfony1 (he comenzado directamente en 2) quizás presté un poco menos de atención que en las anteriores.

Segundo día cenando y una maravilla, tuve la ocasión de aburrir a los ponentes que cenaron conmigo sobre temas como tests unitarios, funcionales, de integración e incluso con el interminable flame de Vim vs Emacs :) . Unas copas  y una de las mejores charlas que mantuve durante todo el fin de semana, muy motivadora.

 

Tercer día – Día de talleres

La verdad sea dicha estaba reventado :) menuda nochecita.

Este día pintaba mas relajado, por desgracia ya había menos gente que los días anteriores. Tuve el placer de realizar una Kata, lo cual me hacía muchísima ilusión y lo disfruté bastante y volver a recordar todas las grandes virtudes de GIT.

Después de los talleres comenzamos a charlar sobre la comunidad hispana de Symfony y sobre trabajo, lo cual me entusiasmo mucho y me motivó mas de lo que nada me había motivado antes (de ahí que haya comenzado este blog) y descubrí que fuera de las cárnicas hay incluso gente que es feliz programando (todo una utopía para mi que espero alcanzar algún día)

Después lo mas duro, volver a casa tras un fin de semana inmejorable.

 

Conclusión

Que voy a contaros que no sepáis los que estuvieseis allí, que fue de un nivel y una calidad increíble, tanto la organización como los ponentes. Que conocí a grandes profesionales y a grandes personas y que espero algún día poder trabajar con alguno de ellos.

No ganñe ningún iPad, ni camiseta, pero si es posible el año que viene estaré allí el primero.

 

Para acabar me gustaría agradecer a toda la organización lo que habéis montado, y pedir perdón por no nombraros uno a uno, he conocido a tanta gente que ocuparía un solo post agradeceroslo a todos.

Nos vemos en #desymfony.

 

He tenido que mover los datafiles de la base de datos del curro a otro disco duro por que los teníamos bastante petado.

Para renombrar o mover un datafile de un tablespace debemos seguir los siguientes pasos.

Primero ponemos el tablespace en modo solo lectura para asegurarnos de que no hay ninguna transacción en curso.

ALTER TABLESPACE <nombre del tablespace> READ ONLY;

Una vez lo tenemos en solo lectura (podemos comprarlo intentando realizar algún cambio en los datos) lo ponemos en modo offline.

ALTER TABLESPACE <nombre del tablespace> OFFLINE;

En este punto accedemos al equipo y movemos o renombramos los datafiles como deseemos.

Y ahora asignamos el nuevo datafile al tablespace

ALTER TABLESPACE <nombre del tablespace> rename datafile ‘<ruta antigua>’ TO <nueva ruta>’;

Una vez hecho esto volvemos a dejar el tablespace como estaba.

ALTER TABLESPACE <nombre del tablespace> ONLINE;

ALTER TABLESPACE <nombre del tablespace> READ WRITE;

Enlaces relacionados:

http://www.adp-gmbh.ch/ora/admin/move_datafiles.html

http://www.programacion.com/articulo/estructuras_de_oracle_89/3

jul
06

SQL-Loader es una herramienta pensada para cargas en bases de datos Oracle, sobre todo para grandes cargas, como es mi caso donde la mayoría de las tablas superan los diez millones de registros.

Esta es la forma de trabajar para cargarlas en la base de datos, para obtener los archivos he usado la herramienta Toad que lo hace a través de interfaz gráfica, no he indagado sobre como hacerlo a través de la herramienta por línea de comandos.

Existen dos formas de realizar la carga en la base de datos a través de SQL-Loader, el directo y el convencional.

Convencional.

Debido a que las tablas que voy a cargar están particionadas he tenido que optar por esta opción, la cual es mas lenta, pero que le vamos a hacer.

Por el método convencional se usan sentencias insert en la base de datos. Para optimizar la carga antes de realizar la carga he desactivado todas las constraints de las tablas que quiero cargar.

sqlldr usuario/password@BBDD control=.archivo.ctl errors=10000000 bindsize=512000 rows=10000 log=.logarchivo.log bad=.badarchivo.bad

Parámetros

Control: Archivo ctl que queremos cargar, este archivo lleva la descripción de la tabla y los datos. Lo he creado automáticamente con Toad.

Errors: Es el número de errores al que queremos que se detenga la ejecución. Una vez SQL-Loader ha detectado este número de errores detiene la carga. En mi caso he puesto un número que supera la cantidad de registros a insertar ya que quiero que me inserte todos los que sea capaz, independientemente de la cantidad de errores que surjan en la carga.

Bindsize: Es el tamaño del array que le vamos a pasar a la base de datos, mientras mas alto sea este número menos llamadas vamos a hacer a la base de datos y mayor será el rendimiento.

Rows: Número de registros que debe insertar para realizar el commit en la base de datos.

Log: Archivo de log que queremos que se genere.

Bad: Archivo donde se guardan los registros que no se han podido insertar.

Directo


Podríamos decir que lo almacena directamente en la base de datos sin pasar por el motor de SQL ni el buffer lo que hace que los tiempos de carga disminuyan considerablemente.

Como ya he dicho no he podido usar este método en los casos en los que he trabajado, pero para realizarlo debemos usar el parametro “direct” en la carga de esta forma: direct=true

Enlaces relacionados:

http://www.dba-oracle.com/t_optimize_sql_loader_sqlldr_performance.htm

http://www.cs.umbc.edu/portal/help/oracle8/server.815/a67792/ch06.htm

http://www.cs.umbc.edu/portal/help/oracle8/server.815/a67792/ch08.htm#1027

jul
06
Posted by Moises Gallego at 3:00 pm

Lo primero es presentarme.

Me llamo Moisés Gallego y soy programador.

Hasta aquí quien soy, ahora el por qué del blog.

Últimamente he comenzado a adentrarme en el mundo del desarrollo web y metodologías Agiles (provengo de aplicaciones de escritorio) y  practicamente no hay un día en el que no dedique mi escaso tiempo a trastear con código y aplicaciones relacionadas con el desarrollo y de ahí la idea de comenzar este blog.

La única intención de este blog es servir de ayuda a otras personas, que como yo, están comenzando a introducirse en el mundo del desarrollo web o de las metodologías Agiles.

Como véis, este va a ser un blog personal, en el que prime mi visión sobre los temas tratados, espero que me lo perdonéis, aún así todo el mundo está invitado a debatir a través de los comentarios cualquier tema que se os ocurra.

Sin mas, espero no aburrirles mucho y que el contenido del blog les parezca interesante y les sirva de ayuda.

Moisés Gallego.