Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Un CIO Emprendedor

Agosto 30th, 2011 - [Enlace local]

Vía HP se habla del CIO Emprendedor, un buen artículo que habla de temas que hemos comentado, es importante que los CIO sean mas proactivos y no reactivos, innovadores y no pasivos con una excelente visión de negocio.

» Leer más, comentarios, etc...

Viricmind Labs

Iconos de Aplicaciones Wine en Unity

Agosto 28th, 2011 - [Enlace local]

Escritorio Unity ejecutando Spotify bajo WineTiempo atrás había un detalle que no soportaba de Wine, que los iconos de las aplicaciones para Windows que se ejecutaban con Wine no aparecieran en la barra de tareas cuando éstas eran lanzadas.

Parece que con Unity y las nuevas versiones de Wine (estoy usando la rama 1.3, que actualmente está en fase Beta) la cosa ha mejorado un poco y con un poco de maña podremos eludir el problema que acabo de mencionar :) .

Por ahora, cuando ejecutamos directamente las aplicaciones de Windows bajo Wine sigue apareciendo el ya conocido icono del emulador, una copa de vino rosado. No digo que sea feo, pero si de verdad queremos saber qué se está ejecutando puede llegar a ser molesto que solo podamos ver esa imagen genérica. Ahora bien, como dije, hay un rodeo! :D

Empecemos, supongamos que estamos instalando el programa windowsero del que queremos conservar su icono. Lo primero que debemos hacer es, cuando el instalador nos pregunte sobre ello, indicarle que sí queremos accesos directos en el escritorio. Una vez acabada la instalación podremos ver que en el directorio de nuestro escritorio han aparecido 2 nuevos archivos, uno con extensión .lnk y otro con extensión .desktop.

El archivo con extensión .desktop probablemente se verá en el escritorio o en nuestro gestor de ficheros con el icono del programa que hemos instalado. Podemos vernos tentados a arrastrarlo hacia la barra de Unity, y funcionará, queda bien fijado. De hecho, es incluso mejor, si hacemos click sobre él una vez está en la barra de Unity veremos como se ejecuta el programa recién instalado.

Ahora bien, hay un pequeño problema. Si eliminamos los ficheros del escritorio porque molestan (en particular el que tiene extensión .desktop, el de la extensión .lnk no importa) automáticamente desaparecerá también el lanzador de la barra de Unity :( . La solución es sencilla, copiamos el fichero .desktop en el directorio donde fue instalado el programa para Windows (/home/usuario/.wine/drive_c/Archivos de Programa/NombrePrograma/), y una vez hecho esto, arrastramos el fichero a la barra de Unity como se hizo en el caso anterior.

Es importante que cuando arrastramos el lanzador a la susodicha barra lateral lo hagamos ya desde el directorio donde lo dejaremos, si lo hacemos desde el escritorio y luego movemos el archivo... el lanzador desaparecerá otra vez.

Para casos complicados: Cuando no tengamos a mano ningún fichero con extensión .desktop podemos recurrir a procedimientos algo más sofisticados, os dejo un enlace por si os hiciera falta:

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

Lazarus

Agosto 28th, 2011 - [Enlace local]

En pocas palabras, podríamos decir que Lazarus es un clon opensource de Delphi, pero usando la infraestructura también de código abierto de Freepascal. En su última versión estable 0.9.30, Lazarus está disponible para diferentes plataformas: Windows x86, Windows x64, Linux x86, Linux x64, Mac OS Intel, Mac OS PowerPC, y UNIX en general. Lo mejor [...]

» Leer más, comentarios, etc...

MadeInFlex

El futuro de Flex framework

Agosto 26th, 2011 - [Enlace local]

Andrew Shorten, product manager de las herramientas de desarrollo de Adobe), ha posteado un artículo en el que expone por donde está enfocado el futuro de Flex.

Es una lectura interesante. Aquí os dejo el enlace.

» Leer más, comentarios, etc...

Cuaderno de software

Agile 101: breve reflexión visual

Agosto 26th, 2011 - [Enlace local]

