Archivos de la categoría Geek

Configurando el VIM para que suba por FTP

Tanto en mi trabajo como en mis proyectos personales utilizo como editor de texto y entorno de desarrollo el vim. Me gustan los entornos livianos y que respondan con rapidez cuando escribo.

Al usar únicamente el vim, cuando tengo que subir un fichero al servidor, me apoyo un un cliente de FTP, en este caso, el Filezilla. Y claro, pierdo tiempo entre :w!, CMD + TAB y por último arrastrar el fichero.

Para ser más productivo, decidí que ya era hora de mirar la manera de poder subir un fichero directamente desde el propio vim con alguna combinación de teclas.

Me puse manos a la obra y después de un rato buscando, encontré los plugins que me harían falta para lograrlo.

El primero de ellos y el más importante fue el netrw. Este plugin permite realizar operaciones de lectura y escritura en red, es decir permite editar ficheros en remoto y subir ficheros por FTP, SFTP, SCP e incluso RSYNC.

El segundo que hace falta es el localvimrc. Este plugin permite definir una configuración especifica para cada proyecto. En mi caso lo uso para definir el comando que voy a usar para subir el fichero que estoy editando al servidor.

Una vez instalados ambos plugins, lo que hay que hacer es ir a la carpeta local donde tienes el proyecto y crear el fichero .lvimrc, dentro del cual vamos a meter un comando similar a éste:

map <leader>S :execute 'Nwrite ftp://www.javray.com//home/miproyecto/' . expand("%")

Yo he definido <leader>S para subir el fichero que estoy editando, pero se puede definir la combinación que os sea más comoda. También se pueden definir distintos comandos.

Eso sí, al usar el protocolo FTP para que no me pida la clave he tenido que usar el fichero .netrc, en el cual he definido el servidor, el login y el password. Una opción más segura sería subir el fichero por SCP y meter la clave publica de mi ordenador en el servidor.

¿Lo siguiente?

Crear un comando que me suba al repositorio el fichero, a ver si investigo un poco y os lo cuento.

Github

Hace un tiempo que me hice una cuenta en Github para aprender a utilizar git, ya que me parece una mejor opción que SVN. De momento lo he usado bastante poco, he subido tres proyectos: dos de ellos muy sencillos y un tercero algo más complejo.

Empezando por el más complejo, Galert, es un aplicación para Android hecha en python usando SL4A, la tengo publicada en Google Play, como es gratuita y es más un experimento que otra cosa, he decidido liberar lo que he hecho:

https://github.com/javray/Galert

La siguiente es un sencillo script en PHP que coge un RSS y lo transforma en comandos SHELL para que se vea con colores en el terminal:

https://github.com/javray/RSS-Colorize

Y la última, es una única página que contiene HTML y Javascript, la cual sirve para realizar un sorteo entre varios participantes. La idea es que tienes los participantes en un fichero de texto, arrastras éste a la aplicación, eliges cuántos ganadores quieres y le das a sortear:

https://github.com/javray/Sorteo

Espero seguir publicando más aplicaciones que se me vayan ocurriendo, ya que es bueno compartir el código para aprender.

querySelector / querySelectorAll

Estamos tan acostumbrados a los frameworks tipo jQuery que se nos olvida que también existe una forma dentro de javascript para realizar una búsqueda de elementos dentro del DOM mediante un selector. La manera de hacerlo es mediante los métodos querySelector y querySelectorAll.

La forma de usarlos es igual que con jQuery:

document.querySelector('#mi_id')
document.querySelector('.mi_classe')

La diferencia entre querySelector y querySelectorAll es que el primero nos devuelve el primer elemento que cumple el selector y el segundo nos devuelve una lista de nodos.

¿Para que nos puede ser útil esto? Por ejemplo, para realizar ciertos selectors en un proyecto sin tener que cargar jQuery o cuando no nos es posible cargar jQuery porque lo que estamos modificando es de una tercera persona.

