programania
Buscando experiencias con facturación electrónica
Agosto 31st, 2009 - [Enlace local]
Éste es un post algo inusual en programania, porque normalmente sólo suelo escribir artículos. Pero el caso lo que quiero es pedir ayuda. Porque vamos a implantar la facturación electrónica en la empresa donde trabajo y le veo varias pegas:
- El formato: creo que XML es lo mejor. Me parece la mejor manera de intercambiar y leer/escribir datos. El caso es que tampoco veo que haya por ahí muchos lectores (a poder ser multiplataforma y software libre) de facturas electrónicas en XML.
- El algoritmo de firma: por lo que he visto en Facturae hay algún generador en Java, etc… pero la verdad es que lo que me gustaría es escribir a mí el algoritmo en PHP o en el lenguaje que yo quiera (o sé si estoy diciendo una burrada).
En fin: ¿alguien que me pueda ayudar? ¿Qué experiencias tenéis con la facturación electrónica? ¿formatos? ¿algoritmos? ¿ideas varias?
¡Gracias adelantadas!
» Leer más, comentarios, etc...
EsLoMas.com
Un mínimo de seguridad es fácil
Agosto 31st, 2009 - [Enlace local]
Hoy me he encontrado con un post en el blog de S21sec que me ha traído a la mente frecuentes conversaciones con amigos y conocidos, y es que muy poca gente se hace a la idea de los peligros reales existentes en internet. La mayoría de los usuarios usan su ordenador como si fuera un electrodoméstico más, sin ser conscientes de los posibles problemas con los que pueden encontrarse. Ya no es como hace años cuando el mayor riesgo era que entrase un virus y borrase los datos del ordenador, ahora “los malos” se han profesionalizado y forman parte de mafias organizadas que se dedican a crear programas entre otras cosas, orientados a vaciar las cuentas corrientes, o crear redes de ordenadores zombies para todo tipo de maldades.
Los usuarios no son conscientes de que los programas que se bajan por el emule, o los cracks que encuentran por internet, es muy probable que hagan más de lo que aparentan. Pero tampoco saben que en muchos casos ni siquiera hace falta que cometan imprudencias como esas, sino que simplemente navegando por internet pueden acabar igual de mal si no toman unas mínimas precauciones.
Estas precauciones son muy sencillas y en la actualidad existe software gratuito que permite adoptarlas. Es fundamental tener el sistema operativo actualizado a los parches más recientes, utilizar un antivirus actualizado, un firewall que permita filtrar a dónde se conecta nuestro ordenador y quién se conecta a él, y un navegador moderno como Firefox. En algunos casos el aprendizaje y el uso puede ser un poco molesto al principio, pero el esfuerzo merece cláramente la pena teniendo en cuenta los posibles riesgos.
También existen otras opciones, como utilizar sistemas operativos alternativos a Windows, como GNU/Linux, que pueden reducir el riesgo, bien por ser algo más seguros, o por no ser objetivo destacado para los atacantes al no ser tan usados. En mi caso utilizo Ubuntu ya que es suficiente para el 99% de las cosas que hacemos en casa, pero de todas formas no existe el S.O. 100% seguro, por lo que incluso con GNU/Linux hay que ser precavido.
» Leer más, comentarios, etc...
The New Cult of Dead Cow » desarrollo
GET y POST: La Guia Definitiva
Agosto 29th, 2009 - [Enlace local]
Traducido de: Carsonified
Aunque pueden servirnos para realizar el mismo objetivo, GET y POST presentas diferencias claves entre ellos.
- Usa GET para peticiones seguras y POST para inseguras
- Las peticiones GET pueden ser cacheadas.
- Las peticiones GET son almacenadas en el historial del navegador
- Las peticiones GET pueden ser almacenadas en los marcadores
- Las peticiones GET pueden ser compartidas o distribuidas facilmente
- Las peticiones GET pueden ser hackeadas (1!) [NE: Aunque las POST tmb con las herramientas adecuadas, ejem. Firefox ]
- Usa POST cuando se trata de datos sensibles.
Para seguridad de nuestros usuarios al no recordar informacion delicada en equipos compartidos. Por nuestra propia seguridad, ya que podriamos estar infrigiendo leyes por el almacenamiento de informacion no permitida, como el CVC de las tarjetas de credito. - Usa POST cuando se trata de peticiones grandes
Algunos navegadores imponen limites en la longitud de las direcciones URL ( peticiones GET ) - Usa GET en peticiones AJAX
Cuando se utiliza XMLHttpRequest, los navegadores implementan las peticiones POST como un proceso de dos pasos, donde primero envian la cabecera y luego la informacion, reduciendo la velocidad de la comunicacion.
» Leer más, comentarios, etc...
4 bits blog
Taxis con internet
Agosto 28th, 2009 - [Enlace local]
Ayer veía en las noticias de la televisión del metro que unos cuantos taxis habían incorporado un servicio nuevo, que consistía en tener un llamado ultraportátil con conexión a internet vía modem 3G, de modo que el cliente pudiese acceder a internet mientras viaja en el taxi.
Todo esto no deja de ser curioso, porque hace unos días salía la noticia de que la CMT prohibía dar acceso WiFi gratis al ayuntamiento de Madrid en los autobuses, ya que no era su servicio principal, así que para ofrecer dicho servicio debería cobrar una tasa extra.
No me entere bien de la noticia de los taxis, pero me pareció ver que dicha conexión a internet era un servicio gratuito, por lo que todo esto me parece un poco contradictorio.
Además, me pregunto qué nivel de seguridad proporcionarán en dichos ultraportátiles, es decir, el taxista me puede asegurar que dicho portátil no tiene virus, que los datos (cookies, archivos temporales, …) que maneje serán borrados antes de que otro cliente lo use, que el disco está cifrado por si alguien lo roba no poder acceder a los datos, … No sé, pero recomendaría no usar dichos ordenadores para tareas que contengan datos personales.
» Leer más, comentarios, etc...
4 bits blog
Learning Python
Agosto 28th, 2009 - [Enlace local]
Learning Python (web) es un libro de introducción al lenguaje de programación Python. Os podría vender la moto para que utilizaseis Python, contando todas las bondades que me han enamorado de este lenguaje, pero haría un post demasiado largo, además de que me desviaría del tema, que es el libro, pero sí Python mola.
Python es un lenguaje interpretado, similar a Java en la forma de ejecutarse, ya que se ejecuta sobre una MV.
En este libro se explican todos los aspectos de Python, para gente que desconozca completamente este lenguaje (como me pasaba a mí cuando lo leí). El libro es bastante grande, el índice marca como última página la 681, pero es que abarca todos los aspectos básicos de Python, no incluye todos los módulos que forman parte de Python.
El libro se divide en siete partes más los apéndices:
- Comenzando (Getting started)
- Tipos y operaciones (Types and operations)
- Estamentos y sintaxis (Statements and syntax)
- Funciones (Functions)
- Módulos (Modules)
- Clases y POO (Classes and OOP)
- Excepciones y herramientas (Exceptions and tools)
- Apéndices (Appendixes)
En general, me ha parecido un libro genial para introducirte en este lenguaje, quizá muchas veces peca de, podríamos decir, ingenuo y cuenta cosas que cualquiera que se dedique a la programación sabe y se puede saltar.
Recomendación: Alta.
Nivel: Bajo/Medio.
Idioma: Inglés.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Ballmer y los agujeros de seguridad
Agosto 27th, 2009 - [Enlace local]
Con mucho sentido del humor, aquí tenemos a Steve Baller notificando a Bill Gates de los problemas de seguridad en sus desarrollos.
» Leer más, comentarios, etc...
PROGRAMANDO EN .NET
Code Camp Tarragona 2009
Agosto 27th, 2009 - [Enlace local]
Gracias a las comunidades de .NET se va a organizar un evento de 2 días (17 y 18 de septiembre) totalmente gratuito en Tarragona con multitud de ponencias sobre la plataforma .NET y Mono.Así que si podéis asistir no os lo perdáis ;)Web oficial Code Camp
» Leer más, comentarios, etc...
MadeInFlex
Fx4 V: Sintaxis de estados
Agosto 27th, 2009 - [Enlace local]
En esta cuarta versión de Flex se han producido cambios considerables en la arquitectura de componentes así como en el lenguaje MXML. Esto se ha hecho para potenciar varios aspectos como son la productividad, facilitar el workflow designer / developer o la integración con herramientas externas.
En esta entrada se verá en profundidad el funcionamiento y nueva sintaxis de los estados ( State ) en Flex 4.
» Leer más, comentarios, etc...
MadeInFlex
Fx4 V: Sintaxis de estados
Agosto 27th, 2009 - [Enlace local]
En esta cuarta versión de Flex se han producido cambios considerables en la arquitectura de componentes así como en el lenguaje MXML. Esto se ha hecho para potenciar varios aspectos como son la productividad, facilitar el workflow designer / developer o la integración con herramientas externas.
En esta entrada se verá en profundidad el funcionamiento y nueva sintaxis de los estados ( State ) en Flex 4.
Revisando los estados
Los estados han existido en Flex desde la versión 2. La palabra que define la funcionalidad y de hecho la clase que se ocupa de implementar la misma describe muy bien lo que implica la creación de estados.
Un estado es la declaración de una configuración específica de un conjunto de elementos y/o sus atributos en el marco de un un UIComponent.
A través de los estados podemos modificar el valor de una propiedad o estilo, modificar un event handler o añadir o quitar del display list componentes.
A nivel implementacional los estados se definen como elementos dentro de un Array en la propiedad states y se define el estado en el que estamos en todo momento a través de la propiedad currentState, ambas propiedades pertenecientes a la clase UIComponent.
Fisonomía de un estado en MXML
Como hemos dicho un estado declara la configuración específica de un conjunto de elementos de un UIComponent pero, ¿cómo se declara exactamente? A continuación veremos las diferentes opciones de las que disponemos para declarar los estados. Siempre hablamos de declarar estados en MXML.
Declaración del estado
Lo primero que necesitamos para declarar estados es un contenedor que pueda albergar uno o más de ellos. Este contenedor es la propiedad states.
Este bloque de código MXML declara dos estados login y registro para que los podamos utilizar en el resto del documento que estamos editando.
Como se puede ver los estados son instancias de la clase mx.states.State igual que en la versión 3 del SDK, esto es debido a que internamente el motor de estados es el mismo (desconozco hasta qué nivel es así internamente pero aparentemente el mecanismo es el mismo exactamente), lo que ha cambiado en realidad es la forma de declararlos en MXML y por lo tanto ha sido un trabajo extenso a nivel de compilador. De hecho si añadimos el flag de compilación -keep-generated-actionscript podremos apreciar que el código generado utiliza las mismas clases para generar los estilos de forma programática mx.states.SetProperty, mx.states.AddItems, etc.... En breve podréis experimentarlo vosotros mismos con el ejemplo al completo.
Asignación de propiedades, estilos y event handlers
Tener los estados declarados es una parte indispensable del proceso, pero el trabajo real para definirlos está en las asignaciones.
Para asignar el valor de una propiedad en el contexto de un estado se utiliza una sintaxis por notación de punto.
Siguiendo con el ejemplo anterior:
En este bloque de código se puede apreciar el añadido sintáctico con respecto a la versión 3 del SDK. La propiedad title del componente Panel está por duplicado y cada una lleva un sufijo que se corresponde con el nombre del estado en el que esa propiedad debe ser asignada. En definitiva queda como:
Lo cual es mucho más intuitivo y menos verboso que la mecánica de la versión anterior de Flex.
Cabe decir que en el ejemplo anterior se puede obviar una parte del código, que son las referencias al estado base, es decir, al que está el primero en la lista de estados (login en nuestro ejemplo) tal y como se muestra a continuación:
Lo que acabamos de aprender con las propiedaes es igualmente aplicable para atributos de estilo y event handlers.
Un ejemplo completo donde se ve un ejemplo de cada:
En este ejemplo se puede ver como asignamos propiedades, estilos y event handlers en función del estado en el que estamos.
Añadir y quitar componentes
Para añadir o quitar componentes de un estado determinado se utilizan dos propiedades especiales del espacio de nombres fx: includeIn, excludeFrom.
En el ejemplo anterior tenemos un caso de uso para includeIn. Esta propiedad requiere de un nombre o listado de nombres de estado separados por coma que serán en los cuales estará presente el componente en el que se declara la propiedad.
En nuestro código lo utilizamos para decir que queremos que el contenedor en el que está el campo de texto de "repetir contraseña" solo aparezca en el caso de entrar en el estado "registro".
excludeFrom es lo mismo pero a la inversa, es decir, sirve para decir en qué estados un componente no debe estar presente.
Podríamos declarar el estado en el contenedor de "repetir contraseña" obteniendo el mismo resultado pero utilizando excludeFrom de la siguiente forma:
Se entiende pues que ambas propiedades son mútuamenet excluyentes.
Reparentado de componentes
Otra opción asociada es la de reparentado de componentes según estado. Esta funcionalidad se consigue utilizando un tag especial del espacio de nombres fx:
.
El tag Reparent es un marcador del lugar dónde el componente target deberá ir durante el estado includeIn. Esto en código se traduce así:
En el ejemplo se puede ver cómo el botón cambia de panel según el estado en el que está. El tag Reparent actúa de marcador para el lugar en el que irá el botón cuando el estado "botonEnPanel2" entre. Notar que se puede utilizar igualmente excludeFrom.
Políticas de creación de estados
Una aplicación Flex puede llegar a ser (y suele ser) realmente grande. Esto implica que si no tratamos con mucho cuidado las políticas de instanciación de vistas, componentes y estados podemos acabar con una aplicación que no responde bien porque consume demasiada memoria y recursos, haciendo que la experiencia de usuario sea negativa.
Uno de los puntos de control de los que disponemos en relación a este aspecto es la propiedad itemCreationPolicy.
La propiedad itemCreationPolicy es una propiedad especial del espacio de nombres fx que permite especificar cuando queremos que un elemento concreto sea instanciado en el marco del manejo de estados. Puede tener uno de estos dos valores:
deferred(por defecto)immediate
En el caso de deferred, el valor por defecto, lo que conseguiremos es que un componente declarado en un estado determinado se instancie solo en el momento de entrar en ese estado. Conseguiremos que la aplicación responda mucho más rápido y consuma menos memoria inicialmente pero, dependiendo de lo costoso que sea (a nivel de proceso) crear los estados puede que al entrar en los más complejos se note una penalización en el rendimiento. Aparte de esto las instancias del estado no serán accesibles antes de entrar en el estado por primera vez.
En el caso de immediate lo que conseguimos es que los componentes, aunque no estén en el display list, se instancien al iniciar la aplicación y por lo tanto estén en memoria. Con esto consumiremos más memoria desde el inicio de la aplicación y también se notará una penalización en el rendimiento de la misma durante el periodo de iniciación. Ganaremos en rendimiento al acceder a los estados porque ya estarán creados y podremos acceder a las instancias antes de haber entrado por primera vez a su estado correspondiente.
Como se puede ver hay mucho que decidir y es muy importante tener en cuenta este aspecto en el desarrollo de vistas basadas en estados.
Como norma general se recomienda utilizar immediate solo cuando esté muy justificado, por ejemplo si necesitamos acceder a una instancia antes de crear el estado en el que está.
Políticas de destrucción de estados
Ya que podemos definir la política de creación ¿porque no definir la de destrucción? En Flex 4 podemos mediante la propiedad itemDestructionPolicy, del espacio de nombres fx de de MXML2009.
Esta propiedad nos permite definir si el objeto que se ha creado para un estado determinado sigue existiendo en memoria al salir del estado.
Los valores que puede tomar son:
auto(por defecto)never
En el caso de auto, el valor por defecto, estamos diciendo que el componente sea eliminado de memoria al salir del estado.
En el caso de never estaremos diciendo que el componente persista en memoria incluso al salir del estado en el que se ha instanciado.
Al igual que con itemCreationPolicy se debe tener muy en cuenta lo que se decide para que el balance rendimiento / memoria / experiencia de usuario sea equilibrado.
Conclusión
Los estados en Flex 4 son más intuitivos, menos verbosos y además disponemos de más opciones para controlar su ciclo de vida. A todos lo que no han utilizado estados en versiones anteriores por lo tediosos que podían llegar a ser os animo a que le déis una oportunidad en esta versión 4. Seguro que los encontraréis útiles!
» Leer más, comentarios, etc...
4 bits blog
Applets en XHTML 1.1 compatibles con IE
Agosto 26th, 2009 - [Enlace local]
Creo que cualquiera que haya tenido que realizar algún tipo de web para un público amplio, ha tenido que lidiar con los problemas que da Internet Explorer (IE) al no cumplir los estándares del W3C.
Pero si encima para rematar la faena te toca insertar un applet, quieres que cumpla con XHTML 1.1 y que se vea en IE, pues acojona un poco al ver que la etiqueta applet dejó de formar parte del estándar hace ya un tiempo.
Sin más dilación, os dejo aquí el código:
Al final, lo único necesario es utilizar los asquerosos hacks de IE, para que no cargue la versión que no entiende de la etiqueta object y cargue la que entiende.
Basado en XHTML Strict Applets.
» Leer más, comentarios, etc...
PROGRAMANDO EN .NET
Novedades .NET Framework 4.0
Agosto 26th, 2009 - [Enlace local]
Aún está en beta pero ya tenemos un documento de MSDN con las novedades que traerá el Framework 4.0:What's New in the .NET Framework 4.0Habrá que seguirlo con atención porque trae novedades jugosas :)
» Leer más, comentarios, etc...
Picando Código
Project Manager
Agosto 25th, 2009 - [Enlace local]