Me gusta mucho este gráfico de Agile 101. Parece un gráfico muy simple pero cada vez que lo miro, cada x meses, me sobreviene alguna pequeña reflexión sobre el . Y ésta vez la quería publicar :-P

  1. ¿Hacemos SCRUM o Iterative Waterfall? Ambas son iterativas. Pero sólo en SCRUM cada Historia de usuario se lleva hasta staging individualmente. Aunque luego al final de una iteración se haga una nueva review + deploy. Si ves lo que vas a programar en una iteración como un todo, y no puedes trocearlo en “cosas” (historias de usuario) que puedas llevar individualmente a demo porque individualmente añaden valor, estás haciendo Iterative Waterfall.
  2. ¿Cuál es la principal diferencia entre SCRUM y Lean?
    1. el número de deploys: con scrum se hace uno por iteración. Con Lean, uno por User Story. Para poder hacer todos esos deploys con Lean, el deployment debe estar completamente automatizado. Sino, simplemente, no podrás.
    2. las fases de review: con scrum tenemos una review en dos fases. Una primera más “desde el punto de vista de los programadores” de cada user story, y la segunda más con todos los implicados (cliente incluido, por supuesto). En Lean, tras una review la historia de usuario se pone en producción y punto.  Puede parecer que Lean es más Agile que Scrum, pero una sola fase de review es algo que muchas veces puedes no querer hacer, simplemente, porque puede desincronizar la visión compartida que tenga el equipo con el resto de implicados (sobre todo con el cliente).
Evidentemente, tanto de la gráfica como de lo que he escrito se pueden matizar muchas cosas. Pero me gusta sobre todo porque sitúa el debate en “cómo desplegar: ¿por user story o por iteración?”, “cómo hacer las reviews y capturar feedback, ¿en una o dos fases?” “¿Tenemos historias de usuario, y por lo tanto un backlog o sólo casos de uso clásicos?”, “¿Nuestro deployment es tan automatizado que podríamos ejecutarlo cada cuarto de hora porque es sólo escribir un comando?”
En definitiva, un gráfico que parece simple… pero no lo es. :-)


» Leer más, comentarios, etc...

Najaraba.com: Software libre, metodologías ágiles y más.

Libros en castello (original) sobre agilismo

Agosto 24th, 2011 - [Enlace local]

El otro día preguntaba por Twitter sobre libros, originalmente escritos en castellano, en el tema de desarrollo de software ágil. No iba la pregunta por buscar material en castellano, si no por ver la fuerza que tenemos los hispano hablantes de generación de contenido en este mundillo. De momento tengo estas referencias: Navegapolis: Juan Palacio tiene el primer libro que yo me compré sobre este

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Managing SAP Projects 2011

Agosto 23rd, 2011 - [Enlace local]

Un evento que se ve muy interesante, tomar en cuenta que la administración de proyectos de aplicaciones empresariales tiene su peculiaridad y si le añadimos Aplicaciones SAP mas aún. Al ya haber pasado por Gestionar proyectos de varias plataformas, fungir como Program Manager, haber formado una Oficina de Proyectos y ahora como Director de Área puedo comentar sin lugar a dudas que los proyectos de SAP son los mas complejos, por eso el acudir a este tipo de eventos es muy importante para encontrar elementos que nos permitan mejorar nuestro proceso de entrega de proyectos.

» Leer más, comentarios, etc...

Najaraba.com: Software libre, metodologías ágiles y más.

Llega la Conferencia Agile-Spain 2011

Agosto 23rd, 2011 - [Enlace local]

Ya está muy avanzada la organización de la CAS2011, y desde aquí quiero avisar, difundir y apoyar este seguro magnífico evento que tendremos en Octubre. Cuando lancé la organización de los dos eventos de Agile-Spain este año, pensaba dedicarme a la organización de la CAS fundamentalmente, sin embargo, las circunstancias han hecho que este año vaya a ver esta conferencia desde la barrera. Eso sí,

» Leer más, comentarios, etc...

Buayacorp

Usando Javascript en Drupal 7, algunos cambios

Agosto 22nd, 2011 - [Enlace local]

Haciendo algunos cambios en un theme de Drupal 6 a Drupal 7, he notado que los scripts antiguos no funcionan.

Buscando mucho, he encontrado que ahora es jQuery está "namespaced", por lo tanto si tenías un código parecido a este:

