Finalmente Adobe cancela Flash para móviles

En un movimiento que para muchos no fué novedad, finalmente Adobe acepta lo que se veía desde un principio: Flash no es para móviles.

La razón más que justificada porque aún en modelos Android, quienes se jactan de tener Flash, el uso de recursos del equipo es alto. Steve Jobs nunca aceptó Flash, pero Adobe insistía en el mismo tema, martillando y martillando… hasta verse de frente a la verdad: NO, Flash no es para móviles. Vamos, si para desktop consume muchos recursos, qué se puede esperar para móviles.

El problema con el plugin de Flash es el arrastre y soporte de todas las versiones anteriores. Miremos como referencia que mientras el instalador del plugin de la versión 5 pesaba menos de 2MB, el de la versión 11.0.1.152 (la actual) pesa unos paquidérmicos 14MB. Como sabrán, los instaladores comprimen el software y habitualmente el software instalado pesa el doble de su instalador.

Adobe no tenía otra alternativa. El mercado iOS es demasiado amplio y se le ha hecho más que claro que no podrá entrar en él a menos que se mueva a HTML5. De esa encrucijada el lanzamiento de Adobe Edge. Más reciente tenemos la compra de PhoneGap, uno de los frameworks de desarrollo para móviles más importantes.

Flash es un producto que no se renueva. Se hace cada vez más viejo y cubre los mismos requerimientos que ya encontramos con AJAX, CSS3 y HTML5.

Flash tiene sus días contados. Adobe no lo reconoce, no lo quiere reconocer, pero el mercado le chocará en sus narices tal como en el caso de los móviles. Sólo toca esperar con suficiente paciencia, porque con los millones que invierten en desarrollo y publicidad, lamentablemente todavía dará batalla.

Según explican en su blog, relegarán Flash para aplicaciones basadas en Adobe Air y el plugin sólo para desktop. Me pareció cómico leer el titular del anuncio diciendo “… contribuye agresivamente a HTML”. Claro que deben contribuir agresivamente, si no lo hacen pierden su mercado… agresivamente.

Posted in Opinión, Tecnología | Tagged , , , | Comments Off

Mi Magic Mouse se desconecta – Solución

Recientemente he notado que mi Magic Mouse pierde la conexión inexplicablemente, aunque éste se encuentre muy cerca de la Mac y la batería tenga carga de más del 50%.

Pues como así de inexplicable es que se desconecte el mouse, algo más inexplicable sucedió mientras jugaba: Se volvió a desconectar el Magic Mouse sin ningún tipo de respuesta, aunque le reemplacé las baterías por otras cargadas al 100%.

Bajo la situación no quedó más remedio que buscar en la gaveta de aparatos “arrumbados” por mi viejo mouse retráctil y tratar de localizar alguna respuesta en los foros de Apple. Una solución fué resetear el PRam (Option+Command+P+R al reiniciar la Mac) y luego probar corregir permisos en recovery mode de Lion (Command+R al reiniciar la Mac).

Ninguno me funcionó y otras muchas de soluciones recomendaban llevar el Magic Mouse a un Apple Store, pero como sabrán en República Dominicana no existen tales establecimientos. Volví a investigar un poco más y encontré la pregunta de alguien que pasó por la misma situación que yo. Una de las respuestas le recomendaba lo siguiente:

  • Ir a Mi-Disco-Duro > Library > Preferences y localizar el archivo com.apple.bluetoot.plist.
  • Borrar dicho archivo y reiniciar la Mac para que el sistema lo vuelva a crear forzosamente.
  • Ir a System Preferences > Bluetooth Panel, seleccionar el mouse y eliminarlo de la lista .
  • Si el Bluetooth Panel reconoció el mouse antes de borrarlo, de todos modos borrarlo, para garantizar que al parearse se genere un nuevo ID.
  • Marcar el Magic Mouse como “favorite”.
  • Listo.

Me sorprendió lo simple de la solución. Espero que si te encuentras en una situación similar a la descrita, este artículo te sirva de ayuda. Suerte.

Posted in Mac | Tagged , , , , , , , | Comments Off

El chasco entre BlackBerry e iCloud

Muchos esperabamos a iCloud, el servicio de sincronización en la nube de Apple. Junto con él, una serie de novedades que de primera vista me parecieron más que suficientes para sustituir la sincronización de mis contactos con Google y pasarlos a iCloud.