Joel Spolsky
“Management, in general, needs to set up the system so that people can get things done”
Joel Spolsky – The Econ 101 Management Method
Traducido libremente como “La gerencia, en general, necesita preparar el sistema para que la gente pueda hacer su trabajo”
Una buena frase para los que nos tocó gerencia y gestión.
» Leer más, comentarios, etc...
xailer.info (esp)
Treeview con colores
Agosto 24th, 2009 - [Enlace local]
Varias veces nos han preguntado en los foros si habría alguna manera de incorporar al control Treeview la posibilidad de cambiar el color de cada uno de sus elementos para poder personalizarlo a nuestro gusto.

La única diferencia de este componente con el Treeview nativo de Xailer es que no dispone de editor visual para la propiedad aItems y debe ser rellenado en tiempo de diseño con el menú contextual o en tiempo de ejecución con alguno de los siguientes métodos:
-
METHOD AddItem( cItem, xImage, xSelImage, lBold, lChecked, lParam, nClrText, nClrPane ) // –> oItem
-
METHOD InsertItem( cItem, xImage, xSelImage, lBold, lChecked, lParam, nClrText, nClrPane, nPos ) // –> oItem
Como se puede apreciar, estos métodos añaden dos nuevos parámetros para indicar el color del texto y del fondo de cada elemento y son totalmente compatibles con sus análogos del Treeview estándar, permitiendo el uso de imágenes, checkboxes, etc.
El ZIP treeviewcolor.zip incluye la DLL para el IDE y la librería para enlazar con las aplicaciones.
» Leer más, comentarios, etc...
Picando Código
Congreso Iberoamericano de Seguridad Informática: Noviembre 2009, Montevideo, Uruguay
Agosto 24th, 2009 - [Enlace local]

