AIR: Estilizando y extendiendo nuestras aplicaciones (CSS y Javascript)
September 7, 2009
NOTA: Es recomendable que antes hayas leído los siguientes artículos:
Hello AIR: desarrollo de aplicaciones usando AIR de forma sencilla
AIR: desarrollando y probando nuestras aplicaciones
Caminando sobre el aire
Hemos visto ya los conceptos básicos de AIR, el uso de las herramientas de desarrollo que vienen incluidas en el SDK de AIR, hablamos sobre seguridad y hasta probamos nuestra primer aplicación usando adl. En esta tercera entrega de la serie de desarrollo en AIR hablaremos un poco más sobre seguridad, como desarrollar haciendo uso de los sandboxes y como aplicar estilos y un poco de javascript a nuestras aplicaciones.
NOTA: Esta serie no intenta por ningún motivo ser una guía sobre CSS o Javascript. Se asume que el lector tiene conocimientos sobre los lenguajes, por tal motivo los códigos serán explicados sin profundizar demasiado y solo cuando el autor lo crea necesario. Si hay mucha demanda, podemos iniciar una serie sobre Javascript y CSS (manifestarlo en los comentarios).
Creando un cliente AIR para twitter
Antes de empezar, veamos un ejemplo muy sencillo, pero que espero nos suba el ánimo. Se trata de una aplicación que lo único que hace es conectarse a twitter y permitirnos actualizar nuestro estado. La aplicación no es muy útil y en ningún momento intenta competir con las aplicaciones ya existentes para twitter. Lo que es más, la aplicación no es pensada para su uso en la vida real, sino más bien para demostrar la sencillez con la que se puede interactuar con servicios como twitter a través de AIR y javascript haciendo uso de las APIs ofrecidas por estos servicios.
El XML:
<?xml version="1.0" encoding="utf-8" ?> <application xmlns="http://ns.adobe.com/air/application/1.0"> <id>com.wordpress.imbuzu.TwitterClient</id> <filename>TwitterClient</filename> <name>Twitter Client</name> <description>Un cliente simple para enviar mensajes a twitter.</description> <version>0.1</version> <initialWindow> <content>TwitterClient.html</content> <title>Twitter Client</title> <systemChrome>standard</systemChrome> <transparent>false</transparent> <visible>true</visible> <minimizable>true</minimizable> <maximizable>true</maximizable> <resizable>true</resizable> </initialWindow> </application>
El HTML, Javascript y CSS
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="es" lang="es">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>Twitter Client</title>
<script type="text/javascript">
function msjOk(msj){
ok = msj.value.length <= 140 ? true : false;
return ok;
}
function hayMsj(msj){
ok = msj.value.length > 0 ? true : false;
return ok;
}
var form;
window.onload = function(){
form = document.getElementById('formulario');
msj = document.getElementById('mensaje');
error = document.getElementById('error');
form.onsubmit = function(){
if(!hayMsj(msj)){
error.innerHTML = "No hay mensaje para enviar";
return false;
}else if(!msjOk(msj)){
error.innerHTML = "Tu mensaje contiene más de 140 caracteres";
return false;
}else{
xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){
if(xhr.status == 200){
error.innerHTML = 'Twitter actualizado';
}else{
error.innerHTML = 'Ha ocurrido un error. Intenta de nuevo. <br /><b>Twitter Response<\/b> <br />' + xhr.responseText + "<br />Status code: <br />" + xhr.status;
}
}
}
xhr.open("POST", "http://twitter.com/statuses/update.xml", true, 'usuario', 'clave');
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send('status=' + escape(msj.value));
return false;
}
}
}
</script>
<style type="text/css">
body{
text-align: center;
}
h1{
margin: 0;
color: #FFF;
background-color: #0F0;
}
textarea{
width: 98%;
height: 50px;
}
#error{
color: #F00;
}
</style>
</head>
<body>
<div id="pantalla">
<h1>Twitter Client</h1>
<h2 id="error"></h2>
<form id="formulario">
<p>
<textarea id="mensaje" name="mensaje" rows="20" cols="10"></textarea>
</p>
<p>
<input type="submit" name="enviarTwit" value="enviar" />
</p>
</form>
</div>
</body>
</html>
Esta ocasión he incluido el HTML, CSS y Javascript en un mismo archivo. En la vida real es recomendable que se mantengan separados por cuestiones de mantenimiento.
Si copias y pegas esos dos bonches de código, al primero lo llamas TwitterClient.xml, al segundo TwitterClient.html. Los guardas en un folder llamado TwitterClient y los pruebas como vimos anteriormente, verás algo como esto:

La interfaz es de lo más sencilla y su funcionamiento aún más. Para poder hacer uso tendrás que cambiar lo siguiente antes de probar la aplicación:
xhr.open("POST", "http://twitter.com/statuses/update.xml", true, 'usuario', 'clave');
cambia usuario por tu nombre de usuario en twitter, por ejemplo el mío es imbuzu.
cambia clave por tu clave, por ejemplo la mía es: 0-0 pensaste que te la daría? jajaja.
Como ese es solo un ejemplo no me voy a tomar el tiempo para explicar su funcionamiento, pero en poco tiempo estaremos haciendo aplicaciones aún más avanzadas que esta.
Ahora, hablemos sobre cajas de arena.
Usando el application sandbox:
El application sandbox no presenta restricciones mientras se inicializa el código, es decir, antes del evento onload. Una vez se ha cargado la aplicación, sin embargo, la cosa es diferente. Algunas de las restricciones que puede encontrar son con la función eval, el uso de Function (nótese la F mayúscula), el uso de strings en setTimeout y setInterval, el pseudo protocolo javascript:, el uso de document.write, el uso de innerHTML está limitado a solo texto plano, se prohibe el uso de script.src para apuntar una etiqueta script a otro documento diferente al inicial y algunas restricciones en cuanto al uso de XMLHttpRequest de forma sincrónica. Tener en cuenta estas restricciones nos hará más fácil la vida y dará claves sobre algunos errores que podemos encontrar.
Usando el non-applicattion sandbox:
El código cargado en el non-application sandbox está sujeto a las mismas restricciones que en la web. Además, no tiene acceso a ninguna de las APIs de AIR
Creando un puente entre los dos sandboxes.
AIR nos brinda la posibilidad de crear una interfaz llamada Sandbox Bridge. Este Sandbox Bridge no es más que un puente que nos permite comunicación directa y vi-direccional a través de una API entre el application sandbox y el non-application sandbox. Su uso puede resultar extremadamente útil en algunos casos, ya que nos brinda la posibilidad de comunicar dos extremos de la aplicación que de otra manera son incomunicables. Por ahora basta con saber que existe dicha posibilidad. Ya veremos su uso más adelante.
Usando CSS:
CSS es, como en la web, el componente en nuestra bolsa que nos va a dar la posibilidad de darle una presentación y personalidad a nuestras aplicaciones. Una de las bondades ofrecidas por AIR tanto para CSS como para Javascript es que usa webkit, el motor de Safari. Al ser solo un motor para todos los sistemas operativos, no tenemos que preocuparnos por diferencias en cuento a la implementación de las propiedades, funciones y métodos. Si funciona en Safarí, es 99% probable que funcionará en AIR. Si funciona en tu computadora, funcionará de igual manera en cualquier otra aun cuando tenga un sistema operativo diferente.
Como mencioné hace un momento, es recomendable que el CSS se mantenga completamente aparte del HTML. Una de las características de este lenguaje es que ha sido pensado para funcionar desde fuera del documento que modifica gráficamente. Mantener nuestro CSS de forma separada del resto de la aplicación nos dará la oportunidad de poder modificarlo libremente sin tener que tocar ninguna otra cosa que no sea CSS puro.
Como ya mencioné, CSS en AIR no representa las limitaciones que muchas veces representa en la web, especialmente con navegadores como IE6 o IE en general. Esto es una ventaja enorme ya que podemos usar selectores de forma avanzada y hacer uso de pseudoselectores como :before y :after, además de propiedades extremadamente útiles como content. Una desventaja es que webkit no soporta CSS expressions (exclusivas de IE), pero claro, siempre hay un camino al rededor de esta situación.
Veamos un ejemplo de CSS en AIR.
Continuando con la aplicación AIRHelloWorld que construimos en la entrega anterior, procedamos de la siguiente manera:
1)Abre AIRHelloWorld.html
2)Agrega la siguiente linea justo después de
<title>AIRHelloWorld</title>: <link rel="stylesheet" href="estilos.css" type="text/css" media="screen" />
3)Crea un nuevo archivo y guardalo con el nombre estilos.css en la misma carpeta donde tienes AIRHelloWorld.html y AIRHelloWorld.xml.
4)En el nuevo archivo pon lo siguiente:
body{
background-color: #CC6;
color: #FFF;
margin: 0px;
}
H1{
background-color: #9C3;
margin: 0;
height: 35px;
text-align: center;
}
p{
font-size: 1.5em;
padding: 5px;
border-bottom: 2px #CCC solid;
}
5)Prueba la aplicación usando adl y verás los cambios. La aplicación sigue sin hacer nada, pero ya tiene un formato y un estilo que la hacen ver mejor que antes. Puedes seguir jugando con CSS y probar. Es más, te invito a que estilices tu aplicación y nos muestres una captura de pantalla para ver como queda!
Usando Javascript:
Al igual que CSS, javascript también puede ser implementado en nuestras aplicaciones AIR. Como vimos hace un momento su funcionamiento depende mucho del sandbox en el que se ha cargado, pero la mayor parte del tiempo es muy similar al de la web. Veamos un sencillo ejemplo de como hacer que nuestros elementos “aparezcan” con un desvanecido de entrada.
1)Nuevamente modifica el archivo AIRHelloWorld.html agregando la siguiente linea después del enlace hacia la hoja de estilos que hiciste en el primer paso de la sección anterior sobre CSS:
<script type="text/javascript" src="difuminado.js"></script>
2)Crea un nuevo archivo y guárdalo como difuminado.js dentro de la misma carpeta de tu proyecto.
3)En el nuevo archivo introduce lo siguiente:
//función difuniado
//autor: Buzu
//fecha: agosto 10 de 2009
//primera revisión
//modificada para el tutorial de AIR en MDW
//por hacer: Agregar eventos onInit y onFin
function difuminado(elem, inOut, duracion){
var $elem = (typeof elem).toLowerCase() == 'string' ? document.getElementById(elem) : elem;
var $modo = inOut || 'entrada';
var $duracion = (duracion < 100 ? duracion * 1000 : duracion) || 2500;
if($modo == 'entrada'){
var $alfa = 0;
var $intervalo = setInterval(
function(){
if($alfa < 100){
$alfa += 100 / ($duracion/100);
$elem.style.opacity = $alfa/100;
}else{
$alfa = 100;
clearInterval($intervalo);
$elem.style.opacity = $alfa/100;
};
}, 100
);
}else if($modo == 'salida'){
var $alfa = 100;
var $intervalo = setInterval(
function(){
if($alfa > 0){
$alfa -= 100 / ($duracion/100);
$elem.style.opacity = $alfa/100;
}else{
$alfa = 0;
clearInterval($intervalo);
$elem.style.opacity = $alfa/100;
};
}, 100
);
}else{
return alert('El modo debe ser "entrada" o "salida"')
}
}
window.onload = function(){
difuminado('pantalla');
}
Esta es una función que yo ya tenía y que he modificado para este tutorial. Lo que hace es permitirnos hacer difuminados de entrada y salida. En este caso estamos aplicando un difuminado de entrada a nuestro elemento pantalla que es el que contiene todos los demás elementos. Guarda tu archivo y vuelve a probar la aplicación usando adl y verás como los elementos aparecen poco a poco.
Como ya dije, esta serie no pretende detenerse a explicar conceptos sobre Javascript, pero si tienes dudas sobre el código usado, eres bienvenido a escribirlas en los comentarios y con gusto te ayudaremos.
Como vez, el uso de javascript y CSS es muy similar al uso de estos elementos en la web. Una de las grandes ventajas es que ahora, en AIR, desarrollas para un solo motor de render y no para muchos como en la web.
Por último, si te apetece extender la aplicación de twitter y después compartir con nosotros tus resultados, eres totalmente bienvenido. Dejo el código abierto para su uso, aun que sea una base muy precaria.
Software pirata, vale la pena?
August 23, 2009
En la actualidad hay una creciente demanda de software. Programas como Photoshp, el swite de Office, Dreamweaber, entre otros, son usados por millares. Sin embargo, un porcentaje (muy grande diría yo) de las copias de dicho software corriendo por ahí son piratas. El termino pirata no es nuevo, y tampoco comenzó con el software. Desde que había casetes y beta para las películas ya existía la piratería. Es más, desde mucho antes ya se hacían copias piratas de pinturas, esculturas y otras obras de arte. La pirataría puede ser tan vieja como el hombre mismo, y hasta hoy sigue vigente y popularizandoce gracias a la fácil distribución de material virtual mediante la red.
Si quieres el último hit del pop, lo encontrarás de forma gratuita en la red; la última película? también está en la red; una película que se estrena la semana que viene? también está en la red. Hoy en día todo se encuentra en la red, incluso el software. Desde una simple aplicación que no cuesta más de un par de dolares, hasta sistemas operativos completos y software de varios cientos o miles de dolares. Pero, vale la pena arriesgarse?
Quien va a saber que mi software es pirata? Es la respuesta que muchos dan y la forma en la que se tranquilizan, y es que es cierto, quien rayos va a saber que el software que tienes en tu cuarto donde nadie entra, en tu computadora de escritorio que nunca sale de tu cuarto, es pirata? Aún cuando la computadora esté todo el tiempo conectada a internet, las posibilidades de que alguien detecte que tu software ha sido crackeado son muy remotas. Entonces, en donde está el riesgo?
Pareciera que no hay riesgo verdad? Y siendo así, si que vale la pena ahorrarte aun que sea un par de dolares, y mucho más aún, un par de miles de dolares, pero piénsalo dos veces. Muchos chavitos se piensan que por tener todo, hasta su OS pirata, son unos cracks usando computadoras. Alardean con sus amigos sobre sus “habilidades” para conseguir desde el último CD de shakira, hasta la última versión de phothoshop. Cuando los escucho, me río de sus hazañas.
El verdadero riesgo del software crackeado es que cada que instalas uno de esos, te estas instalando la posibilidad de que aquel que crackeó esa pieza de software, también se tomó el tiempo de amablemente instalar otra cosita. Esa cosita puede ir desde un virus molesto, hasta uno que te deje la computadora inservible. Otra posibilidad, más peligrosa aún, es que el software venga con una puertita trasera que le de de entrada al crackeador a tu computadora. Tu computadora puede volverse un zombie para alguien que se pretende vaciar el banco de america y dejar toda la evidencia apuntando hacia a ti.
Por supuesto que esto no pasa muy seguido, y probablemente no conoces a nadie a quien le haya pasado algo similar. Sin embargo, una de las principales reglas de seguridad informática es ser siempre paranoico hasta cierto grado en ese aspecto.
Obteniendo software gratuito.
Si lo que te gusta es el software gratis, hay opciones. Puedes, por ejemplo, buscar software gratuito en la red, hay mucho. Desde simples reproductores de música y video, hasta software más especializado y avanzado como el que se usa para hacer modelado y animación en 3D.
El software de este tipo se clasifica en varias secciones. Tenemos, por ejemplo, el freeware, que es software completamente gratis. Si descargas de este tipo de software, asegúrate primero de investigar un poco sobre el mismo. Solo ve a google y busca por el nombre del software. Si el software se llama “picplus”, solo ve y busca picplus. En este caso los resultados que te lleven a foros de discusión son los más útiles ya que podrás encontrar info sobre su rendimiento, calidad y seguridad. También podrás saber si el software es confiable. Si quieres estar más seguro, averigua un poco sobre el nombre (ya sea de una empresa o un indibidual) detrás del software, es decir, quien lo ha manufacturado. Hay quienes solo hacen software gratis para poder instalarte software malicioso y tener acceso a tu computadora. Finalmente si has visto que todo está bien, descarga el software desde un sitio confiable. Si es posible, desde la página oficial del producto. Yo por ejemplo, busco en softonic, pero generalmente descargo desde la página oficial del producto (softonic generalmente ofrece un enlace hacia dicha página).
En la mezcla de sabores también tenemos el shareware. Este es software por el que alguien pudo haber pagado o no, pero que tiene una licencia que permite su distribución libre. En este caso también combiene investigar sobre el autor de software y, además, sobre quien lo está distribuyendo. Recuerda, todo software puede ser modificado y representar un riesgo. Mantén los ojos bien abiertos.
Otra opción es el software open source. Este es de mis favoritos, aun que no soy un fanático de Open source. La ventaja de este software es que es un libro abierto, cualquier persona puede hacerse de una copia del código, mejorarlo, y después compartirlo. Por tal motivo, este software está en constante mejoría. Uno de los argumentos que escucho seguido en contra de este tipo de software es que, al ser de código abierto y fácil de modificar por cualquier persona, es muy fácil para alguien modificarlo de modo que represente un peligro. La verdad es que si y no. Mientras es muy sencillo que eso pase, es más sencillo aún que la comunidad lo note y arregle el problema. Además, la comunidad open source está formada por gente que se cuida y cuida a otros. En este caso, las recomendaciones son las mismas, bajar software solo del sitio oficial del producto y si puedes, por que no, mejorarlo un poco y compartirlo.
Hay muchos sabores de software gratuito. Algo que si quiero aclarar es que software libre y software de código abierto no es lo mismo. El primero puede ser gratis y nada más, mientras que el segundo, aparte de todo, brinda la posibilidad de ser modificado sin que es estés infringiendo ninguna ley, además de mantener toda una comunidad, muchas veces de cientos, e incluso miles de desarrolladores respaldando la calidad del producto.
Si aún así no te convences, o si somplemente necesitas si o si el photoshop (por decir algo), hay formas. Puedes buscar como crackearlo tu mismo, puedes buscar un generador de claves para hacerte una licencia como si lo hubieras comprado, puedes buscar en la red por una clave para desbloquearlo, puedes instalarte la versión de prueba si solo lo necesitas para hacer un par de cosas. Hay tantas cosas que se pueden hacer, pero por favor, no instales software pirata o crackeado por alguien más. Estas comprometiendo la seguridad de tu máquina y te estas comprometiendo a ti mismo.
Por último, dejo un enlace a una lista de software gratuito.
http://en.wikipedia.org/wiki/List_of_open_source_software_packages
Mi experiencia en Ubuntu.
May 21, 2009
El 7 de mayo me decidí ir un paso más en mi gusto por el software libre instalando uno de los sistemas operativos con los que había estado titubeando: Ubuntu. Ubuntu es totalmente gratuito, lo que lo pone de inmediato arriba, sino de las preferencias, por lo menos de las capacidades de compra de muchos usuarios. Con los OS de calidad, como lo es MacOSX de apple, siendo tan caros, muchos optan por piratear o por simplemente tomar un rumbo más saludable e irse para el lado creciente del software libre. Para mi no fue la escasés de papel verde lo que hizo probar Ubuntu, fue simplemente la aventura de rodar mis dedos sobre el mismo teclado, pero diferente SO. Actualmente mi mac sigue siendo mi computadora principal, pero prendo mi Dell más seguido que cuando la tenía con Windowx XP, del que por cierto no quedó ni rastro (odio las particiones, prefiero comprar otro equipo).
Bueno, sin más, mi experiencia en Ubuntu ha sido muy placentera. El SO es totalmente simple de usar, aun que al principio tuve problemas tratando de hacer funcionar mis dispositivos wireless para poder tener acceso a la red, pero al final decidí dejar de seguir los manuales que encontraba en internet al pie de la letra y usar la lógica logrando al fin configurar mi antena. Creo que muchos pueden sentirse intimidados por que cuando buscas en internet como hacer esto o aquello, siempre encuentras cosas como abre Terminal e ingresa lo siguiente, seguido por una linea de comando. Sin embargo, el SO tiene una interfaz gráfica a través de la cual se pueden hacer muchas de esas cosas de manera simple y cuando no es así, escribir comandos en el terminal realmente no es nada de que asustarse.
Lo primero que hice después de instalar el SO fue eliminar todo el software que no me sirve, programas que se instalan por defecto y que no necesito. No me gusta meterle basura a mis computadoras, no instalo mouses, reproductores de música o video, salva pantallas o efectos como el del desktop 3D. Son cool, pero simplemente innecesarios y aburridos a la larga. Así que me quedo solo con lo escencial. Actualmente me encuentro usando solamente bluefish. Decidí que para poner a prueba Ubuntu, desarrollaría un proyecto en él, y es lo que estoy haciendo. También instalé inkscape y pienso provarlo y ver si puedo ir haciendo una tansición desde Illustrator a inkscape, pero lo veo dificil.
Lo que me gusta de Ubuntu es que es veloz y minimalista. No tiene ese windows like apariencia que pensé que tendría. Es má bien muy parecido al OSX de apple. Tiene diferentes areas de trabajo para organizar tus ventanas y, pues, tus areas de trabajo. Por ejemplo, puedes poner todas tus ventanas donde tienes tu layout para un sitio web en un area de trabajo, y en otra todas tus ventanas en las que estás trabajando el código, de esa manera te evitas tener tanto en un solo lugar.
Hasta ahora he sentido el sistema operativo bastante estable y no desespera como lo hacía el XP. Me agrada el hecho de que los desarrolladores y los diseñadores pongan atención al detalle en la parte grafica e interactiva del sistema.
Por ahora uso el Ubuntu 9 y me ha dejado totalmente convencido que no tiene nada que envidiarle al MacOSX. Además, teniendo en cuenta el avance que ha tenido el software libre frente al propietario, no me queda duda que pronto el software libre tendrá mucho mejor calidad y muchas mejores carácteristicas que el software de paga. Una de las razones de esto, es que al software libre no lo maneja esa insana ambición monetaria, sino el deséo de brindar por y para la comunidad lo que la comunidad necesita.
Sin más, si me preguntas si te recomiendo que te cambies a de windows a Ubuntu, mi respuesta es SI!.
#escandalogt -Mis pensamientos malinformados.
May 15, 2009
últimamente en el twitter todo lo que veo tiene relación con el llamado #escandalogt, más concrétamente con el caso de jeanfer. Para quienes no sepan de dicho caso, la cosa es simple; Jean Ramses Anleu Fernández fue detenido tras publicar en twitter una nota relacionada con lo hechos acontecidos en Guatemala los días pasados. La nota, según Prensa libre (1) dice, “Primera acción real “sacar el pisto de Banrural” Quebrar al banco de los corruptos”.
Lo que me llama la atención en el caso, no es la nota en si, sino la reacción de las autoridades en Guatemala. Como dice el título del post, estoy poco informado sobre el caso, por lo que más que hablar del caso de jeanfer, me limitaré a dar mis pensamientos generales sobre un sistema que oprime a aquellos que levantan la voz.
Como dice el último post que he publicado a través de twitter, “Y la libertad de expresión que se valla al carajo. Eres libre, siempre y cuando tus twitts no afecten mis intereses económicos enfermizos.” Es lamentable ver como en pleno siglo XXI la represión y el control abusivo de la “libertad” de expresión siguen siendo un problema en muchos de los países latinos. Claro, que puedes decir e incluso acusar a Jean Ramses de sabotaje en contra de Banrural, alegando que el único motivo de su twitt, como se lee explicito, era “quebrar al banco de los corruptos”. Entonces, entran los intereses económicos y políticos de aquellos quienes están siendo “atacados”, y como estos son los que manejan la plata, también son los que manejan el poder; otro caso más de “gigantes en tronos [pisando] nomos”, pero que se puede esperar de un sistema que basa su supervivencia en la corrupción, la ambición y el deseo de poder.
La reacción por supuesto que no se hizo esperar. Ahora, un grupo de guatemaltecos apoya a Jean Ramses y se unen a su causa. Lo que me llama la atención es la reacción que están tomando. Simplemente están siguiendo las reglas del sistema. En mi muy humilde opinión y probablemente carente de información, yo creo que más aya de comenzar un movimiento financiero para cubrir el costo de la libertad de Jean, los “chapines” deberían estar haciendo retwits del mensaje de Jean Ramses. Al gobierno de Guatemala no le convendría arrestar a tanta gente una vez que el movimiento tome fuerza. Claro, esto podría iniciar un conflicto aún más grande y afectar a más personas de las que ya han sido afectadas, pero es la única forma de demostrar al sistema que no es posible seguir abusando de los individuos que forman la sociedad a la que dichos sistema se supone debe servir.
Desgraciadamente vivimos en una sociedad victima de su propia ambición. A diario tenemos que soportar el abuso, la represión y los atropellos de un sistema que fomenta la inseguridad social y el abuso del poder a través de los métodos más deplorables y los hechos más descarados.
Ahora, me tomo nuevamente la libertad de citar directamente de Prensa libre.
La ley establece que comete delito de pánico financiero quien elabore, divulgue o reproduzca por cualquier medio o sistema de comunicación, información falsa o inexacta que menoscabe la confianza de los clientes, usuarios, depositantes o inversionistas de una institución sujeta a la vigilancia e inspección de la Superintendencia de Bancos.
Leyendo dichas lineas no me queda la menor duda de que las leyes han sido elaboradas por y para los ricos y poderosos. Entonces me pregunto, que habría sido de Rodrigo Rosenberg a causa de sus declaraciones acerca de Banrural si no hubiera sido asesinado? Estaría en la misma situación? y por que Jean es el único que ha sido detenido a pesar de no ser el único que ha publicado mensajes de ese tipo? Además, cual pánico financiero? No creo que las declaraciones hechas por Jean sean capaces de provocar pánico a la comunidad guatemalteca. Por el contrario, creo que son capaces de crear pánico en los banqueros, y ese es precisamente el problema. Jean: te has metido con los gigantes y en esa tierra todo se maneja a su antojo.
Que le queda al pueblo de Guatemala? Sin duda le queda la plena certidumbre de que la ley favorece a los mejor parados, que el sistema va a exprimir a aquellos a quienes oprime hasta dejarlos en cascara, que viven en una sociedad que es victima del abuso de poder de aquellos que controlan el sistema, y sobre todo, le queda la amarga sensación de tener que cuidar lo que dicen en una red social en menos de 140 caracteres por miedo a ser sorprendidos, aprendidos y totalmente abusados, privados de sus derechos y puestos ante un tribunal para ser juzgados por el simple hecho de ejercer su derecho de expresión.
Frameworks o Frameworst
April 20, 2009
“Y a mi que rayos me importa si Google está usando jQuery? Yo soy un programador javascript de la vieja escuela…”
Nunca he tenido la oportunidad de explicar el por que ese rechazo hacia los frameworks. Algunas veces me siento a pensar y tratar de convencerme a mi mismo que si tanta gente, incluyendo a google, dell, bank of America, las grandes ligas, digg, nbc, cbs, netflix, technorati, mozilla, wordpress, Drupal entro otros según el sitio oficial de jQuery, usa dicho framework tiene que se ser por que tiene algo bueno. La verdad es que nunca he encontrado una buena razón para agregar una capa de abstracción a un lenguaje de programación.
El beneficio de los frameworks, según aquellos que defienden su uso, reside en el hecho de que se logra compatibilidad por lo menos en los navegadores más populares, aparte de lograr hacer más con menos. Yo me pregunto, no saben acaso que se puede lograr compatibilidad entre los navegadores con simple Javascript? y eso de lograr más con menos; que no se dan cuenta que están cargando una librería que por si sola ya pesa más de lo necesario para lograr todas aquellas cosas tan “cool” para las que se usan principalmente los frameworks? Realmente se me hace difícil entender esas cosas.
Pero esa no es la razón por la que odio los frameworks. La verdadera razón por la que odio los frameworks es por que han lanzado un sin numero de pseudo programadores al mundo que en realidad no saben ni lo que hacen, y lo peor de todo, cuando preguntan no saben ni de lo que hablan. Seguido me encuentro con gente que llega desesperada a pedir ayuda por que su menú desplegable, que usa mootools, deja de funcionar cuando “instalan” un slideshow que usa jQuery. Entonces yo me digo, “Date un tiro y hazles saber que has muerto”. La vida es simple, Javascript es más simple aún. Por que rayos ese afán de hacerlo más complicado?
El otro día me encontré con un script para greasemonkey en el que se había cargado todo el jQuery. Me digo, hasta que punto ha llegado la dependencia en ese framework? especialmente cuando greasemonkey es uno de los mejores clientes para escribir Javascript. Cuestiones como esa simplemente me hacen sentir desconcertado.
Lo pero del caso es que ahora en muchos lugares de trabajo te piden experiencia en Mootool y jQuery y no mencionan nada de Javascript. Eso, y el hecho de que muchos de esos “programadores” están cobrando por proveer soluciones que han adquirido de un verdadero programador de Javascript, me hace sentir que este mundo es totalmente injusto. Pero ya en serio, que alguien me diga por que los Frameworks se han hecho tan populares. Bueno, si no mal recuerdo he odio de verdaderos héroes de la programación las siguiente razones:
La gente es mediocre y prefieren usar un framework a tener que asegurarse ellos mismos de que su código funciona bien.
Las compañías prefieren pagar (menos) a un pseudo programador que a un verdadero programador
Las compañías aprecian mucho el tiempo que se ahorra al escribir código usando un framework, sin tomar en cuenta el tiempo que perderán después tratando de actualizar y optimizar su código.
La gente prefiere aprender algo fácil aun que después tengan que venir a molestar a otros cuando no saben que es lo que un getElementById() hace en el código bien escrito de otra persona.
Creo que en realidad nunca alcanzaré a entender la mente de alguien que prefiere cargar una librería y un objeto aparte de tener que insertar código en linea para lograr un simple rollover a simplemente desarrollar el suyo propio.
Estoy seguro que me he olvidado de escribir las verdaderas razones de mi “no a los frameworks” y que no he escrito lo que en realidad quería decir. Cuando me acuerde probablemente lo haga, pero por ahora, el simple hecho de pensar que hay sitios, como nettuts, tan orientados a los frameworks y que los publican como lo mejor del mundo de la programación me hace sentir totalmente desganado.
Por que no me uní al CSS Naked Day?
April 10, 2009
Hace un año todavía me importaban cositas como el CSS Naked Day y la 100% validación el w3C. Hace un año hice un post sobre el CSS Naded Day, una iniciativa que al parecer es de Dustin Diaz. Ayer, fue ese naked day y yo no vi realmente que muchos de los sitios que visito, a excepción de FDW y MDW, hayan aplicado el jueguito al que hasta hoy no le veo utilidad para el usuario común, y es esa precisamente la razón por la que no me uno a el.
Al usuario común no le interesa en absoluto saber el efecto que tienen las hojas de estilo sobre nuestro sitio web. No le importa si las usas o sigues con las viejas etiquetas de formato y las tablas. Al usuario común lo único que le interesa es ver el sitio de tal forma que no le parezca un dolor de cabeza. Entonces, por que rayos molestar al usuario mostrando un sitio “desnudo”. Para mi, y desde mi muy particular punto de vista, no tiene sentido.
Como dije, hace un año creia en esas cosas. Hace un año era un poco más iluso que ahora, y por lo tanto me enfocaba en una web orientada a desarrolladores. Pero abramos los ojos y démonos cuenta que la web está plagada de usuarios comunes a los que estas cosas no les interesan. Aún creo en los estándares, y en la correcta creación de un sitio web, pero que mi sitio valide ante los ojos de la w3c ya no me quita el sueño, hoy me importa más que valide ante los ojos del usuario. Hoy estoy más enfocado en crear sitios que vallan dirigidos hacia el usuario y no hacia exaltar mi ego por los cielos al poder decir que mis sitios validan y poder poner una estampita de la w3c. Sin embargo, mis sitios muestran una barrita verde que indica que son 100% estandar cuando los corres por el validador de la w3c; producto de un cuidadoso desarrollo.
Dentro de un año, quizá mi visión del mundo haya cambiado, y eso es bueno, eso indica que he seguido madurando y experimentando más el mundo; observándolo y apreciando las diferentes corrientes, causas y efectos que hoy no alcanzo a ver. Dentro de un año quizá, pero por el momento no me uno a juegitos como el CSS Naked Day, o el NO IE day (una actitud aún más reprobable que el CSS Naked Day). Por ahora, para mi, el usuario es quien lleva las de perder en este tipo de cositas (lease tonterias) y por mucho que use IE, que lo siga usando, amando, adorando, idolatrando o lo que sea, no merece que le aventemos un pastel en la cara para reclamarle que por su culpa no podemos lograr un rollover con CSS en un lugar en el que para empezar un rollover no tiene sentido.
Explicando conceptos sencillos en muchas palabras. La importancia de entender bien los conceptos básicos de programación.
March 2, 2009
Algunas veces me pregunto por que a algunas personas les cuesta tanto entender los conceptos avanzados de la programación. Sería un poco arrogante decir que para mi es fácil y quizá un poco falso. Lo cierto es que algunas veces paso algunos minutos analizando algunos conceptos nuevos. Tengo la habilidad de entender conceptos abstractos y dibujar en mi mente los procesos por los que pasa una pieza de código dentro de su mecanismo, pero no creo que sea especial por eso. Es más, creo que cualquiera que quiera adquirir dicha habilidad puede hacerlo, solo es cuestión de entender bien los conceptos básicos de la programación.
El gran problema de nosotros los humanos, es que hemos relacionado lo básico con lo sencillo. Tenemos miedo a pasar horas pensando y analizando un concepto tan “sencillo” como lo es una variable o una función por que no queremos sentirnos como tontos al no entender que una variable es un pedazo de memoria en el que se puede almacenar un dato para ser usado en el futuro. La verdad es que no hay nada tonto en analizar más a profundidad el concepto. Yo mismo escribí un articulo enorme explicando simplemente tal concepto: las variables.
Si nos pusiéramos a pensar por un momento en el pasado y recordáramos nuestros inicios como programadores (los que ya llevamos algún tiempo), nos daríamos cuenta que estábamos tan ansiosos por llegar a la parte avanzada que simplemente corrimos antes de poder caminar. Dimos poca importancia a los conceptos básicos sin tomar en cuenta que esos conceptos básicos, como su nombre lo dice, serían la base de todo nuestro posterior conocimiento. El problema es entonces que la base ha quedado débil, y sin una estructura fuerte sobre la cual apoyar nuestro nuevo conocimiento y los nuevos conceptos, estos terminan cayendo al suelo y causando frustraciones que muchas veces nos hacen renunciar a nuestro trabajo.
Por tal motivo es importante detenernos unos instantes para comprender y explicar los conceptos básicos, pero no en pocas palabras. Al contrarío, dedicar un buen rato y buena parte de nuestra atención a dicho trabajo ya que una vez entendidos estos conceptos fundamentales de la programación no será más fácil comprender conceptos más abstractos y complejos. Tomemos como ejemplo los closures en javascript. Alguien que no ha entendido bien un concepto tan básico como las variables locales y globales puede tener mayor dificultad para entender los closures que una persona que ha comprendido la diferencia entre variables locales y globales.
Cuando yo empece a aprender sobre programación puse especial atención a los elementos básicos del lenguaje (en aquel tiempo Javascript) y me aseguré de que la base sobre la que descansaría todo mi futuro conocimiento fuese sólida y estable. Creo que ese ha sido mi secreto en mi desarrollo como programador y aconsejaría sin temor a equivocarme a todo aquel que esté interesado en programación que haga lo mismo. Asegúrate de que tus conceptos elementales estén bien fundamentados. Asegúrate de encontrar a aquellos que ponen énfasis en ese aspecto, a esos que explican en muchas palabras los conceptos más elementales de la programación.
Ya estoy en twitter
November 28, 2008
Hace algunas horas me registré en twitter. Para todos los que estén interesados en seguirme vía twitter, esta es mi direccion:
trataré de actualizar seguido aun que no se si me será posible. Quiza tenga que contratar internet para mi telefono celular o algo por el estilo.
Gracias a mis Amigos!
October 16, 2008
Eso es solo lo que trata este post. Gracias a mis amigos por hacerme ver que en realidad nada esta perdido y que aveces, aun que no lo parezca, hemos ganado mas de lo que creemos haber perdido… También me hicieron ver que los amigos siempre están ahí, aun que uno piense que no, solo hace falta buscarlos… Gracias mis amigos.
No siempre el que pasa mas tiempo contigo es tu amigo, los verdaderos amigos siempre estarán cuando los necesitas, aun que en otros tiempos parezca que se esconden….
Por que Buzu dejó todo TodoExpertos? –UPDATE
October 15, 2008
Malas noticias para los usuarios de todo expertos. Buzu ha dejado de participar. Aun no eh borrado mi cuenta, pero hace ya una semana que no contesto a pesar de haber recibido algunas preguntas. Quizá muchos se preguntan que ha pasado, y creo que, aun que no estoy obligado a, si es justo que de una razón de mi partida. La verdad es que eh estado pasando por tiempos difíciles en mi vida. Hay cosas que no te esperas que pasen, pero pasan. Cosas que nunca las ves venir, que quizá las señales de que pasarían eran claras, pero tu no las ves. Ahora tengo muchas preguntas en la cabeza simplemente dando vueltas, por que? es una de las preguntas que mas desesperación produce en nuestras vidas, ese deseo de saber las razones del por que pasan las cosas y el por que personas por quienes has dado tiempo, esfuerzo y hasta dinero simplemente te cortan la linea de un día para otro. No hablo de una novia, un novia aun que duele, sabes que no era para ti y que tu alma gemela te espera en otro lado. Hablo de un amigo, un amigo no hay forma de reemplazarlo o de saber que otro amigo te espera en otra parte. La verdad es que no me siento de humor para responder preguntas. Espero que no me odien por eso, y que sepan entender. Soy una persona que pasa gran parte de su tiempo ayudando, pensando y haciendo cosas por otros sin pedir nada a cambio, pero aveces necesito volverme un tanto “egoísta” y pensar en mi, dedicar tiempo para mi y poner mi vida en balance otra vez. Ahora, sin un amigo en quien apoyarme para superar este tiempo tan difícil, solo me queda mirar al cielo y pedir a Dios fuerzas para superar esta situación. Ojala mis amigos estuvieran aquí, pero desde que llegué a Los Angeles todo ha cambiado.
Gracias por comprender.
Decidí que no, creo que lo mejor es concentrarme en hacer lo que amo… Programar, ayudar a otros, no dejarme vencer, luchar, ser feliz por que lo quiero ser y no por lo que pasa al rededor…
Lee el post “gracias amigos” si no entiendes el por que del repentino cambio de actitud….