La sincronización inicial fué llana, pudiendo así tener mis contactos de la oficina junto con los personales en la misma cuenta. iCloud, aunque ofrece lo mismo que ya tenía con Google, me permitía sincronizar también iCal, cosa que por el momento no era posible con la sincronización de Google que sólo soporta los contactos y no el calendario.

Todo bien. Como uso BlackBerry y tengo por costumbre sincronizar y hacer backup semanalmente, aproveché que activé iCloud para darle una buena revisión a la gran cantidad de contactos, apliqué “machete” a buena cantidad de estos con los que no me trataba desde bastante. Luego de actualizar también el BlackBerry Desktop que tenía una versión adelantada ya disponible, pongo a que el BlackBerry Desktop reemplace los contactos del aparato por los que están en la computadora.

Al final, noté que no tenía ni un sólo contacto en el Calendar del BlackBerry. No voy a entrar en detalles sobre las palabras agrias que dije contra el BlackBerry Desktop. Cuando me calmé un poco luego de tratar de poner los contactos en el móvil 5 veces más sin éxito, decidí probar con Missing Sync for BlackBerry.

Lamentablemente con Missing Sync for BlackBerry tuve el mismo resultado que con BlackBerry Desktop, pero como Missing Sync es una utilidad de pago, aproveché y busqué posibles soluciones en su sección de soporte y encontré que la razón de la falta de sincronización es el formato de la base de datos de contactos que ahora usa una copia de iCloud. Address Book lo puede leer y hacer cambios, pero ya no usa el sistema de sincronización anterior, por lo que los programas existentes no pueden sincronizar los contactos.

Cambiar el formato de archivos estándar por parte de Apple me parece una medida extrema, pero como siempre he dicho, es su vaina y hacen lo que les peguen en ganas.

Para volver a tener mis contactos sincronizados con la nube, no me quedó más remedio que cancelar la sincronización de contactos con iCloud y reactivar la sincronización con Google. Por cierto, olvidé mencionar que al activar iCloud, este obliga cancelar la sincronización con Google.

El siguiente paso fué activar en el BlackBerry la sincronización de contactos y calendario a través de “Email Settings”, para que la sincronización sea OTA. Toca ahora esperar que RIM adapte a BlackBerry Desktop o Mark/Space a Missing Sync for BlackBerry.

Posted in Mac | Tagged , , , , , , , , , , | Comments Off

BlackBerry: El smartphone sin identidad

En el día de ayer RIM anunció a BlackBerry BBX, que según ellos combina lo mejor de BlackBerry y QNX, el OS para su BlackBerry Playbook. Todo bien, pero con esto hablamos de 3 sistemas operativos móviles ofertados al mismo tiempo por un solo fabricante.

Hace pocos meses RIM presentó el “tan esperado” BlackBerry 7, que a la larga no fué más que un simple theme con algunas mejoras del BlackBerry 6… que a la vez también es un theme del BlackBerry 5. Ese es precisamente mi punto, ¿cómo una empresa “madura” ha sabido ser tan inconsistente con tantos OS’s? Creo que precisamente esa situación es lo que ha llevado a RIM a estar en la cuerda floja económica por la que actualmente atraviesa, claro, además de mal manejo administrativo y estratégico.

Comparado con otros OS mobiles, BlackBerry ciertamente es un atraso. Aparte a elegancia y conectividad online, muchos usuarios buscan un OS simple de usar, cosa que irremediablemente BBOS no ofrece. RIM lo entendió así y luego de comprar QNX el año pasado y someterlo a rediseño, presentó un producto (BlackBerry Playbook) que realmente podía competir contra los demás.

Muchos entendíamos que los siguientes modelos a lanzar vendrían con QNX, pero saltan con la estupidez de presentar el atrasado BlackBerry 7.

Hace 4 años atrás el fuerte más importante de BlackBerry era la conectividad. Poder leer tus correos o navegar internet era un pro. Aunque existían otros móviles con capacidades similares, BlackBerry seguía siendo el rey… hasta que Apple lanzó el iPhone. Conectividad, correos, música, tres pros que hicieron tambalear la economía de RIM, quien vió sus ventas decrecer.