CIBSI 2009
LLAMADO A PARTICIPACIÓN – INSCRIPCIONES ABIERTAS
Noviembre 16 – 18, 2009, Montevideo, Uruguay
http://www.fing.edu.uy/cibsi09
El Congreso Iberoamericano de Seguridad Informática (CIBSI) es una iniciativa de la Red Temática Iberoamericana de Criptografía y Seguridad de la Información Criptored, una comunidad virtual que aglutina a expertos de 200 universidades y más de 275 empresas de las Tecnologías de la Información. El objetivo principal de CIBSI es promover y desarrollar el área de la Seguridad Informática creando para ello un espacio tecnológico que facilite el intercambio de conocimiento y la formación de redes de colaboración en el ámbito de la investigación.
El quinto Congreso Iberoamericano de Seguridad Informática CIBSI’09 tendrá lugar del 16 al 18 noviembre de 2009 en la ciudad de Montevideo, Uruguay, y está organizado por la Facultad de Ingeniería de la Universidad de la República (Uruguay) y la Universidad Politécnica de Madrid (España).
ALOJAMIENTO
El evento se realizará en el Hotel NH-Columbia.
Los participantes del congreso contarán con tarifas promocionales en el hotel del evento, y en otros hoteles de la ciudad de Montevideo.
Si está interesado en este tipo de alojamiento, lo invitamos a reservar su habitación rápidamente.
FECHAS IMPORTANTES
Inscripción temprana: 31 de Julio de 2009.
Congreso: Noviembre 16 – 18, 2009.
CONFERENCIAS INVITADAS
Gilles Barthe (IMDEA Software, España)
Eduardo Giménez (Universidad de la República, Uruguay)
José Luis Piñar Mañas (Universidad CEU San Pablo, España)
PROGRAMA CIENTIFICO
Información completa disponible en: http://www.fing.edu.uy/cibsi09
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Dialogs-PopUps en ADF
Agosto 23rd, 2009 - [Enlace local]
A
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
VCL
Agosto 23rd, 2009 - [Enlace local]
Dependiendo del tiempo que lleves metido en la informática, te sonará o no VCL. Si llevas algunos años, o bien te has movido en entornos Borland y derivados, sin duda para ti VCL es Visual Component Library, la alternativa, en mi opinión mejorada a los controles VBX que luego serían OCX de Microsoft, iniciada por Borland/Inprise/CodeGear/Embarcadero con Delphi 1.
Si llevas más de una década, y te moviste por ambientes más o menos underground, para ti VCL será el Virus Creation Laboratory, una herramienta de creación de virus para DOS de 1992 escrita Nowhere Man, y liberada inicialmente en círculos de la escena.
Aunque VCL no fue la mejor herramienta para ese propósito, si que fue la más sencilla de utilizar, dónde podíamos desde un interface en modo texto (TUI), ajustar determinados parámetros, para generar nuestro virus no residente (ahora troyanos), capaz de infectar otros archivos.
Su uso generaba un esqueleto en ensamblador, con el que luego poder trastear a mano, y jugar con él.
» Leer más, comentarios, etc...
Picando Código
Peor que… (Ocio en Identi.ca y Twitter)
Agosto 22nd, 2009 - [Enlace local]

