PyConEs 2017 Cáceres

Quizá llegues aquí de rebote y no sepas lo que es PyConEs, así que voy a hacer un breve resumen. PyConEs es la conferencia del lenguaje de programación Python más importante de España. Se celebra una vez al año en una ciudad distinta y en ella se juntan amantes de este lenguaje. La comunidad de Python, además de ser enorme y estar llena de apasionados pythonistas, es una comunidad inclusiva y abierta. Es un evento totalmente recomendable repleto de charlas interesantísimas.

Es mi tercera PyConEs. Por lo visto, y sin buscarlo, sólo asisto a las PyConEs impares, así que asistí a la de 2013 en Madrid, a la de 2015 en Valencia y a la de Cáceres este año, del 22 al 24 de septiembre de 2017. En la primera a la que fui, en mi universidad, no tenía ni idea de python. Acababa de ponerme con el lenguaje y apenas sabía algo de su sintaxis y bondades. Pero había algo en él que me atraía poderosamente. Me pagaban por trabajar en otro lenguaje de programación, con otras tecnologías bastante más antediluvianas. Hoy, 5 años después, puedo decir que tengo un trabajo python-based, así que quizá PyConEs fue el punto de ruptura que me hizo decir «Eh, yo quiero trabajar en esto«.

Y ahora, llega el momento del despelleje. Esta vez no me voy a extender mucho sobre cada punto, sólo haré un breve repaso sobre los pros y contras que he encontrado en esta edición. Todos los comentarios son hechos desde el respeto y desde mi opinión personal.

Lo bueno

Casi todo. Cáceres es una ciudad preciosa, que pude disfrutar un poco al salir de las charlas (¡Con concierto de rock incorporado!). El complejo cultural San Francisco es un sitio bien dotado para las charlas. Estaba cerca del centro, así que pudimos ir andado, pero además tenía un parking amplio por si el alojamiento estaba más lejos.

Los temas de las charlas y la cantidad de ellas entre las que elegir estuvieron muy bien. Mucha variedad de una comunidad que se ve que cada vez está más madura. Sobre los talleres del viernes no puedo opinar, ya que no llegué a tiempo: cosas de hacerse el mismo día el viaje Viena-Madrid-Cáceres…

Hubo tanta variedad y calidad que tengo apuntadas un montón de charlas a las que no pude ir porque estaba en otro track.

Y como no, lo mejor, la gente. Siempre. Como dijo acertadamente Naomi Ceder en la apertura «Vine por el lenguaje, me quedé por la comunidad«. Yo no soy persona de comunidades, pero en esta me siento muy a gusto. Y eso es un gran avance son respecto a otras convenciones a las que he ido una vez y no repetiría ni como proyecto sociológico.

Lo no tan bueno (Polite mode ON)

Desde mi punto de vista lo peor ha sido el nuevo formato de charlas de 25 minutos. Se mascaba cierto estrés en ponentes que no estaban acostumbrados a un formato tan corto. Aunque algunos ponentes usaron su tiempo de forma muy eficiente, no fue el caso de la mayoría. En el momento en que había un problema técnico y se atrasaba la charla 5 minutos, era imposible recuperarse y había que robarle tiempo al coffee break o a la hora de la comida. Es una opción para acomodar más charlas en el mismo tiempo, pero sé de primera mano que ponentes lo pasaron mal con el tiempo, iban atropellados, casi hablando concurrentemente. A mí no me gustó, me quedo con un formato más largo, aunque haya menos charlas. ¿Se podría votar esto para el año que viene? Yo lo dejo ahí por si este artículo cae en manos de alguien que pueda hacer algo para cambiarlo. 🙂

La comida fue otro punto flaco de PyConEs Cáceres. No hubo variedad suficiente para atender las necesidades alimentarias de la gente. Y no sólo eso, sino que el catering me pareció excesivo. Prefiero que me entreguen una cajita con un bocadillo, postre y bebida, que tener que esperar a que me sirvan el rancho en un bol minúsculo para guarnición y tener que comer de pie algo que no está preparado para ello. El segundo día sí dieron más variedad de comida, pero igualmente no me pareció la mejor opción. Para un picoteo, sí, para comer, definitivamente no.

