[Escrito en una bella noche de inspiración]
Si el aleph pudiese encarnar, indudablemente, sería en aquella, la historia de las historias. La hazaña de incontables espíritus entrelazados, donde el vínculo perdura aun cuando la carne los separa. No es de dos sino de muchos. Los que la cuentan no tienen nombre, todos son dos, dos son todos. Las vagas explicaciones nunca abandonan a la mente, aderezos mágicos, supuestos reconfortantes, ideas piadosas, sueños indecibles, en conjunto, goces y penas que penetran y merman el abismo entre lo platónico y lo real. Quién de ellos no ha de preguntar al mismísimo cielo cual es la enseñanza, donde ha quedado la parábola, acaso escondida tras el gusto de la traviesa nuez, acaso flanqueada por la voluminosa masa gris. Dichosos somos de poseer algo más que un simple y recto sistema de engranes e interacciones eléctricas. Que fácil sería ser autómatas, pacientes de la ceguera, guiados por un impecable sentido de la verdad y la cordura. Ellos no serán los primeros, ni mucho menos los dos últimos. Mejor ser precavidos y aclarar que no lo serán mientras en su hábitat existan más de unos cuantos. Parece ser una ceremonia, un cortejo antiguo en el que ambos cargan sobre sus hombros costales llenos de vida, vida atrapada en cuantiosas estaciones, meses de invierno, días de primavera, tardes veraniegas, noches otoñales. Desgarradoras memorias, sí, en efecto, retazos de historias incompatibles con el mediodía. Porqué no olvidamos, se preguntan la mitad de ellos. Porqué no nos engañamos, repiten testarudamente. La otra mitad, confieso honestamente, reflexiona. Duda, y deja de reflexionar. Derrumban la enorme fortaleza, y no es sino en cuestión de segundos, para algunos minutos, que se ven a sí mismos como en aquel día que salieron expulsados del vientre materno, desnudos, débiles. Han quedado a la intemperie, sin techo, o para ser precisos, sin reparo alguno. Han perdido o han ganado, se preguntan. Es un juego, o al menos así lo han de ver. Que juego más retorcido, sufrir y querer, verbos de antaño, aunque parezca incomprensible, compatibles. Así guiados por el sendero matutino del fauno, se adentran en querellas indeseables, prenden la vela que nadie veía, resguardada tal vez para momentos como estos. Duerman, no hagan más que dormir, piérdanse en el eterno inconsciente, déjense engañar por los escasos momentos de paz, no permitan que la amargada realidad les corte las alas. Usen la imaginación, aunque sea por una noche caminen con Alicia, tomen el té con quien más lo deseen, platíquenle que por fin han encontrado lo que tanto buscaban, y no le permitan, insisto, no le permitan, hablar de lucidez. Todos lo sabemos, inclusive aquellos que piensan no saberlo, el desgraciado llega. Cuando se le antoja, claro, pero llega. Será cuestión de esperar, como algunos creen, o bien, de buscar. Es de ambos. Mis queridos dos, no se desesperen, que lo que perdió el muerto no es la vida si no la fe, y no precisamente la fe magisterial, hablo de la fe que te hace creer, sea en el infinito, en el nazareno, en la hormiga trabajadora, y porque no, en el carajo, al fin, mientras crean en creer. Qué los hace especiales, es lo que deberían de preguntar. Porque ustedes dos y no el dos numero tres y el dos número cuatro. Tarea difícil les he puesto. Piensen y sientan. A que no es fácil. No me tachen de loro, pero a lo fácil comúnmente, a pena de equivocarme, le encanta caminar con lo simple. Busquen lo complejo, así sea lo simple vestido de complejo, que la verdadera belleza no la encuentras en el cielo, está allí, donde menos lo esperan, debajo de la aparentemente tosca piedra. No, no espero que lo entiendan. Espero que lo sufran. Sigan, si así lo desean. Ritual número… he perdido la cuenta.
El plugin WP-Syntax nos permite resaltar la sintaxis de una gran variedad de lenguajes de programación, tan solo por mencionar algunos: ActionScript, ASP, Bash, C, C++, C#, Java, Javascript, Mysql, PHP, Ruby, etc. El único incoveniente que noto en este plugin (al menos hasta la versión 0.6) es que ciertos caracteres HTML especiales (como “<” y “>”) tienen que reescribirse manualmente como entidades HTML.
Afortunadamente alguien (Posting source code in WordPress: escaping and syntax highlighting the inserted code) ya se ha tomado la molestia de resolver este problema, y de paso, agregando magnificas funcionalidades como:
Pensar en el viajero promedio es pensar en aquel que busca las mejores ofertas. Es cierto, las mejores ofertas no son necesariamente aquellas que poseen los mejores precios; las mejores ofertas son las que contienen características (en el caso de los hoteles, ubicación, servicios, etc.) atractivas que resultan en beneficios notables.
Inmediatamente uno se pregunta, ¿cuál es la mejor forma de organizar un viaje, aprovechando al máximo las ofertas del mercado? Una posible respuesta es acudir a una agencia de viajes y delegar la planificación a la compañía; la desventaja: no tenemos control directo sobre lo que queremos. La segunda posibilidad radica en planificar con la ayuda de buscadores de viajes. Al menos en Europa y EUA, este tipo de buscadores no son noticia nueva; los buscadores de viajes nos permiten hacer consultas en diferentes compañías y agencias de viajes online, sin la necesidad de acceder individualmente a cada una de ellas.
Minube.com es la solución que presenta la compañía Española PRS Marketing al mercado. En su primera fase, minube le otorga al usuario una gama de servicios, integrados en una interfaz amigable e intuitiva, que facilitan la planificación y optimización de su viaje: búsqueda de vuelos baratos y hoteles en mas de 20 compañias, notificador de alertas e historial de búsquedas. Lo interesante es que minube no se limita a ofrecer solo dichos servicios, sino que pretende, en una etapa próxima, impulsar la creación de una comunidad donde los usuarios puedan formar parte activa del proyecto opinando, sugiriendo, creando perfiles de viaje y, entre otras cosas, seleccionando puntos de interés.
Y si minube no es la única solución en el mercado, ¿cuál es su factor diferenciador? ¿porqué los usuarios deberían de comprar y participar en el proyecto?
Minube sobresale por que:
El tema de SEO (Search Engine Optimization) es sumamente importante para el posicionamiento de los sitios web en los resultados de búsqueda. El SEO es un proceso que permite mejorar el volumen y la calidad de las visitas direccionadas, de forma natural, desde un buscador a un sitio web. Tres de las técnicas más recomendadas para mejorar el posicionamiento natural son:
Por defecto, a la versión 1.1.15.5144 de CakePHP, los meta tags no se pueden generar dinámicamente cuando utilizamos una plantilla (layout). Los que hayan trabajado con CakePHP reconocerán el problema que existe para enviar información, que no sea el título del documento, desde un controlador hacia un layout. Si generamos contenido dinámicamente, en este caso, naturalmente querremos definir meta-información sin tener que estar creando múltiples plantillas.
Una solución a este problema es añadir propiedades, con la misma funcionalidad de pageTitle, a las clases base de los controladores y las vistas. De esta forma, cuando asignamos a cualquiera de las propiedades nuevas determinado valor en una acción, el valor podrá ser accedido en la plantilla correspondiente, tan solo con instanciar una variable previamente definida. En pocas palabras, imitamos la forma en como CakePHP permite definir dinámicamente el título de un documento.
En este ejemplo agregaremos dos propiedades: metaDescription y metaKeywords. Para agregar estas dos propiedades debemos de:
1. Declarar dos propiedades públicas, metaDescription y metaKeywords, en el controlador base (/cake/libs/controller/controller.php):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /** * Web page meta description * * @var boolean * @access public */ var $metaDescription = false; /** * Web page meta keywords * * @var boolean * @access public */ var $metaKeywords = false; |
2. Agregamos al arreglo de lista de variables obtenidas del controlador, los nombres de las anteriores variables:
1 2 3 4 5 6 | var $_passedVars = array( 'viewVars', 'action', 'autoLayout', 'autoRender', 'ext', 'base', 'webroot', 'helpers', 'here', 'layout', 'modelNames', 'name', 'pageTitle', 'viewPath', 'params', 'data', 'webservices', 'plugin', 'metaDescription', 'metaKeywords'); |
3. Redefinimos el método renderLayout.
3.1 Después de la asignación de la variable $pageTitle agregamos:
1 2 3 4 5 6 7 8 9 10 | if ($this->metaDescription !== false) { $metaDescription = $this->metaDescription; } else { $metaDescription = ""; }if ($this->metaKeywords !== false) { $metaKeywords = $this->metaKeywords; } else { $metaKeywords = ""; } |
3.2 Editamos el arreglo $dataForLayout, agregando las llaves meta_description y meta_keywords:
1 2 3 4 5 6 7 8 9 10 11 12 | $dataForLayout = array_merge ( $this->viewVars, array ( 'title_for_layout' => $pageTitle, 'content_for_layout' => $contentForLayout, 'cakeDebug' => $debug, 'meta_description' => $metaDescription, 'meta_keywords' => $metaKeywords ) ); |
Lo único que necesitamos para añadir dinámicamente los meta tags a nuestras páginas es:
1. Asignar valores a las propiedades metaDescription y metaKeywords del controlador. Por ejemplo, para determinada acción:
1 2 3 4 5 | function view() { $this->metaDescription = "Hola Mundo"; $this->metaKeywords = "hola, mundo"; } |
2. Añadir al elemento de la plantilla las variable $meta_description y $meta_keywords:
Admito que la desventaja de esta solución radica en tener que editar directamente el núcleo del framework, sin embargo, permite resolver el problema de forma elegante, con un poco de esfuerzo. Tal vez en versiones posteriores de CakePHP podremos ver soluciones de este tipo integradas de forma natural.
Este mono parece ser de cuidado.
La gente habla mucho de las ventajas de trabajar en Google. ¿Quién no ha escuchado alguna vez de las maravillosas oficinas llenas de comodidad y espacios de juego? Aunque la realidad no es distinta, los requerimientos para entrar en la compañía, con un puesto de ingeniero, parecen ser desafiantes. El tipo de personas que Google busca deben de poseer las siguientes características:
Los requerimientos técnicos incluyen tener:
Por supuesto, estos no son los únicos requerimientos importantes. Los requerimientos varían de acuerdo al área de especialización. Por ejemplo, para ser Evangelista del API de Mapas es necesario tener mas de 4 años de experiencia con JavaScript/HTML/CSS (”Ajax”), haber desarrollado servicios web y saber como funcionan los mapas.
Y así como Google pide, Google ofrece. Los fundadores de Google construyeron la compañía alrededor de la idea de que el trabajo debería de ser desafiante y el desafío debería ser divertido. Como dice Eric Schmidt, CEO de Google: “El objetivo es eliminar todo lo que se interponga en el camino de nuestros empleados. Ofrecemos un paquete estándar de compensaciones adicionales, pero sobre eso se encuentran los comedores, gimnasios, lavanderías, cuartos de masaje, peluquerías, lavaderos automáticos de coches, autobuses - casi todo lo que un empleado trabajador podría querer. Enfrentémoslo: los programadores quieren programar, no quieren lavar su ropa. Así que les hacemos fácil realizar ambas cosas”.
En Google, el trabajo y el juego no son mutuamente excluyentes. Con toda seguridad, para los ingenieros de software, Google parece ser una empresa rica en oportunidades y desafíos. ¿Serán los retos y presiones equiparables con los beneficios económicos y personales?
Al parecer por el momento Google no está interesado en ofrecer puestos ingenieriles en México. Las vacantes, al día de hoy, están orientadas al marketing y a las ventas (Agency Relationship Manager , Associate Product Marketing Manager, Customer Solutions Engineer (Sales Engineer), etc.). Obviamente esto no quiere decir que no podamos trabajar en Google, sino que simplemente el desarrollo tipo laboratorio se encuentra fuera del país. De hecho, la oficina de Google México es una oficina de ventas. Esperemos que no pase mucho tiempo para que Google decida poner un labs headquarter en México.
Hasta hace poco desconocía la posibilidad de integrar lenguajes de programación como PHP Y Ruby en .NET. La arquitectura de .NET cuenta con un diseño espectacular: mediante el uso del lenguaje intermedio CIL (Common Intermediate Language) especificado en el CLI (Common Language Infrastructure), podemos trabajar con cualquier tipo de lenguaje. De forma simplificada, el proceso es el siguiente:
De esta forma, .NET no solo garantiza independencia del sistema, sino también, independencia del lenguaje y reutilización de código. Cualquiera sea el lenguaje en el que trabajemos, podemos desarrollar un compilador que traduzca nuestro código a CIL, y así, aprovechar el trabajo previamente realizado.
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Feb | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||