JAVASCRIPT:
 
$(document).ready(function() { 
	// Código
});
 

Ahora tiene que ser:

JAVASCRIPT:
 
(function($) {
    $(document).ready(function() { 
        // Código
    });
})(jQuery); 
 

Funciona y parece ser la solución final, sin embargo no se si hay otro tipo de solución. Si es asi, házmelo saber.

Enlace: Managing Javascript in Drupal 7

» Leer más, comentarios, etc...

Viricmind Labs

Crisis y nueva oportunidades del software libre

Agosto 18th, 2011 - [Enlace local]

Hoy en día el software libre se haya en un momento crucial, se están realizando grandes jugadas estratégicas por parte de algunos de los grandes actores del mundo tecnológico (Microsoft, Apple, Google, Oracle...), son tiempos complicados.

Desde Microsoft se dice que ya no consideran a Linux una amenaza, MS IE9 ha roto con años de mediocridad (aunque sigue estando por detrás de los demás navegadores) e IE10 "promete" ser un buen navegador, Windows 7 ha roto la maldición de Windows Vista (lo que supuso una ventana de oportunidad desaprovechada por el software libre), Apple domina (a nivel económico) los mercados de smartphones y tablets...

Como los problemas más o menos los conocemos todos (resumiré: los fabricantes de hardware no liberan sus drivers y en ocasiones ni tan siquiera desarrollan drivers compatibles con software libre, campañas de desprestigio, se tiene poco en cuenta a los usuarios inexpertos, falta de juegos, falta de alternativas para sofware privativo especializado [como software de diseño, de edición de vídeo o de sonido, software ingenieril...], ...), comentaré algunos puntos que a mi parecer pueden dar un vuelco a la situación y mejorar la posición del software libre en el panorama global.

A mi entender, programas como Gimp son piezas clave, como ya comenté en un artículo anterior, pero hay algunos otros que merecen especial mención. He aquí una pequeña lista de joyas (o no tan joyas, desgraciadamente) que deberían mimarse (más de lo que se hace hoy en día) para reflotar el ecosistema del software libre:

Evidentemente hay muchas más cosas a mejorar, pero en parte por experiencia y en parte porque simplemente lo creo así, tengo la sensación de que mejorando sólo esos 5 puntos ya se tendría muchísimo ganado, se conseguiría ampliar la base de usuarios de forma sustancial.

En todo caso no era mi intención centrarme en piezas concretas de software existente, sino más bien en dos partes esenciales de la cadena: la producción y la distribución de software. Linux es un ambiente relativamente duro para quienes quieren distribuir su software ya que tienen que tener en cuenta multitud de plataformas (por tipo de procesador, por tipo de paquete [deb o rpm], por versión del sistema operativo...). ¿No sería ideal que existiera un IDE que simplificara (hasta la trivialidad) las tareas de compilación cruzada y de empaquetamiento? Eso sí que sería una jugada maestra, y más aún si se prescindiera de los lentos IDEs libres existentes hoy en día, léase Netbeans, Eclipse, Monodevelop o los engendros de Anjuta y KDevelop. Entiendo que no es nada fácil hacer algo así, pero la idea no deja de atraerme aun con ese pequeño obstáculo.

Respecto a la distribución de software quería comentar un detalle que siempre me ha llamado la atención de los sistemas de repositorios. Todos los repositorios son abiertos, parece que no se contemple la necesidad de usar usuarios y claves... esto tiene su sentido si se piensa que todo el software va a ser libre... pero no si se contempla la realidad al completo. Imaginemos que una empresa desarrolla un programa X privativo (y de pago), y al que le da soporte con actualizaciones para mejorar su estabilidad y seguridad. Este modelo es típico en el ecosistema de MS Windows, pero en Linux se hace complicado: las actualizaciones se tienen que hacer desde la propia aplicación (o peor, a mano), lo que supone tener que desarrollar un sistema de actualizaciones propio, así como tener avisar eventualmente al usuario (al margen de las actualizaciones generales del sistema) o esperar que este se acuerde si prefiere no ser avisado... es fácil ver que añadir la opción de repositorios con acceso restringido puede ser una sencilla medida que permita minimizar costos y simplificar la gestión de las actualizaciones de software privativo. ¿Por qué no se ha hecho todavía?