Twitter Identi.ca
A veces Twitter (o Identi.ca) sirven para algo
A continuación una conversación “interesante” (???) que tuve a través de Identi.ca y Twitter:
- picandocodigo: ¿Hay algo peor que agarrar algo programado por otro y tener que agregarle funcionalidad a la fuerza?
- durmiendoafuera: @picandocodigo comer empandas de polenta ?
- sarriaroman: @durmiendoafuera @picandocodigo me estan cargando? Empanadas de polenta?
- picandocodigo: @durmiendoafuera @sarriaroman ¡Peor serían zapallitos rellenos de morcilla e hígado!
- sarriaroman: @picandocodigo peor que reutilizar codigo assembler xD! O intentar programar un SO en binario xD
- picandocodigo: @sarriaroman O programar un cms en Perl
- picandocodigo: @sarriaroman Jaja, sí, pero es divertido… Peor que refactorizar código Visual Basic con Vi
- picandocodigo: Peor que tener que mandar un link a un demonio que usa wget para obtener una página y la reenvía por correo para navegar por internet. Ups..
- juanduke: @fbt si que hay algo peor! que lo programado tenga !dojo
En el momento fue gracioso al menos…
» Leer más, comentarios, etc...
avemundi, blog de un micro-isv » Desarrollo de software
macwidgets for java
Agosto 21st, 2009 - [Enlace local]
En el largo camino del aprendizaje de Java estoy buscando librerías que permitan desarrollar aplicaciones que tengan una estética lo más cercana posible a OS X. Una de ellas, la que pienso que consigue un aspecto más próximo a Aqua es macwidgets. Con esta librería se pueden conseguir barras de botones, paneles laterales y ventanas HUD, entre otros controles, realizados con Java.
El desarrollador de la librería mantiene un blog llamado Exploding pixels donde cuenta cosas relacionadas con el desarrollo de la librería y sobre diseño de interfaces de usuario en el mundo Mac. Uno de los post más comentados en este blog es el que critica la posición de las pestañas en Safari 4, diciendo que al estar por debajo de la barra de direcciones crea confusión pues realmente la barra de direcciones parece compartida entre las pestañas, cosa que no es cierta por su comportamiento. El post en cuestión es Why can’t Safari get tabs right?.
Volviendo a las macwidgets, la mejor manera de hacerse una idea de su aspecto es verlas en funcionamiento. Una de las aplicaciones que las utilizan es jCodeCollector, una aplicación gratuita que permite guardar trozos de código clasificándolo por categorías. El aspecto del programa es tan maquero como muestra la imagen siguiente:

» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
JDeveloper 10.1.3.5
Agosto 20th, 2009 - [Enlace local]
A
» Leer más, comentarios, etc...
Picando Código
Google Chrome y Chromium en GNU/Linux
Agosto 20th, 2009 - [Enlace local]

Google Chrome / Chromium
Llegó el momento que muchos usuarios de GNU/Linux esperaban, hoy en día en lo personal puedo decir que Google Chrome ha llegado a ser una alternativa real como navegador web para uso diario. Les voy a comentar un poco sobre el estado actual de Google Chrome y Chromium en GNU/Linux y como instalarlo. Por si algún despistado todavía no conoce la diferencia: Chromium es el proyecto y el código fuente liberado, sobre el cual se construye Chrome, el navegador web de Google.
En Picando Código publiqué el anuncio de Google Chrome Beta hace casi un año. En ese entonces, solamente existía una versión para Windows. Ya se estaba trabajando en una versión para GNU/Linux, pero apenas se podían ir compilando partes que ni siquiera llegaban a mostrar una página. De a poco esto fue cambiando. En un momento, se lanzó CodeWeavers Chromium, una prueba de concepto por los responsables de Wine. Esta usaba código de Chromium para demostrar la habilidad de Wine de migrar software de Windows a otras plataformas rápidamente. Sin embargo, no llegaba a ser del todo funcional.
Ya más adelante se lograron obtener Daily Builds de Chromium, que fueron tomando forma. Las primeras versiones, no tenían funcionalidad de pestañas, opciones, y más. Incluso algunas versiones alfa que instalé en mi máquina sobre Debian no llegaban a renderizar las páginas. Además su estabilidad brillaba por su ausencia, si lo mirabas mucho estallaba.
Hoy en día la cosa ha cambiado. En junio, Google anuncia oficialmente versiones de desarrollo de Google Chrome para Mac OS X y Linux. En principio un poco corto en características, pero se fue actualizando casi a diario y mejorando cada vez más. Así que hoy en día, los usuarios de GNU/Linux podemos ya instalar Chrome o Chromium (o ambos como en mi caso) para ir viendo cómo evoluciona.
Instalar Google Chrome en GNU/Linux
Al momento de escribir este post, la versión oficial de Chrome que ofrece Google para los desarrolladores, se encuentra en el Early Access Release Channels http://dev.chromium.org/getting-involved/dev-channel. en el canal de desarrollo: un preview inestable. Por ahora hay paquetes .deb para Ubuntu 8.04 o superior y Debian 5. Comentan que se planea soportar otras distros. Pueden descargar los .deb correspondientes directamente desde la página, el cual agrega los repositorios de Google para mantener actualizado Chrome. Sino, pueden agregar a mano la siguiente línea en sus sources:
deb http://dl.google.com/linux/deb/ stable main
Si descargaron el .deb, usen el comando:
dpkg -i google-chrome-unstable_current_amd64.deb
En caso de no lograr la instalación por falta de dependencias, lo pueden arreglar después con:
apt-get install -f
Con esto ya queda Google Chrome funcionando, en la versión 3.0, con el motor de JavaScript V8 en su versión 1.3.2.2. Chromium está en la versión 4.0 de desarrollo y trae V8 versión 1.3.5. Ambos utilizan WebKit 532.0.
Instalar Chromium en GNU/Linux
Instalar Chromium es igual de fácil, simplemente hay que agregar los repositorios, siguiendo las instrucciones (básicamente agregar los repositorios a nuestros sources). Los builds se generan por un bot, por lo que no son testeadas.
Sinceramente no los he utilizado ampliamente como para notar una diferencia grande entre las dos versiones.
Habilitar plugin Flash en Google Chrome y Chromium:
Por defecto no trae soporte para Flash, pero podemos usar el plugin. Hay que hacer un link simbólico desde un directorio “plugins” en el directorio de instalación del navegador, hacia el plugin de
Flash.
Para Chromium, en mi caso fue así:
hoth:# cd /usr/lib/chromium-browser/plugins hoth:/usr/lib/chromium-browser/plugins# ln -s /usr/lib/flashplugin-nonfree/libflashplayer.so
En Google Chrome:
hoth:/# cd /opt/google/chrome/ hoth:/opt/google/chrome# mkdir plugins hoth:/opt/google/chrome# cd plugins/ hoth:/opt/google/chrome/plugins# ln -s /usr/lib/flashplugin-nonfree/libflashplayer.so
Simplemente buscar el directorio donde tenemos instalados los navegadores, y crear el enlace simbólico. Hecho esto, hay que modificar el lanzador al navegador, y agregar el parámetro --enable-plugins al final.
Uso en general
En cuanto al estado del navegador, es bastante estable. Ninguno ha tenido fallas o problemas que recuerde desde hace un buen tiempo. Lo uso a diario para chequear mi GMail. Lo encuentro mucho mas rápido que cualquier otro navegador para esta función, lo cual suena bastante lógico siendo un servicio de Google, además que su motor de JavaScript vuela. Flash funciona correctamente, por lo que se pueden disfrutar los videos de YouTube.
Los temas ya se pueden instalar, por lo que se le puede cambiar la apariencia. En mi computadora personal tengo Chrome con el tema Greyscale y Chromium con el tema GTK (a través de gtk-qt-engine en KDE4) para diferenciarlos.
Conclusión final
Ahora solo les resta probarlo por su cuenta. Mi opinión general, como ya mencioné, hoy en día es una alternativa real, y funcional, para las necesidades básicas de navegación en internet. Admito que no lo he utilizdo como navegador predeterminado. Pero ya le falta poco para llegar a una versión estable que seguramente se incluirá en las distintas distribuciones GNU/Linux. Todavía sigo prefiriendo los navegadores Mozilla, pero me gusta usar varios navegadores distintos.
Chrome y Chromium son dos más de los navegadores que tengo instalados en mi computadora entre: Iceweasel, GNU Icecat, Flock, Opera y Arora y alguno más raro. Es importante poder elegir, y hoy en día nuestros sistemas operativos están llenos de opciones excelentes a la hora de elegir navegador web. Esta competencia en la “guerra de los navegadores”, permite la evolución constante en la manera en que accedemos a Internet, y los beneficiados somos los usuarios
Estén atentos al desarrollo de estos navegadores que próximamente seguro tengamos versiones estables en GNU/Linux.
» Leer más, comentarios, etc...
Picando Código
Nueva computadora: Debian Squeeze AMD 64 y KDE 4.2
Agosto 19th, 2009 - [Enlace local]