Ya está bueno de tantas majaderías. Aún no le veo sentido a la estratégia de lanzar nuevos OS’s si BlackBerry ya tenía QNX. Debieron enfocar todos los nuevos productos a ese sistema operativo. Deben adaptar QNX a smartphones y no sólo para tabletas y enfocarse en precios que sean más atractivos para los clientes. Está difícil que RIM recupere su mercado si no reduce los precios de sus modelos y redefine el OS que incluirán sus smartphones y es aún más difícil si pretenden enfocar QNX a sólo tabletas.

Cierto, las tabletas han solucionado un nicho. Muchos fabricantes quieren sacar sus modelos y de allí la aparición del Play Book, pero si el fuerte de RIM es un modelo móvil capaz de leer correos y navegación y además con precios económicos en sus planes, ¿por qué cometer la estupidez de pretender entrar a un mercado que sabes no puedes competir? Baja los precios de los equipos, mejora el BlackBerry OS, mejora el diseño de los modelos, introduce novedades que den valor al producto y olvidate de la competencia. Crea valores que pueden interesar al cliente común, no te enfoques en qué está haciendo la competencia y pretendas emularlo. Esa es la belleza del éxito de Apple.

Espero que a partir de este BBX finalmente la empresa lleve ese enfoque. Ya está bueno de tantas estupideces que a la larga confunden al usuario que busca un smartphone. Tantos tipos de modelos-os’s sólo provoca buscar modelos de la competencia que están claramente más definidos, como iOS y Android.

Posted in Opinión, Tecnología | Tagged , , , , , , , , | 1 Comment

Lanzar automáticamente XAMMP al iniciar MacOS

Si eres como yo, que prefieres hacer las pruebas locales de tus proyectos en PHP en vez de un servidor online y además usas MacOS y XAMPP, de seguro te habrás hecho en algún momento la pregunta de cómo iniciar XAMPP automáticamente saltándote el latoso proceso de hacerlo a través del “XAMPP control.app”. Acá te dejo los pasos.

Lo primero es crear un archivo .plist llamado “org.apachefriends.xampp.plist”, que guardaremos en “/Library/LaunchAgents/” con el siguiente código:

< ?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>KeepAlive</key>
	<true />
	<key>Label</key>
	<string>org.apachefriends.xampp</string>
	<key>ProgramArguments</key>
	<array>
		<string>/Applications/XAMPP/xamppfiles/xampp</string>
		<string>start</string>
	</array>
	<key>QueueDirectories</key>
	<array />
	<key>RunAtLoad</key>
	<true />
	<key>WatchPaths</key>
	<array />
</dict>
</plist>

Con esto damos las instrucciones a MacOS X de lanzar XAMPP al iniciar el sistema, pero por razones que aún no logro localizar, MacOS lo ignora. La solución es usarlo en conjunción con un applescript que forza el lanzado vía el shell.

Para esto abrimos “AppleScript Editor.app”, localizado en “/Applications/Utilities/” y escribimos la siguiente línea:

do shell script "launchctl load /Library/LaunchAgents/org.apachefriends.xampp.plist" password "CLAVE-DE-ADMINISTRADOR" with administrator privileges

Asegúrate de sustituir CLAVE-DE-ADMINISTRADOR por la clave que usas como administrador de la Mac. Lo guardas en Documents o donde gustes como application y finalmente lo agregas al “Login Items” (System Preferences > Users & Groups) para forzar el lanzado.

Listo, puedes reiniciar la Mac y probar. Al lanzar “XAMPP control.app” verás que ya estarán activos Apache y MySQL, así como también puedes escribir http://localhost en tu navegador.

Posted in HTML, Mac, PHP | Tagged , , , , , , , , | Comments Off

Capturar texto con innerHTML, innerText, textContent

Uno de los usos más comunes en javascript además de los bucles, es la captura de texto dentro de un objeto en el markup. Para el efecto usamos innerHTML o innerText.

Supongamos tenemos en nuestro HTML lo siguiente, del que queremos extraer únicamente el texto:

<div id="txt">
	<p>El caballo naranja de <strong>Napoleón Bonaparte</strong>.</p>
</div>
<script type="text/javascript">
	(function(){
		var ob = document.getElementById('txt');
		console.log( ob.innerHTML );
	})();
	// RESPUESTA: <p>El caballo naranja de <strong>Napoleón Bonaparte</strong>.</p>