Sea como sea no todo es malo últimamente :) , parece que por fin ha calado lo de "release early, release often", se han empezado a lanzar versiones de forma mucho más regular (por ejemplo Chromium, LibreOffice, Firefox, Thunderbird...), se están aprovechando a la perfección las herramientas de gestión de versiones para mantener ramas estables a la vez que ramas con funcionalidades punteras (LibreOffice), la simplificación se ha transformado en un acicate para mejorar (Chromium, Firefox, Unity, Gnome Shell), y sobre el rendimiento... bueno xD, eso parece que siempre fluctúa, va a modas.

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Cambios en el examen de certificación PMP

Agosto 17th, 2011 - [Enlace local]

Gracias a Líder de Proyecto por este video con información importante sobre el examen de certificación PMP, creo que varias dudas se aclaran

http://www.liderdeproyecto.com/videoboletin/video059-cambios-examen-certificacion-pmp.html

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Modelos y Mejores prácticas en TIC

Agosto 17th, 2011 - [Enlace local]

Ya hemos comentado sobre lo importante que es que la Gerencia de TIC, lo importante que es que sean Proactivas y no Reactivas, casualmente en breve se dará un evento gratuito sobre este tema

http://ergosum.activehosted.com/index.php?action=message&l=1&c=384&m=126&s=b3c4c2e0e769f10ed55776ab02cd44ee

» Leer más, comentarios, etc...

Fetishcode

setPropertyListener o como asignar valores en las diferentes Maps.

Agosto 17th, 2011 - [Enlace local]

A

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Requirements Maturity Checkup

Agosto 16th, 2011 - [Enlace local]

Que tan maduros estamos en el tema de requerimientos, creo que es una pregunta interesante y sin duda alguna la mayoría no tendrá la respuesta, IAG proporciona Requirements Maturity Checkup el cual a través de una serie de preguntas diagnóstica cuales son nuestras áreas de oportunidad en el tema de Requerimientos y en que nivel estamos de madurez en base a RMM (Requirements Maturity Model)

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Developers, Architects and Project Managers

Agosto 15th, 2011 - [Enlace local]

Un poco de humor!!!

DEvelopers

» Leer más, comentarios, etc...

Viricmind Labs

Gimp 2.8 a la vista, algunas reflexiones

Agosto 15th, 2011 - [Enlace local]

Splashscreen de Gimp 2.8Leo hoy a través de [1] que alrededor de finales de este año o principios del siguiente se liberará por fin la versión estable de Gimp 2.8, después 3 años de lento desarrollo. Y no solo eso, parece que ya hay un roadmap establecido para Gimp hasta la versión 3.8 [2]. Según GimpUsers [2] , el tiempo entre lanzamientos se reducirá a partir de la versión 2.10, algo que será de agradecer :) .

¿Qué novedades nos esperan? De la versión 2.8 no se puede decir mucho ya, no hay sorpresas, tendremos el modo de ventana unificada (lo que supondrá más comodidad para muchos, me incluyo) y agrupación de capas (algo realmente útil, palabra de honor).

La versión 2.10 será algo más interesante, aunque a priori pueda no parecerlo si sólo se mira el roadmap. En primer lugar, se realizará una limpieza de código, incluyendo cambios en la API de registro de plugins. Aunque esto no suponga una mejora inmediata para el usuario puede redundar en una aceleración posterior del desarrollo, ejecutables más pequeños y menor consumo de memoria. Además de la limpieza de código se incluirán todos los proyectos del GSoC sobre Gimp realizados hasta la fecha, que son los siguientes:

En la versión 3.0 se dará el salto a las bibliotecas GTK3, de forma que en entornos de escritorio dominados por aplicaciones del proyecto Gnome se podrá reducir el consumo de memoria (al tener que mantener un conjunto menor de bibliotecas en memoria, hoy en día coexisten GTK2 y GTK3). Otra mejora no menos importante será la posibilidad de tratar con imágenes con más profundidad de color (hoy en día solo trabaja con 32 bits de profundidad, 8 para canal, rojo, verde, azul y transparencia). Este lanzamiento será el que permita el salto definitivo a GEGL.