AMD64 Debian GNU/Linux
Es difícil volver a publicar en el blog después de tantos meses sin actividad. Han pasado tantas cosas desde entonces: Google Chrome se volvió una opción como navegador en GNU/Linux, KDE 4 se volvió sumamente usable, estable y listo para uso diario, y Debian Testing incluye el kernel 2.6.30, entre otras cosas. Ya que hace tanto que no escribo, y vuelvo prácticamente a arrancar de cero de nuevo, me gustaría recibir feedback de los lectores que han seguido leyendo el blog después de tanto tiempo: ¿Qué posts les resultaban más interesantes? ¿Qué tipo de noticias y artículos les gustaría ver publicados?
Otro evento importante en este tiempo: un par de meses atrás adquirí una nueva computadora de escritorio, y recién tengo tiempo de escribir al respecto… Es mi primer computadora de escritorio desde mi clon Pentium Celeron 266 Mhz con 64 MB de Ram y 8 GB de disco (lo último en su momento). Desde entonces tuve mi IBM ThinkPad T22, en la cual usé entre otros: ArchLinux y Debian Lenny con XFCE. Después obtuve mi Dell Inspiron 6400 que sigue en uso a diario con Debian Squeeze también.
El procesador es un AMD Athllon X2:
fernando@hoth:~$ cat /proc/cpuinfo | grep "model name"
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5600+
model name : AMD Athlon(tm) 64 X2 Dual Core Processor 5600+Memoria 2GB (menos lo de la placa de video onboard):
fernando@hoth:~$ cat /proc/meminfo | grep MemTotal
MemTotal: 1801568 kBEl hardware:
fernando@hoth:~$ lspci
00:00.0 Host bridge: Advanced Micro Devices [AMD] RS780 Host Bridge
00:01.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (int gfx)
00:06.0 PCI bridge: Advanced Micro Devices [AMD] RS780 PCI to PCI bridge (PCIE port 2)
00:11.0 SATA controller: ATI Technologies Inc SB700/SB800 SATA Controller [IDE mode]
00:12.0 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI0 Controller
00:12.1 USB Controller: ATI Technologies Inc SB700 USB OHCI1 Controller
00:12.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller
00:13.0 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI0 Controller
00:13.1 USB Controller: ATI Technologies Inc SB700 USB OHCI1 Controller
00:13.2 USB Controller: ATI Technologies Inc SB700/SB800 USB EHCI Controller
00:14.0 SMBus: ATI Technologies Inc SBx00 SMBus Controller (rev 3a)
00:14.1 IDE interface: ATI Technologies Inc SB700/SB800 IDE Controller
00:14.2 Audio device: ATI Technologies Inc SBx00 Azalia (Intel HDA)
00:14.3 ISA bridge: ATI Technologies Inc SB700/SB800 LPC host controller
00:14.4 PCI bridge: ATI Technologies Inc SBx00 PCI to PCI Bridge
00:14.5 USB Controller: ATI Technologies Inc SB700/SB800 USB OHCI2 Controller
00:18.0 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] HyperTransport Technology Configuration
00:18.1 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Address Map
00:18.2 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] DRAM Controller
00:18.3 Host bridge: Advanced Micro Devices [AMD] K8 [Athlon64/Opteron] Miscellaneous Control
01:05.0 VGA compatible controller: ATI Technologies Inc Radeon HD 3200 Graphics
01:05.1 Audio device: ATI Technologies Inc RS780 Azalia controller
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 02)Hace poco se me rompió el disco duro, y tuve que devolverlo a garantía (estuve haciendo catarsis en identi.ca 1, 2, 3, 4, 5 ) y usé Ubuntu LiveCD para recuperar los archivos. Se ve que vino mal de fábrica, pero por suerte pude recuperar todo. Algo interesante de mencionar es que tuve un uptime de más de 2 días desde el LiveCD de Ubuntu, y en un momento ni siquiera recordaba que estaba ejecutando el S.O. desde un CD. Recién volví a instalar Debian Squeeze, es la primera computadora que uso con arquitectura de 64 bits AMD64. Por ahora todo viene bastante bien, algunas cosas hay que compilarlas a mano, pero en general todo funciona como siempre.
Una de las cosas interesantes de Debian Squeeze ha sido el cambio de KDE 3 a KDE 4 (4:4.2.4-1 por el momento en Testing). Desde entonces, vengo usando KDE4 a diario tanto en mis computadoras personales (la laptop Dell y esta nueva) como en el trabajo. Ahora sí, creo que se puede decir que KDE4 está pronto para uso diario. Y eso que todavía no he probado KDE 4.3, que ya está disponible. Será cuestión de esperar a que llegue a Debian Testing.
Fue muy bueno levantar el perfil de usuario para distintas aplicaciones, y que anden perfectamente como los había dejado cuando murió el disco duro. Los más importantes: Iceweasel (con extensiones, configuraciones y todo), Liferea (feeds y caché), Emacs (configuración, plugins, etc.) y otros tantos perfiles.
Como tengo que volver a instalar algunas cosas, compilar otras, y hacer andar el hardware, probablemente publique los pasos a seguir para cada cosa. Así me queda acá como referencia, a la vez que puede servirle a alguien más para una situación similar. La captura de pantalla obligada:
En fin, ¡vuelvo a escribir después de un buen tiempo!
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Virtualización de Windows XP bajo Ubuntu.
Agosto 16th, 2009 - [Enlace local]
A
» Leer más, comentarios, etc...
Picando Código
Entrevista a Martin Cabrera por faltauno.com en .TV
Agosto 14th, 2009 - [Enlace local]
Hace un tiempo les comentaba sobre FaltaUno (http://faltauno.com). Se trata de un proyecto de la empresa uruguaya Moove-It. En el siguiente video, una entrevista a Martín Cabrera en el programa .TV del canal Nuevo Siglo.
Martin expone las principales características y objetivos de la red social de deporte: www.faltauno.com
» Leer más, comentarios, etc...
Blog de Julio César Pérez Arques
Tip Eclipse: Renombrar atributo junto a sus métodos get/set
Agosto 14th, 2009 - [Enlace local]
Uno de los refactorings que más me gustan de Eclipse es el de Renombrar sobre el propio editor de código, sin necesidad de usar un diálogo o nueva pantalla. El genial Alt+May+R.
Pero como soy muy maniático con los nombres, muchas veces me da por cambiar el nombre de los atributos, por lo que tengo que ir a sus correspondientes métodos get/set y renombrarlos a mano. En el colmo de la perrería, a veces lo que hago es borrarlos y volver a generarlos automáticamente.
Ahora, con Eclipse 3.5 Galileo es mucho más sencillo. Basta con pulsar 2 veces el mismo atajo Alt+May+R sobre el nombre del atributo y aparecerá un diálogo con las opciones de renombrar también sus métodos get y set.
Encima tiene memoria y te guarda tus preferencias. Esta gente piensa en todo!
» Leer más, comentarios, etc...
Blog de Julio César Pérez Arques
Cómo configurar el uso de memoria de un servidor en Eclipse
Agosto 14th, 2009 - [Enlace local]
Antes de irme de fin de semana -qué ganas- dejo una chuletilla sobre cómo modificar la configuración de arranque y el uso de memoria de un servidor en Eclipse y en general.
Recuerda que la JVM usa 2 tipos de memoria. La memoria Heap donde se crean los objetos y que es gestionada por el GargabeCollector que se encarga de liberar memoria en caso necesario. Y la memoria PermGen que se utiliza principalmente para cargar las definiciones de las clases de forma permanente, pero también para trabajar con código nativo.
1) En Eclipse, ir a: Run -> Run configurations -> TuServidor -> Arguments -> VM Arguments
2) Para evitar el clásico java.lang.OutOfMemoryError: Java Heap space, usar las opciones de la VM:
-Xms64m
-Xmx256m
Es un ejemplo que asigna 64mb a la memoria heap de inicio y le permite crecer hasta un máximo de 256mb. Esta configuración debería ser más que suficiente si estás en desarrollo y sólo tienes una aplicación configurada para arrancar en el servidor. Antes de incrementarla, tómate unos segundos para meditar si el fallo pudiera ser causa de un memory leak.
3) Para evitar el igualmente clásico java.lang.OutOfMemoryError: PermGen space, usar las opciones de la VM:
-XX:PermSize=64m
-XX:MaxPermSize=128m
Es un ejemplo que asigna 64mb a la memoria perm de inicio y le permite crecer hasta un máximo de 128mb. De nuevo, este ejemplo debería ser más que suficiente si sólo tienes un par de aplicaciones configuradas en el servidor. Aunque todo dependerá del número de despliegues en caliente que realices habitualmente sin reiniciar el servidor.
Otra opción es intentar que el garbage collector recicle la memoria permgen. Para ello prueba a activar el recolector concurrente con los siguientes parámetros:
-XX:+UseConcMarkSweepGC
-XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled
Finalmente un par de enlaces a las páginas oficiales de opciones de la VM y la guía de tuning del gc de la jvm 5.