</script>

Como vemos devuelve el texto junto con los tag de HTML, que no es precisamente lo que buscamos, lo que forza a tener que hacer algunos “trickys”. Pare este caso tenemos objeto.innerText:

<script type="text/javascript">
	(function(){
		var ob = document.getElementById('txt');
		console.log( ob.innerText );
	})();
	// RESPUESTA: El caballo naranja de Napoleón Bonaparte.
</script>

Ahora, todo funciona muy bien con innerText (hasta en Internet Explorer 6, que es mucho decir), pero curiosamente no tenemos el mismo resultado con Firefox por alguna razón desconocida, lo que nos forza a usar objeto.textContent. Lo preferible es aplicarlo de forma que el propio script decida cuál método usar:

<script type="text/javascript">
	(function(){
  		var it = document.getElementsByTagName('body')[0];
		var ob = document.getElementById('txt');
		console.log( (it.innerText != undefined) ? ob.innerText : ob.textContent );
	})();
	// RESPUESTA: El caballo naranja de Napoleón Bonaparte.
</script>

Es curioso que Firefox, uno de los navegadores considerados “modernos”, arrastre esta deficiencia desde Netscape, pero lo más irracional de todo es que aún en la versión 7 (disponible al momento de escribir este artículo) en pleno 2011 se presente el mismo problema. ¿Olvidado? No tiene razón de ser.

Posted in JavaScript | Tagged , , , , | Comments Off

Ferretería Americana: ¿Buen o mal servicio?

Todo cliente en algún momento se toca con empresas o empresarios que le ponen la vida “en china”, por pequeñeces que se pueden controlar y superar fácilmente.

Tengo poco más de 5 meses sin audífonos para mi móvil. Hoy decido entrar a Ferretería Americana de la Kennedy por unos, pero como su horario laboral es a partir de las 9AM me veo forzado a esperar. No tengo mucho tiempo disponible en el día, así que esperar los 15 minutos que faltaban no me afectarían.

En todo momento estuvo parado tras la puerta, dentro de la tienda, un empleado quien parecía ser el encargado de abrir. Faltando sólo un minuto en mi reloj me acerco a la puerta y le pregunto a qué hora abren, respondiendo que a las 9:00. Le digo que sólo falta un minuto, cuáles razones habían para no abrir. Me dijo simplemente no con la cabeza.

Analicemos el caso hasta acá. Cierto, es mi culpa haber esperado. Cierto, ellos abren “oficialmente” a las 9:00, pero entiendo que si hay más clientes esperando (que eran como 10 personas además de mi), entonces ¿QUE RAZONES HAY PARA NO OBVIAR LA FALTA DE ESE MALDITO MINUTO?. Por lo visto ese empleado parece ignorar que en sólo 5 segundos puede hasta desaparecer todo un planeta.

Quizás estoy exagerando en lo que reclamo, vamos, es sólo un minuto, pero si por sólo un minuto un empleado no va a ofrecer un servicio, entonces no merece su puesto. Ferretería Americana es una empresa que vende productos y con ello SERVICIO.

La mala interpretación de la forma como debe manejarse en su puesto un empleado deviene en una mala imagen para la empresa. Algo tan simple como ese dichoso minuto resulta para mi razón más que suficiente para no volver a Ferretería Americana y todo gracias a un empleado que no conoce lo que se denomina “servicio”.

Los errores de los empleados por mala interpretación los paga la empresa, pero también esta tiene su parte de culpa porque debe asegurarse de entrenar apropiadamente a los empleados que se manejan directamente con los clientes.

Cada quién tendrá su impresión de lo que es Ferretería Americana, pero en este momento la mia no es para nada agradable. Alguien con un mínimo de sentido común habría aceptado abrir la puerta. Pero ni modo, al final soy un cliente más… o un cliente menos.

Posted in Opinión | Tagged , , , | 4 Comments

Desmitifiquemos HTML5

HTML5 es la última revisión en el que se encuentra laborando la W3C. Propuesto hace poco más de 4 años atrás con la finalidad de poder crear una librería más semántica introduciendo etiquetas más acomodadas al uso común.

Etiquetas tales como “header”, “nav”, “section”, “article”, “aside”, “details”, “audio”, “video”, “time”, “progress”, “canvas”, “footer”, entre otras, son las que ahora definen la forma como escribimos HTML.