La versión 3.2 nos traerá detección automática de los límites de capa (con el consecuente ahorro de memoria gracias a la posibilidad de ajustar el tamaño de los mapas de bits), efectos de capa (bordes, relieve y muchos otros), y filtros de capa (poder usar ciertas capas a modo de filtro sobre otras capas). A mi entender esta versión será una de las más importantes, porque si Photoshop no mejora mucho en lo que sigue, Gimp habrá llegado por fín a su nivel.

Ya no describo las siguientes versiones porque puede que cambien objetivos, y sobretodo porque con lo poco que sé, soy incapaz de valorar qué nos aportarán estas.

Ahora me permitiré opinar un poco sobre todo esto. Es de suponer que, después de 3 años de desarrollo, la gente se tome a cachondeo el plan establecido por el equipo de Gimp... yo esta vez confío en ellos. ¿Por qué? Pues porque han aprendido de sus errores, y tuvieron muchos.

Hay varias razones por las que Gimp se ralentizó tanto. Una de ellas, la principal, es que el equipo de desarrollo es verdaderamente pequeño. Ahora cabe analizar el por qué es pequeño, un motivo esencial es la falta de financiación, la gente hace pocas donaciones a ese proyecto (y es entendible), otro está relacionado con la dificultad de desarrollar ese tipo de software. Los programas de tratamiento de imagen son difíciles de desarrollar y no todo el mundo tiene la habilidad suficiente como para aportar su granito de arena.

Ahora bien, hay otra razón esencial que explica esa lentitud que ha desesperado a tantos, se trata de un error que ha costado el desencanto de mucha gente: El equipo de Gimp empezó a desarrollar nuevas características a porrillo, todas en la misma rama, pero pocas de ellas se terminaban. En parte es normal, los programadores prefieren desarrollar su código a tocar el de otros. El caso es que esos desarrollos a medias sirvieron para bloquear otros, y finalmente para retrasar el lanzamiento de Gimp 2.8.

Por suerte ellos mismos se dieron cuenta y no creo que vuelvan a trabajar de la misma manera nunca más, se han empezado a organizar para trabajar en ramas diferentes y no bloquearse mútuamente. Eso permitirá una aceleración del desarrollo, y eso a su vez atraerá más donaciones y desarrolladores.

Para acabar trataré otro asunto relacionado. Sinceramente, creo que ciertas distribuciones (y en especial Ubuntu) deberían haberse implicado más en el desarrollo de Gimp, porque se trata de una de esas piezas clave que pueden suponer que la gente se acerque o salga huyendo de un sistema Linux. Aunque Gimp no reporte beneficios directos a empresas como Canonical o Redhat, sí que podría permitir un crecimiento sustancial de la base de usuarios de Linux, a la vez que un aumento potencial de ganancias para esas empresas. ¿Se darán cuenta? Esperemos.

  1. http://www.muylinux.com/2011/08/14/fugaz-repaso-a-los-planes-de-gimp-2-8-2-10-y-3-0/
  2. http://wiki.gimp.org/index.php/Roadmap
  3. http://www.gimpusers.com/news/00373-hw-accel-future-plans-aug-2011
  4. http://www.google-melange.com/gsoc/project/google/gsoc2011/lightningismyname/6001
  5. http://www.google-melange.com/gsoc/project/google/gsoc2011/enrico_schroeder/12001
  6. http://www.google-melange.com/gsoc/project/google/gsoc2011/michael_mure/5001
  7. http://www.google-melange.com/gsoc/project/google/gsoc2011/robert_sasu/17001
  8. http://www.google-melange.com/gsoc/project/google/gsoc2011/victor_matheus/8001

» Leer más, comentarios, etc...

Fetishcode

Caracteristicas de Forms que encontraras en ADF

Agosto 15th, 2011 - [Enlace local]

A

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Gerentes de TI

Agosto 14th, 2011 - [Enlace local]

Interesante artículo de InformationWeek, aunque hay mas por añadir, hoy por hoy no basta con que los Gerentes de TI sepan manejar a todo un equipo de trabajo y sean buenos administradores, en tiempo actuales deben se proactivos y no reactivos, ser realmente impulsores de un cambio al interior de sus organizaciones, tener una visión futurista a 5 o 10 años que permita la permanencia de sus empresas.