Otro uso un poco más rebuscado sería el que le he dado yo hoy: Estaba trabajando con una BBDD desde phpMyAdmin y quería seleccionar todas las tablas que empezarán por ps_ y claro estamos hablando de más de 100 tablas y hacerlo a mano es un poco rollo.

Así que para facilitar mi trabajo, he abierto la consola del Chrome y que tecleado el siguiente código:

for (var i=0, lista = window.frames[1].document.querySelectorAll('input[value*=ps_]'), limite = lista.length; i < limite; i += 1) { lista[i].setAttribute('checked', 'checked');}

Con esto consigo que se me seleccionen todos los checkbox y puedo borrarlos todos de una.

Admob y SL4A

Durante un tiempo he estado desarrollando una app para Android usando SL4A y Python. Una vez desarrollada quería probar el tema de meter publicidad a la misma usando Admob.

Con SL4A uso HTML como interfaz gráfica de la aplicación y por tanto tengo que usar javascript para meter la publicidad, como si de una aplicación web se tratase.

El banner se muestra correctamente y lo puedo colocar donde quiera, el problema viene a la hora de pinchar en la publicidad, ya que al ser un webview me abre la publicidad en la propia ventana de la aplicación perdiendo toda la interfaz de la misma y quedandome sin acceso a ella.

Después de varías pruebas y un poco de ingeniería inversa sobre el javascript de Admob he descubierto la solución para que la publicidad se abra en una ventana del navegador y no en la interfaz de mi aplicación.

Primero configuramos Admob para lanzarlo nosotros de manera manual:

var admob_vars = {
 pubid: '2121324214214', // publisher id
 bgcolor: '000000', // background color (hex)
 text: 'FFFFFF', // font-color (hex)
 manual_mode: true,
 test: false// test mode, set to false to receive live ads
};

Después pedimos la publicidad:

var ad = _admob.fetchAd(document.getElementById('admob_ad'));

Y por último redefinimos la función gotourl:

_admob.gotourl = function() {
    var droid = new Android();
    droid.view(arguments[0]);
};

Con el código anterior conseguimos que la acción por defecto a la hora de pinchar en el banner sea la de abrir la URL con el navegador y no la de cargar la URL en la página actual, que en nuestro caso es la interfaz gráfica.

Renovaciones

Por estas fechas y como todos los años toca renovar el dominio, esta operación la realicé ayer, y hoy mirando lo que me había costado y tiendo en mente que los dominios se pueden renovar para más de un año, he visto la siguiente evolución de precios:

  • 2006: 6,96 €
  • 2007: 6,51 €
  • 2008: 5,92 €

No se si es por la crisis o es que la tendencia es a que cada vez valgan menos, pero mi consejo es que si tienes un dominio, es mejor pagarlo año a año que renovarlo durante un periodo muy largo.

¿Qué pasaría si todo funcionase bien?

Y cuando digo todo, me refiero a la tecnología. ¿Alguna vez os habéis preguntado que sería de mucha gente si toda la tecnología funcionará bien? Yo hoy me lo he preguntado y me ha dado cuanta de que se acabarían las típicas excusas de: “No he oído la llamada, es que, ya sabes, mi móvil anda mal…”, “No he podido mandarte el informe que me pediste porque no me funcionaba el correo electrónico…”, “No puedo ir a buscarte porque mi coche no anda bien, debe de tener un fallo eléctrico..”

A parte de las excusas, mucha gente se quedaría sin trabajo, ya que hay muchos puestos de trabajo que dependen de las “chapuzas” que hacen otros a la hora de diseñar tecnología, sea del tipo que sea.

El que todo no funcione bien o que no funcione bien siempre es el mejor invento del hombre para que sigan existiendo puestos de trabajo que se dedican al mantenimiento, la gente de producción lo hace mal adrede y crea puestos de trabajo una vez vendida la tecnología.

Está tan arraigado en nuestro ser esta idea que la gente comete errores inconscientemente a la hora de producir para mantener el puesto de trabajo. si todos los programas funcionarán bien y a la primera no habría ni la cuarta parte de los informáticos que hay en el mundo.