Como detalles menores hubo una charla en la que tuvimos que ir al coro de la sala principal y no se oía nada de nada. No nos dejaron entrar por abajo, y entre la lejanía, los barrotes y la mala acústica, fue una charla perdida que veré en vídeo. Y algún que otro caos organizativo (bolsas, emplazamiento de los stands), pero nada reseñable.

Conclusión

Un año más he disfrutado muchísimo de la PyConEs. Las otras dos veces fui por amor al lenguaje, esta vez he ido, además de por placer, por trabajo (¡Gracias Openshine!). Bueno «por trabajo» no es la mejor frase, he ido por placer con gente del trabajo. Como punto personal me faltó mucha gente con la que suelo ir. Espero el año que viene reencontrarnos de nuevo.

Yo ya estoy esperando PyConEs Málaga 2018, además de porque Málaga es una de mis ciudades favoritas del mundo mundial, junto con mi Madrid natal, porque me lo paso muy bien y aprendo mogollón.

Por último quería agradecer a toda la gente que forma parte de esta comunidad (sí, a ti que me estás leyendo) que exista algo tan fabuloso como PyConEs. ¡Gracias! Nos vemos el año que viene, porque espero romper el hechizo que sólo me deja ir en años impares.

Si tienes algo que decirme, puedes hacerlo en los comentarios o a través de mi twitter @davyria.

Solucionar un ataque xmlrpc en nginx

«Oye que nekotek no funciona» han sido las palabras que han dinamitado un ratito divertido para solucionar un fabuloso ataque DDoS que está ahora muy de moda (sobre todo en Rusia y China 🙂 ).

La idea es atacar blogs con wordpress que tengan activo XML-RPC, intentando acceder a xmlrpc.php. Que además viene activado por defecto. Algunos optan por renombrar el fichero xmlrpc, que sería una solución fácil y a la par inútil tras actualizaciones.

En nginx podemos limitar el acceso añadiendo a la configuración de nuestros servidores lo siguiente:

server {
  location ~ xmlrpc.php {
    deny all;
    allow 127.0.0.0/24;
    allow ::1/128;
  }
}

Además podemos añadir al fichero functions.php de nuestro tema de wordpress lo siguiente:

add_filter( 'xmlrpc_methods', 'remove_xmlrpc_pingback_ping' );
function remove_xmlrpc_pingback_ping( $methods ) {
   unset( $methods['pingback.ping'] );
   return $methods;
} ;

PyConEs Valencia 2015 desde el patio de butacas

Este fin de semana he asistido a la edición PyConEs 2015 en Valencia. Daré mi opinión sobre la organización, charlas y talleres, desde un punto de vista totalmente subjetivo y sesgado 🙂

PyConEs Valencia 2015

Es mi segunda PyConEs. La primera, en 2013, fue en mi universidad: la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid. En 2014 no pude asistir a Zaragoza, así que no puedo comparar las tres.

Organización y Ñam-ñam

Lo primero, la organización: Brutal. De buena. Han sabido llegar al público objetivo, mantenernos informados en todo momento y han hecho un gran trabajo. Es difícil como asistente saber todo el esfuerzo que hay detrás. Los asistentes sólo percibimos que todo ha funcionado bien, como una máquina bien engrasada. Normalmente la gente se queja sobre las cosas malas, pero cuando no hay nada malo y todo es como debería ser, no se dice nada. En este caso, enhorabuena por el trabajo bien hecho.

Personalmente agradezco a la organización de PyConEs y a los patrocinadores porque sin ellos este año no podríamos haber asistido. Y es que hacen mucho porque las diferentes brechas sean mitigadas para que todos podamos asistir.

La Escuela Técnica Superior de Informática de la Universidad Politécnica de Valencia es un sitio bien dotado y bastante cómodo para asistir a un evento como PyConEs. El welcome pack estuvo bien, bolis, regalitos, bolsas de tela y camisetas!

La comida en la cafetería fue variada. Alguien dijo que había demasiado dulce en los coffee breaks y poca comida sana. Por el precio de la entrada, esa cantidad de charlas, comida y dos coffee breaks creo que son más que suficientes.

Charlas plenarias, el sandwich perfecto.