» Leer más, comentarios, etc...

Fetishcode

TreeTable con multiples columnas y una unica desplegable

Agosto 10th, 2011 - [Enlace local]

A

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Una PMO exitosa

Agosto 7th, 2011 - [Enlace local]

Cuantas veces se cuestiona la creación de un órgano como la oficina de proyectos donde el valor nos es tan plástico como las ventas o como la operación, sin embargo al experimentar la creación y la operación de una PMO verán como su valor es muy grande, no obstante el convencer a Directivos de lo anterior no es tarea fácil y esto se debe en mayor grado a no saber vender el proyecto y para esto es importante saber cuales son los principales pilares de una oficina de proyectos los cuales menciono a continuación:

1) Procesos, toda oficina de proyectos deberá tener procesos a seguir desde la planeación de un proyecto hasta la reutilización de todos los artefactos que utiliza un área de proyectos, no olvidar que los procesos deben evolucionar por lo que fijar una periodicidad de revisión es muy importante

2) Herramientas, soportar a través de herramientas toda la operación del área de proyectos por ejemplo en nuestro caso, Project Server, Sharepoint y Project Professional son los principales

3) Learning, una oficina de proyectos deberá siempre actuar de manera proactiva ante las necesidades de todo el equipo de proyectos, capacitación constante tanto a Líderes como a Consultores en todos los ámbitos que permita hacer un Delivery exitoso

4) Métricas, toda área debe funcionar por métricas esto es lo que permite dar seguimiento al área y al impacto que ha tenido el generar una PMO, en nuestro caso por ejemplo porcentaje de desviación y rentabilidad son de los principales

» Leer más, comentarios, etc...

Ingenieria de Software / Software Engineering / Project Management / Business Process Management

Por el mundo de la Consultoría

Agosto 7th, 2011 - [Enlace local]

Ya con algunos años en esto de la Consultoría me doy cuenta de lo diferente que son las marcas, lo diferente que es la forma de vender y lo diferente que es implementarla, pero sin duda alguna uno de los retos importantes como Director de Proyectos es mantener una relación ganar ganar con el equipo de Consultoría, fomentar la lealtad, mantener la motivación y generar una relación a largo plazo que permita que el conocimiento se permee a todo el equipo y permanezca el activo del conocimiento en la empresa.

Algunos consejos para llevar a cabo esto son los siguientes:

1) Estrecha relación con todos los niveles, esto permitirá un alto nivel de confianza

2) Comunicar, relacionado con el primero pero tocando varios aspectos de la empresa (admvo, estratégico etc)

3) Fomentar el conocimiento, a través de capacitación, certificación y colaboración entre todo el equipo de trabajo

» Leer más, comentarios, etc...

Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación

Las aventuras de Turbo Man

Agosto 3rd, 2011 - [Enlace local]

Las aventuras de Turbo Man en el museo de Borland/Inprise/CodeGear/Embarcadero. A principios y mediados de los años 80, Borland empezaba a hacerse un hueco en el mercado de las herramientas de desarrollo, con su linea de productos Turbo. Los Turbo, eran conocidos por su alta velocidad de compilación, la velocidad de ejecución del código generado, [...]

Artículos relacionados:
Vuelven los Turbo de Borland
Turbo C 1.0 el comienzo
Turbo C++ 3 con 128 Kb de memoria

» Leer más, comentarios, etc...

Viricmind Labs

Como evitar perder visitas en un traslado de blog

Agosto 2nd, 2011 - [Enlace local]

Nota: Este artículo está dedicado a blogs basados en WordPress, no servirá de mucho leerlo si se buscan soluciones para otros CMS.

Para los que leéis lo que escribo de forma frecuente ya sabréis que recientemente realicé un traslado de la "parte técnica" de mi antiguo blog a este nuevo blog. El proceso de traslado ha sido (y está siendo) laborioso. He tenido que exportar/importar artículos , además de tener que reclasificarlos (porque no lo había hecho demasiado bien anteriormente).