Después de todo esto, lo que sigo sin entender es como aún sabiendo que todo lo que es automático falla, la gente siempre busca tener más y más procesos automáticos que hay que revisar regularmente para ver que no fallan, seguro que si no fueran automáticos fallarían mucho menos.

Virus 2.0 o 3.0

Según la definición de la wikipedia: “es un programa […] que tiene por objeto alterar el normal funcionamiento de la computadora, sin el permiso o el conocimiento del usuario […]”.

Si nos fijamos en está definición vemos que describen perfectamente las publicidades de las páginas Web. Cada día las páginas tienen más y más publicidades. La mayor parte de estás se ejecutan en el ordenador del usuario ya que suelen ser SWF o DHTML con Javascript poco optimizado.

Las publicidades te ralentizan el ordenador, de manera que si tienes varias páginas con publicidad abiertas ves como la CPU de tu ordenador empieza a ponerse como una moto, saltan los ventiladores y parece que en vez de un ordenador tienes una lavadora centrifugando.

Yo que trabajo en desarrollo WEB lo sufro todos los días, no hay nada como abrir unas cuantas pestañas con páginas con publicidad para que el ordenador empiece a funcionar de manera muy lenta y se haga casi imposible cambiar de pestaña.

No es por echar la culpa a alguna tecnología pero yo he comprobado que los SWF aunque no estén haciendo ningún tipo de animación consumen CPU y no se porque.

Perfil bajo

¿A quién no le ha pasado que le manda unos fotos un cliente que están en un formato erróneo y se las vuelves a pedir y te mandan de nuevo las mismas fotos?¿O qué te llama un cliente porque ve mal algo en su página web y no ha sido capaz ni de refrescar ni una sola vez la página antes de llamarte?

Pues bien, el otro día en mi trabajo surgió el calificativo para este colectivo de personas que aún siendo de perfil “semi-técnico”, sus habilidades dentro del campo de la informática dejan mucho que desear. A partir de ahora a todas estas personas se les denominará de “perfil bajo”.

Y me diréis: ¿Existe mucha gente con este perfil? mi respuesta será: Si, y cada vez más.

Aunque parezca mentira muchas de estas personas se creen que están capacitadas o lo que es peor sus jefes se creen que son las personas más adecuadas para llevar todo tipo de proyectos que requieran de un nivel alto y de un perfil más técnico de lo normal. Son personas que muchas veces se escudan aunque no lo parezca en la típica frase de: “Yo no soy técnico, pero desde el punto de vista lógico…” y digo yo: “si no es técnico, ¿cómo sabe cual es el mejor punto de vista para abordar algo?

También se les puede identificar porque son personas que utilizan todos los días las mismas herramientas para su trabajo y todas las semanas o todas las veces que tienen que repetir una de las tareas periódicas les surgen las mismas dudas, es como si hiciesen reset cada semana y todo volviera he empezar. No son capaces de aprender de sus errores y lo que es peor si les sacas de su entorno no son capaces de inferir cual puede ser la salida para resolver un problema.

En cierto modo, aunque estas personas nos saquen de quicio, hay que dales las gracias ya que gracias a ellas, gente como yo o como mis compañeros seguimos teniendo trabajo.

Último/a

Para inaugurar el año 2008, voy a empezar un meme, creo que no he empezado yo ninguno, así que este es de lo último que he hecho:

– Último libro que me he leído: “La música de los números primos
– Último capítulo que he visto: “Californication” capítulo 1×05
– Última película que he visto: “Los crímenes de Oxford
– Último juego al que he jugado: “Guitar Hero III
– Último “aparato” que me he comprado: “HD LACIE de 500 GB

Sois libres de continuarlo y de añadir más “últimos/as”. Los enlaces no son necesarios, los he puesto porque me apetecía enlazar todo lo que he escrito que no es mucho la verdad para ser el primer post del año.