Los oradores plenarios, Yamila en la apertura y Víctor en el cierre, dieron dos grandes charlas, cada uno con su estilo particular. Ambos se merecen todo el respeto y un aplauso virtual por subirse al escenario y contarnos una historia.

Python, Plutarco y Yamila

Yamila Moreno, en su charla de apertura nos habló sobre Plutarco, Python, la diversidad y, básicamente actuó como defensora de la inclusión de minorías para heterogeneizar un mundillo ampliamente representado por el hombre blanco cisgénero entre 20 y 40 años. Toma frase.

Si bien me gustó mucho lo que contó y cómo lo contó, con su historia de su amiga inmigrante Roxana, y la sorpresa que nos dio al final sobre que no todo es lo que parece, no estuvo exenta de polémica. Mucho se habló esa noche sobre el tema en las PyBirras en el bar Olhöps. Por supuesto, al yo ser parte de una de esas minorías como mujer, tuve que dar mi opinión unas cuantas veces. No es que mi opinión sea más o menos importante, simplemente es la mía. Creo que hay que cambiar las cosas desde el principio, con la educación. A día de hoy, cuando en informática ya hay menos tituladas que titulados, menos inmigrantes que españoles, menos personas con recursos que personas con ellos, no se puede pretender que haya por ejemplo equipos técnicos de 50% mujeres y 50% hombres, porque no se acerca a la cifra en el mundo real, es decir, hacer discriminación positiva no es una buena idea. Pero tampoco es buena idea tener que convertirte en algo que no eres para mimetizarte con el entorno.

Como ella, soy también de la opinión de la guerra de guerrillas. Quizá yo sola no pueda cambiar la sociedad, pero sí podré ayudar a cambiar mi entorno. El detalle de la Pepa y cómo nos dio un pequeño toque de lo mucho que nos queda aún por mejorar, me encantó. Pero curiosamente el problema no somos nosotros, un colectivo bastante tolerante. El problema, como digo, creo que viene de antes, de la educación y de la propia sociedad.

Sobre Víctor Terrón (Pyctor) decir que me pareció un gran ponente. Hizo una charla muy amena, divertida y a la vez educativa. Y eso para la charla de cierre, cuando ya estábamos todos cansados, es genial. Habló sobre Dijkstra, la complejidad de los algoritmos y el uso del heap para calcular distancias en un grafo, entre otras cosas. Casi nada.

Y por último, ponerse a programar ahí en frío para hacer el sorteo final es de ser un valiente. Todos en la soledad de nuestros escritorios somos capaces de hacer un par de ranges para seleccionar aleatoriamente dos números. Pero en un escenario, con un Mac casi sin batería y el efecto demo intentando atacar, creo que es toda una proeza. A ver cuántos pueden hacer un sorteo en 2 minutos con su lenguaje de programación favorito, sin anestesia ni nada.

El core: Las charlas

Charlas de PyConEs

Este es el alma de la PyConEs: las charlas. Para quien no pudo asistir, comentaré que había tres tracks: básico, avanzado y científico. En algunos casos me hubiera gustado tener un clon, porque había horarios en los que me interesaban dos e incluso tres charlas simultáneas. Por suerte podré ver los vídeos y presentaciones a las que no pude asistir. También hubo momentos en los que me pasó lo contrario, no podía elegir ninguna porque no sentía que ninguna fuera de mi interés, pero bueno, nunca llueve a gusto de todos…

La dificultad de las charlas a veces no tenía que ver con el track asignado: asistí a charlas básicas en el track avanzado y viceversa. Entiendo que ha sido un trabajo difícil seleccionarlas, casi de encaje de bolillos. Pero este podría ser un punto a mejorar en futuras ediciones.

Desde mi humilde posición pediría un esfuerzo mayor en la selección de las charlas, quizá permitiendo una votación abierta de los asistentes. Nadie mejor que nosotros para saber a qué queremos asistir ¿No? No por eso digo que estuvieran mal, pero me da mucha curiosidad saber cuáles se quedaron en el tintero.

Hubo algunas salas que se llenaron hasta el punto de tener que verlas de pie, hombro con hombro, donde no cabía ni un alfiler. Quizá si hubiera habido una consulta previa de asistencia, no vinculante, se hubiera podido dimensionar mejor.

