Ingenieria de Software / Software Engineering / Project Management
BPM BPMdocs
Septiembre 30th, 2010 - [Enlace local]
Vía Club BPM me entero de que han puesto en marcha el boletin BPM docs con información por demás interesante y del primer número destaco lo siguiente:
Intranet Corporativa Integrada
» Leer más, comentarios, etc...
programania
Kanban versus… ¿GTD?
Septiembre 29th, 2010 - [Enlace local]
Estaban intentando organizar un par de proyectos de desarrollo de software personales que quiero poner en marcha y los estaba apuntando en mi Remember the milk. Mientras lo hago, me doy cuenta de que lo que realmente necesito en hacerme un sencillito Kanban. Y me viene a la cabeza… ¿en qué se diferencia hacer GTD de un Kanban personal?
Como siempre, me creo en posesión de un pensamiento único que nadie ha tenido antes… pero googeleo por si acaso. Para variar, alguien ha pensado en ello antes que yo.
El primer artículo no hay por donde cogerlo, pero el segundo hace un buen análisis. Resumiendo, ambas se parecen en:
- Kanban mediante los backlogs y GTD con los inbox, tratan de que realices una lista de items manejables y priorizados, de los cuales elijas uno (o varios) items, para que sean lo siguiente en hacer.
- Kanban con sus fases, y GTD con sus context, ofrecen una manera superflexible de organizar tus flujos de trabajo.
- Ambos buscan centrarse en lo importante, y detectar lo inútil sacándolo del proceso.
Y se diferencian en:
- WIP (Work In Progress): Kanban trata de limitar el número de items tratados a la vez, GTD no tiene ese concepto.
- Kanban es supervisual, y busca radiar el estado en que se encuentra el proyecto en cada momento. GTD busca ocultarte lo que no sea importante en un momento dado.
Por supuesto, Kanban es en principio para equipos y busca gestionar proyectos. GTD en cambio es para organización personal. Ambos se pueden combinar sin problemas.
Cuando desarrolláis un proyecto propio (sin equipo), y queréis organizaros… ¿Cómo lo hacéis? ¿Una lista sencilla al estilo GTD? ¿Un Kanban? ¿nada? ¿algún otro sistema?
Fuente original: http://personalkanban.com/designpatterns/gtd-kanban-similarities-differences-synergies-between-the-two/
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Sieve en Javascript
Septiembre 28th, 2010 - [Enlace local]
La Criba de Eratóstenes, más conocido por su nombre anglosajón de Sieve of Eratostenes, o simplemente Sieve, es un algoritmo matemático para el cálculo de números primos, descubierto por el griego que le dio nombre, allá por el años 200 AC.
Como es lógico, es la época de Eratóstenes, no había ordenadores, por lo que poco podía imaginarse del éxito que tendría su idea en este campo... Durante los 80 y los 90, Sieve era uno de los algoritmos que se utilizaba para verificar el rendimiento de compiladores y hardware, vendría a ser similar a los benchmarks que hacen hoy día los entusiastas con Prime95.
La ventaja de Sieve es que resultaba fácil de implementar, y por tanto se portó a multitud de lenguajes de programación y plataformas, por lo que era una herramienta comparativa entre equipos heterogeneos.
Por otro lado, estaba cansado de mi algoritmo de cálculo de números primos, así que lo que hoy veremos, es una implementación de Sieve sobre Javascript (es fácil encontrarlo en otros lenguajes, pero no en éste). Basicamente he portado el código de Sieve.c que vi cuando hablé de Miracle C Compiler, y lo he ejecutado en un mismo equipo, usando varios navegadores con sus correspondientes intérpretes/ejecutores de Javascript. No me he molestado en optimizarlo manualmente, ya que considero que de esta manera se resaltarán más claramente las diferencias de cada navegador.
Por motivos prácticos, lo he configurado a 10.000 iteraciones, y los resultados obtenidos han sido los siguientes:
| Navegador | Plataforma | Tiempo de ejecución (ms) |
| Chromium 6.0.479 (53979) | x86 | 14.142 |
| Firefox 4.0b3 (Gecko/20100731) | x86 | 11.187 |
| Firefox 4.0b3 (Gecko/20100731) | x64 | 13.443 |
| Internet Explorer 8.0.7600.16385 | x86 | ~200.000 |
| Internet Explorer 8.0.7600.16385 | x86 | ~200.000 |
| Opera 10.70.3468 | x86 | 18.052 |
| Safari 5.0.1 (7533.17.8) | x86 | 6.042 |
Los resultados obtenidos, son sin duda extraños. Para algunos de ellos, tengo explicación, y para otros no. Veamos...
Nitro el compilador JIT de Javascript de Safari se coloca líder, superando a los que a priori deberían estar en cabeza: Chromium y Opera.
Le sigue a mucha diferencia, TraceMonkey de Firefox, donde la versión x86 supera a la x64, en parte debido a que Sieve, tiene bastante con enteros de 32 bits, y en parte a que las compilaciones x64, no son todavía tan maduras, ni están tan optimizadas como las x86.
De cerca está V8 de Chromium, y después Carakan de Opera. Los reyes de Peacekeeper, SunSpider, y otros tests, no puede más que hacer un 4º y 5º puestos.
En la cola, tenemos a Internet Explorer, el bajísimo rendimiento de ejecución de Javascript, tanto para la versión de 32 bits, como de 64 bits, es algo que no debería extrañar a nadie, siendo unas 10 veces más lento que el más lento. Las cosas, van a cambiar radicalmente con Internet Explorer 9.
Puedes revisar el código, y ejecutarlo tu mismo aquí (1 Kb. en formato HTML).
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación
Sieve en Javascript
Septiembre 28th, 2010 - [Enlace local]
La Criba de Eratóstenes, más conocido por su nombre anglosajón de Sieve of Eratostenes, o simplemente Sieve, es un algoritmo matemático para el cálculo de números primos, descubierto por el griego que le dio nombre, allá por el años 200 AC. Como es lógico, es la época de Eratóstenes, no había ordenadores, por lo que [...]Artículos relacionadosSieve en Javascript (optimizado)
Velocidad de Javascript en Opera
Sieve en C
» Leer más, comentarios, etc...
Variable not found
Validación de peticiones en ASP.NET, o cómo evitar el error “Request.Form peligroso”
Septiembre 27th, 2010 - [Enlace local]
La validación de peticiones es un mecanismo integrado en ASP.NET que evita la entrada al sistema de valores considerados “peligrosos” para su integridad, como tags y otros elementos utilizables para la inyección de scripts (XSS) o introducción de valores no controlados.
Dado que está implementado a nivel de plataforma ASP.NET, los valores recibidos en parámetros de entrada son vigilados con ASP.NET MVC, WebForms e incluso WebPages (la tecnología incluida en el nuevo WebMatrix).
Así, en cada petición son analizados los valores recibidos en el query string, cookies y campos de formulario, generándose una bonita pantalla de error cuando se identifica algo sospechoso:
Según el comportamiento por defecto, el framework realiza esta comprobación en el método IsDangerousString() de una clase interna de System.Web, llamada CrossSiteScriptingValidation. Si estudiamos su implementación, podemos observar que se comprueban los siguientes aspectos:
- si se detecta algún ampersand “
&”, se asegura que el siguiente carácter no sea una almohadilla “#”. Esto impide la entrada de entidades como "|" - si se detecta algún símbolo “<”, se asegura que el siguiente carácter no sea alfabético, el signo de exclamación “!”, interrogación “?” o la barra de división “/”. Esto evitará la entrada de etiquetas HTML (como <script>), el cierre de las mismas o la introducción de directivas o comentarios, aunque dejará pasar algunas expresiones que pueden ser construcciones lógicas como “a<1”.
HttpRequestValidationException, cuya representación en pantalla hemos visto anteriormente.Aunque en la mayoría de ocasiones este mecanismo es muy útil, hay escenarios en los que se vuelve en nuestra contra. Por ejemplo, si en el formulario de datos hay campos destinados a la introducción de texto enriquecido, no nos permitirá la recepción de estos valores, pues normalmente incluirán tags HTML.
Veamos cómo podemos desactivar la comprobación de valores de entrada en distintos casos.
Desactivación en versiones anteriores a ASP.NET 4
Antes de la llegada de ASP.NET 4, en Webforms era posible desactivar la validación de peticiones simplemente añadiendo la directivaValidateRequest=false en las páginas:
Para evitar la introducción de esta directiva en todas las páginas, podíamos hacerlo de forma global en el web.config, añadiendo el atributo
validateRequest="false" en la sección <pages> del system.web:
También en ASP.NET MVC era posible desactivar este comportamiento muy fácilmente añadiendo a la acción del control destinataria de los datos del formulario el atributo [
ValidateInput] enviándole false como argumento:
Desactivación en ASP.NET 4
ASP.NET 4 ha introducido una serie de breaking changes que pueden hacer que aplicaciones web que antes funcionaban correctamente dejen de hacerlo. Uno de estos cambios es la forma en que se validan las peticiones.Concretamente, se ha modificado el momento en el ciclo de vida del tratamiento de las peticiones donde se realiza la validación de la información de entrada. De esta forma, ahora se aplicarán también a servicios web, handlers o módulos HTTP personalizados, que antes no eran comprobados.
Así, por defecto, se realizará la validación antes de que entren en escena las directivas de página en Webforms o los atributos del controlador, por lo que se producirá la excepción de validación aunque la hayamos desactivado con ellos.
La forma de evitar esto es indicar en el web.config que queremos trabajar en modo compatible con versiones anteriores, introduciendo en el elemento
<httpRuntime> el atributo requestValidationMode="2.0":
¿Y la desactivación para un único campo?
En apartados anteriores hemos visto cómo desactivar las comprobaciones de la petición sobre páginas (en el caso de Webforms) y acciones (en ASP.NET MVC). El problema de la aparición del error “se detectó un posible valor Request.Form peligroso” lo solucionaríamos muy rápidamente con las técnicas descritas.Sin embargo, fijaos que al deshabilitar la validación lo hacemos sobre la petición completa; por ejemplo, si la desactivamos para una página donde existe un único campo en el que debe introducirse HTML estaríamos abriendo la posibilidad de que un usuario malintencionado introdujera código script en otros campos del formulario a los que posiblemente no prestemos tanta atención.
Curiosamente, analizando el código de ASP.NET he descubierto que existe un atajo que nos permite saltarnos la validación en un campo concreto del formulario, aunque la comprobación de peticiones se encuentre habilitada para la página, como es por defecto.
El hecho es que si el nombre del campo del formulario comienza por dos caracteres de subrayado, por ejemplo, “
__Texto”, no se efectúan sobre él las comprobaciones de validación, probablemente para evitar que se realice sobre los campos especiales como “__VIEWSTATE ” o “__EVENTVALIDATION”. Por tanto, si introducimos en un formulario cuadros de texto o textareas en los que queremos saltarnos esta validación, basta con nombrarlos siguiendo esta regla, como en el siguiente ejemplo, para ASP.NET MVC:
Asimismo, puede utilizarse con ASP.NET Webforms. En este caso, sólo debemos asegurarnos de que el nombre (el atributo name) asignado en cliente al control comience por el doble subrayado:
Publicado en: Variable not found.
» Leer más, comentarios, etc...
Cerebro en la Sombra » Técnico
Mi pequeña biblioteca técnica
Septiembre 27th, 2010 - [Enlace local]
Hoy voy a mostraros la pequeña colección de libros técnicos que he ido acumulando durante los últimos diez años. A tiempo pasado me he dado cuenta de que una gran mayoría de ellos no pintan nada ya en la estantería ya que son tecnologías desfasadas o superadas por nuevas versiones, tal es el caso, por ejemplo, de Visual Basic 6.0, Windows NT, Oracle 8i… Otros pueden servir aún como introducción general (Java2, SQL Server, MySQL, etc.), pero nunca serán un referente en sí mismos ya que están también “anticuados“. Bien es verdad, y considero importante puntualizarlo, que el grueso de mi biblioteca data del periodo 2000-2005, los últimos años apenas he comprado nada, Internet es, sin lugar a dudas, la biblioteca particular de todos nosotros. Mis últimas adquisiciones tratan temas más relacionados con la gestión (de proyectos, personas y negocios) que con la tecnología en sí misma, y es que estos últimos no pierden su capacidad de enseñanza, con los años siguen ahí para quien quiera consultarlos.
Estos son mis libros, agrupados, más o menos, por temática. Indico entre paréntesis el/los autor/es y la editorial, a continuación el año en que lo compré y una pequeña reseña del mismo.
- Sistemas Operativos:
- Guía completa de Microsoft Windows NT Server 4.0 (Russel y Crawlord, Mc Graw Hill), 2000. Con este y los dos siguientes aprendí todo lo relacionado con redes Windows, controladores de dominio, usuarios, etc. En su momento me fueron de muchísima utilidad e incluso gracias a ellos llegué a impartir formación sobre Windows NT, ha pasado mucho tiempo ya.
- Windows NT 4.0 Server, instalación y gestión (J.M. Martínez y M. Martínez, Prentice Hall), 2000.
- Windows NT Server 4.0 (Anaya Multimedia), 2000.
- Linux Máxima Seguridad (Anónimo, Sams), 2002. En su momento me pareció una joya y me sirvió para profundizar y mejorar considerablemente mis conocimientos en temas de seguridad, auditoría e IDS en sistemas Linux. Aún sigo haciendo alguna consulta de vez en cuando.
- El Libro Oficial de Red Hat Linux – Firewalls (Bill McCarty, Anaya Multimedia), 2003. Fundamental junto al anterior en mi formación sobre sistemas de red avanzados bajo Linux. También sigo echándole un ojo de vez en cuando aunque en Internet esté toda la información más que explicada.
- Programación y lenguajes:
- Teach yourself Java2 in 21 Days Second Edition (Lemay & Cadenhead), 2001. Un clásico. Con la primera edición aprendí Java allá por 1996. Con este libro recuperé mi formación en Java, importante en aquel momento.
- Core Servlets and Java Server Pages (Marty Hall), 2002. Tras mejorar mis conocimientos de java con el anterior y junto al siguiente, aprendí todo lo relacionado con aplicaciones web en Java. En su momento me parecieron un par de libros fundamentales.
- More Servlets and Java Server Pages (Marty Hall), 2002.
- Creación de sitios web con XML y Java (Maruyama, Tamura y Uramoto, Prentice Hall), 2002. Lo compré a raíz de los anteriores, supongo que lo habría visto recomendado en algún lado, pero no recuerdo que me pareciese un libro impactante.
- Learning Perl 3rd Edition (Schwartz & Phoenix, O’Reilly), 2002. Necesitaba algo de formación en Perl pero nunca llegué a leérmelo entero, más que nada porque nunca llegué a necesitar un nivel avanzado en Perl.
- ActionScript con FlashMX Edición Especial (Prentice Hall), 2003. Sin duda otro libro básico en mi formación. Gracias a él aprendí todo lo relacionado con ActionScript, algo que me ayudó enormemente a dar el paso a Flex algún tiempo después.
- Desarrollo de juegos con J2ME (Manuel J. Prieto, Ra-Ma), 2005. Un proyecto fracasado
, en aquel momento tenía algunas ideas en la cabeza pero nunca llegué a leerme este libro. - Visual C#.NET (Fco. Charte Ojeda, Anaya Multimedia), 2004. No lo compré, llegó a mis manos por casualidad y tampoco hice nada con él.
- Enciclopedia de Microsoft Visual Basic 6.0 (Fco. Javier Ceballos, Ra-Ma), 2000. Sin lugar a dudas fue básico en mi formación inicial allá por el año 2000. Hoy está completamente desfasado gracias a la tecnología .NET, pero en aquel momento era imprescindible. Creo que fue el primero de todos.
- Programación de Active Server Pages (Hillier & Mezick, Mc Graw Hill), 2000. Gracias a este libro conseguí mi primer trabajo de programador web. Corría el año 2000 y comenzaba mi carrera profesional. Junto al anterior, fueron mis primeros libros.
- XML (Óscar González, Anaya Multimedia), 2001. Cuando estaba aprendiendo Java, no recuerdo por qué, necesitaba conocimientos avanzados en XML y este pequeño libro de bolsillo me dio lo que buscaba.
- WebServices (Joan Ribas Lequerica, Anaya Multimedia), 2003. Lo mismo que el anterior pero para WebServices, va al meollo del asunto sin complicaciones.
- La Biblia ASP.Net (Mridula Parihar, Anaya Multimedia), 2009. Mi última adquisición. Por cuestiones profesionales he de ponerme las pilas con .NET, ahí lo tengo esperando
. - The Pragmatic Programmer – From Journeyman to Master (Andrew Hunt & David Thomas, Addison Wesley), 2006. Fundamental para cualquier programador, todo lo que cuenta es completamente lógico y de cajón, tanto que muchas veces lo olvidamos todo.
- The Unified Modelling LAnguage User Guide Second Edition (Booch, Rumbaugh & Jacobson, Addison Wesley), 2007. La biblia del UML.
- UML y Patrones Segunda Edición (Craig Larman, Pearson – Prentice Hall), 2005. Empieza bien, pero me lo dejé a mitad, es bastante espeso. Espero retomarlo pronto.
- The Zen of CSS Design (Dave Shea & Molly E. Holzschlag, New Riders), 2005. Éste y el siguiente me ayudaron considerablemente a entrar en el mundo del CSS, hay miles de recursos en Internet, pero no está de más tener algo de ayuda “a mano“.
- Stylin’ with CSS – A Designer’s guide (Charles Wyke-Smith, New Riders), 2005.
- Usabilidad – Diseño de sitios web (Jakob Nielsen, Prentice Hall), 2002. Completamente imprescindible. Recuerdo cómo me impactó su lectura y cómo me abrió los ojos hacia el desconocido campo de la usabilidad en un momento donde no estaba tan de moda como ahora. Todos los que trabajamos en diseño de software deberíamos leerlo, no es que aporte nada concreto, lo importante es la visión global que te hace tener sobre cómo deben pensarse las cosas que fabricas teniendo en cuenta en quién las utilizará.
- Bases de datos:
- Oracle 8i Guía de aprendizaje (Abbey, Corey y Abramson, Oracle Press), 2001. Este libro me permitió salir airoso de una tarea que me habían encomendado por aquella época, gracias a él conseguí aprender los conceptos básicos de Oracle.
- Oracle 9i – Servidor de aplicaciones, red y programación (Cesa Pérez, Ra-Ma), 2003. La idea era prolongar los conocimientos que había alcanzado con el anterior, pero al final todo se quedó en nada ya que profesionalmente me aparté de Oracle.
- MySQL Edición Especial (Paul DuBois, Prentice Hall), 2001. La lectura de este libro fue fundamental para mi en aquel momento, con él aprendí a tunear y optimizar un sistema con una elevada carga. En 2001 no había tanta literatura al respecto en Internet como hay hoy en día.
- Microsoft SQL Server a Fondo (Soukup, Mc Graw Hill), 2001. Mi primera toma de contacto con la base de datos de Microsoft.
- Management y gestión de proyectos:
- Behind Closed Doors – The secrets of great management (Johanna Rothman & Esther Derby, Pragmatic Bookshlef), 2007. Obligada lectura para cualquier manager de IT.
- El Mito de la Motivación (Reinhard K. Sprenger, Diaz de Santos), 2007. De nuevo, fundamental para cualquier manager o puestos con gente a su cargo.
- La Guía Definitica de la Gestión de Proyectos (Nokes & Greenwood, Prentice Hall), 2007. Lo considero fundamental ya que gracias a él aprendí todos los conceptos relativos a la gestión de proyectos, considero que es un primer paso muy interesante.
- Dirección y Gestión de Proyectos, un enfoque práctico (Alberto Domingo Ajenjo, Ra-Ma), 2006. Complementario al anterior, aunque hablan de lo mismo lo hacen en distintas líneas.
- Manual de Consultoría, Como iniciarse y crecer en el mundo de la consultoría (Tom Lambert, Gestión 2000), 2001. Fue el primer libro de gestión que leí, no lo recuerdo como algo fundamental pero dí mis primeros pasos en la consultoría y gestión de proyectos gracias a él, así que supongo que algo habré aprendido
.
- Negocios y emprendedurismo:
- El Manifiesto Cultrain (Levine, Locke, Searls & Weinberger, Deusto), 2008. Un clásico sobre la gestión de negocios en Internet orientado hacia el trato con el cliente, la apertura de información en ambos sentidos, etc.
- El Arte de Empezar (Guy Kawasaki, Ilustrae), 2007. Otro clásico. Kawasaki expone su experiencia en la creación y desarrollo de startups.
- El libro negro del emprendedor (Fernando Trías de Bes, Empresa Activa), 2008. Sería el equivalente en español al de Guy Kawasaki. Muy recomendables los tres en todo caso.
- Multimedia:
- Premiere 6.5 (Antonio Paniagua Navarro, Anaya Multimedia) 2002. Con este pequeño manual dí mis primeros pasos en la edición de vídeo digital.
- Adobe AfterEfeects 5 (Anaya Multimedia), 2002. Y con este otro profundicé un poco en ellos
. - Photoshop 5.5 para Windows (Miguel Angel Casanova González & Azucena González Ajenjo, Anaya Multimedia), 2001. Nunca llegué a leerlo, ni ganas de hacerlo
.
Como conclusión, lo que os comentaba anteriormente. La mayoría de libros decentes sobre lenguajes de programación son muy caros y su vida útil es, como mucho, un par de años, a no ser que sea algo más tradicional como C ó C++. Hoy en día en Internet hay literatura de sobra para aprender cualquier cosa, la única pega que teníamos era tener que pegarte al monitor para leer un pdf o imprimirlo. Por suerte, la bajada de precios de los ebooks hace que durante los próximos meses asistamos a una migración paulatina de lectura técnica hacia los libros electrónicos, y es que así ya puedes ojear tranquilamente ese pdf de Python que tienes pendiente
.
» Leer más, comentarios, etc...
Variable not found
Enlaces interesantes 15
Septiembre 26th, 2010 - [Enlace local]
Estos son los enlaces publicados en Variable not found en Facebook y Twitter desde el domingo, 19 de septiembre de 2010 hasta el domingo, 26 de septiembre de 2010.
Espero que te resulten interesantes. :-)
- Cookies grabadas a fuego: Evercookie.
Fecha: 26/09/2010 - EF4 Code First, MVC2 y Unity para atarlo todo un poco... , por Eduard Tomás.
Fecha: 24/09/2010 - La mejor forma de aprender a programar, y OrderedDictionary vs Dictionary, por José Manuel Alarcón.
Fecha: 24/09/2010 - Proveedor de SiteMaps para ASP.NET MVC. Fecha: 23/09/2010
- Cómo eliminar las cadenas mágicas en consultas con DataServiceQuery
Fecha: 23/09/2010 - Face Detection API: detección de caras en fotos de forma sencilla (vía CampusMVP)
Fecha: 22/09/2010 - El interfaz IValidatableObject de ASP.NET MVC 3.
Fecha: 22/09/2010 - Filtros globales y condicionales en MVC 3.
Fecha: 22/09/2010 - Brutal! Explicación muy buena en vídeo sobre la vulnerabilidad de ASP.NET (vía CampusMVP) Fecha: 21/09/2010
- Elijah Manor: "HowTo: Facebook Connect & ASP.NET MVC"
Fecha: 20/09/2010 - ¡Imprescindible! Buenas prácticas para ASP.NET MVC , creado por Microsoft.
Fecha: 20/09/2010
Publicado en: Variable not found
» Leer más, comentarios, etc...
Fetishcode
Borrar directorio en MS-DOS
Septiembre 25th, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
Monocaffe
No más Facebook
Septiembre 24th, 2010 - [Enlace local]
Cuando un servicio como Facebook deja de funcionar durante un par de horas, mucha gente se pregunta ¿por qué? La respuesta sólo la saben ellos, pero queda clara una de las mayores debilidades de Facebook: centralizado.
Centralizado
Esto significa que sólo existe en un sitio, una sola empresa lo controla y sólo una empresa se beneficia. Por lo que todas las decisiones son unilaterales por parte de una empresa, y las empresas tienen un único objetivo, ganar dinero. ¿Cómo gana dinero Facebook? No sólo con los pequeños anuncios que aparecen en la página, ya que en realidad, no hay muchos. El negocio está en vender los datos que poseen. Os recomiendo el documental "Revolución virtual: El precio de lo gratuito":
"En este nuevo negocio de la información la moneda de cambio, no es tanto el dinero físico como los datos y características del usuario potencial del entorno web. Así vemos como nuestra privacidad se diluye, se trafica con ella, en favor de los intereses económicos de las grandes empresas virtuales."
Diaspora
Hace unos meses se hizo mucha publicidad sobre "Diaspora" donde la idea principal, es conseguir crear un clon de Facebook que no este controlado por ninguna empresa. Para lograr este cometido, la única solución es utilizar un sistema distribuido.
El código de Diaspora fue liberado hace poco, lo cual significa que todo el mundo se ha puesto a revisarlo y las conclusiones en principio no parecen nada prometedoras tanto por el lenguaje (Ruby) como por la arquitectura de servidores distribuidos y por muchos fallos de diseño y seguridad.
Appleseed, GNUSocial y Status.Net
Sí, Diaspora no es la primera ni será la última competencia que va a intentar quitar el reinato de las redes sociales a Facebook, de hecho, el proyecto Appleseed, lleva funcionando y liberando versiones desde el año 2005. Status.Net es un clon de Twitter que funciona mucho mejor y Drumbeat es usado a diario por muchas personas detrás de Firefox asi que ¿por qué se ha hecho tanta publicidad a Diaspora habiendo tantos otros proyectos iguales y con más evolución? Supongo que será porque siempre que se escribe de Diaspora se trata de 4 chavales universitarios de NY contra la gigante Facebook, y esto vende muchas portadas.
Aquí os dejo una lista de otros proyectos de redes sociales distribuidas y abiertas:
zeldab
movim
ucentric
openlink data spaces
socialriver
mozilla's drumbeat
diso project
appleseed
higgin's project
gnusocial
smob
onesocialweb
status.net
Por último y para quienes deseen profundizar más en el tema, os dejo éste reporte hecho para la W3C sobre las redes sociales y las posibles soluciones al problema que es Facebook para la privacidad. Ahora sólo falta que el FarmVille funcione sin Faceboo.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
QB64
Septiembre 24th, 2010 - [Enlace local]
¿Os interesaría poder compilar vuestros antiguos fuentes escritos en IBM BASIC/BASICA, Microsoft GW-BASIC, Microsoft QBASIC, Microsoft QuickBASIC, Microft BASIC Compiler, o Visual Basic para DOS para Windows x86, Linux x86 o Linux x64?
En caso afirmativo, tenéis disponible QB64, un entorno de desarrollo en modo texto, similar al de QuickBASIC, con una compatibilidad casi del 100% sobre el código de éste. En mi caso, tengo multitud, por no decir cientos de pequeños programitas en BASIC para PC, y ha sido un descubrimiento totalmente revelador. Es cierto que una vez me pasé a Turbo BASIC, con su sintaxis algo diferente, se perdió la compatibilidad QB, pero para eso sigue estando Power BASIC, ¿no es cierto?
Hablando de alternativas, sabréis que además de Power BASIC, hay opciones como FreeBasic, PureBasic, etc, pero al igual que Visual Basic .NET, son dialectos derivados de BASIC, pero que implementan características más modernas de diferente índole, que los hacen incompatibles con el código antiguo.
Los ejecutables que se generan, son por tanto binarios totalmente nativos, aunque lamentablemente, requieren algunas dependencias externas como SDL para funcionar, sin duda, una pena que todavía no permitan hacer compilaciones estáticas. Pero no os desesperéis, porque QB64, está todavía en la versión 0.9, y no es un producto terminado, así que paciencia, que irán viniendo más novedades.
El entorno de desarrollo, imita al interfaz en modo texto de QBASIC y QuickBASIC, lo encuentro poco práctico, pero le da un toque retro que tiene su punto.
Sobre el caso que nos ocupa, QB64, funciona transformando el fuente BASIC a C++, que luego es compilado con G++, y enlazado con las funciones que implementan las características del lenguaje BASIC original. Está tan trabajado, que es incluso capaz de emular los sonidos de BEEP y PLAY, para que funcionen desde la tarjeta de sonido de nuestro entorno.
La velocidad de ejecución de los programas compilados, es buena. Por un lado, como digo, es código nativo, al igual que lo fuera en su día QuickBASIC o Visual BASIC for DOS, pero por otro, vamos a estar ejecutando nuestros programas diseñados para 8086, 286 o 386 de la época, en como mínimo un Pentium 4, es decir, hablamos de que en el peor de los casos, tendrán 50 veces más potencia de cálculo disponible que el original, lo que puede ser una ventaja, o bien un problema, como el caso de abajo, donde a Nibbles, hay que aumentarle los tiempos de espera si queremos que sea jugable. Por lo demás, la compilación de Nibbles.bas, no ha requerido ningún cambio en el código.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación
QB64
Septiembre 24th, 2010 - [Enlace local]
¿Os interesaría poder compilar vuestros antiguos fuentes escritos en IBM BASIC/BASICA, Microsoft GW-BASIC, Microsoft QBASIC, Microsoft QuickBASIC, Microft BASIC Compiler, o Visual Basic para DOS para Windows x86, Linux x86 o Linux x64? En caso afirmativo, tenéis disponible QB64, un entorno de desarrollo en modo texto, similar al de QuickBASIC, con una compatibilidad casi del [...]Artículos relacionadosVisual Basic .NET no es Basic
Visual Basic for DOS
C/C++ interpretado
» Leer más, comentarios, etc...
Ingenieria de Software / Software Engineering / Project Management
Facilis BPMN
Septiembre 23rd, 2010 - [Enlace local]
Hablando de herramientas libres me encuentro con Facilis la cual es una herramienta gratuita para diagramar procesos bajo el estandar BPMN (Business Process Management Notation)
http://www.statum.biz/web/guest/facilis-bpmn
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Windows 3 en vivo
Septiembre 22nd, 2010 - [Enlace local]
Después de Workbench 3.1 en vivo, hoy os presento Windows 3 en vivo.
Aunque la historia de Windows se remonta a 1985 con el lanzamiento de la versión 1, a la que le siguió la versión mayor 2 de 1987, no fue hasta Windows 3 de 1990 que el entorno gráfico Windows (por aquelo tiempo no era un sistema operativo), empezó a popularizarse, y a ser adoptado por los usuarios.
Pude ver Windows 3, sobretodo en empresas, y poco en usuarios domésticos, salvo algún entusiasta. Con Windows 3.1 de 1992, y sobretodo 3.11 de 1993, esto empezaría a cambiar, marcando la linea de evolución de lo que es ahora Windows.
Personalmente por aquella época yo seguía siendo un asiduo de DOS, para posteriormente serlo de OS/2, y luego Windows NT, de manera que no lo toqué a fondo.
Windows 3.0 era capaz de funcionar en modo real hasta en un 8088 con 640 Kb. de memoria, aunque lo habitual era verlo en 286 con 1 Mb, lo que se llamaba el modo estándar, o en 386 con 2 Mb. en modo mejorado que era donde sacaba su jugo.
El video en cuestión, nos da un paseo a través de su entorno gráfico, precisamente en el modo enhanced del 386.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación
Windows 3 en vivo
Septiembre 22nd, 2010 - [Enlace local]
Después de Workbench 3.1 en vivo, hoy os presento Windows 3 en vivo. Aunque la historia de Windows se remonta a 1985 con el lanzamiento de la versión 1, a la que le siguió la versión mayor 2 de 1987, no fue hasta Windows 3 de 1990 que el entorno gráfico Windows (por aquelo tiempo [...]Artículos relacionadosCP/M en vivo
Workbench 3.1 en vivo
Windows 2003 Standard Server vs Windows XP Professional
» Leer más, comentarios, etc...
Variable not found
No se encontró la información de metadatos y asignaciones para EntityType ‘Namespace.Entidad’ (InvalidOperationException)
Septiembre 21st, 2010 - [Enlace local]
Este es un error que me ha hecho perder un buen rato mientras trabajaba con objetos POCO en Entity Framework 4, y espero que pueda ayudar a alguien que se encuentre con el mismo problema.
El tema comienza con el lanzamiento de una excepción InvalidOperationException justo en el momento de crear un ObjectSet<T> , como en el siguiente código:
class MiContexto : ObjectContext
{
...
private ObjectSet<Cliente> clientes;
public ObjectSet<Cliente> Clientes
{
get
{
return clientes ??
(clientes = CreateObjectSet<Cliente>());
}
}
}
Hay ocasiones en las que la excepción lanzada al crear el
ObjectSet es de tipo MetadataException, y contiene información suficiente para detectar el error, por lo que es sencillo dar con la solución.Sin embargo, este
InvalidOperationException y el texto que la acompaña (no se encontró la información de metadatos y asignaciones para EntityType 'Namespace.Entidad') son bastante confusos. De hecho, supongo que al ver esta descripción lo normal es que ponerse como loco a destripar el EDM para ver a dónde se ha ido la información de metadatos y asignaciones, a cambiar los namespaces… y por supuesto, todo en vano.Tras un buen rato de infructuosa investigación, acudí a Google, ese que todo lo sabe, y encontré la primera recomendación si esto te ocurre: revisa minuciosamente la definición de tus entidades POCO. Éstas deben coincidir exactamente con la definición del modelo conceptual, tanto en sus propiedades escalares, de tipos complejos y las propiedades de navegación.
Y el "minucionamente" no sobra. En mi caso había definido de forma incorrecta una propiedad de navegación, y por más que repasaba no veía ningún error; obviamente, desconfié de la recomendación que había encontrado, y me puse de nuevo a buscar la solución por mi cuenta: seguí escudriñando el EDM, regenerándolo, eliminando entidades que no usaba, modificándolas... para nada, claro.
Al final, la moraleja de esta historia es la siguiente: aunque pienses que tus entidades son correctas, vuelve a revisarlas, que fijo que algo te estás dejando por detrás.
Espero que, a diferencia de uno que yo me sé ;-), esta tontería no os haga perder mucho tiempo.
Publicado en: Variable not found.
» Leer más, comentarios, etc...
Fetishcode
OTN cambia de CMS y se modificaron algunas URL´s.
Septiembre 18th, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
Picando Código
Día de la Libertad del Software
Septiembre 17th, 2010 - [Enlace local]
.:: Día de la Libertad del Software ::.
:: Software Freedom Day ::
Invitación
Sábado 18 de Septiembre, 14:00 hs.
Museo Nacional de Artes Visuales, Sala de Conferencias.
Julio Herrera y Reissig esq. Tomás Giribaldi
Invitamos a todo grupo o individuo, conforme o afín a la Comunidad del Software Libre del Uruguay, a participar de esta reunión.
Tras los cambios experimentados a través de los últimos años, en lo que alguna vez fue un ecosistema pequeño, esta vez, en lugar de la típica jornada de charlas públicas, amerita convocar a una jornada de conciliación e integración “interna”.
La idea es: realizar un plenario, completamente abierto, donde podamos plantear y discutir todas las iniciativas e ideas de la comunidad.
Algunas que nos gustaría poner en consideración:
* Presentarse ante autoridades de gobierno, nacionales y departamentales, y ante la CUTI, CIU, etc., como Comunidad Uruguaya de Software Libre, para plantear iniciativas sobre el uso de Software Libre, y explicar sus beneficios.
* Pedir participación en órganos donde se decidan políticas de Tecnologías de la Información.
* Crear una organización formal (con personería jurídica) que defienda los principios del Software Libre en el Uruguay. Pensamos que aunando esfuerzos, esta vez, es posible concretar esta iniciativa que creemos imprescindible.
* Idear mecanismos para coordinar, y compartir información, referente a eventos, noticias e iniciativas.
* Hacer un relevamiento (en principio con los concurrentes), sobre empleadores, especialización, e intereses educativos. Esto es muy importante, por ejemplo: en la búsqueda de sponsors, futuros eventos, invitar a dar charlas en los mismos, facilitar la organización de grupos de investigación y estudio. Toda la información recabada será publicada, en principio de manera anónima, y se harán públicos aquellos datos a los cuales los integrantes accedan divulgar.
Al terminar, pensamos hacer una merienda compartida en los jardines del Museo, para seguir conociéndonos e integrándonos.
Cabe destacar que no se pretende imponer un orden del día, eso quedara a criterio de los presentes. Cualquier propuesta será bienvenida y considerada bajo los mismos términos que las antes mencionadas.
Creemos firmemente que ya es hora de que la comunidad del Software Libre Uruguaya muestre todo lo que tiene para ofrecer.
Comparte:
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti)
Miracle C Compiler
Septiembre 17th, 2010 - [Enlace local]
A mediados de los 90, me hice con una copia de Miracle C Compiler, en su versión 1.7, un sencillo compilador shareware de lenguaje C para DOS destinado al aprendizaje del lenguaje. En aquel momento lo pasé bastante por alto, desarrollando con Turbo/Borland C/C++, Microsoft Quick/Visual C/C++ y luego Watcom C/C++ que eran bastante más potentes.
Hoy, he descubierto que el proyecto sigue vivo, actualizándose, y con las misma filosofía que entonces aplicara su autor bts (Tadeusz Szocik). Es decir, una herramienta diseñada con la sencillez como objetivo, de manera que la labor de aprender C, sea lo más sencilla posible. En su última versión 4.1 incluye un IDE para Windows de 32 bits, que integra editor de código, compilador, enlazador, archivos de cabecera, librerías y documentación; todo ello en un paquete de apenas 250 Kb.
Hay que recalcar, que aunque funciona sobre Windows, los ejecutables que se crean, siguen siendo para el anciano DOS, de manera que el primer inconveniente, es que deberéis descartarlo si estáis en una plataforma x64.
El compilador soporta la sintaxis de C original del Kerningham y Richie (K&R), así como algunas extensiones de ANSI. La biblioteca en tiempo de ejecución de C, está formada solamente por algo menos de 100 funciones, que por tanto lo convierten en un producto no apto para desarrollos comerciales.
Sin embargo su fuente es como he dicho poder practicar escribiendo código C, y ahí con una documentación de calidad que incluye ejemplos, unido a lo sencillo de la implementación y el entorno, lo convierten en totalmente apto para ello. Me consta que en la actualidad, se enseña C sobre Dev-C, y en algunos casos incluso con Turbo C para DOS, que son herramientas mucho más potentes, tanto que pueden llegar a conducir al principio. Sería algo así como hacer las prácticas del carnet de conducir con un Ferrari 430.
El precio de 19$, por el que además se obtiene el código fuente de Miracle C (como antaño escrito en Visual C), es muy asequible, y apto para centros de formación, donde además se aplican descuentos por volumen a partir de las 10 unidades.
» Leer más, comentarios, etc...
Bitácora de Javier Gutiérrez Chamorro (Guti) » Programación
Miracle C Compiler
Septiembre 17th, 2010 - [Enlace local]
A mediados de los 90, me hice con una copia de Miracle C Compiler, en su versión 1.7, un sencillo compilador shareware de lenguaje C para DOS destinado al aprendizaje del lenguaje. En aquel momento lo pasé bastante por alto, desarrollando con Turbo/Borland C/C++, Microsoft Quick/Visual C/C++ y luego Watcom C/C++ que eran bastante más [...]Artículos relacionadosHisoft Basic
C/C++ interpretado
Historia de Powersoft/Sybase Watcom C/C++, OpenWatcom C/C++
» Leer más, comentarios, etc...
Fetishcode
Breve guía de WebLogic o por dónde empezar.
Septiembre 17th, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
Fetishcode
Orden de tabulación en ADF.
Septiembre 16th, 2010 - [Enlace local]
A
» Leer más, comentarios, etc...
programania
HTML 5: un esquema de enlaces
Septiembre 16th, 2010 - [Enlace local]
Es probable que pronto David, Guille y yo comencemos un pequeño proyectillo en HTML5. Para ir calentando motores, he decidido publicar esquemáticamente los enlaces que he ido acumulando en mi Google Reader. El esquema se basa en la presentación de Html5Rocks.
Mi idea es ir trabajando este esquema e ir ampliándolo poco a poco. Me gustaría ir incluyendo sugerencias que me hagáis en los comentarios…
- selectors
- sin artículos.
- Client side storage
- Web storage:
- html5 local databases: introducción: http://blog.darkcrimson.com/2010/05/local-databases/
- Web SQL Database: http://www.danilat.com/weblog/2010/05/18/sql-con-javascript-web-sql-database/
- Adios, Gears: http://www.theserverside.com/news/thread.tss?thread_id=58830
- Application cache:
- Communication
- Web Sockets:
- http://blog.higher-order.net/2010/06/01/stomple-rc1-combining-websockets-and-reliable-messaging/
- http://socket.io/
- http://sentidoweb.com/2010/03/16/websockets-en-html5-2.php
- http://bohuco.net/blog/2010/07/html5-websockets-example/
- web sockets y proxy servers: http://www.infoq.com/articles/Web-Sockets-Proxy-Servers
- web sockets versus commet: http://www.infoq.com/news/2010/03/websockets-bayeux
- http://net.tutsplus.com/tutorials/javascript-ajax/start-using-html5-websockets-today/
- http://justinireland.com/real-time-embedded-user-interfaces-using-html-css-js-and-websockets/
- http://pusherapp.com/
- Web Workers:
- Desktop experiencie
- Notifications:
- sin artículos.
- Drag and drop:
- Geolocation
- http://mobile.tutsplus.com/tutorials/html5/html5-geolocation/
- html –> semantic tags, link relations and microdata, aria attributes,
- http://ayudawordpress.com/html5-todas-las-nuevas-etiquetas/
- new form field types (color, number, email, tel, range, search, placeholder, etc…)
- http://net.tutsplus.com/tutorials/html-css-techniques/rethinking-forms-in-html5/
- http://css-tricks.com/webkit-html5-search-inputs/
- Html audio and html video
- Video and audio resources :http://woorkup.com/2010/06/05/fresh-resources-for-html5-video-and-audio/
- Media players:
- La guerra por el video:
- Microsoft a favor de html 5 y h.264: http://www.infoq.com/news/2010/04/Microsoft-HTML-5-H.264
- Facebook: http://bitelia.com/2010/04/facebook-se-pasa-a-html5
- Tools for integrating html 5 video in your website: http://mashable.com/2010/05/18/html5-video-tools/
- google webM: open video format for the web: http://www.webmproject.org/
- youporn se va a html 5: http://alt1040.com/2010/05/youporn-se-cambia-al-html5
- apple en contra de webM: http://www.applesfera.com/apple/steve-jobs-se-posiciona-en-contra-del-formato-de-video-webm
- El formato Google VP8 se hace opensource http://northtech.us/content/20100519/its-official-googles-vp8-goes-open-source
- quién es quién en la guerra del video: http://www.genbeta.com/multimedia/la-guerra-del-video-en-html5-quien-es-quien
- diez cosas que hace flash y no html 5: http://www.wirelust.com/2010/05/21/10-things-flash-can-do-today-that-html5-cant/
- youtube flash vs html5: http://www.cookingideas.es/flash-versus-html5-segun-youtube-20100630.html
- http://www.reelseo.com/youtubes-6-reasons-html5-replace-flash/
- h.264 para streaming gratuito de por vida: http://alt1040.com/2010/08/golpe-de-mpeg-la-en-la-lucha-de-los-codecs-h264-para-streaming-gratuito-de-por-vida
- apple potencia el h.264 publicando documentación para mejorar la decodificación por hardware
- http://www.applesfera.com/apple/apple-abre-las-puertas-a-la-decodificacion-de-video-h264-en-las-tarjetas-nvidia
- Html canvas and html canvas 3d (WebGL):
- Juegos en Html5:
- http://www.kesiev.com/akihabara/
- http://www.benjoffe.com/code/games/torus/
- los mejores juegos: http://savedelete.com/best-html5-canvas-games.html
- game development in html5: http://www.slideshare.net/gawd/game-development-with-html5
- Quake 2 en html 5: http://unpocodejava.wordpress.com/2010/08/17/quake-ii-ejecutandose-en-el-navegador-con-gwt-y-html-5/
- svg
- sin artículos.
- new css selectors
- new font support
- Google Font Directory: http://www.anieto2k.com/2010/05/20/google-font-directory-webfonts-disponibles-para-todos/
- text wrapping
- columns
- opacity
- hue/saturation/luminance color model
- rounded cortners, gradients, shadows
- Instant Web 2.0
- background enhancements, transitions, transforms (rotateY, scaleX, etc.. ),
- animations
- html storage:
Artículos generales
- http://slides.html5rocks.com/ (http://www.html5rocks.com/)
- http://diveintohtml5.org/
- http://www.w3avenue.com/2010/05/07/html5-unleashed-tips-tricks-and-techniques/
- http://html5demos.com/
- http://www.slideshare.net/kevinvandijk/html-5-css-3-4236708
- css 3: http://css3.bradshawenterprises.com/
- best html5 tutorials: http://www.1stwebdesigner.com/resources/the-ultimate-roundup-of-indispensable-and-helpful-html5-tutorials/
- wtf is html5 poster: http://www.focus.com/images/view/11905/
- Apple sobre html5: http://www.apple.com/html5/
- Basics: http://net.tutsplus.com/tutorials/html-css-techniques/html-5-and-css-3-the-techniques-youll-soon-be-using/
- html 5 for a better web: http://www.phpclasses.org/blog/post/98-HTML-5-for-a-better-Web.html
- http://net.tutsplus.com/tutorials/html-css-techniques/html5-apps-what-why-and-how/
- http://diveintohtml5.org/peeks-pokes-and-pointers.html
Móviles
- http://www.theserverside.com/discussions/thread.tss?thread_id=60548
- http://mir.aculo.us/2010/07/26/learn-how-to-build-awesome-mobile-html5-apps/
- http://sixrevisions.com/web-development/html5-iphone-app/
Para empezar:
- http://www.anieto2k.com/2009/07/06/chuleta-html5/
- http://www.programacion.com/noticia/html5_boilerplate_1874
Frameworks
- Simpli5: http://jacwright.com/blog/428/simpli5-an-html5-javascript-framework/
- Jo: http://grrok.com/jo/
- Sencha Touch: http://dev.sencha.com/deploy/touch/getting-started.html
- Modernizr: http://www.alistapart.com/articles/taking-advantage-of-html5-and-css3-with-modernizr/
- 52 framework: http://www.guiabreve.com/52framework-framework-html5css3.htm
- Frame: http://frame.serverboy.net/
- Aloha WYSIWYG: http://aloha-editor.com/
Miscelaneo:
- Utilidades:Cómo soporta tu navegador html 5: http://html5test.com/
- Curiosidades:http://hakim.se/experiments/
- html 5 + css3 + jquery para hacer un menú drop-down: http://net.tutsplus.com/tutorials/html-css-techniques/how-to-create-a-drop-down-nav-menu-with-html5-css3-and-jquery/
- html 5 global attributes: http://net.tutsplus.com/tutorials/html-css-techniques/html5-globals-and-you/
- Consejos para desarrollar html5 para ipad: http://www.sitepoint.com/blogs/2010/06/23/develop-for-ipad-with-html5-trial-and-error/
- WordPress y html 5: http://ayudawordpress.com/plugins-wordpress-html5/
- security: html 5 securitiy cheatsheet: http://heideri.ch/jso/
- css 3D wordpress theme: http://legendthemes.com/2010/05/14/3d-css-wordpress-theme/
Amigüitos que también hablan del tema:
- Un compendio de enlaces como el mío hecho por La personalite: http://lapersonnalite.com/como-empezar-con-esto-del-html5/
- Acortador de url´s de guille hecho en html5! http://rcrt.es/
- Epplestun: http://epplestun.blogspot.com/2010/06/charlas-sobre-html5-y-javascript.html
» Leer más, comentarios, etc...
MadeInFlex
Square: Flash Player para 64-bits
Septiembre 16th, 2010 - [Enlace local]
Flash Player “Square” es, de momento, una preview release para dar soporte nativo a los 64-bit sobre Linux, Mac OS y Windows. Además ofrece una mejora para Microsoft Internet Explorer 9 beta, soportando la aceleración gráfica mediante hardware.
Recordad que es una preview release, por lo tanto no es una versión final.
Aquí os dejo el enlace a Square para que leais más información en la página oficial de Adobe.
» Leer más, comentarios, etc...
programania
Mejorando el selector de culturas de Symfony
Septiembre 15th, 2010 - [Enlace local]
Extraído de Practical Symfony – Día 19: Internacionalización y Localización:
Pero la mayor parte del tiempo, tu sitio web no estará disponible en los 136 principales idiomas. El método
getPreferredCulture()devuelve el mejor lenguaje mediante la comparación de los idiomas preferidos del usuario y los idiomas de tu sitio web:
// in an action
$language = $request->getPreferredCulture(array('en', 'fr'));
Sí, pero si quieres hilar fino en tus aplicaciones pronto descubrirás que Symfony se queda corto con el método getPreferredCulture():
/** * Returns the preferred culture for the current request. * * @param array $cultures An array of ordered cultures available * * @return string The preferred culture */ public function getPreferredCulture(array $cultures = null) { $preferredCultures = $this->getLanguages(); if (null === $cultures) { return isset($preferredCultures[0]) ? $preferredCultures[0] : null; } if (!$preferredCultures) { return $cultures[0]; } $preferredCultures = array_values(array_intersect($preferredCultures, $cultures)); return isset($preferredCultures[0]) ? $preferredCultures[0] : $cultures[0]; }
O lo que viene a ser lo mismo: Devuélveme el primero que exista, el primero de los definidos en el navegador o nada en absoluto.
Aunque resulte raro, en la mayoría de los casos este nivel de complejidad es el suficiente ya que Symfony arreglará cualquier imprecisión que pueda darse si este mecanismo falla. No hay que olvidar que en el fichero settings.yml debemos definir una cultura por defecto para nuestra aplicación.
Pero, ¿qué pasa si un usuario configura su navegador para español de México e inglés (en ese orden de prioridad) y mi aplicación admite español (genérico) e inglés? El algoritmo anterior nos devolverá como preferido el inglés erróneamente. Según la configuración del navegador, se debería presentar un texto en español (aunque no sea en su variedad mexicana) y si esto no fuera posible, una traducción en inglés.
Es decir, los códigos de 5 carácteres de culturas como es_MX especifican una variedad del español pero no excluyen la cultura es a secas.
Por lo tanto, propongo el siguiente método para realizar una selección más precisa y configurable:
/** * Makes the best choice of culture. It can check the domain of preferred * languages in order to choose a more generic language if it's available. * * Example: * * preferred cultures: es_ES, en * available cultures: es, en, fr * * In this example this method will return 'es' over 'en' as the best choice * if $checkCultureDomains flag is enabled. * * If no preferred culture is available this method will return the * $defaultCulture. * * @param array $availableCultures Array of valid available cultures * @param array $preferredCultures Array of preferred cultures. Order DOES matter (lower index => higher priority) * @param string $defaultCulture A default culture if none of the preferred cultures is available * @param bool $checkCultureDomains Flag to enable/disable language domain check * @return string best choice culture */ public static function bestChoiceCulture($availableCultures, $preferredCultures, $defaultCulture, $checkCultureDomains = true) { foreach ($preferredCultures as $culture) { if (in_array($culture, $availableCultures)) { return $culture; } if ($checkCultureDomains) { $domain = substr($culture, 0, 2); if ($domain != $culture && in_array($domain, $availableCultures)) { return $domain; } } } return $defaultCulture; }
El único aspecto sobre el que dudo en este método es sobre la corrección de pasarle un valor por defecto a la función para ser devuelto si el algoritmo no encuentra una cultura apropiada. Qué se yo, prefiero dejarlo así por darle coherencia y atomicidad al método cuando lo use por ahí. Si molesta, se puede quitar y reemplazarlo por un return null o incluso una excepción. Al gusto del consumidor.
Happy coding!
» Leer más, comentarios, etc...
xailer.info (esp)
Ranking en Google
Septiembre 15th, 2010 - [Enlace local]
Con gran satisfacción observamos hoy que ya somos el primero en el ranking de Google al buscar la palabra ‘xbase’ y además como enlace destacado.
Muchísimas gracias a todos vosotros que sin vuestro apoyo esto no habría sido posible.