El caso es que además, también he tenido que borrar los artículos que copiaba a este nuevo blog del anterior para evitar penalizaciones en los buscadores por tener contenido duplicado. Y aquí aparece el problema: el blog antiguo evidentemente pierde visitas porque hay contenido que desaparece, pero la situación es algo peor, ya que el nuevo tampoco las gana por no estar todavía lo suficientemente enlazado desde otros sitios web.

¿Como solucionamos este problema? Parece que en el ecosistema de WordPress hay plugins para todo, y este caso no es la excepción. Con el plugin "Redirection" podemos crear redirecciones desde las urls de los artículos antiguos a sus nuevas urls en nuestro nuevo blog. Esta joya crea una redirección 301, es decir, le indica a los buscadores que esa redirección es permanente, con lo que podremos evitar perder muchas visitas (es probable que siempre se pierda algo en estos traslados).

» Leer más, comentarios, etc...

Viricmind Labs

Validación de usuarios vía email con CakePHP

Agosto 2nd, 2011 - [Enlace local]

Hoy vamos a ver como desarrollar de forma sencilla un sistema que nos permita validar de forma segura que un usuario de nuestra aplicación web efectivamente tiene el email que ha indicado en el formulario de registro. El mismo sistema podría servir también para evitar cambios fraudulentos en los perfiles de usuario, para recuperar cuentas cuando se olvidan claves o para solicitar la eliminación de la cuenta de usuario sin temor a gamberradas ;) .

La idea básica consiste en generar una clave aleatoria durante el proceso de registro, guardarla en la tabla de usuarios (para ello usaremos un campo específico), enviar un email al usuario con un enlace a un método de validación del controlador de usuarios (pasando como parámetros algún identificador del usuario más la clave generada anteriormente), y finalmente, comparar en el mencionado método de validación si la clave pasada a través del enlace corresponde con la clave almacenada en la base de datos. Si dichas claves son iguales entonces se cambia el estado del usuario a "activado" modificando algún campo específico de la tabla de usuarios.

Ahora, antes de pasar a la acción todavía, pensemos en como refinar ligeramente el método para que sea más útil. Si nos fijamos en el último paso, puede parecer que hace falta una columna específica que indique si el usuario ha sido validado o no, pero podremos ahorrárnoslo, y ganar mucho por el camino. Mi idea (y seguro que al de muchos otros) es usar el propio campo dedicado al código de validación. Hay varias formas de hacerlo, pero usaré como ejemplo mi propio procedimiento. Veamos el código y luego analizaremos el proceso más detenidamente.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
// app_controller.php ( AppController )
	// Generador de claves que usaremos para nuestro sistema de seguridad
	protected function genPass ($len, $uppercase = true, $lowercase = true, $numbers = true, $sym1 = true) {
		$up_dict = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
		$lo_dict = 'abcdefghijklmnopqrstuvwxyz';
		$nu_dict = '0123456789';
		$s1_dict = '.-';
 
		$pass_dict = (($uppercase) ? $up_dict : '') .
			(($lowercase) ? $lo_dict : '') .
			(($numbers) ? $nu_dict : '') .
			(($sym1) ? $s1_dict : '');
 
		$dict_size = strlen ($pass_dict);
 
		$pass = '';
		for ($i=0; $i<$len; $i++) {
			$pass .= $pass_dict[rand (0, $dict_size-1)];
		}
 
		return $pass;
	}

Nota al canto: he hecho que el generador de claves trabaje solo con un conjunto de 64 tipos de caracteres, esta restricción no tiene mucho sentido, pero me parece un número bonito y lo suficientemente grande. Ahora bien, hay que destacar que ciertos caracteres pueden conllevar problemas, como por ejemplo "+", o ":".

1
2
3
4
5
6
7
8
9
// Users controller -> Register method (before calling the save method of the User model)
 
$vcode = $this->genPass (62);
$this->data['User']['validate'] = 'v:' . $vcode;
 
// Here you should put the code to save the data into the database
// and to send an email to the user, with a link like:
// http://www.yourapp.com/users/validate_email/username/validatecode
// (It's preferible that the user don't know it's user internal id)