Otra cosa a mejorar es la forma de dar las charlas en sí. Por ejemplo, el uso de colores con poco contraste en las presentaciones. Si no sabes si azul sobre verde se va a ver bien, utiliza negro sobre blanco, que siempre funciona y está de moda :D. Puede que no quede precioso, pero es preferible la legibilidad sobre tener una presentación cromáticamente rica, que no bonita. Otro punto a mejorar es evitar poner 100 líneas de código en la pantalla o mucho texto. No se lee, no se ve y en muchos casos no se entiende y no sirve para nada. Pero sobre todo y lo más importante es prepararse la charla. No es que todos tengamos que ser unos comunicadores excelentes recién salidos de TED. Pero si hay gente que viene a ver lo que tienes que decir, qué menos que se vayan con la sensación de que has dedicado un tiempo a prepararte la presentación. He de decir que esto último no pasó mucho, y que quizá los nervios nos hagan pasar malos momentos.

En todas las charlas he aprendido algo, puede ser una nueva herramienta, algo que desconocía de Python o simplemente cómo hacer o no hacer las cosas. Lo mejor ha sido la variedad de charlas y temas, que para tratarse «sólo de Python» es increíble. Ha habido mucho nivel. Muchas gracias a todos los ponentes por tener la valentía de subiros allí y contarnos cómo hacéis las cosas. ¡El mundo necesita a más gente como vosotros!

Asistentes, networking y sinergias

Asistentes en PyConEs 2015

Lo que más me gusta de PyConEs es el buen ambiente que se respira. Dos días de conferencias sobre algo que te gusta es el perfecto ecosistema para sentirte a gusto. Desde luego no sufrimos mucho. 🙂

Para mí PyConEs es una oportunidad de aprender y una inyección de positivismo.

Peeeeero… Aquí es donde me voy a dar un poco de cera a mí misma. Desde Madrid, Blazaid y yo ya sabíamos que nos íbamos a encontrar con antiguos compañeros de la universidad o ex-compañeros de trabajo (y fervientes amantes de Python), así que al llegar nos unimos a ellos. También nos relacionamos con gente desconocida, pero he de decir que sobre todo estuvimos con el mismo círculo. Con lo cual el networking fue escaso. Tampoco es que yo tenga un gran don de gentes (Blazaid sí, además de ser compositor de chistes), pero imagino que cuando alguien te ve en un grupo grande es más difícil acercarse a ti.

No pude entablar conversación con los 400 asistentes y no sé si los demás tendrán esa misma sensación de los inevitables mini-grupos. Cuando fuimos a las PyBirras seguimos con los conocidos y fuimos a cenar con ellos. Fue uno de los mejores momentos de todo el fin de semana, nos reímos mucho, a pesar del frío. Pero eso es otra historia… Casi un documental de National Geographic.

Quizá se pueda fomentar de alguna manera conocer a otras personas allí, sin tener que darte de alta en un servicio y publicitarte a modo muro de facebook.

Conclusiones de PyConEs

Para resumir, la sensación que me ha dejado PyConEs ha sido positiva. Podría dar una nota de 1 a 10, con dos decimales incluso, pero creo que en este caso no sirve de mucho. Prefiero decir que me ha gustado y que repetiré, mientras pueda. La balanza se inclina hacia lo positivo. Si alguien que le guste python me pregunta si le recomiendo ir, le diría que sí. No porque sepa que le va a gustar, sino porque es mejor hacerse una idea de primera mano que hacerle caso a alguien que no sabes si tiene los mismos gustos que tú.

Siempre hay hueco para mejorar, y eso es lo que me gusta de esto, que el año que viene seguramente sea mejor.

Había empresas buscando talento pythónico, un montón de proyectos chulos y toneladas de información condensada en dos días y poco. Tengo una hoja llena de garabatos sobre cosas que tengo que mirar, ideas interesantes, para mí y para mis proyectos y charlas que tengo que ver o repasar cuando suban los vídeos. Eso creo que es el mejor cumplido para la gente que ha participado: inspirar a otros.

Y es que… ¡Python mola mucho!

¡Gracias a todos y espero veros el año que viene en PyConEs 2016!

Para cualquier cosa, no dudéis en dejar un comentario o preguntarme por twitter.

