programania
Codigo Gipuzkoa: entradas añadidas el 01-01-2008
Diciembre 31st, 2007 - [Enlace local]
» Leer más, comentarios, etc...
programania
Extendiendo Zend MVC: plugins y helpers
Diciembre 31st, 2007 - [Enlace local]
Cada vez que quiero añadir funcionalidades a un conjunto de clases, tengo el vicio de pensar en extenderlas. Sin embargo, tengo más que comprobado que muchas veces la extensión de clases no es una gran idea. Por eso el Zend Framework ofrece otros mecanismos para extender las funcionalidades normales de su MVC (Model View Controller). Veamoslas:
- Zend View Helpers: si lo que queremos es que nuestras vistas generen un código complejo o no queremos ensuciarlas con código de la base de datos, podemos crear estos “helpers” para que las ayuden.
- Zend Action Helpers: si tenemos código que se repite una y otra vez dentro de nuestros actions, quizá sea buena idea crear un Action Helper que nos ayude a simplificar y reutilizar nuestro código. Además, estos Helpers podrán ayudar a que unos actions se comuniquen con otros.
- Zend Controller Plugins: los plugins del Front Controller nos permiten interceptar eventos que ocurren durante la resolución del MVC. Los más fáciles de entender son predispatch y postdispatch, que básicamente nos permiten escribir código que se ejecute antes o después de que se ejecute una acción. Por ejemplo podríamos escribir un plugin de autenticación que antes de que se ejecuten las acciones de un módulo compruebe que el usuario está autenticado. Así no tendremos que escribir código de comprobación de autenticación en cada Action, sino que valdrá con escribirlo en un solo sitio.
- Zend Route Rewrite: ocurrirá habitualmente que tengamos URL´s como www.ejemplo.com/archivos/2007 y www.ejemplo.com/archivos/2006. En estos casos no queremos crear un Action para cada año. Queremos crear un Controller “archivos” y un solo Action reutilizable que muestre los archivos en función del año. El enrutador del ZF nos ayudará con ello.
Es una lección muy importante: aunque el primer instinto del programador sea extender una clase, el Zend Framework ofrece los suficientes mecanismos como para poder inyectar helpers, plugins o escribir reglas de enrutamiento para reutilizar código.
¡No hay que olvidarlo!
» Leer más, comentarios, etc...
Navegapolis
Feliz 2008
Diciembre 31st, 2007 - [Enlace local]
» Leer más, comentarios, etc...
Arragonán
Recomendaciones para invertir en tu portfolio de conocimiento
Diciembre 31st, 2007 - [Enlace local]
Últimamente no he escrito demasiado, las principales razones: un final de año en el trabajo que ha absorvido la mayoría de mi tiempo, acabar unas prácticas para la universidad y ésta última semana de merecidas vacaciones
, que he conseguido desconectar casi del todo, he empezado a leer el libro The Pragmatic Programmer.
En el primer capítulo(A pragmatic philosophy) habla, entre otras cosas, de invertir en tu portfolio de conocimientos, nuestra experiencia y nuestro conocimiento son nuestros activos más importantes, y da algunas recomendaciones de cómo hacerlo. Y aprovechando que se acaba el año me los pongo como propósitos para 2008.
- Conocer un lenguaje cada año: Diferentes lenguajes resuelven de diferentes formas los mismos problemas, de esta manera, puedes tener un punto de vista más amplio para resolver un problema. Este año espero tener tiempo para empezar con Ruby(RoR) y con Groovy(Grails).
- Leer un libro técnico cada 3 meses: En principio recomiendan leer sobre tecnologías con las que trabajas normalmente, pero también que cuando las domines realmente, cambies y estudies otras diferentes a las que estés acostumbrado. Veremos cuando acabe éste libro, que libros interesantes hay por ahí.
- Leer también algún libro no técnico: Hay que recordar que los ordenadores los usan las personas, como no soy demasiado aficionado a la literatura me dejaré recomendar.
- Asistir a clases: A ver si tengo tiempo(y me seleccionan) para asistir a algún curso del CTA, no conozco muchos más que puedan resultarme interesantes.
- Participa en grupos de usuarios locales: Con intención de hacerlo activamente, por aquí esto está complicado, están hispalinux y cadius, que serían lo más parecido, pero que yo sepa nada de puramente para programadores. Aunque de forma online, seguiré participando activamente en todo lo que pueda en JavaConGanas, que podría ser lo más parecido a ésto.
- Experimenta en diferentes entornos: A ver si este año por fin me cambio a usar Linux como mi SO principal, y en casa pruebo a fondo con IDEA y NetBeans.
- Mantente actualizado: Sigo portales como javaHispano, infoQ y TheServerSide además de bastantes blogs que tocan temas de actualidad TI ¿Recomendaciones?.
- Mantente conectado: Para encontrar gente que domine alguna tecnología, para esto ya utilizo sitios como los foros de javahispano, forosdelweb… Además de buscar información en internet, para esto además de los buscadores, mis contactos en del.icio.us me ayudan muchísimo:P.
Aparte de todas estas recomendaciones, que no son pocas, me apunto dos más.
-
Aprende/Mejora tu inglés: Esto no lo comentan en el libro más que nada por que los autores son anglosajones
, pero los que no dominamos demasiado el idioma debemos de hacer un esfuerzo en mejorar. Evidentemente la mayoría de documentación/libros aparecen en inglés primero y en muchas ocasiones no se llegan a traducir nunca, además así no nos limitamos a comunicarnos sólo con hispanohablantes.
- Colabora en algún proyecto open source: De ésta forma, además de aumentar tu portfolio de conocimentos, aumentas tu experiencia. También tiene alguna otra ventaja, como licencias gratuitas de herramientas de pago para utilizarlas en proyectos open source.
Bueno, ahora ya sólo me queda desearos a todos un feliz 2008, y cuidado con la resaca
» Leer más, comentarios, etc...
Buayacorp
Nueva versión de WordPress y algunas aclaraciones
Diciembre 31st, 2007 - [Enlace local]
A estas alturas imagino que las pocas personas que leen este blog y que usan WordPress para sus propios blogs, seguramente ya saben que salió una nueva versión de este CMS, hablamos de WordPress 2.3.2. Entre los problemas corregidos en esta versión están:
- Mejora de rendimiento que evita que la función
sanitize_postsea invocada siempre que se llame aget_post(#5325).- Cambios en la función
is_admin()para que realmente indique si el código se ejecuta en el panel de administración (/wp-admin/). (#5487).- No mostrar los mensajes de error al hacer consultas SQL a menos que
WP_DEBUGesté habilitado (#5473).- Verificar que los datos de conexión a la base de datos sean adecuadas y mostrar mensajes de error si la instalación falla debido a permisos insuficientes (#5495).
- Soporte para páginas de error personalizadas cuando la conexión a la base de datos falla. (#5500).
- Cambios para hacer que la generación de enlaces en los contenidos de la entrada y comentarios sea más selectiva. ([6450]).
- Cambios en
wp-mail.phppara evitar posibles ataques XSS (#5484).- Cambios para que no se muestren las entradas recientes a usuarios que no tienen permisos (#5535).
- Cambios para eliminar información sensitiva expuesta a través del método XMLRPC
wp.getAuthors(#5534).- Verificación de permisos en varios métodos XMLRPC ([6504]).
- Verificación de permisos en varios métodos del protocolo de publicación Atom ([6508]).
- Cambios en la función
validate_file()para evitar problemas de inclusión local de ficheros en windows ([6521]).
Aclaración
Erróneamente se me atribuye el descubrimiento de un bug relacionado a la función is_admin que permitía ver los borradores y entradas privadas. Mi participación en esta última versión tiene que ver más que todo con problemas relacionados a XMLRPC, wp-mail.php y otros que por el momento no puedo comentar, puesto que no tienen que ver mucho con la versión clásica de WordPress y además las correcciones a estos problemas probablemente recién se incluyan en la nueva versión. Aquí un extracto, ligeramente modificado para no dar ningún detalle, del intercambio de correos que tuve con uno de los desarrolladores:
By the way, we added some measures to address the problem you found. It’s on wordpress.com right now. It’s a fairly big change, and since its mainly an MU problem, we won’t address it in WP until either 2.3.3 or 2.4.
Sound good?
Finalmente, es posible que esta sea la última entrada que escriba este año antes de viajar a mi pueblo natal, pero no quiero irme sin antes agradecer a todos y cada uno de ustedes por cada visita, enlace o comentario que hayan hecho.
Les deseo un feliz y próspero 2008.
» Leer más, comentarios, etc...
Blog de Sergio Álvarez Fernández
Wordpress 2.3.2 y Akismet 2.1.3
Diciembre 30th, 2007 - [Enlace local]
Andrés Nieto nos cuenta que hay una nueva actualización disponible para WordPress. Disponible aquí.
Además veo que hay una nueva actualización de Akismet, el plugin antispam para WordPress..
Saludos!;)
» Leer más, comentarios, etc...
Pensamientos ágiles
Feliz año nuevo y ya son cinco años bloggeando
Diciembre 30th, 2007 - [Enlace local]
Bueno, quizás alguno haya notado que no he escrito nada esta última semana. Esto se debe a que ahora mismo estoy en España, de vacaciones, y escribiendo esta entrada con una conexión de prestado.
Hemos aprovechado estos días para visitar a la familia y aunque esto ya se está acabando y pronto, pero que muy pronto (sniff), estaré ya de vuelta por Dublin, pues quería aprovechar la ocasión para felicitaros a todos los que os pasáis de vez en cuando por aquí un feliz año 2008.
Y otra cosa, es que parece que debo estar de cumpleaños. Allá por finales del 2002 empezaba a bloggear. Es una pena porque aunque cuando el año pasado comentaba que era el cuarto aniversario todavía estaba disponible mi viejo blog en blog-city.com pero ahora lo han borrado ya. Lo más viejo que he encontrado es lo que se puede ver en el historico de archivo.org que es de Abril del 2003.
Que tiempos eran aquellos. El concepto de blog apenas existía y creo que eramos unos cuantos "frikis" los que teníamos la desvergüenza de escribir a pecho descubierto en la red de redes. Claro, ahora lees las entradas y te partes de risa: que si patentes en .NET, que si nos recomiendan escribir tests unitarios, que si las nuevas características de C# y si Java las debe adoptar, en fin. Cuantas cositas que al final, realmente, aunque en el momento nos puedan parecer importantes, pues mirando hacia tras te das cuenta de que son un poco tonterías, que todo se ha pasado ya y que realmente lo importante es pasar un año más con tu familia, amigos y las personas que quieres. Siempre hablamos de que la tecnología avanza rapidísimo, pero la verdad es que los años pasan todavía más rápido :-)
Pues eso, que ¡feliz año!
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Funciones intrínsecas en VC++ 2008
Diciembre 30th, 2007 - [Enlace local]
Publican en el Visual C++ Team Blog, un inventario exhaustivo de las funcionalidades intrísecas que se han incorporado al Visual C++ 9 (2008).
Las funciones intrínsecas, permiten aprovechar a bajo nivel los juegos de instrucciones de procesadores CISC recientes, de forma más o menos portable. Así, mientras las compilaciones para x64 no soportan ensamblador en linea, las funciones intrínsecas siguen estando disponibles.
Parece ser también, que al compilador, y sobre todo al optimizador, les resulta más fácil manejarlas que el assembler inline, por lo que es probable que ofrezcan también un mejor rendimiento.
El listado de intrínsecas añadidas, es el siguiente:
SSE
CVTSI2SS - Converts a 64-bit signed integer to a floating point value and inserts it into a 128-bit parameter. Intrinsics: _mm_cvtsi64_ss
CVTSS2SI - Extracts a 32-bit floating point value and rounds it to a 64-bit integer. Intrinsics: _mm_cvtss_si64
CVTTSS2SI - Extracts a 32-bit floating point value and truncates it to a 64-bit integer. Intrinsics: _mm_cvttss_si64
SSE2
CVTSD2SI - Extracts the lowest 64-bit floating point value and rounds it to an integer. Intrinsics: _mm_cvtsd_si64
CVTSI2SD - Extracts the lowest 64-bit integer and converts it to a floating point value. Intrinsics: _mm_cvtsi64_sd
CVTTSD2SI - Extracts a 64-bit floating point value and truncates it to a 64-bit integer. Intrinsics: _mm_cvttsd_si64
MOVNTI - Writes 64 bits to a specified memory location. Intrinsics: _mm_stream_si64
MOVQ - Moves a 64-bit integer either to or from a 128-bit parameter. Intrinsics: _mm_cvtsi64_si128, _mm_cvtsi128_si64
SSE3
PABSB / PABSW / PABSD - Gets the absolute value of signed integers. Intrinsics: _mm_abs_epi8, _mm_abs_epi16, _mm_abs_epi32, _mm_abs_pi8, _mm_abs_pi16, _mm_abs_pi32
PALIGNR - Combines two parameters and right-shifts the result. Intrinsics: _mm_alignr_epi8, _mm_alignr_pi8
PHADDSW - Adds two parameters that contain 16-bit signed integers, saturating the result at the maximum value for 16 bits. Intrinsics: _mm_hadds_epi16, _mm_hadds_pi16
PHADDW / PHADDD - Adds two parameters that contain signed integers. Intrinsics: _mm_hadd_epi16, _mm_hadd_epi32, _mm_hadd_pi16, _mm_hadd_pi32
PHSUBSW - Subtracts two parameters that contain 16-bit signed integers, saturating the result at the maximum value for 16 bits. Intrinsics: _mm_hsubs_epi16, _mm_shubs_pi16
PHSUBW / PHSUBD - Subtracts two parameters that contain signed integers. Intrinsics: _mm_hsub_epi16, _mm_hsub_epi32, _mm_hsub_pi16, _mm_hsub_pi32
PMADDUBSW - Multiplies and adds together 8-bit integers. Intrinsics: _mm_maddubs_epi16, _mm_maddubs_pi16
PMULHRSW - Multiplies 16-bit signed integers and right shifts the results. Intrinsics: _mm_mulhrs_epi16, _mm_mulhrs_pi16
PSHUFB - Selects and shuffles 8-bit chunks from a 128-bit parameter. Intrinsics: _mm_shuffle_epi8, _mm_shuffle_pi8
PSIGNB / PSIGNW / PSIGND - Negates, zeroes, or preserves signed integers. Intrinsics: _mm_sign_epi8, _mm_sign_epi16, _mm_sign_epi32, _mm_sign_pi8, _mm_sign_pi16, _mm_sign_pi32
SSE4A
EXTRQ - Extracts specified bits from the parameter. Intrinsics: _mm_extract_si64, _mm_extracti_si64
INSERTQ - Inserts specified bits into a given parameter. Intrinsics: _mm_insert_si64, _mm_inserti_si64
MOVNTSD / MOVNTSS - Writes bits directly to a specified memory location without polluting the caches. Intrinsics: _mm_stream_sd, _mm_stream_ss
SSE4.1
DPPD / DPPS - Calculates the dot product of two parameters. Intrinsics: _mm_dp_pd, _mm_dp_ps
EXTRACTPS - Extracts a specified 32-bit floating point value from the parameter. Intrinsics: _mm_extract_ps
INSERTPS - Inserts a 32-bit integer into a 128-bit parameter and potentially zeroes out some bits. Intrinsics: _mm_insert_ps
MOVNTDQA - Loads 128 bits of data from a specified memory location. Intrinsics: _mm_stream_load_si128
MPSADBW - Calculates eight offset sums of absolute difference. Intrinsics: _mm_mpsadbw_epu8
PACKUSDW - Converts 32-bit signed integers to signed 16-bit integers using 16-bit saturation. Intrinsics: _mm_packus_epi32
PBLENDW / BLENDPD / BLENDPS / PBLENDVB / BLENDVPD / BLENDVPS - Blends two parameters together various chunk sizes. Intrinsics: _mm_blend_epi16, _mm_blend_pd, _mm_blend_ps, _mm_blendv_epi8, _mm_blendv_pd, _mm_blendv_ps
PCMPEQQ - Compares 64-bit integers for equality. Intrinsics: _mm_cmpeq_epi64
PEXTRB / PEXTRW / PEXTRD / PEXTRQ - Extracts an integer from the input parameter. Intrinsics: _mm_extract_epi8, _mm_extract_epi16, _mm_extract_epi32, _mm_extract_epi64
PHMINPOSUW - Selects the minimum 16-bit unsigned integer and determines its index. Intrinsics: _mm_minpos_epu16
PINSRB / PINSRD / PINSRQ - Inserts an integer into a 128-bit parameter. Intrinsics: _mm_insert_epi8, _mm_insert_epi32, _mm_insert_epi64
PMAXSB / PMAXSD - Takes signed integers from two parameters and selects the maximum. Intrinsics: _mm_max_epi8, _mm_max_epi32
PMAXUW / PMAXUD - Takes unsigned integers from two parameters and selects the maximum. Intrinsics: _mm_max_epu16, _mm_max_epu32
PMINSB / PMINSD - Takes signed integers from two parameters and selects the minimum. Intrinsics: _mm_min_epi8, _mm_min_epi32
PMINUW / PMINUD - Takes unsigned integers from two parameters and selects the minimum. Intrinsics: _mm_min_epu16, _mm_min_epu32
PMOVSXBW / PMOVSXBD / PMOVSXBQ / PMOVSXWD / PMOVSXWQ / PMOVSXDQ - Converts signed integers of one size to a larger size. Intrinsics: _mm_cvtepi8_epi16, _mm_cvtepi8_epi32, _mm_cvtepi8_epi64, _mm_cvtepi16_epi32, _mm_cvtepi16_epi64, _mm_cvtepi32_epi64
PMOVZXBW / PMOVZXBD / PMOVZXBQ / PMOVZXWD / PMOVZXWQ / PMOVZXDQ - Converts unsigned integers of one size to a larger size. Intrinsics: _mm_cvtepu8_epi16, _mm_cvtepu8_epi32, _mm_cvtepu8_epi64, _mm_cvtepu16_epi32, _mm_cvtepu16_epi64, _mm_cvtepu32_epi64
PMULDQ - Multiplies 32-bit signed integers and stores the result as 64-bit signed integers. Intrinsics: _mm_mul_epi32
PMULLUD - Multiplies 32-bit signed integers. Intrinsics: _mm_mullo_epi32
PTEST - Calculates a bitwise test of two 128-bit parameters and returns a value based on the CF and ZF bits of the CC flags register. Intrinsics: _mm_testc_si128¸ _mm_testnzc_si128, _mm_testz_si128
ROUNDPD / ROUNDPS - Rounds floating point values. Intrinsics: _mm_ceil_pd, _mm_ceil_ps, _mm_floor_pd, _mm_floor_ps, _mm_round_pd, _mm_round_ps
ROUNDSD / ROUNDSS - Combines two parameters, rounding a floating point value from one of them. Intrinsics: _mm_ceil_sd, _mm_ceil_ss, _mm_floor_sd, _mm_floor_ss, _mm_round_sd, _mm_round_ss
SSE4.2
CRC32 - Calculates the CRC-32C checksum of a parameter. Intrinsics: _mm_crc32_u8¸ _mm_crc32_u16, _mm_crc32_u32, _mm_crc32_u64
PCMPESTRI / PCMPESTRM - Compares two parameters of specified length. Intrinsics: _mm_cmpestra, _mm_cmpestrc, _mm_cmpestri, _mm_cmpestrm, _mm_cmpestro, _mm_cmpestrs, _mm_cmpestrz
PCMPGTQ - Compares two parameters. Intrinsics: _mm_cmpgt_epi64
PCMPISTRI / PCMPISTRM - Compares two parameters. Intrinsics: _mm_cmpistra, _mm_cmpistrc, _mm_cmpistri, _mm_cmpistrm, _mm_cmpistro, _mm_cmpistrs, _mm_cmpistrz
POPCNT - Counts the number of bits set to 1. Intrinsics: _mm_popcnt_u32, _mm_popcnt_u64, __popcnt16, __popcnt, __popcnt64
Advanced Bit Manipulation
LZCNT - Counts the number of zeroes at the start of a parameter. Intrinsics: __lzcnt16, __lzcnt, __lzcnt64
POPCNT - Counts the number of bits set to 1. Intrinsics: _mm_popcnt_u32, _mm_popcnt_u64, __popcnt16, __popcnt, __popcnt64
Other new intrinsics
_InterlockedCompareExchange128 - Compares two parameters.
_mm_castpd_ps / _mm_castpd_si128 / _mm_castps_pd / _mm_castps_si128 / _mm_castsi128_pd / _mm_castsi128_ps - Reinterprets between 32-bit floating point values (ps), 64-bit floating point values (pd), and 32-bit integers (si128).
_mm_cvtsd_f64 - Extracts the lowest 64-bit floating point value from the parameter.
_mm_cvtss_f32 - Extracts a 32-bit floating point value.
_rdtscp - Generates RDTSCP. Writes TSC AUX[31:0] to memory and returns the 64-bit Time Stamp Counter result.
Artículo publicado originalmente en Bitácora de Javier Gutiérrez Chamorro (Guti) - http://guti.bitacoras.com.
» Leer más, comentarios, etc...
Navegapolis
Evaluación de una arquitectura orientada a servicios
Diciembre 29th, 2007 - [Enlace local]
Seguramente SOA (arquitectura orientada a servicios) es el paradigma de arquitectura más adecuado para diseñar soluciones flexibles de integración con otros sistemas de forma simple, y que permite modelos de desarrollo ágiles capaces de responder al mantenimiento en entornos de negocio rápidos.
SEI ha publicado el informe "Evaluating a Service-Oriented Architecture", un compendio de información imprescindible para arquitectos e ingenieros que trabajan con SOA; que contiene el tutorial que sobre este tema expusieron sus autores en el certamen SATURN 2007.
El título del trabajo no hace justicia al contenido, porque ofrece bastante más que un modelo o criterios para la evaluación de la arquitectura (que no es poco).
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Joomla Hispano
Diciembre 29th, 2007 - [Enlace local]
A
» Leer más, comentarios, etc...
avemundi, blog de un micro-isv » Desarrollo de software
tudumo
Diciembre 29th, 2007 - [Enlace local]
De nuevo gracias a el canasto he descubierto una nueva aplicación GTD llamada Tudumo. La aplicación es un gestor de tareas o to-do list muy sencilla de utilizar, en la linea de TaskPaper pero esta vez para Windows. El programa permite anotar tareas pendientes por proyectos, marcando su importancia de acuerdo a las categorias GTD - siguiente acción, acción a realizar, retenido, realizado, en espera, algún día - y añadiendo tags que vienen a simular los contextos de GTD.
Tudumo es un software de una elegancia fuera de lo normal. El concepto de usabilidad que maneja su desarrollador está muy por encima de lo habitual, y viendo lo bien hecho que está creo que a cualquier programador se le quitan las ganas de ponerse a hacer un programa de ese tipo. Ahora mismo el programa está en fase beta, y el autor tiene intención de realizar su internacionalización una vez terminado. La web del programa cuenta también con un blog donde el autor va contando lo que va haciendo y también explica aspectos de funcionamiento del programa.
Un programa realmente impresionante.
» Leer más, comentarios, etc...
4 bits blog
Aprendiendo GTK+: Introducción
Diciembre 29th, 2007 - [Enlace local]
Desde hace tiempo vengo queriendo hacer una serie de posts para explicar (a la vez que yo aprendo) a programar interfaces gráficas usando GTK+, que es el toolkit usado por las aplicaciones de GNOME, aunque es multiplataforma y puede ser usado en varios sistemas operativos (Windows, Mac).
En esta serie de posts no planeo explicar todo al detalle, ya que existen muy buenos documentos para ello, pero sí quiero dar unas nociones básicas para que cualquiera pueda desenvolverse luego y seguir aumentando sus conocimientos sin mucho esfuerzo, además yo voy a ir aprendiendo paralelamente a estos posts, así que puede que tengan fallos, perdonadme por ello.
Introducción diseño de interfaces gráficas
Lo primero que quiero es realizar una pequeña introducción al diseño (desde el punto de vista de la programación, eso siempre) de las interfaces gráficas, desde un punto de vista genérico, es decir, sin relación a un lenguaje o plataforma específica.
Una interfaz gráfica es un medio por el cual el usuario trabaja con la aplicación de una manera gráfica, normalmente usando entornos de ventanas. Se diferencia de una interfaz de texto, en que en éstas el usuario trabaja con la aplicación introduciendo texto, normalmente usando órdenes en consolas.
El diseño de una interfaz gráfica se basa en objetos (en GTK+ se les conoce como widgets) como pueden ser botones, cuadros de texto, menús, etc… que permiten realizar acciones específicas. Estos objetos, a nivel de programación, tendrán unas propiedades y, lo más importante, unos eventos (o señales) que se dispararán cuando se realice algún tipo de acción sobre ellos (por ejemplo: se pulsa un botón, se introduce texto en un cuadro de texto, …)
Para mí, lo más importante es entender que estos eventos deben ser tratados inmediatamente, para ello normalmente se relaciona una función y unos datos a un evento, de este modo cada vez que se produzca dicho evento se ejecutará la función junto a los datos que tenga relacionados.
¿Qué es GTK+?
GTK+ es un toolkit, o una librería, para programar las interfaces gráficas de una aplicación. Está escrito en C, aunque dispone de bindings para bastantes lenguajes (C++, Python, …).
Además, se complementa con otra serie de librerías del proyecto GNOME, como son:
- GLib (no confundir con la librería GNU de C), es una librería que ofrece un montón de funciones y tipos de datos (simples y compuestos) con los que poder trabajar de forma sencilla.
- Pango, es la librería que se encarga de la impresión del texto en pantalla, soporta internacionalización de modo que se pueda escribir en multitud de lenguajes sin alfabeto tradicional.
GTK+ se basa en GObject, del cual no conozco mucho, pero se puede decir que es una manera de programar en C con una orientación a objetos.
Documentación para iniciarse
Para iniciarse lo mejor sin duda es leer documentos que expliquen paso a paso como realizar cosas cada vez más complejas, para ello se pueden usar los siguientes documentos:
- Tutorial oficial de GTK+.
- Libro de programación en GNOME. (En Español) (GNOME Hispano está caído desde hace unos días, prometo enlazarlo en cuanto estén de vuelta)
- API de GTK+.
» Leer más, comentarios, etc...
Pwned's blog
Adobe Air
Diciembre 28th, 2007 - [Enlace local]
Adobe Integrated Runtime o Apollo, es el nuevo runtime con el que Adobe apuesta a competir contra Silverligth de Microsoft en el mercado de las aplicaciones RIA (Rich Internet Application), asi es en aplicaciones web con funcionalidad de escritorio.
El video que muestra la pagina de Adobe Labs,las aplicaciones de prueba y la se ven muy prometedoras. El siguiente es un video que me encontre en youtube, donde muestran la interfaz del Iphone realizada con AIR.
Uno de los puntos fuertes de AIR es que pueden realizarse con lenguajes y tecnologia lo cuales ya te encuentras familiarizado como HTML, AJAX y Flex. Me imagino que la estrategia de Adobe cuando libero Flex fue orientandose a la salida de AIR para que los desarrolladores se fueran familiarizados con el framework.
Aqui esta un video donde desmuestran las capacidades de Windows Presentation Foundation.
En lo personal me encuentro utilizando xbap y WPF la cual me han sido de utilidad, para algunos casos, sobre todo cuando las interfaces requieren de mayor procesamiento, en estos casos donde el navegador, html y el javascript ya no es suficiente.
Anteriormente la manera que habia encontrado era utilizando un control de usuario de una winform con el tag object, esta tecnologia muy poco documentada llamada por microsoft "Fusion", te permite que el control de usuario se ejecute sobre internet explorer, y escuchar los eventos del control utilizando javascript.
Mi siguiente proyecto lo planeo hacer utilizando WPF, pero antes me gustaria esperar a ver que sucede con Adobe AIR ya que es un proyecto de varios meses, por lo que pronto me encontrare trabajando sobre una pequeñan aplicación de prueba utilizando AIR.
En la siguiente liga tambien se encuentra una comparativa interesante:
http://blogs.zdnet.com/Stewart/?p=350
Fuente:tisobrelaweb
¿Tienes alguna recomendación o comentario sobre cual es mejor opción?
» Leer más, comentarios, etc...
Picando Código
Resúmen anual JUGUY
Diciembre 28th, 2007 - [Enlace local]

El grupo de usuarios Java del Uruguay, envía un mail a los usuarios con un resúmen anual del grupo, además de las expectativas para el 2008.
Qué mejor momento que ahora para inscribirse en la comunidad!
Al culminar este año, que coincide con el primer año de vida del grupo, queremos desearles a todos un excelente 2008 y compartir un pequeño resumen de lo logrado en 2007 y los planes para el año que comienza.
El balance del 2007 para el grupo es mas que positivo.
Comenzamos hace poco mas de un año con muchas expectativas y nada de experiencia en la formación de comunidades de usuarios, área en la que tenemos muchísimo por mejorar, y a la fecha nuestra comunidad se compone de mas de 460 usuarios.
Organizamos, tanto solos como en colaboración con el Grupo de Usuarios Linux del Uruguay, charlas y talleres técnicos abiertos y gratuitos, orientados a volcar conocimiento genuino (sin componentes de marketing) a la comunidad informática, sean o no parte de los respectivos grupos de usuarios.
Logramos un acuerdo importante con la editorial O’Reilly que ha servido como base para la formación de nuestra, por ahora pequeña pero en crecimiento, biblioteca.
Logramos un acuerdo con la Iniciativa Académica de Sun (SAI), que permite que nuestros usuarios cuenten con los beneficios que tienen los estudiantes de insitituciones educativas asociadas a la SAI. Entre otros la posibilidad de acceder gratuitamente a un amplio conjunto de cursos online y a descuentos del 60% en las certificaciones oficiales de Sun.
Logramos realizar el mayor evento tecnológico del área Java del Uruguay, con mas de 400 asistentes. Javauy07 presentó en dos tardes alrededor de 20 sesiones y laboratorios técnicos completamente gratuitos y completamente “marketing free”
Hay muchísimas cosas para hacer en 2008 y a partir de febrero o marzo, luego de un merecido descanso, comenzaremos a convocarlos para participar tanto en los temas que tenemos en agenda como aportando nuevas iniciativas.
Entre otras cosas queremos:
- Aumentar la participación de los usuarios y mejorar y aumentar los servicios que el grupo pueda aportar a los mismos.
- Seguir ampliando la biblioteca e instrumentar la logística para que puedan acceder a la misma.
- Organizar mas y mejores talleres y charlas técnicos.
- Profundizar el relacionamiento con otras comunidades de Uruguay y del exterior.
- Lograr que Javauy08 sea aún mejor que Javauy07, ofreciendo excelentes sesiones de conferencistas nacionales y extranjeros para distintos niveles de usuarios, ampliando la cantidad de asistentes y conservando las características de gratuito y “libre de marketing”.
- Promover las buenas ideas que aporten nuestros usuarios fomentando una comunidad horizontal, cooperativa y democrática.
- Promover proyectos de software libre para la comunidad.
- Promover disintas formas de aportes del grupo a la sociedad en general.
Para finalizar queremos agradecer a todos los que apoyan esta iniciativa:
- A las empresas que nos apoyaron en distintas oportunidades y en particular para que Javauy07 fuera una realidad (están en la página del evento).
- A la comunidad internacional de grupos de usuarios Java y a Aaron Houston quien coordina el apoyo de Sun a los mismos.
- A las empresas que publicaron ofertas de trabajo en el portal del grupo.
- A todos los que participaron activamente este año en distintas oportunidades y en particular en la organización de Javauy07, que demandó muchas horas del tiempo particular de los organizadores.
- A todos los usuarios que se registraron en el grupo y que esperamos que en este 2008 ,en la medida de lo posible, puedan aportar su pequeño granito de arena para que el grupo siga creciendo y convirtiendose en la herramienta que deseamos para el crecimiento personal y profesional de todos los que formamos parte del mismo.
Felicidades y un gran abrazo a todos!
» Leer más, comentarios, etc...
Fetishcode...Thinking in objects
Fetishcode estrena diseño
Diciembre 28th, 2007 - [Enlace local]
A
» Leer más, comentarios, etc...
soft·in·spain
Servicio de galerías fotograficas
Diciembre 28th, 2007 - [Enlace local]
Acabamos de poner en marcha una revisión de la web de La Galería Digital
Se trata de un sistema de galerías fotográficas en Internet donde los fotógrafos, profesionales y amateurs, pueden mostrar sus imágenes, incluso vender fotos. Tiene la posibilidad de tener álbumes privados y públicos.

Ahora hemos automatizado el alta de las galerías, tanto para prueba como para compra, pudiendo realizar el pago mediante Paypal. Inicialmente las galerías tienen 1GB de espacio, pero no hay límite, se paga por uso.
» Leer más, comentarios, etc...
Blog del grupo SQUaC
Método infalible de identificación de bugs
Diciembre 28th, 2007 - [Enlace local]
En muchas ocasiones los profesionales dedicados al testeo tienen problemas en decidir si un determinado funcionamiento de un sistema o de un programa es una funcionalidad esperada (de acuerdo a las especificaciones), o si se trata de un error (un bug). Hemos encontrado un gráfico que permite diferenciar ambos casos de una manera sencilla, y que [...]
» Leer más, comentarios, etc...
programania
Mejorar las excepciones con el __autoload en PHP
Diciembre 28th, 2007 - [Enlace local]
function __autoload($className){
if(!file_exists($className.'.php')){
return eval("class {$className}{public function __construct(){throw new
Exception('Class not found!');}}");
}
Es una elegante manera de provocar y controlar excepciones al autocargar clases.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Canciones del programador
Diciembre 28th, 2007 - [Enlace local]
En varios blogs, he leído sobre las canciones del programador para estas navidades, en sus dos variantes:
1) Reggaeton
2) Punk-Rock
Personalmente, me quedo con la segunda versión, aunque la letra de ambas, merece la pena.
Artículo publicado originalmente en Bitácora de Javier Gutiérrez Chamorro (Guti).
» Leer más, comentarios, etc...
Variable not found
Rumor confirmado: Microsoft ficha a Stallman
Diciembre 28th, 2007 - [Enlace local]
Aunque hace varias semanas que el rumor saltó a la blogosfera, hoy han confirmado la noticia en una rueda de prensa conjunta: a partir del próximo 1 de enero Stallman formará parte de la plantilla de Microsoft en Redmond.
La nota de prensa publicada por Microsoft recoge, textualmente, los siguientes párrafos:
"Microsoft siempre apuesta por el talento, y Richard Stallman es uno de los más reputados ideólogos del mundo del desarrollo del software."Por su parte, Richard Stallman, que nunca ha destacado por su aprecio a la multinacional, justifica la decisión en su blog:
[...]
"Sin duda, se trata de una de las incorporaciones más importantes a la compañía de los últimos años, por lo que no hemos escatimado en recursos. Las negociaciones las han llevado a cabo directamente Gates y Ballmer, los dos máximos directivos, lo que demuestra la magnitud de la apuesta estratégica que se está llevando a cabo"
"En realidad nuestras posturas nunca han estado muy alejadas, aunque veíamos las cosas desde perspectivas diferentes. Microsoft, al igual que GNU y el conjunto del movimiento Open Source, pretende hacer llegar el software a todo el mundo y hacer que sea un bien universal."
[...]
"Hay más puntos en común que diferencias, sólo era cuestión de sentarnos y dialogar sobre hacia dónde podíamos caminar juntos"
En principio Stallman encabezará una nueva división en Microsoft destinada al análisis y evaluación de soluciones de software libre para el segmento SOHO (Small Office, Home Office) y grandes corporaciones, así como a dirigir la adaptación de ciertos componentes del microkernel de Linux a Windows Server 2012 (codename "MindBreaker"), que se lanzará al mercado en unos años y del que ya están disponibles vía MSDN algunos whitepapers y documentos muy muy preliminares.Este movimiento forma parte de la estrategia de acercamiento de Microsoft al mundo del software libre, como se lleva viendo algún tiempo. Los acuerdos entre Microsft y Novell, la publicación del código fuente de .NET Framework y la gran cantidad de líneas de actuación que están promoviendo así lo demuestran.
Y por cierto, se dice que el próximo en la lista de Most Wanted People de Microsoft y con el que hay conversaciones bastante avanzadas (de nuevo, pues ya las hubo hace tiempo) es Miguel de Icaza, líder del proyecto Mono, aunque él todavía no ha declarado nada al respecto. Otros en la lista son el mismísimo Linus Torvalds, creador del primer núcleo de Linux, firme candidato a liderar el área de arquitectura de servidores y servicios, y Vinton Cerf, considerado el padre de internet, para el puesto de Technical Chief Developer de la línea de productos Internet Explorer.
Habrá que esperar para ver a qué conduce esta reorientación en la estrategia que se viene observando desde hace unos meses, y sobre todo en qué se traduce la fiebre por los fichajes de figuras del mundillo. El tiempo lo dirá.
Nota para despistados, que haberlos, haylos: obviamente la noticia no es real, se trata de una broma del día de los inocentes.
Por cierto, hay muchos comentarios simpáticos en mi blog en geeks.ms.
Publicado en: www.variablenotfound.com.
» Leer más, comentarios, etc...
Buayacorp
Nueva revista sobre PostgreSQL
Diciembre 28th, 2007 - [Enlace local]
Para los que suelen trabajar con PostgreSQL, acaba de salir el primer número de la revista Postgres OnLine Journal, que trata sólo temas relacionados a PostgreSQL. Esta edición incluye los siguientes artículos:
- PostgreSQL The Road Behind and Ahead.
- PostgreSQL 8.3 is just around the Corner.
- Converting from Unix Timestamp to PostgreSQL Timestamp or Date.
- Using Distinct ON to return newest order for each customer.
- How to create an index based on a function Intermediate.
- The Anatomy of a PostgreSQL - Part 1.
- How does CLUSTER ON improve index performance Intermediate.
- Language Architecture in PostgreSQL.
- PostGIS for geospatial analysis and mapping.
- Database Abstraction with Updateable Views.
El siguiente número todavía está en progreso pero se puede estar leyendo parte de los artículos.
» Leer más, comentarios, etc...
diaztorres.com
Obligada lectura: E4X
Diciembre 27th, 2007 - [Enlace local]
Este es un post de obligada lectura sobre E4X.
“AS3 E4X Rundown” de Roger Braunstein
» Leer más, comentarios, etc...
Jorge Dieguez Blog
Los Portales, más allá de la publicación de contenidos
Diciembre 27th, 2007 - [Enlace local]
Tengo muchos amigos que desarrollan aplicaciones Web, aplicaciones “serias” que gestionan procesos “críticos”.
Hablando con uno de ellos,Pablo Espinosa le planteaba la pregunta:
¿Por qué no usas alguna solución basada en Portal?, como Pablo trabaja con tecnología Java lo primero que le envié fueron los links de los productos que podría usar como servidores de Portal:
En principio se tiene asociada la imagen de una solución de Portal con gestión y publicación de contenidos Web en entornos de Internet(páginas web corporativas) o Intranet(portal del empleado).
Muchas personas a priori no le ven utilidad a un Portal para construir las aplicaciones de negocio. ¿Dónde están las ventajas?
La idea de un Portal es permitir de forma visual componer / configurar soluciones en tiempo de ejecución y de forma ágil para el cliente.
Los portales(entre otras funcionalidades) permiten componer las paginas por medio de Componentes Gestionables WebParts(Portlest en el mundo Java).
El administrador(o un usuario con privilegios determinados) arrastra y suelta los componentes que necesite en cada momento. En lugar de diseñar la vista(.aspx o .jsp) en tiempo de diseño lo hacemos en tiempo de ejecución. De esta forma obtenemos una solución flexible, extensible y que se adapta de forma ágil a las necesidades del negocio.
Normalmente los Portales permiten asociar a cada componente reglas de seguridad, de esta forma no todos los usuarios pueden ver todos los componentes de una página.
Si hay personas que aun no lo ven que jueguen con http://www.google.com/ig y se imaginen que el ERP de la empresa se configura en base a crear pestaña y arrastrar componentes(lista de clientes, lista de proveedores, material, proyectos, etc.) a la pagina que tiene cada pestaña.
Por otra parte es muy importante el correcto diseño de la lógica de negocio(que no está implementada en los WebParts), en este punto la idea es que la lógica de negocio se exponga como API o Servicio Web, de esta forma los WebParts interactúan con la lógica de negocio(así como sistemas externos también pueden consumir los servicios).
Como me comento mi buen amigo Ángel,con referencia al uso de Portales como base para aplicaciones Web:
"te lo damos todo hecho, pero si tu quieres perder el tiempo"
"pero aquí nos gusta inventar la rueda" :-)
» Leer más, comentarios, etc...
xailer.info (esp)
FormWizard una pequeña utilidad para Xailer.
Diciembre 27th, 2007 - [Enlace local]
Una de las mejores cosas que tenemos a nuestra disposición en Xailer, es poder diseñar nuestros Form con acceso a una base de datos usando DataControls de una forma muy sencilla.
Pero comentando el otro día, en la taberna entre dos vinos como hacemos los de Bilbao, el amigo David Marina me comentaba que le parecía curioso que no hubiera, como en otros IDEs de programación, algunos Wizard para hacer cosas elementales como un form con todos los campos de una tabla y tenía razón, así que le animé a que lo hiciera como ejercicio práctico y así comenzó esta pequeña historia que entre ambos hemos montado.
FormWizard es una utilidad que permite tomar un DBF (lo siento de momento no sabemos de SQL) y con todos sus campos o los indicados y en el orden deseado, mas otras florituras, genera un formulario con su PRG y XFM que guardaremos en la carpeta Source del proyecto en el que estamos y listo. Asigna los DataControl al control más lógico, los autoajusta al tamaño necesario, etc.
A continuación simplemente añadimos el recién creado PRG al proyecto (Proyecto - Añadir fichero al proyecto o el Icono correspondiente) y listo. Pulsando F12 podremos ver el formulario y modificarlo al gusto si nos apetece, ya que es lo mismo que si lo hubiéramos hecho a mano desde cero con el IDE.
Si además queremos usarlo con mas facilidad lo mejor es meter el ejecutable en la carpeta que queramos (yo lo he puesto en C:\Xailer\Bin) añadirlo al menú herramientas mediante la opción “Configurar herramientas? con los siguientes datos:

Aunque no es una ayuda bárbara, esperamos que os guste y le saquéis provecho a nuestro regalo navideño. Proyecto FormWizard
» Leer más, comentarios, etc...
Buayacorp
Nueva versión del plugin “Permalink Fix?
Diciembre 27th, 2007 - [Enlace local]
Hace algún tiempo publiqué una versión alpha de un plugin que elimina todos los caracteres especiales de los permalinks (Ejm: ¿, !, etc). Si bien es cierto que este plugin hacía relativamente bien su trabajo, existía un bug en el para las entradas anteriores que contenían ese tipo de caracteres, devolvía una página de error (no encontrado).
Aprovechando el tiempo libre de estas fiestas de fin de año he corregido este bug, de modo que ahora el plugin sólo se ejecuta antes de guardar las entradas:
<?php
/*
Plugin Name: Permalink Fix
Plugin URI: http://www.buayacorp.com/
Description: Elimina algunos caracteres especiales de las URLs de las entradas (Ejm: ¿, !, etc).
Author: Alexander Concha
Version: 0.1.2
Author URI: http://www.buayacorp.com/
*/
if (!defined('ABSPATH')) die;
// Based on sanitize_title_with_dashes method (wp-includes/formatting.php)
function custom_sanitize_title_with_dashes($title) {
$title = strip_tags($title);
// Preserve escaped octets.
$title = preg_replace('|%([a-fA-F0-9][a-fA-F0-9])|', '---$1---', $title);
// Remove percent signs that are not part of an octet.
$title = str_replace('%', '', $title);
// Restore octets.
$title = preg_replace('|---([a-fA-F0-9][a-fA-F0-9])---|', '%$1', $title);
$title = remove_accents($title);
if (function_exists('mb_strtolower') && seems_utf8($title)) {
$title = mb_strtolower($title, 'UTF-8');
} else {
$title = strtolower($title);
}
$title = preg_replace('/&.+?;/', '', $title); // kill entities
$title = preg_replace('/[^%a-z0-9 _-]/', '', $title);
$title = preg_replace('/[\s-]+/', '-', $title);
$title = trim($title, '-');
return $title;
}
function __enable_fix($post_name) {
remove_filter('sanitize_title', 'sanitize_title_with_dashes');
add_filter('sanitize_title', 'custom_sanitize_title_with_dashes');
return $post_name;
}
add_filter('pre_post_name', '__enable_fix');
?>Si por azares del destino alguien está usando este plugin
, es recomendable que actualicen para evitar este molesto error. Pueden descargar la actualización desde este blog o desde mi repositorio temporal de código.