La única modificación sustancial que deberéis hacer en vuestro método de registro es crear la clave antes de guardar los datos de usuario en la base de datos (evidentemente la tabla de usuarios deberá tener un campo "validate"), y evidentemente, no olvidar enviar un email al usuario con el enlace de validación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
// Users Controller
	public function validate_email () {
		if (count ($this->params) < 2) {
			$this->redirect ('/users/dashboard'); // Or wherever you want
		}
 
		$username = Sanitize::paranoid (
			$this->params['pass'][0],
			array ('_')
		);
		$code = Sanitize::paranoid (
			$this->params['pass'][1],
			array ('-', '.')
		);
 
		$db_code = $this->User->field (
			'validate',
			array (
			    'username' => $username,
			)
		);
 
		if ($db_code == 'v:'.$code) {		
			$this->User->updateAll (
				array (
				    'validate' => '\'' . $this->genPass (64) . '\''
				),
				array (
				    'username' => $username
				)
			);
 
			$this->set ('validated', true);
		} else {
			$this->set ('validated', false);
		}
	}

Supongamos que tenemos una clave de validación de 64 caracteres, difícilmente podríamos romperla, y aunque nos quedáramos solo con 62 caracteres, seguiríamos con un nivel de seguridad parecido. Aprovechando este detalle, en vez de generar claves de 64 caracteres, las construiremos solo con 62, y añadiremos al principio de estas la cadena "v:" (2 sin contar las comillas). Cuando nuestra aplicación detecte que los primeros dos caracteres de la clave de validación almacenada en la base de datos sean "v:" entonces considerará que el usuario aun no ha sido validado. Una consecuencia de ello es que durante el proceso de validación, una buena forma de dar por validado al usuario sería generar una nueva clave (esta vez de 64 caracteres, y sin el caracter ":").

La nueva clave generada para dar por validado al usuario puede usarse, a su vez, cuando el usuario olvide su clave y la aplicación tenga que enviarle un email, para poder verificar que el método de cambio de clave es llamado desde el email del usuario afectado, y no por una persona ajena a su cuenta (De igual forma, se podría usar para verificar eliminación de cuentas, etc.). Eso sí, nunca debe olvidarse crear una nueva clave cada vez que el sistema de verificación es usado para evitar que la seguridad decaiga.

Espero que os haya resultado útil :) , saludos.

» Leer más, comentarios, etc...

Picando Código

Llamado a ponencias en RubyConf Uruguay 2011

Agosto 2nd, 2011 - [Enlace local]

Gente, se está organizando la edición 2011 de RubyConf Uruguay, de los mejores eventos técnicos que tenemos en la región. ¡A ver si nos animamos a presentar algo!

RubyConf Uruguay 2011

RubyConf Uruguay 2011

Tenemos el gusto de invitarlos a presentar propuestas de charlas para RubyConf Uruguay 2011.

Este es el segundo año consecutivo de la principal conferencia de Ruby y tecnologías ágiles del Uruguay, enmarcada en la Gira RubySur, el ciclo de conferencias más destacado de América Latina.

Este año nos estamos enfocando en presentaciones orientadas a principiantes en Ruby y tecnologías afines como ser: JRuby, Ruby on Rails, Git, testing automatizado, metodologías ágiles (SCRUM)JavaScript, NoSQL, entre otras. También tendremos espacio para presentar charlas de tópicos avanzados e intermedios.

Por último, estamos muy interesados en charlas inspiradoras que demuestren por qué Ruby y el ecosistema circundante son una mejor alternativa que otras tecnologías.

Recepción de las propuestas

Para proponer una charla deberán completar el siguiente formulario: http://bit.ly/rubyconfuruguay-cfp

La recepción de las propuestas se realizará hasta el jueves 1 de setiembre. Luego, el 7 de setiembre se notificará qué charlas elegimos para participar de la conferencia.

Formato de la charla

Todas las charlas deberán tener una duración de aproximadamente 20 minutos con un espacio posterior de 5 minutos para preguntas. Se requerirá que los oradores dejen el material a disposición de los asistentes a la conferencia.
¡Muchas gracias y esperamos sus propuestas para esta RubyConf!

Comparte: Twitter Identi.ca del.icio.us Google Bookmarks BarraPunto Bitacoras.com Tumblr Print Facebook

» Leer más, comentarios, etc...

Información legal y técnica