Añadir a git los ficheros migrate de django en pycharm

Pycharm doesn't love django + git

Si usas el IDE pycharm y django ≥ 1.7 (o < 1.7 con south) y como gestor de versiones usas git, probablemente te ha pasado que haces un commit y se te olvida añadir (git add) los ficheros de las migraciones. Pycharm hace «git add» automáticamente a todos los ficheros creados, salvo a los creados tras hacer un makemigrations. Para saberlo, pycharm nos los muestra en rojo en lugar de en verde.
¿Por qué este comportamiento? Realmente lo desconozco, pero imagino que porque no ha sido una acción hecha directamente por el usuario, sino como consecuencia de un migrate.

A mí me pasa a menudo que hago un commit y luego otro como un comentario «los migrates del anterior commit». Cuando esto no sólo te pasa a ti, sino que es algo común en los demás compañeros empiezas a preguntarte cómo solucionarlo, y ya de paso convertirte en el héroe que evita el 1×2 en los commits. Depende de la manera de trabajar que tengas, el tipo de integración de las ramas que hagas y demás, esto puede serte útil o no, pero nunca está de más probar algo desconocido.

Para ello podemos usar los hooks de git, que son pequeños scripts que se ejecutan cuando ocurre algún evento, como commit, push, receive. Podemos crear un hook de tipo pre-commit, que se ejecutará antes de hacer un commit, para que no nos deje hacer commit si tenemos algún fichero sin añadir.

Los hooks se instalan en la carpeta .git/hooks del repositorio de git que queramos. Cuando inicializamos un repositorio ya nos crea el directorio con algunos ejemplos.

De acuerdo con la respuesta correcta de este hilo de stackoverflow, podemos crear meter el siguiente código en el fichero pre-commit hook:

ud=`git status -u | grep '^Untracked files:$'`
 
if [ -n "$ud" ];
then 
    cat < <EOF 
¡Cuidado! Hay ficheros que no se han añadido al repositorio
EOF
    exit 1
fi

Este script lo único que hace es ver si al ejecutar git status -u existe la frase ‘Untracked files’. Si es así nos avisa con un bonito texto y no efectúa el commit. De esta manera nos dará un aviso antes de efectuar el commit y podremos subsanarlo sin tener que añadir posteriormente un commit separado.

Si aún así queremos dejar ficheros sin subir, podemos usar git commit --no-verify para que no ejecute el hook.

Más sobre git hooks:

http://git-scm.com/book/es/v2/Customizing-Git-Git-Hooks
http://githooks.com/
https://www.atlassian.com/git/tutorials/git-hooks/

Instalar Django 1.6 en Windows 7

No me gustan mucho los tutoriales eternos, así que pongo aquí los pasos concisos para instalar Python 2.7 y Django 1.6 en Windows 7.

Para más información u otras configuraciones: https://docs.djangoproject.com/en/1.6/intro/install/

 

  1. Instalar Python 2.7.8
  2. Añadir al Path de Windows esta línea: «C:Python27;C:Python27Scripts»
  3. Instalar SetupTools para Windows 7 y ejecutar en línea de comandos «python ~ruta/ez_setup.py»
  4. Instalar Pip, desde línea de comandos escribir «easy_install pip»
  5. Instalar Django, desde línea de comandos: «pip install django»

Si tenéis cualquier duda, podéis preguntar en los comentarios.

Exportar repositorio con git archive

Acabamos de terminar blazaid y yo la mudanza del dominio, así que me ha picado el gusanillo de volver por estos lares para escribir una nueva entrada. Esta vez para un howto rapidito sobre git.

A veces necesitamos exportar un proyecto de git para subir a un servidor, pero no queremos clonar el repositorio con «git clone», ya que tendremos el árbol de directorios, incluido .git y cosas que no querremos subir. Una opción es copiar únicamente los directorios y ficheros que queramos a una nueva ubicación, y listo. Pero si lo hacemos más de tres veces empezaremos a murmurar cosas como «tu madre era un troll» a la pantalla. Y no es plan… Así que para automatizar un poco, obviando sistemas de Integración Continua, mucho más-mejores y más mega-profesionales, podemos usar el comando git archive.