Si con HTML4.1 teníamos que hacer lo siguiente para definir el listado de navegación de una web:

<ul class="nav">
	<li><a href="#">Item 1</a></li>
	<li><a href="#">Item 2</a></li>
	<li><a href="#">Item 3</a></li>
</ul>

Ahora disponemos de una etiqueta específica para el efecto en HTML5:

<nav>
	<div><a href="#">Item 1</a></div>
	<div><a href="#">Item 2</a></div>
	<div><a href="#">Item 3</a></div>
</nav>

Como ven, más simple no puede ser. Gracias a la nueva etiqueta “nav” no se necesita aplicar una clase al objeto directamente, porque podemos apuntar a este desde nuestro CSS.

Personalmente me inclino por HTML5. Ya he desarrollado proyectos basados en esa modalidad y continuaré con él, porque no podemos seguir cercenando camino al desarrollo de la tecnología a causa de que ciertos navegadores (léase Internet Explorer 8 y anteriores) no lo soportan.

Esto viene a la sazón de leer los comentarios de un artículo más de muchos dedicados al tema, en los que la gente todavía insiste en no recomendar su uso dizque porque aún no es un estándar.

Es cierto, HTML5 no es un estándar y se encuentra en estado de “draft” en la W3C, pero el primer error que puede cometer alguien con una tecnología, es no confiar en ella aunque le convenga. Una tecnología se convierte en estándar cuando es consumida y/o usada de forma masiva. Si se detiene ese proceso, el desarrollo o mantenimiento de esa tecnología se estanca y desaparece.

Vamos, si se estanca HTML5, se estanca también la belleza que aportan WebGL, videotag, canvas, CSS3 y otros tantos que aportan más que tecnologías “dinosáuricas” como Flash.

Es tiempo de cambiar esa mentalidad. El problema con la falta de compatibilidad de los navegadores ya no es por los propios navegadores, sino por los visitantes a nuestros websites. Algo que debemos introducir en nuestro mecanismo de trabajo es la forma de cómo enrutar los visitantes a que usen navegadores modernos. No podemos permitir detener el desarrollo de una tecnología simplemente porque existen muchos usuarios con navegadores antiguos.

Existen dos alternativas para lograr la compatibilidad de nuestros proyectos con los visitantes, que se pueden usar de forma independientes o combinadas:

  1. Presentando algún mensaje como browser-update que incite a cambiar o actualizar el navegador por razones de peso, como seguridad, velocidad o una mejor experiencia de usuario.
  2. Usar javascripts como Modernizr, que generan los objetos del DOM necesarios para que navegadores antiguos puedan entenderse con las nuevas etiquetas de HTML5.

Siempre he preferido lo simple, lo menos complejo y que menos tiempo tarde en cargar, porque lamentablemente Modernizr u otros scripts del mismo tipo tienden a ser ligeramente pesados, tornando el tiempo de rendering de la página más extenso. Personalmente sugiero utilizar el script que genera los elementos del DOM:

<script type="text/javascript">
/* < ![CDATA[ */
 
(function(){
	var obs = ['header','nav','section','article','abbr','aside','hgroup','figure','bb','datagrid','dialog','eventsource','details','audio','video','time','mark','meter','summary','output','progress','figcaption','datalist','canvas','footer'];
	for (var i = 0, c = obs.length; i < c; i++) document.createElement( obs[i] );
})();
 
/* ]]> */
</script>

Extremádamente liviano y sin exigerle muchos recursos al navegador. Lo aplicamos en el <head> de la página para que los elementos se creen antes de cargarse el resto del markup. Las nuevas etiquetas de HTML5 son objetos inexistentes en HTML4.1, por lo que navegadores como Firefox 2.1 e Internet Explorer 5-6-7-8 no las reconocen. Al crear tales etiquetas a través del DOM antes de cargarse el HTML, cubrimos parte de las deficiencias que puedan provocar esos navegadores inútiles en nuestro proyecto.

Es tiempo de cambiar la mentalidad. Si damos el primer paso en desmitificar que HTML5 todavía no es un estándar, en el proceso cambiamos la mentalidad de los visitantes para que actualicen sus navegadores.

Posted in HTML, JavaScript | Tagged , , | 1 Comment