Todo vino con una búsqueda en google similar a «svn export in git«. En SVN era tan sencillo como el comando anterior, así que siendo git mucho más evolucionado, con exoesqueleto de adamantio y todo, tenía que poderse hacer. No me equivocaba. Un par de visitas a stackoverflow y ya estaba creándome todos los scripts en bash para ello.

Desde el path donde tengamos el repositorio que queramos exportar ejecutamos:


# Formato tar.gz
git archive HEAD | gzip > /path/to/export/project.tar.gz

# O en zip
git archive --format zip --output /path/to/export/project.zip HEAD

Es importante haber hecho commit de todos los ficheros que queramos, puesto que en este caso nos subirá lo que esté en HEAD (se puede poner master / devel o la rama que uséis vosotros). Con esto tendremos un fichero comprimido que podremos copiar donde queramos.

Esto nos comprimirá todo el contenido del proyecto, obviando el directorio .git. Tampoco es mucho avance.

Para elegir qué más cosas quitar de la exportación, podemos hacer uso del fichero .gitattributes, que crearemos en el raíz del proyecto. El mío tiene un aspecto parecido al siguiente:

# Used to remove files from deployment using `git archive`

# Git Files
.gitignore export-ignore
.gitattributes export-ignore

Thumbs.db export-ignore
project.tar.gz export-ignore

# Directories
_docs export-ignore
_scripts export-ignore

# General text files
*README.txt export-ignore
*LICENSE.txt export-ignore
COPYRIGHT.txt export-ignore
CHANGELOG.txt export-ignore

Esto hará que se excluyan las carpetas /_docs y todos los archivos que no queramos, como el propio .gitattributes o los famosos .gitignore, dejándonos un proyecto limpio y listo para poder subirse a producción sin mucho problema.

¡Feliz semana!

Restaurar Android y la verificación en dos pasos de Google

204px-Android_Update_ScreenComo buenos programadores deberíamos probar nuestro código, ya sea con pruebas unitarias, tests varios, a mano, o como queramos. Y para probar bien hay que probar los límites. Muchos programadores mediocres testean su código en los puntos intermedios: es decir, cuando una lista está parcialmente llena, cuando hay datos, cuando la configuración es correcta, cuando todo va como la seda… Lo que comúnmente se conoce como: lo que ve la suegra. Pero los buenos programadores van a los extremos. ¿Qué pasa si falta el fichero? ¿Qué sucede si el resultado que me devuelve está vacío? ¿Cómo se comporta con una base de datos sin datos? ¿Y si intento acceder si estar correctamente autenticado?

Pues ahora mismo estoy con la sensación de que alguien no ha hecho esas pruebas en Google. Estoy restaurando mi móvil Android, ya que haciendo pruebas a veces le meto mucha porquería. Tengo activada la verificación de cuenta en dos pasos que, primero te pide la contraseña y, si es correcta, envía un código al móvil para poder hacer login. Pero ¿y si lo que estoy restaurando es el mismo móvil? Meeeeeeeeeeeeeec!

¿Cómo voy a recibir el código si lo primero que hace Android es pedirme que inicie sesión en Google? Muy avispados. Tampoco aparece la notificación, ni tengo acceso al menú de programas porque ¡Estoy en la configuración inicial! Fantabuloso…

¿La solución? Hacer la configuración inicial parcialmente hasta que envíe el código. Cuando no podamos seguir, salimos y cuando nos pregunte si tenemos una cuenta de Google decirle que no, obviar la integración del dispositivo con Google y finalizar sin ninguna cuenta configurada. Entonces nos llegará la notificación con el código y ¡Tendremos que repetir todo de nuevo!

No sé, me resisto a pensar que en Google no prueben los extremos, así que pensaré que la torpe soy yo.
Que conste que a la hora de publicar esto ya tengo el móvil instalado, pero habiendo hecho esa chapuza de la que he hablado. ¿Alguien tiene una solución menos mala? Mi reino por algo menos cutre. Y quitar la verificación por código no es una opción viable para mí.

Scrobbling de last.fm desde Chrome

last.fmSi escuchamos mucha música es probable que nos guste seguir nuestras propias tendencias: saber qué hemos escuchado más en el pasado, qué grupos nuevos o canciones nos podrían gustar (gracias a recomendaciones). En definitiva, guardar un histórico de la música que escuchamos con algún fin.

Cuando utilizaba Spotify, y dado que había sido ferviente usuaria en el pasado de last.fm, seguí registrando las canciones que escuchaba gracias a la opción de spotify de hacer «scrobbling en last.fm«.

Recientemente me pasé a Google Music y perdí esta opción. Al menos no era tan sencillo como activar el Scrobbling de last.fm en una pestaña de Spotify.

Pero por suerte existe una solución bastante sencilla para ello. El único requisito es que usemos el navegador Google Chrome y que instalemos el plugin o extensión Last.fm Scrobbler. Lo podéis encontrar en la página de Last.fm Scrobbler de la tienda Chrome Web Store.

Una vez instalado, configuramos nuestro usuario de last.fm, que si no tenemos tendremos que crearnos. Y una vez hecho esto se empezarán a registrar las canciones que escuchemos.

Este plugin puede hacer Scrobbling de muchos servicios de música online, tales como:

  • Amazon
  • Google Play Music
  • Grooveshark
  • MySpace
  • Pandora
  • Spotify
  • YouTube

En la versión 1.17 soporta más de 30 fuentes diferentes de música y vídeo. Además permite el uso de notificaciones de escritorio, para que sepamos qué canción suena en cada momento (esta opción la tengo desactivada, que me parece un poco intrusiva).

Espero que os haya servido. Si tenéis cualquier duda o pregunta podéis dejar un comentario.

Desactivar salvapantallas en Kindle

Imaginemos que queremos mantener una página de kindle activa y que no se active el salvapantallas a los 10 minutos, como es habitual. Esto no es algo tan raro. Si estás leyendo un libro sí, pero si estás con PDFs complejos o si utilizas el kindle para mostrar información útil aprovechando la duración de su batería, podrías querer esta opción.

En la pantalla de inicio (donde se muestran todos los libros, dándole al botón Home), introducir texto:

;debugOn
y pulsar Enter.

Desaparecerá la caja de introducción de texto, volverla a abrir y poner el siguiente texto:

~disableScreensaver
y pulsar nuevamente Enter.

Tras 10 minutos ya no debería apagarse.

Para volverlo a activar habría que usar:
~enableScreensaver

Fuente: http://www.mobileread.com/forums/showthread.php?t=99229

Consultas útiles en SQL Server.

Hay veces que cambias de Sistema Gestor de Bases de Datos por necesidades del guión. Siempre hay consultas útiles que tiendes a buscar una y otra vez, y reutilizarlas hasta la saciedad.

A mí me pasa con las siguientes en SQL Server (Transact-SQL):

Mira las últimas queries ejecutadas y el tiempo en segundos y número de filas afectadas

SELECT	deqs.last_execution_time AS [Time], 
		dest.TEXT AS [Query],   
		total_worker_time/1000000 as [Segundos], 
		total_rows as [Filas]
FROM sys.dm_exec_query_stats AS deqs
CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest
ORDER BY [FILAS] DESC;

Últimas QUERIES y USUARIOS

SELECT conn.session_id, sson.host_name, sson.login_name, 
 sqltxt.text, sson.login_time,  sson.status
FROM sys.dm_exec_connections conn
INNER JOIN sys.dm_exec_sessions sson 
ON conn.session_id = sson.session_id
CROSS APPLY sys.dm_exec_sql_text(most_recent_sql_handle) AS sqltxt;

Reiniciar índices en tabla (por ejemplo, después de vaciarla).

DBCC CHECKIDENT (***NOMBRE_TABLA***, reseed, 0);

Esto último lo he visto con reseed a 0 y a 1. Creo que lo correcto es a 0, porque el siguiente id será el 1.

Además, podemos querer ordenar en orden natural los resultados. A veces con un ORDER BY no nos sirve. Por ejemplo si la longitud es distinta y ordenamos un campo varchar nos llegaría a salir la ordenación de los datos 2, 1, 122, 222, como:

1
122
2
222

Esto está claramente mal, para este caso podemos usar:

ORDER BY LEN(nombre_columna), nombre_columna;

Y así obtendremos los resultados ordenados de la siguiente manera:
1
2
122
222