; Vince y el mundo del software

sábado, 21 de febrero de 2015

Compilar lisp desde sublime text 2

Bueno, siguiendo con lisp un poco, ahora toca configurar lisp en sublime text 2. Explicaré cómo compilar pero a lo más sencillo.

Para el coloreado primeramente, abren un archivo .lisp (o .lsp) y hacen lo siguiente:

View>Syntax>Open all with current extension as>Lisp

Y listo!

Ahora para compilar.

1.- Instalan el SBCL (este tutorial es para ese compilador, pero es refácil para otro compilador), y se aseguran que el binario quede en el PATH, para ello, al instalar el sbcl vean que quede marcada la opción de agregar al PATH; si quieren usar la versión de lispstick, lo más fácil es instalarlo de nuevo pero en la carpeta donde está el lispstick (sigan las instrucciones de la página de lispstick), y marquen la opción de PATH, de lo contrario tendrán que revisar cuáles son los directorios que hay que agregar al path (no es sólo el binario si no me equivoco).

2.- luego en el sublime vayan a:
Tools>Build System> New Build System

3.- En el archivo que se les abre escriben:

{
 "cmd": ["sbcl", "--noinform", "--script", "$file"]
}

4.- guardan el archivo, para ello File>Save, y lo guardan en la carpeta que les aparece, en mi caso es:

C:\Users\vincegeratorix\AppData\Roaming\Sublime Text 2\Packages\User

Le ponen un nombre característico, como "LispSBCL" o algo así.

El problema con ésto es que no cambia automáticamente entre un compilador y otro (cuando tienen abiertos varios archivos de distintos lenguajes), es bastante molesto, pero a mí me da un poco lo mismo, simplemente me acostumbré a cambiarlo manualmente y me da auténtica flojera leerme la documentación para ver cómo hacerlo (y que quede al poner la opción de build system automático), pero si quieren investigar me escriben la solución en los comentarios, sería de gran ayuda para todos :) Este es un blog un poco chanta de un estudiante motivado simplemente xD jajjaja :3

Configurar Lisp en windows con emacs y doc view

Hola! ahora estoy en windows jejeje, así que configuré lisp en windows, pero the-noob-style, así que si quieren algo muy fácil, les recomiendo este tutorial.

Para tener lisp con emacs, sbcl (el compilador) y slime (para tener una buena consola) basta con descargar el lispstick y listo! violá!
Lispstick es un compilado con todas las herramientas necesarias, listo para funcionar. Lo descargan de:

http://www.iqool.de/lispstick.html

Recomendaciones


Para ejecutarlo arrancan el archivo "run.bat", y le pueden hacer un acceso directo al escritorio y le cambian el ícono.
Sin embargo, si quieren modificar el archivo de configuración ".emacs", tendrán que modificar primero una línea del "run.bat", en particular la última, que le sacan el "-Q", opción que significa que no toma en cuenta el archivo .emacs, el cual es necesario si quieren hacer modificaciones (ya les explicaré) la dejan así:


%CD%\%EMACS%\bin\runemacs.exe --load  %CD%\.emacs --directory %CD%/%SLIME%/


Es muy importante que antes de eso hagan una copia de respaldo del archivo .emacs, ah! y windows les alegará cuando intenten modificar el nombre (ya que dirá que "no tiene nombre", porque no hay nada antes del punto), así que para respaldarlo una buena opción es comprimir el archivo en un rar o zip, y luego cuando lo quieran recuperar simplemente borran el nuevo y extraen el antiguo.

Ya! con eso están listos (bueno, antes también lo estaban... pero bueno, no podían configurar nada, y yo uso el doc-view).

Actualizar


Para actualizar el lispstick (ya que trae versiones viejas), descargan el programa correspondiente, lo instalan y copian la instalación, tal como sale en las instrucciones de la página de lispstick.
Un dato importante, actualicen emacs y slime, pero el sbcl 2.2 y superior da un error con el slime, así que yo dejé la versión antigua. Pueden buscar soluciones, pero qué demonios XD La primera vez que lo arranquen luego de actualizar demorará un poquito más, pero sólo unos pocos minutos.

Doc-View


Esto es sólo para los que deseen abrir pdf en emacs, es un tanto largo.... pero paso a paso

El doc-view viene por defecto, pero en windows es un poco más difícil ponerlo en marcha.

Antes que nada instalan el soporte a png, para ello, crean un archivo nuevo en emacs (no en el REPL de slime/SBCL, ya que este último es Common Lisp, y necesitamos Emacs Lisp), y escriben lo siguiente:


(cdr (assq 'png dynamic-library-alist))


Luego apretan C-x C-e (Ctrl + x y luego Ctrl + e para los que no saben), y abajo les dará dos strings con los archivos soportados de png. por ejemplo a mí, uno de ellos fue "libpng16-16.dll".

Para darle soporte, simplemente tienen que descargar uno de esos archivos y copiarlos a la carpeta "bin" de emacs (van a su instalación de emacs dentro de lispstick y luego a bin, y ahí copian el susodicho archivo). Es algo complicado encontrarlo a veces, ya que usa la versión más última, pero lo que yo hice fue descargar otro programa que venía con esa dll, la copié, y luego borré el programa.

OJO! Tiene que ser la versión de 32 bits, ya que el lispstick usa emacs de 32 bits.

Luego de ello reinician emacs y cargan un archivo png, y les debería funcionar.

GnuWin32


Para añadir más soporte a emacs, tienen que descargar "gnuwin32" de acá:

http://sourceforge.net/projects/getgnuwin32/files/

Lo descargan e instalan. Luego de ello ejecutan el archivo "download.bat", les demorará harto porque descarga un montón de cosas (tengan un giga preparado para la descarga e instalación, es menos).
Luego que termina de descargar ejecutan el archivo "install.bat", y les demorará otro montón porque compila los paquetes con cygwin y mingw.

Luego de tooodo eso, tienen que agregar la carpeta de las librerías a a variable de entorno PATH del sistema operativo, para ello ubican la carpeta "bin" dentro de la carpeta donde se instalaron los paquetes, en mi caso es:


C:\Users\vincegeratorix\Downloads\lispstick\GetGnuWin32\gnuwin32\bin


y luego en windows 7 (si tienen otro windows busquen en google cómo cambiar path), van a "Equipo" y luego a "Propiedades del sistema", para luego ir a "Configuración avanzada del sistema", en la ventana que les aparece clickan en el botón de "Variables de entorno"; seleccionan "PATH" y le dan a "Editar".
Para editar simplemente ponen un punto y coma al final de la línea y agregan la dirección de su carpeta, en mi caso es así:


C:\Users\vincegeratorix\AppData\Roaming\cabal\bin;C:\Program Files (x86)\FreeArc\bin;C:\Users\vincegeratorix\Downloads\lispstick\GetGnuWin32\gnuwin32\bin;C:\Program Files (x86)\gs\gs9.15\bin;C:\Program Files (x86)\gs\gs9.15\lib;C:\Program Files (x86)\SMLNJ\bin


Lo importante es la línea del gnuwin32, el resto es el gs (necesario para doc-view) y otros compiladores y cosas xD

Ghostscipt


Antes de configurar doc-view, tienen que instalar el ghostscript, para ello descargan la versión de 32 bits de acá:

http://www.ghostscript.com/download/gsdnld.html

 y lo instalan, luego agregan al PATH la carpeta bin y lib (tal como está en el ejemplo de arriba).

Configurar Doc-View


Para configurar doc-view y ver archivos pdf hagan lo siguiente:

Apretan M-x (Alt+x) y escriben abajito "customize-group" e intro (RET es Return, o sea intro, por si ven tutoriales). luego escriben ahí mismo "doc-view" y RET.

Configuraciones

Recomiendo activar la visión contínua, para ello activan la opción de Doc View Continuous, y le dan a Toggle para que quede en on

Luego en "Doc View Ghostscipt Program" escriben: gswin32c

Por si acaso (no estoy seguro cómo es por defecto) no olviden modificar para que quede así:
 Doc View Pdf >Png Converter Function:
(*) doc-view-pdf->png-converter-ghostscript

Con eso está listo, ahora se les verá feo y chico, para ello ajustan la opción de resolución y las opciones de ghostscipt. Yo le puse a los dos de bits el número 2 (porque lo decían en un foro que podía ayudar) y resolución le dí 200, por mi pantalla, pero pueden variar.

Recuerden cambiar el State de cada opción que modifican a "Save for future session"

Con eso ya podrán abrir pdf en emacs

Además si quieren pasar de pdf a texto, pueden instalar el xpdf, agregar los binarios al PATH y modificar las opciones de doc-view.

Les dejo mi .emacs para que tengan una idea:


(setq inferior-lisp-program "sbcl")
(add-to-list 'load-path (concat (getenv "HOME") "\\" (getenv "SLIME")))
(require 'slime)
(slime-setup '(slime-fancy))
(define-key global-map (kbd "") 'slime-selector)
(slime)

;esto es nuevo
(custom-set-variables
 ;; custom-set-variables was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 '(doc-view-continuous t)
 '(doc-view-ghostscript-options
   (quote
    ("-dSAFER" "-dNOPAUSE" "-sDEVICE=png16m" "-dTextAlphaBits=2" "-dBATCH" "-dGraphicsAlphaBits=2" "-dQUIET")))
 '(doc-view-ghostscript-program "gswin32c")
 '(doc-view-pdf->png-converter-function (quote doc-view-pdf->png-converter-ghostscript))
 '(doc-view-resolution 200))
(custom-set-faces
 ;; custom-set-faces was added by Custom.
 ;; If you edit it by hand, you could mess it up, so be careful.
 ;; Your init file should contain only one such instance.
 ;; If there is more than one, they won't work right.
 )
 
 ;ASDF esto lo agregué yo por flojera de escribirlo cada vez xD
(require "asdf")

miércoles, 4 de febrero de 2015

Descargos

6 años usando linux, un mes usando pcbsd, y por fin puedo decir ¡¡¡TE AMO WINDOWS!!! Increíble que las únicas distros "usables" son ubuntu y quizás mint (que es una copia con interfaz bonita)...
Increíble... me acabo de dar cuenta de la verdad que todos sabían (los linuxeros), que TODAS las apps externas las hacen para ubuntu, todo ahora lo hacen en ppa o debs que sólo funcionan en ubuntu...
Amaba los días cuando ubuntu era odiado por su inestabilidad y todos los linuxeros eran malditos frikis que se pasaban horas leyendo los malditos manuales, donde si tenías una pregunta, el 80% de las respuestas en los foros era RTFM (Read The Fucking Manual, lee el maldito manual), y te mandaban con toda cordialidad a las wikis, que estaban llenas de información actualizada entre todos...
Ahora No hacen nada para debian, tienes que conformarte con los miserables 37500 paquetes, y si quieres algo más, pues púdrete! porque debian es una distro estable, con paquetes viejos, donde para usar apps externas la única solución es usar la rama inestable (que ni testeo sirve), y todos los noobs en los foros dicen "encontré la solución, cámbiense a inestable y les funcionará el puto kivy"...
Arch ahora es la distro más difícil del mundo... cuando la usé hace 5 años, era hermoso, estable y con los programas más modernos del mundo, ahora tiene programas del día anterior pero se cuelga cada 5 minutos... y si no actualizas en un mes tendrás que formatear todo de nuevo...
Ubuntu, allá en el 2009, era odiado, lo usé y no se podía usar, los programas se colgaban constantemente, era clásico que se quedaban en "blanco y negro"... Usaba paquetes de debian de la rama inestable, pero con los 20 empleados no les daba ni para probarlos...
Hoy ubuntu tiene cientos de empleados, mucho dinero, incluso lanzará un smartphone pronto, tablets, etc. E increíblemente es la única distribución linux "usable" para el ser humano... parece que les funcionó el lema con el cual empezaron, y que todos se burlaban, el famoso "De humanos para humanos"...
Me aburrí de tener que compilar un maldito programa, las dependencias, las dependencias de las dependencias, de tener que meterme a leer los malditos manuales, leer wikis larguísimas (y la única wiki decente y actualizada que queda es la de arch... todo un referente)... ahora comprendo todo, ahora simplemente amo a windows, e instalaré ubuntu para "casos de emergencia" solamente, porque a veces es necesario un linux (más si estudias informática...).

jueves, 22 de enero de 2015

Travesía de un linuxero que se pasó por primera vez a un *BSD

Ufff! han sido días difíciles xD
Debido a que en vacaciones no salgo a ninguna parte, y tengo que estar ocupado en algo (hace mal a la salud estar tirado todo el día), y como no juego, no veo pelis ni animé o series hace mucho tiempo, pues hace varios años que me dedico a lo que se llama "aprender". Y debido a que en Chile son dos meses y poco más de vacaciones, pues es el tiempo perfecto para instalar un nuevo sistema operativo.
Hace unos 6 años empecé con Linux (Debian, cuando estaba en 3ero medio), pasé por ubuntu, fedora, archlinux (todo eso en 2 años), luego entré a la universidad y usé fedora 2 o 3 años, luego linux mint uno o dos años (me confundo en esa época), así que después de tanto tiempo acostumbrado a linux, quise pasarme a algo distinto, como para salirme de mi zona de comfort... y como ya no me gusta ser masoquista, opté por PCBSD, que es un FreeBSD fácil de usar.
¡Y vaya que han sido días difíciles! Pero todo tiene su logro, y si bien aún no puedo decir que está *todo* listo (me falta hacer la jail para linux y nunca se deja de aprender), pues ¡Vaya que he aprendido harto!.
Dejaré esta guía de tips básicos para, quizás, animar a alguien a pasarse, o tal vez a alguien le sirva para solucionar algún problema.
Algunas de estas cosas son muy repetidas, están en la wiki, otras no tanto. Pondré lo que "me hubiera servido" a mí.

PreInstalación

Pues primero viene la "Preinstalación".
PCBSD necesita una partición libre.. sí Sólo Una (no dos como linux), ya que guarda la swap en un archivo dentro del pc (similar al archivo de paginación de windows).
Sin embargo PCBSD no viene con particionador, así que debes tener la partición lista (con cualquier sistema de archivos, la formatea). Para ello recomiendo usar GParted, herramienta linux muy muy útil para todo lo que es particionado (y si tienes windows usa la versión live cd).
Luego de tener la partición lista toca instalar.

Instalación

La instalación de PCBSD es de lo más simple, gráfica. Para ello lee la wiki (no pondré todo el proceso si está en la wiki). Recuerda que como en cualquier unix, y especialmente en este, es *recomendable* saber inglés y saber buscar información en inglés a través de google. Ésta recomendación es útil para todo el proceso de uso de PCBSD y cualquier unix (linux, *bsd, etc, quitemos a macosx del baile)
La guía de usuario de PCBSD está acá:
http://wiki.pcbsd.org/index.php/PC-BSD%C2%AE_Users_Handbook/10.1/en
Ve a la sección de instalación. Te dejo el link general para que puedas acceder a cualquier parte. Es siempre recomendable leerse la wiki, esto es sólo una "guía de salvación" o una "experiencia personal" más que nada.

GNOME/Cinnamon y los repositorios

Ésta es una experiencia un tanto tragicómica, y laaaarga.
Resulta que PCBSD tiene dos ramas de repositorios, los "Producción" (Estable), y "Edge" (de punta). Por defecto viene con los de producción, que se actualizan más menos cada 3 meses, y los edge cada dos semanas.
Pero hay un bug que encontré (y que está reportado pero sin solución, al menos hasta hace una semana), y que trata que gnome y cinnamon (y derivados) tienen problemas con el driver ati radeon. El problema es que todos los menúes se ven como códigos de barra... ¿bonito no?
El mantenedor les dijo que prueben pasarse a edge a ver si tenían el mismo problema. Varios lo hicieron y uno o dos reportaron que se les arruinó grub y el sistema.
Pero yo soy badass ¿lo olvidas? Así que probé (ya que por 4 años usé gnome y cinnamon, así que no quería salirme de mi zona de comfort).
"Funcionó", al menos se veía bien... el problema es que yo uso locales español y teclado español. Ahí empezó todo...
Configurar el teclado no fue difícil, pero las locales daba un error de systemctl... Un momento, ¿Que no systemctl y systemd son exclusivos de linux? Pues, sin saber demasiado, tal parece (y hay posts en foros), que gnome3 no funciona correctamente en *bsd, ya que usa systemd aún en algunas partes.
Pues descontento con eso intenté cambiar las locale como dice el manual de freebsd, es decir cambiando el login.conf ... eso fue peor. Ahora no me partía gnome 3, ya que daba un error de dconf. Aburrido desinstalé gnome3.. peor, se me desconfiguró la tarjeta de video y veía un horrible arcoiris (si hubiera sido bonito sería otra cosa, pero era feo).
Por suerte PCBSD guarda snapshots al actualizar (fui tan irresponsable que ni siquiera usé el life-preserver... errores de novato supongo), así que de una imagen recuperé el sistema (usando life preserver). Se me apagó por temperatura, pero alcanzó a recuperar todo.
Luego vino otro problema, y es que no caí en la cuenta que el repositorio edge tiene el paquete base distinto... y yo había hecho todo con pkg (comandos), cuando quise actualizar el sistema me quitó kde y todo lo que había instalado al instalar el sistema (emacs, firefox).
Aburrido, y con un fluxbox que ya odiaba, hice lo imperdonable, pero en pos del tiempo, simplemente reinstalé el sistema nuevamente.

Una segunda oportunidad

Ahora sí que seré más responsable.
Primeramente no me salgo de producción, al menos no sin estar totalmente seguro de lo que hago.
Segundo, no instalaré ports a menos que sea en una jaula (jail), lo mismo con apps de linux.
Tercero, haré snapshots periódicamente con life-preserver.
Y así voy. Todo va bien.
Ahora unos tips:

Powerd y la configuración de rendimiento vs temperatura

Mi pc es un hp... tiene 4 años... y nunca lo he limpiado (ni abierto) por dentro (aunque ya va siendo hora...), así que se calienta muucho.
Para solucionarlo usé la solución del flojo, usé powerd.
Powerd se lanza como root, y para usarlo vean el manual.
Un ejemplo (más o menos sacado de acá) puede ser: 
# powerd -a adaptive -b adaptive -n adaptive -i 85 -r 75 -p 500
para entenderlo lean el manual:
$ man powerd
para los novatos.
ese comando pueden lanzarlo como root en cualquier momento, sin embargo si quieren que empiece al iniciar el sistema, deberán modificar el archivo /etc/rc.conf agregando las siguientes líneas (yo lo tengo así, si las variables (la parte antes del "=" ya está, no vayan a ser tan mensos como para repetirla, porque les dará error y lo omitirá, así que borren si ya tienen una línea "powerd_enable" o "powerd_flags"):

powerd_enable="YES"
powerd_flags=" -a min -b min -n min"


Alternativamente pueden cambiar los perfiles de rendimiento como sale en el artículo linkeado arriba (donde dice "acá", para los ñurdos).


Sysctl (o cómo configurar los parámetros del sistema)

sysctl es una excelente herramienta para configurar muuuchos parámetros del sistema, tales como el rendimiento, la frecuencia del sistema, el brillo de la pantalla, y muuuchas otras cosas más.
para invocarlo y cambiar algo, simplemente tienen que ejecutar como root:
# sysctl nombre=valor
ahora claro, ustedes no saben todos los nombres de las variables de sistema que tiene (y nadie las sabe, puesto que cambian según el pc y otras cosas),  pero para ver la lista de variables, ejecuten:
# sysctl -a
sin embargo se van a marear con tantas variables (son muchas), para comenzar, les recomiendo ir por lo más común que es:
# sysctl dev.cpu
que les dará todas las variables del cpu, o también
# sysctl hw.acpi
que les dará las variables asociadas a acpi, el gestor de energía de todos los pcs modernos (windows, linux, bsd y los pcs típicos usan acpi, NO intentes desactivarlo así como así, porque no te partirá el sistema, tal vez activando apm (la versión anterior del gestor de energía), pero a mí no me sirvió, y no hay para qué).

Ahora claro, cada vez que prendan tendrán que ejecutar el susodicho comando, para evitarse eso hay un archivo de configuración donde ponen las variables (sin el "sysctl") con su valor, y lo asignará al prenderse, el archivo es:
/etc/sysctl.conf

Montar ntfs

si tienen una partición ntfs, tendrán que hacerle click para que se monte cada vez que prendan el pc, y así accederla (como se usa en ubuntu y otras distros "automáticas"). La atrocidad que cometí para evitarme ese "click" y tiempo de espera asociado fue hacer una regla en el archivo sudoers para que el comando no pida contraseña y luego poner los comandos de montado en el arranque de kde (hice un script, recuerden darle permisos de ejecución antes, o les dará problemas).
Para saber cómo modificar el archivo sudoers lean:
http://www.linuxtotal.com.mx/index.php?cont=info_admon_014
Simplemente le añaden:
, NOPASSWD: "comando", "comando2"
en la regla correspondiente.
mi súper script quedó así:

#!/bin/sh
sudo ntfs-3g /dev/ada0s3 /media/ntfs-grande
sudo ntfs-3g /dev/ada0s2 /media/ntfs-win



Manejar unidades, particiones y formatear

En FreeBSD NO hay GParted. En su reemplazo está "gpart" que es un comando en consola (nadie le ha hecho interfaz aún, y no está entre mis proyectos personales... pero creo que sería un proyecto popular en github).
para usar gpart lee el manual (RTFM, Read The Fucking Manual). con #man gpart
hay varios manuales más asociados, aparecen al final los nombres.
Para ver las unidades detectadas simplemente ejecuta
$ gpart show

También yo uso el fdisk para reiniciar la tabla de particiones luego de instalarle una imagen a un usb. Simplemente ejecuta
#fsidk -i /dev/da0
si es que tu usb está en da0, te dará opciones, lee, y acepta los cambios de tamaño.
Luego de eso es bueno formatear la partición del usb como fat32, para ello ejecuta:
# newfs_msdos -F32 /dev/da0s1
si es que da0s1 es tu partición (revisa con "$ gpart show" o "$ gpart show da0" si quieres ser más específico).

Algunos Tips extras

Imprimir dos comandos en la misma línea

Si quieres imprimir en pantalla más de un comando en la misma línea, y que se concatenen, sin usar un script y usando una sola línea de código, usa los acentos. Por ejemplo:
$ echo "Fecha:" `date` " Uptime: " `uptime`
Es la forma más fácil de hacerlo, o puedes probar con printf.
Yo tengo un script con el comando de arriba para cuando se apague tener todas las cifras de uso en un archivo.




Ver estadísticas de internet

Si quieres ver quién están usando el internet, y cuánto, instala "jnettop", es en consola, pero se actualiza y se ve bonito. Un uso básico sería:
# jnettop -i wlan0
especifica la interfaz de red (en este caso wlan0, que es mi wifi), ya que sino te toma la ethernet o cualquiera (no sé las reglas, a mí me tomó la ethernet).

Tip sobre linux jail

Para instalar una jail linux con debian, sigue las instrucciones, sin embargo luego de la configuración, descargará los paquetes, y te dará un error de "debootstrap", para solucionarlo simplemente instala el paquete (instálalo antes de hacer la jaula), desde comandos:
# pkg install debootstrap
desconozco cómo será el proceso para gentoo, y la verdad aún no hago la jaula de debian, porque lo cancelé en el proceso de descargar los paquetes.

Wine y adobe reader

Wine funciona normalmente (aunque sólo para win32 por ahora). Si quieres instalar el adobe reader por ejemplo, te dará un error de mispatcha, para instalarlo primero descarga el winetricks y ejecuta lo siguiente
$ fetch http://winetricks.googlecode.com/svn/trunk/src/winetricks
$ chmod +x winetricks
$ ./winetricks mspatcha
Y luego podrás instalar el adobe reader.
Yo instalé el office 2007, desconozco si funciona una versión más nueva.

Emacs y cambiar la calidad de doc-view para que se puedan leer los pdf

Emacs... yo uso emacs, y quería leer pdfs, sin embargo en pcbsd el doc-view me cacheaba las imágenes con muuuy baja resolución (recordar que doc-view convierte las páginas a png). Para cambiarlo, hice lo siguiente:
M x (es decir apretan Alt + x)
escriben: customize-group
enter
luego: doc-view
enter
cambian los ppi de la imagen (que a mi me ponía por defecto 100, lo puse a 150).
Y también cambié
dTextAlphaBits a 2
y dGraphicsAlphaBits a 2 tambié (esas dos opciones están bajo ghostscript)

La verdad ni idea qué hacen las últimas dos variables, pero eso recomendaban por ahí y me funcionó, tendría que probar más, o investigar (no encontré rápido), pero ustedes pueden probar más.
Recordar cambiar el "State" para que se guarden las opciones. Pueden dejarlo para la sesión solamente, o cambiar el state global y ponerle par sesiones futuras cuando ya vean que les sirve.


Ufff! eso sería por ahora, espero ayudar a los nuevos con tips, y que sirva este artículo al menos para sacar una carcajada a los más experimentados xD

Breve resumen de funcionalidades de google (para ahorrarles leer el manual y mejorar sus búsquedas)

Esto es para buscar en Google, para agilizar sus búsquedas.

Antes de leer, comprender que no se usan comillas excepto que lo diga explícitamente, o aparezcan comillas dentro de otras, en ese caso se ponen las interiores.

and: si quieren que aparezcan dos palabras siempre usan "and" entre las palabras ej: "hola and chao" les buscará resultados que contengan ambas palabras.
-: si quieren que no aparezca alguna palabra usan -palabraquenoquierenqueaparezca ej: "hola -chao"
"": si quieren una frase exacta usan comillas ej: "había una vez" (con las comillas) también sirve para forzar que aparezca cierta palabra, o cuando, por ejemplo, buscan una palabra rara y google se las aproxima a otra conocida: ej: buscan "hol" y google le añade resultados de "hola", pues para que aparezcan sólo resultados de "hol" y no de "hola", lo ponen entre comillas, es decir ""hol"".
site: si quieren que la búsqueda sea en una pag específica usan "site:www.pagina.com"
*: es un comodín (lo entenderán quienes usen bach XD) po r ejemplo: " hola site:*.cl" y les busca "hola" en páginas terminadas en ".cl" (páginas chilenas).
+: si pegan palabras con un "+" entre medio es lo mismo que si las separan por un espacio, ej: "había+una+vez"

búsqueda para intervalos de números: si ponen " cualquiercosa 1999..2003" es lo mismo que buscar "cualquiercosa+1999+2000+2001+2002+2003" muy útil para buscar artiiculos periodísticos, y si le suman en "and" mucho mejor, ejemplo: ""carabinero preso" and 1999..2000" (nótese las comillas) les buscará páginas con la frase exacta "carabinero preso" que además contengan los años del 1999 al 2003.
Nótese que son DOS los puntos entre los números (en este caso años), y que los números van pegados (sin espacio entre medio).

mezclando pueden hacer esto por ejemplo: ""carabinero preso" and 2000..2011 -carabinera site:*.cl" y les buscará páginas con la frase exacta "carabinero preso" entre los años 2000 y 2011 que no contengan la palabra carabinera y que sean sitios chilenos ¿ven? es muy útil si lo aprovechan.

calculadora:
-si escriben "999 pesos mexicanos" o "789 dolares estadounidenses" les aparecerá la conversión de esa moneda a la moneda local (depende la versión de google que usen, por ejemplo si usan google.es les convertirá a euros, si usan google.com.mx les convertirá a pesos mexicanos, y si usan google.cl les convertirá a pesos chilenos)
-Si quieren convertir unidades a cualquier otra, también pueden usar la calculadora, por ejemplo si quieren convertir de dólares estadounidenses a pesos chilenos, pueden buscar "345 dólares estadounidenses a peso chileno", que les transformará 345 dólares a peso chieno. si les complica escribir todo eso pueden usar las siglas, por ejemplo "345 usd a clp", y les buscará igual. pueden combinar ambas formas, como "345 dólares a clp", pero ojo, que en ese caso les buscará de dólares estadounidenses, si quieren dólares de otro país tendrán que ponerlo completo o la sigla.

-si ponen operaciones no necesitan de una calculadora, por ejemplo si escriben: 5*5 les aparecerá 25. incluso si escriben (5*5)+3*(3+4) les dará 46. incluso si escriben "tan 87" les dará la tangente de 87°, o "cos 90" les dará el coseno de 90°, muy útil.

eso, cuando me acuerde de más las anoto.
haré esta nota pública para que la puedan difundir :D

Nota: el "and" sólo hace efecto en los elementos más próximos, uno a la izquierda y otro a la derecha, por ejemplo si buscan: "hola and "había una vez" en el cielo", les hará: "hola and "había una vez"+en+el+cielo" o sea, el "en el cielo" no está afecto en el "and", y por lo tanto buscará páginas que contengan si o si el "hola" y el "había una vez" pero que no necesariamente contengan en "en el cielo" y no necesariamente en ese orden ¿se entiende?, es lógica, la búsqueda en google tiene mucho de lógica.
Nota2: complicando las cosas, se pueden usar múltiples "and" o "-", etc. por ejemplo: "hola and chao and adios -goodbye -"hasta siempre" site:www.facebook.com" y les buscará en facebook páginas que esten si o si las 3 palabras: "hola", "chao" y "adios", pero que no estén ni "goodbye" ni "hasta siempre".
Nota3: por si no se les ocurrió, para omitir resultados de alguna página en concreto (ejemplo, facebook) ponen "cualquiercosa -site:www.facebook.com"
Nota4: Para buscar libros por ejemplo, es muy útil usar las comillas para el título y el autor, y agregar "descargar" (sin o con comillas), y/o "pdf". Sin embargo para descargar cosas google cada vez es peor, ya que por presiones ha tenido que darle menos ranking a las páginas de descarga, por lo que aparecen más abajo. Si no lo encuentran en google pueden echarle un vistazo a duckduckgo, a bing o a yahoo, pero no necesariamente tienen la misma sintaxis o características que google.


Para que vean lo complejo que es el buscador de Google, y no lo miren a huevo, es una maravilla de software.
 
Artículo del 2011, copiado de mi blog filosófico y actualizado un poco con más tips y aclaraciones. Si te sirvió compártelo, y si tienes más tips ponlos en los comentarios. Google es muuuy potente y acá puse lo más importante, pero si tienes tips útiles, compártelos.
 

viernes, 9 de enero de 2015

Configurar SBCL Lisp en Emacs con SLIME y luego compilar el buffer de salida

Hola! Ufff! cuánto tiempo, pero estaba metido en otras yerbas así que no he tenido tiempo (también abandoné el blog de descargas, espero poder actualizar algo allí también).

Bueno, a lo mío:
Me propuse como meta aprender lisp ahora en vacaciones, al menos lisp. Buscando, encontré que hay más de un compilador/intérprete, pero me decanté por SBCL ¿Por qué? Pues: 1.- CLISP no se actualiza hace años (2010), y tiene muchos errores que ya parece abandonado, además tuve una mala experiencia. 2.- SBCL es sucesor de CMUCL, así que sería bobo instalar el segundo. 3.- SBCL es más rápido.
Quizás me pase a otro después, pero por ahora estoy en ese.
 Aún estoy recién aprendiendo lo básico, y sé bastante poco.

Como estoy aprendiendo, uso bastante la consola interactiva, sin embargo la de sbcl tiene un problema: No se puede retroceder (teclas de movimiento), sólo escribir y borrar. Lo cual es bastante molesto.
Buscando una solución me encontré con slime, sin embargo muchos tutoriales para instalarlo en emacs simplemente no me funcionaron, eso hasta que encontré este. Lo robaré para explicar en español lo mismo, ya que me funcionó y así lo encuentran más fácil en google xD
El link original está en:

http://stackoverflow.com/questions/12607716/setting-the-slime-in-emacs

Como yo uso Linux mint, que es sucesor de Ubutu, que es sucesor de Debian, para instalarlo se usa en una consola (o en el centro de software que odio):

$ sudo apt-get install sbcl

Si usan Fedora o RedHat, en vez de "apt-get" usan "yum", si usan otra distro supongo que sabrán instalar paquetes, o buscan en google.

Luego instalan el emacs, yo uso el emacs24, simplemente porque el xemacs hace dolor en los ojos y el emacs23 suena más antiguo (no lo he probado). para instalarlo usan:

$ sudo apt-get install emacs24

Luego de eso instalan el quicklisp, que es con el cual instalarán slime (copio).

$ sudo apt-get install wget 
$ cd ~/Downloads
$ wget http://beta.quicklisp.org/quicklisp.lisp 
$ sbcl --load ./quicklisp.lisp

Tip para novatos: Recordar que el signo de peso significa que se pone en la terminal, como usuario normal. El asterisco de abajo significa que ya están en la consola interactiva de sbcl.

* (quicklisp-quickstart:install) 
* (ql:add-to-init-file)
* (ql:quickload "quicklisp-slime-helper") 
* (quit)

Luego de eso en su carpeta personal (/home/<usuario>) crean el archivo ".emacs". Recuerden activar ver los archivos ocultos en su navegador de archivos. Si tienen dudas pueden hacerlo desde línea de comandos con el comando:

$ nano ~/.emacs

para usar nano, que es un editor en consola fácil de usar y tiene ayudita abajo (recordar que el ^ es Ctrl, es decir que si dice "^x" apretan Ctrl+x).
Si le tienen miedito a la consola pueden usar gedit (si lo tienen instalado), para ello:

$ gedit ~/.emacs

Luego en el archivo copian y pegan lo siguiente:

(setq inferior-lisp-program "sbcl --noinform")
(load (expand-file-name "~/quicklisp/slime-helper.el"))

En el link aparecen las líneas al revés, pero el orden aparentemente no importa.
El "--noinform" es para que no les salga el mensaje de bienvenida de sbcl.

Luego de todo eso abran el emacs, y apreten M x, escriben "slime" y apretan intro.
Ahora quedarán pasmados con lo anterior, porque apretarán "M x" y no les saldrá nada xD Pues me costó encontrar, y quizás ustedes sabían, pero el "M" es de "Meta" así que apretan Alt+x, escriben abajito "slime" (sin comillas), y apretan intro. (si leen en algún manual que apreten C x es Ctrl+x)
Les saldrá la consola interactiva, pero abajo (si usan el emacs24 como yo), así que apretan el click derecho en la barra de abajito de la subventana, donde dice:

U:%%- *GNU Emacs* Top L5 (Fundamental)

Quizás les salga algo distinto, pero similar. con el click izquierdo la borran.
Luego para cambiar de tipo de subventana clickan el izquierdo en el nombre para avanzar y el derecho para retroceder. El nombre es lo que está en negritas entre los asteriscos (en el caso de slime, será algo como *slime-repl sbcl*).

Ahora viene lo otro... tienen la consola interactiva y todo, pero qué pasa si quieren guardar el código y luego compilarlo... pues será una auténtica odisea.
Lo primero que tienen que hacer es guardar el buffer, así que van al menú "File" y luego a "Save as" (para guardar el buffer), y seleccionan ruta y nombre.

El problema es que el buffer no es compilable. Para arreglar eso, hice un pequeño script en python que hace la magia de volver el buffer compilable (comenta los resultados, borra el prompt "CL-USER>", y elimina las líneas con error de compilación (deja los warnings)). Ese script lo subí a github, y lo pueden encontrás acá:

https://github.com/vincegeratorix/slime-cleaner

viernes, 25 de julio de 2014

Frases diarias y un pequeño truco

Hola! Esta vez les traigo una forma de tener frases diarias, en dos formatos: Notificación al inicio, y al iniciar sesión (abrir una terminal, etc).
Para poner frases diarias al inicio de sesión, tienen que ir al siguiente post (no lo hice yo, sólo lo indexo):
http://blog.desdelinux.net/como-mostrar-una-frase-interesante-cada-vez-que-inicias-gnome/
Y para frases en el inicio de sesión, en la terminal, es el siguiente truco:
Abrir (o crear si no está) el archivo ".bashrc" en su carpeta personal. En mi caso es "/home/vincegeratorix/.bashrc". Recordar activar ver los archivos ocultos en su visor de archivos; generalmente en la pestaña "ver".
Una vez en su .bashrc basta poner el siguiente comando:
 shuf -n 1 "<archivo_texto>"
En mi caso es:
shuf -n 1 '/home/vincegeratorix/quote/quote.txt'
Recordar poner comillas si es que tiene espacios. Lo mejor es ponerle comillas siempre, para evitarse malos ratos.
El archivo "quote.txt" tiene que tener una frase por línea. El original que viene en el script de más arriba traía unas pocas frases en inglés, así que me dediqué a ponerle frases en español. Las primeras 101 frases las saqué de acá, y son relacionadas a informática. Las que siguen son relacionadas a ciencia, y vienen de acá, acá, y acá.
El archivo de texto con las frases acá: http://pastebin.com/6mqVHCCa
Hay algunas repetidas, pero como saca al azar no importa.

Bonus

Y ahora un Bonus
Resulta que a veces me he visto en la situación de hacer un comando, pero a veces éste falla, y quiero saber cuando falla para rehacerlo o saber el momento exacto cuando falló (ya que usualmente cuando falla un comando, y uno está e̶n̶ ̶f̶a̶c̶e̶b̶o̶o̶k̶ haciendo tareas, no sabe cuándo falló, ni cuánto tardó en hacerse el comando. Para evitar esto, y mostrar un mensaje en pantalla que diga el momento exacto en parar, y cuánto tardó, simplemente al momento de hacer el comando, ejecutar lo siguiente:
{ time <comando>; } 2> out.txt && date >> out.txt && cat out.txt |zenity --text-info
donde <comando> es el comando a ejecutar. Por ejemplo si quisieran ejecutar "echo hola", lanzan:
{ time echo hola; } 2> out.txt && date >> out.txt && cat out.txt |zenity --text-info
Eso sí tengan en cuenta que crea un archivo "out.txt" en la carpeta, el cual podrían eliminar agregando: "&& rm out.txt" al final, para que lo borre. No lo puse, pero es una buena práctica para no llenar de "out.txt" por todos lados xD.
sería todo por hoy, espero le haya servido.

sábado, 3 de mayo de 2014

Nueva sección: Material de aprendizaje

Hola! Les traigo buenas nuevas! Acabo de crear una "página" en el blog dedicada a compartir material de aprenizaje gratuito, principalmente moocs o cursos de universidades. El enfoque es publicar páginas con material de buen nivel, más que llenar de videotutoriales (sin desmerecerlos, que yo aprendí a programar gracias a videotutoriales de personas entusiastas).
Pueden ir a través del links a la derecha, en la sección de "Páginas", o directamente clickando en este link.
Saludos!

domingo, 13 de abril de 2014

Saber cuando se desconectó la energía en el notebook

Hola nuevamente! Les traigo un nuevo script.
Resulta que yo uso notebook, y lo tengo con la batería puesta. Resulta que ultimamente se ha cortado la luz varias veces, y yo no me he dado cuenta ya que como uso la batería puesta, no hay nada que me avise cuando se encuentra "off-line" u "on-line". Para ello he diseñado un pequeño script, que manda un mensaje en caso que se haya desconectado el cable (o se cortó la luz).
Como dependencias sólo necesita 'acpitool' y 'zenity'.
Copien el script a un archivo con extensión sh, ojalá sin espacios, luego denle permisos de ejecución (chmod 777 archivo.sh), y pónganlo que se ejecute en el inicio; para ello yo usé el menú de "aplicaciones al inicio" de gnome, pero pueden ponerlo en el .bashrc de su home, o en inittab, o de cualquier forma que se ejecute al inicio.
Dejo el sccript, y en pastebin también:
Obviamente el script es para linux.

#!/bin/bash
bandera=true
while [ true ]; do
 
 salida=$(acpitool |grep off-line)
 if [  -n "$salida" ]  &&   $bandera  ;
 then
  bandera=false
  #echo "está off line"
  zenity --info --text="La batería está off line"
  
 elif [ ! -n "$salida" ];
 then
 
  bandera=true
  #echo "está on line"
 fi
 sleep 30s
done

jueves, 10 de abril de 2014

Breve y sencilla explicación del bug de OpenSSL "HeartBleed"

El bug recientemente parchado de openssl, llamado "heartbleed", ha estado muy en boca de todo el mundo recientemente. Bueno, al menos del mundo informático, e incluso ha ido más allá.
OpenSSL es la implementación de protoclos de seguridad SSL/TLS más famosa y usada. Los mencionados protocolos son los que se usan para encriptar información en internet. Y se usan en, por ejemplo, https (el candadito en la url), ftps, ssh, etc.
La idea de usar esta encriptación, es por ejemplo en https (lo más usado por los usuarios entre los mencionados anteriormente), que nadie pueda leer la información entre tú y la página web. De esta manera puedes pasar una contraseña a la página web y estar seguro que nadie podrá leerla y saber cuál es haciendo un análisis de tráfico web (o sea por ejemplo alguien espiando tu internet, como puede incluso ser gente de los proveedores de internet o la policía que analice tu tráfico).
Para compartir tráfico encriptado entre usuario y servidor, hay que iniciar una sesión TLS entre ambos, tras lo cual se comparten de manera segura la clave que usarán para cifrar y descifrar los mensajes. Ahora, el problema en SSLv2 y anteriores, es que si pasaba cierto tiempo desde que se inició la sesión tls y no habían paquetes entre las partes, la sesión TLS se cerraba, teniendo que inicarla nuevamente, creando las claves y todo eso, lo cual era tiempo y gasto computacional. Eso se mejoró con la versión 3 de SSL, que implementa un sistema llamado "heartbeat" (latido del corazón, como para avisar que aún sigues vivo), con el cual podías mantener abierta una sesión TLS más tiempo.
Para ello, el cliente manda un mensaje de tipo "TLS1_HB_REQUEST", con dos campos: El payload (el mensaje), y el tamaño del payload. Luego el servidor le manda otro mensaje de vuelta llamado "TLS1_HB_RESPONSE" que copia el payload y lo manda de vuelta, para 'configurar' la respuesta. Los campos del mensaje response del servidor incluyen el mismo payload y el mismo largo.
El truco viene en que OpenSSL no comprueba que el payload tenga el mismo largo que el que se mandó en el campo "largo". Esto hace que OpenSSL "crea ciégamente" que el payload tiene ese largo (sin comprobarlo), y envía de vuelta lo que debiera ser el payload. Pero el truco consiste en mandar un payload de 1 byte, y un campo "largo" diciendo que nuestro payload mide 64KB, es decir varios miles de veces más. Lo que hará OpenSSL será empezar copiando desde el payload, hasta 64KB más adelante de lo que haya en la memoria ram (el payload reside en la ram, entonces copia desde el comienzo del payload hasta 64kilo bytes más adelante, haya lo que haya), copiando así trozos de memoria ram pertenecientes a OpenSSL que no eran parte del payload, sino de trozos de código y datos del mismo OpenSSL.
El problema es que OpenSSL contiene contraseñas, las claves de cifrado, y muchas otras cosas sensibles; de manera que mandando continuamente mensajes truqueados, obtendremos cada vez 64kb de memoria de trozos aleatorios del programa, pudiendo obtener potencialmente gigas y gigas de trozos, que incluyen contraseñas, claves, etc.
Dejo un mono explicativo:


Este fallo se reportó varios años antes, pero no ha sido sino hasta el reciente 7 de abril 2014 que se ha publicado el parche para que no siga ocurriendo. Hasta que las páginas no actualicen su versión de OpenSSL seguirá ocurriendo el problema, y los servidores serán potenciales víctimas de ataques. Eso sí, esto sólo roba las contraseñas que están en la memoria RAM, es decir sólo los ingresos recientes, o activos, así que la recomendación sería no ingresar hasta que sea reportado el que actualizaron el software y repararon el problema.

Fuentes:
Blog de Chema alonso, un experto en seguridad http://www.elladodelmal.com/2014/04/heartbleed-y-el-caos-de-seguridad-en.html
Video explicativo en inglés del fallo, con monitos http://parkerati.com/my-quick-video-post/

domingo, 2 de marzo de 2014

Transformar todos los txt a html de una carpeta y escaparlos

¡Hola! Acá nuevamente con un script. Tal vez les latee tanto script, pero así es la vida de un informático, al menos la mía, que cuando quiero hacer algo busco como hacerlo, y si no lo encuentro... ¡Pues hago un script que lo haga! XD
Esta vez quería escapar muchos txt, para así transformarlos a html; para ello necesito transformar los carácteres prohibidos en html a su forma escapada, y luego los saltos de línea transformarlos a "<br />". Bueno, no quité los saltos de línea, simplemente le agregué el tag. Y puse un mensaje de advertencia para prevenir ejecutarlo sin querer, ya que los efectos pueden ser nefastos.
Además, no quería escapar los &, ya que habían algunos txt ya medio escapados, pero si no es su caso borran la línea marcada y ya está.

Para ejecutarlo, simplemente van a la carpeta donde están todos los txt y ejecutan el script, luego de la pregunta, transformará todos los txt a html y les cambiará la extensión.

Acá el script y también en Pastebin. Compártelo y cópialo tanto como quieras.
 
#!/usr/bin/python
# -*- coding: utf-8 -*-
#Por Erick Francisco Merino Menares @vincegeratorix
import os
import re
import sys
import cgi
import codecs
print "esto cambiara los saltos de linea por br, sólo si está seguro proceda"
entrada = raw_input("si/no: ")
if entrada != "si":
 print "decidió salir"
 sys.exit(0)
txts = ([f for f in os.listdir(os.getcwd()) if re.match(".+(\\.(?i)([tT][xX][tT]))$", f)])
for i in xrange(len(txts)):
 f=codecs.open(txts[i], encoding='utf-8', mode="r")
 string = f.read()
 f.close() 
 reemplazado = cgi.escape(unicode(string)).encode('ascii', 'xmlcharrefreplace')
 reemplazado = unicode(reemplazado.replace("\n", "aqui va el tag br, que el maldito script no me lo escapa, vean el link de pastebin\n<br />"))
#Esta línea de abajo lo pueden quitar, es para "antiescapar" los ampersand
 reemplazado = unicode(reemplazado.replace("&amp;", "&")) 
 archivo=codecs.open(txts[i], encoding='utf-8', mode="w")
 archivo.write(reemplazado)
 archivo.close()
 nombre = str(txts[i])
 nombreHtml = nombre.replace(".txt", ".html")
 os.system("mv " + nombre + " " + nombreHtml)
print "terminó con exito"

martes, 28 de enero de 2014

Descargar el padrón electoral y ponerle los nombres a los pdf

Nota: Cambiaron la página del padron electoral, ahora está en: http://presidenciales.servel.cl/Padron/padronDefinitivo.html sin embargo no es tan fácil descargarlo (con wget no funcionaría), ya que los links ya no están en duro, sino con javascript, lo que hace que se necesite un script para rescatar los archivos. Yo personalmente NO lo haré, pero si alguien se anima a hacer las expresiones regulares o con algúna forma rescata los archivos *facilmente* (es decir sin descargar uno por uno), que lo comparta y me avise, sería muy bueno.


Hola! En este nuevo artículo vengo recargado de más scripts y tutoriales.
Resulta que en Chile, el Servicio Electoral tiene a disposición pública el padrón electoral. Sin embargo descargarlos de a uno e irle poniendo los nombres es toda una odisea, que tardaría varias horas de aburrimiento. Para evitar eso, me puse a hacer un script que lo haga automático.

La primera parte consiste en descargar los pdf, para esto no se necesita mucho script, simplemente basta con una instrucción en la consola para los que tenemos Linux. La instrucción es:
wget -r -l1 http://oficial.servel.cl/PadronComunal/Arica/alfabetico_comunal.html

Desglosándola, vemos lo siguiente:
wget: El comando para descargala
-r: Para descargar todos los links dentro de la página
l1: pero sólo los links de esta página, en caso de haber páginas que contengan más links, éstos últimos no serán descargados, dado que el nivel de recursión es 1. En este caso particular pareciera no servir, pero siempre hay que ser precavido.

Luego de descargar los pdf, tenemos que acceder a ellos. Par ello primero vamos a la siguiente dirección:
~/servel/oficial.servel.cl/PadronComunal/Arica
Ahí está un archivo html y una carpeta con los pdf. Como vemos, los pdf tienen nombres crípticos, que no nos sirven. Para no darme la lata de estar cambiándole los nombres uno por uno, creé un mix de script en bash y python para realizarlo, que dejo en este link (Pueden hacerle copia de respaldo).

Para ejecutar bien el script, tienen que dejar los dos archivos dentro de la carpeta anteriormente mencionada, junto al archivo html.
Ejecutan el script.sh en una terminal. Luego les pedirá la carpeta de los pdf, para ello simplemente arrastra la carpeta que contiene los pdf a la terminal, la cual debiera ser:
~/servel/oficial.servel.cl/PadronComunal/Arica/archivos comuna auditado

¡Y listo! Ya tienen el padrón electoral chileno con nombres claros en los pdf.

miércoles, 25 de diciembre de 2013

Descargar cursos de coursera y dejarlos como a mi me gusta

Tras encontrar el script para descargar cursos de edx, encontré otro para cursos de coursera. Dejo acá el link a la página, recuerden instalarlo con pip, que es más fácil; ahí mismo sale la info.
Para usarlo basta con leer la información; pero para no dejar tan pelado este post, les doy una ayuda en español:
Para descargar un curso:
$ coursera-dl -u <correo electrónico> -p <password> -n "txt" <dirección curso>
el -n "txt" es para ignorar los txt, es opcional, pero yo lo uso porque no quiero que me descargue los txt.
La dirección del curso es la última parte de la url. La url de un curso es de la forma:
https://class.coursera.org/<dirección curso>
por ejemplo:
https://class.coursera.org/insidetheinternet-003
entonces la "dirección curso" es: insidetheinternet-003
Más información y para ayuda:
$ coursera-dl -h

Todo bien ahí. Pero el problema es que descarga cada video en una carpeta separada, junto a los subtitulos, ppt, pdf, etc. Pero personalmente me gusta tener todos los videos de una semana juntos, junto a su subtitulo correspondiente.
Para lograr eso, creé un script en bash, que mueve los .mp4 y .srt a la carpeta anterior.
Para ilustrarlos, al usar el script "coursera-dl" queda de la siguiente forma:

dirección curso
├── Semana 1
│   ├── Video 1 Semana 1
│   │   ├── Diapos Video1 Semana 1.pdf
│   │   ├── Diapos Video1 Semana 1.ppt
│   │   ├── Video1 Semana1.mp4
│   │   └── Video1 Semana1.srt
│   ├── Video 2 Semana 1
│   │   ├── Diapos Video2 Semana 1.pdf
│   │   ├── Diapos Video2 Semana 1.ppt
│   │   ├── Video2 Semana1.mp4
│   │   └── Video2 Semana1.srt
├── Semana 2
│   ├── Video 1 Semana 2
│   │   ├── Diapos Video1 Semana 2.pdf
│   │   ├── Diapos Video1 Semana 2.ppt
│   │   ├── Video1 Semana2.mp4
│   │   └── Video1 Semana2.srt
 etc...

 Luego de usar mi script, queda así:

dirección curso
├── Semana 1
│   ├── Video 1 Semana 1
│   │   ├── Diapos Video1 Semana 1.pdf
│   │   └── Diapos Video1 Semana 1.ppt
│   ├── Video 2 Semana 1
│   │   ├── Diapos Video2 Semana 1.pdf
│   │   └── Diapos Video2 Semana 1.ppt
│   ├── Video1 Semana1.mp4
│   ├── Video1 Semana1.srt
│   ├── Video2 Semana1.mp4
│   └── Video2 Semana1.srt
├── Semana 2
│   ├── Video 1 Semana 2
│   │   ├── Diapos Video1 Semana 2.pdf
│   │   └── Diapos Video1 Semana 2.ppt
│   ├── Video1 Semana2.mp4
│   └── Video1 Semana2.srt
 etc...

El script es bastante sencillo, y se los dejo En este link. Además, lo dejo acá para que lo vean. Pueden modificarlo para sus propósitos personales:

#!/bin/bash
IFS=$'\x0A'$'\x0D'
salida=$(ls -F | grep /)
for carpetai in $salida
do
 cd $carpetai
 find -regextype posix-egrep -regex ".*(mp4|srt)$" |xargs -I{lecciones} mv "{lecciones}" .
 cd ..
done

sábado, 21 de diciembre de 2013

Ver la duración total de una lista de reproducción en linux con VLC

Hola nuevamente, hoy es por partida doble!
Resulta que quería poder saber la duración total de un conjunto de videos sin tener que sumarlos uno a uno, ya que eran muchos (más de cien descargados con edx-dl.py, vean la entrada anterior).
Busqué y busqué y lo único que encontraba era que en el nuevo Windows Media player se podía... ¡Pero yo uso Linux! Intenté instalar el WMP pero fue peor, ni con crossover ni con wine pude hacerlo.
Así que busqué en inglés en google, y me encontré con un addon para el vlc que da justamente esa funcionalidad.
El link está en esta dirección. Y acá el link de respaldo (arreglado) (por si viene un tornado y destruye los servidores de vlc).
Para hacerlo funcionar deben hacer lo siguiente:
-Copiar el texto y pegarlo en un documento de texto con el nombre "playlistduration.lua" (sin el ".txt"). Si lo hacen desde pastebin, recordar copiarlo desde el "RAW Paste Data".
-Luego, si están en linux, copian el archivo a:
/home/<usuario>/.local/share/vlc/lua/extensions/
A mi me quedó así:
/home/vincegeratorix/.local/share/vlc/lua/extensions/playlistduration.lua
Y violá. Luego lo único que tienen que hacer es en una lista de reproducción, clickar el menú "Ver" y luego en  "Playlist Duration", y verán la duración total.

Descargar videos de edx y más

Alerta: El script de edx-downloader ha sido actualizado y no es compatible con la versión mostrada acá, por lo que la versión de acá no funciona ahora. Este post tiene sólo fines históricos. No me he dado el tiempo de modificar el script nuevo, y nada presagia que lo haga, al menos en el futuro cercano.

Hola, dejé botado este blog un tiempo, y es que no había mucho que contar. Pero acá estoy de vuelta.
El tema de ahora es simple: Resulta que soy un ávido seguidor de los moocs (Cuando me queda tiempo libre), dígase coursera, udacity, edx, y en español, miríadax.
En Coursera se puede descargar el material fácilmente, lo cual me sirve para verlo en mi tablet mientras viajo, o cuando no tengo internet o lo estoy usando para otra cosa. Sin embargo, el resto de páginas no tiene una forma fácil de descargar el material, al menos no a simple vista. Eso hasta que me encontré con el edx-dl.py, un script en python para descargar vídeos con sus subtitulos respectivos, de los cursos que uno está inscrito, y las semanas que uno escoga (Poniéndole números consecutivos de dos dígitos). Dejo el script en Este Link, y como respaldo, Acá también en pastebin; aunque recomiendo usar el link original para darle más descargas al autor. Para descargarlo de la web del autor deben hacer un clone al git del autor, para ello, pon en la consola (en linux):
git clone https://github.com/shk3/edx-downloader.git
Debes tener instalado git.
El script es muy bueno, pero le encontré cosas que no me gustaron:
Cuando uno está descargando, y de repente falla, se apaga el pc, se corta la conexión, etc, hay que empezar de nuevo el script, poniendo el usuario, contraseña, y esperar que cargue toda la información (si son muchas lecciones puede tardar varios minutos). Claro que los vídeos y subtítulos descargados no los descarga nuevamente, pero sí que los revisa uno por uno (al igual que mi script).
¿Mi solución? Pues estuve metiéndole mano al script y logré lo siguiente:
-Un script para descargar los subtítulos solamente, ya sea de youtube como de edx, con los números consecutivos de 3 dígitos. Además muestra en consola todos los links de youtube.
-Otro script que toma un archivo con los links de youtube y los descarga con las opciones que uno le especifique, y con los correspondientes números consecutivos de 3 dígitos.
Dejo En Este Link el script para los subtitulos con los números consecutivos.
Y En Este Otro Link el otro script para descargar de youtube los videos con los números consecutivos.
Para ejecutar cualquiera, deben tipear en la consola:
python "nombre del script"
En "nombre del script" basta arrastrar el script si es que usan un emulador de consola que permita el drag and drop.
Espero les sirva, saludos!

jueves, 1 de agosto de 2013

Cómo cambiar la dirección MAC en linux fácilmente

Bueno, hace un tiempo que no escribía acá, y qué mejor que con un minituto. Espero más adelante en otro artículo contar mis andanzas con python y kivy durante el tiempo de paro de actividades en mi universidad.
Pero vamos a lo que nos concierne:

¿Qué es una dirección MAC?
En palabras sencillas (lo cual es tónica de este blog), es una dirección formada por 48 bits que identifica a la tarjeta de red. La dirección MAC es única para cada tarjeta de red, y está grabada por hardware, de manera que nunca habrán dos tarjetas de red con la misma dirección MAC.
Eso a nivel de hardware, porque en software todo se puede cambiar; y eso veremos ahora, pero primero:

¿Por qué cambiar la dirección MAC?
Pues porque con ella te identificas en la red, y cambiándola te puedes hacer pasar por otro quedando tú en el anonimato.
Otra razón es para pasar por alto los filtros de bloqueo por dirección MAC. Esto es cuando en un router te bloquean la dirección para que no accedas a internet desde ese punto. Esto puede ser una realidad cuando accedes a una red wifi que no es tuya. Con esto quiero decir que estoy totalmente en contra de usar puntos de acceso a internet en los que no estás autorizado.

Bueno, vamos a los pasos:
Lo primero es saber a cuál interfaz le quieres cambiar la dirección MAC, para lo cual basta con introducir el siguiente comando:
$ ifconfig
El cual te listará las interfaces. Yo personalmente tengo 3, las cuales son: "eth0" que es la conexión por cable (el cable rj45, cable de red); luego está "lo" que es la red local de linux; y luego "wlan0" la cual es la interfaz de wifi.
A un lado del nombre aparecen tabuladas las características de la interfaz tales como la ip, lo subido y bajado, y en la primera verás: "direcciónHW" y a un lado una serie de números y letras.
En realidad las letras también son números, ya que están codificados en base 16, pero eso es tema aparte. El asunto es que esos números son tu dirección MAC, y eso son los que cambiaremos (por software). Recuerda que cada vez que reinicies el pc volverá la dirección MAC de fábrica; punto a tener en consideración.

Lo primero que tienes que hacer es apagar la interfaz; esto se hace como root (recordad que el signo peso representa comandos en modo usuario y el gato en modo root), y es el siguiente comando:
# ifconfig <interfaz> down
ejemplo:
# ifconfig wlan0 down

Luego de apagarla procedes a cambiarle la MAC address. para ello basta con el siguiente comando:
# ifconfig <interfaz> hw ether <dirección>
 un ejemplo sería:
# ifconfig wlan0 hw ether 03:a0:04:d3:00:11

Sin embargo uno comúnmente va a querer cambiarle a una dirección MAC aleatoria, para lo cual estar variando siempre los números no tiene mucho sentido. Para hacer ésto vamos a usar el programa "macchanger"
Primero instala el programa con tu gestor de paquetes preferido, en ubuntu sería algo como:
# apt-get install macchanger
si quieres instalar la versión en gtk (personalmente no me gusta, además si tienes un error te lo mostrará en consola y no en interfaz por lo que no tiene mucho sentido instalarla) puedes instalar también  el paquete "macchanger-gtk"

Bien, una vez instalado el programa macchanger, y apagada la interfaz, procedemos a cambiarle la mac address; para lo cual basta con:
# macchanger -r <interfaz>
ejemplo:
# macchanger -r wlan0
Así de simple.

Ahora procedemos a prender nuestra interfaz con:
# ifconfig <interfaz> up

¡Y es todo!
Apéndice:
Si usas una tarjeta wifi Ralink (como la que yo uso), asegúrate de no estar usando el kernel 3.8.0, porque -al menos en ubuntu- en el módulo viene desactivada la función de cambiar la mac address, a lo cual te mandará un error de "argumento inválido". Personalmente me pasé a la versión 3.10 y no tengo problema.

Recuerda que si no quieres pasar de usuario a cada rato, puedes usar el comando "sudo" antes de los comandos especificados en este tutorial para los casos en que se requiera ser root (donde sale el gato o almohadilla).

¡Y eso es todo! Recuerda comentar ante cualquier duda o comentario (gracias capitán obvio).

sábado, 15 de junio de 2013

Experiencia en linux, mi hermano, y ArchLinux

Yo empecé a usar Linux por allá en el año 2009, en marzo precisamente, justo al empezar mi tercero medio (son 4 años la enseñanza media y luego la universidad).
Lo conocí a través de un chat, donde decía que quería ser lammer, y me recomendaron linux.
Tras varios meses de investigación, y luego de convencerlo e instalarle ubuntu a mi hermano cuando se iba a la universidad, decidí yo emprender en Linux. Y la "distro" elegida fue "Debian".
Estuve alrededor de un año usando debian, para luego cambiarme a ubuntu y luego fedora.
Después, a mediados de mi cuarto medio, decidí emprender en ArchLinux, la distro que seguía como "natural" al proceso de mi adopción linuxera.
Me demoré 3 dias en instalarlo y dejarlo "usable" con interfaz gráfica, programas, etc. No sin antes haber pasado varias semanas leyendo completamente todos los manuales habidos y por haber y videos para instalar y configurar ArchLinux.
Pero cuando entré a la universidad a estudiar informática, pensé que no iba a tener suficiente tiempo para "mantenerlo", y decidí cambiarme a Fedora.
Eso hasta un par de meses, donde volví a ubuntu, el que uso actualmente con Mate.
Pero quedémonos en ArchLinux...
Esta distro, cuando yo la instalé, venía con un instalador en ncurses, es decir sin usar nunca un mouse y sin "ventanas" tal como las conocemos; sino que texto y colores.
Luego de instalarla, te enfrentas a una consola, nada más que una pantalla negra con letras blancas donde dice "login" invitándote a ingresar. Sin embargo sólo viene con usuario "root" o administrador, con el cual debemos crear un usuario nosotros.
Después de crear el usuario viene la parte dura: Instalar y configurar todo el sistema gráfico, todo a mano.
Después de tener todo configurado y listo para usar,  hay que preocuparse de actualizar; y es que con Arch tendrás muchas actualizaciones diarias.
Con cada paquete actualizado, vienen "comentarios" en la terminal. Algunos dicen dependencias opcionales, como plugins y cosas por el estilo para darle más funcionalidad; otros en cambio, dicen cosas como "debes cambiarle el nombre al archivo <archivo> a <archivo2>" (en inglés obviamente). Ignorar aquellas advertencias puede ser fatal para tu computador, y es que ignorarlas puede recaer en que la aplicación no funcione (como pasa la mayoría de las veces), o funcionar mal. Eso no sería tan trágico si fuera el juego de buscaminas o ajedrez, pero si es un programa inherente al sistema operativo, como por ejemplo el núcleo, puede ser fatal, al punto de no poder volver a entrar.
Y eso es porque la filosofía de Arch se podría resumir en "para qué hacer parches si lo pueden hacer los mismos usuarios".
A veces, las menos, se les olvida poner el mensaje o se dan cuenta de un error después de publicado el programa en la base de datos. En esos casos NUNCA hay que hacer lo que a uno se le ocurra, sino hay que buscar en los foros de Arch por una solución.
Uno de esos errores se enfrentó mi hermano, y lo que hizo fue forzar la instalación, a pesar de errores. ¿Qué le pasó? Le quedó inutilizable.
De eso pasó mucho tiempo, donde sólo usaba windows; por flojera. Ahora que tiene tiempo libre se puso a repararlo. ¿Resultado? Noches en vela, y error tras error. Apoyado en su tablet para buscar soluciones y manuales.

Con todo esto no quiero decir que Arch es un mal sistema operativo, y creo firmemente que quien quiera aprender realmente a usar linux, y a conocerlo "por dentro", lo más recomendable y "rápido" es usar ArchLinux.
En ArchLinux te obligan a tener "buenas costumbres" al momento de usar un pc. Éstas son leer la documentacion, los manuales, las advertencias, y todo aquello que un usuario común le da a "siguiente" sin leer. Y te lo enseña de la manera más cruda que puede haber: dejándote inutilizable el programa, y con una solución muchas veces muy difícil que  pasa por -comunmente- reinstalarlo (cosa difícil si es un programa necesario para el funcionamiento del sistema operativo).
Considero que cualquiera que quiera aprender realmente a usar linux, y saber administrarlo, debería usar Arch -o tal vez gentoo- y saber cómo funcionan las cosas por dentro, no depender de las interfaces gráficas, y manejarse fluidamente en un entorno Linux.

Mi hermano no lo instaló por eso, sino por su -a mi parecer, a lo menos "raro" y "con poco sentido"- afán de poder modificar y configurar todo. Y ahí está, modificándolo y configurándolo todo.

En todo caso, insisto encarecidamente a no usar Arch si no se tiene una experiencia más o menos acabada en linux, sin manejarse en la consola, o sin haber leído los manuales y tenerlos impresos, o una fuente fácil y rápida de accederlos.

sábado, 18 de mayo de 2013

Montar fácilmente tablets y celulares que usan mtpfs

Me regalaron un tablet, y lo primero que quise hacer fue conectarlo al pc para poder copiarle archivos.
En windows 7 no tuve mayor problema, el sistema encontró y descargó automáticamente los controladores y todo funcionó bien (salvo que cuando copio un formato "no soportado" pregunta si quiero copiarlo, pero lo copia al fin y al cabo).
En linux -fedora- no hubo caso. Me lo montó automáticamente como monta cualquier cosa, y me quedó una carpeta que referenciaba a la misma (¿Carpeta-ception?).
Busqué manuales, y encontré éste, el cual era para la tablet que yo tenía (acer a500). Al principio me funcionó, aunque me preguntaba cuando intentaba copiar un formato "no soportado", le ponía que copie y listo.
El problema vino cuando después de una actualización ya no me dejaba copiar los archivos no soportados. Simplemente daba error y paraba.
Busqué y busqué y encontré el gmtp y programas parecidos. Funcionaban bien y uno podía hacer de todo; el gran problema fue su lentitud. Y es que demoraba varios minutos en responder, en los foros decían que era propio de mtp.
Buscando y buscando, llegué a la solución. Fue simple, acá os explico:
Primero instalan el programa "simple-mtpfs" de los repos. Si no está, buscan el adecuado a su distro (como me cambié a ubuntu, y en ubuntu no estaba, lo encontré en launchpad).
Luego conectan el tablet y arrancan el siguiente comando:

$ simple-mtpfs CARPETA

donde "CARPETA" es la carpeta que ustedes elegirán como punto de montaje, puede ser cualquiera, yo uso una en home y listo.
Luego para desmontar corren el comando:

$ fusermount -u CARPETA

Eso es si conectan un solo dispositivo que use mtp, en caso de usar más dispositivos conectados, tienen que especificar cuál conectarán, para ello recomiendo leerse la ayuda del comando;

$ simple-mtpfs -h

Eso es todo, y así pueden copiar/mover/eliminar/etc cualquier tipo de archivo, de cualquier extensión, y sin largas esperas.
Como dice el nombre, el "simple-mtpfs" no es más que una configuración típica del programa mtpfs, si quieres usar configuraciones "no típicas" tendrían que meterse a usar mtpfs y fuse; pero para uso cotidiano, esto estaría bien.
Recordar que si lo instalan no de los repos en distros debian-based, luego del "dpkg -i paquete", corren "apt-get -f install" para solucionar las dependencias.

sábado, 11 de mayo de 2013

Transformar mp4 a mp3 en masa en Linux

Buenas. Me he encontrado con un pequeño problema. Y es que tenía que convertir unos archivos de video MP4 a formato MP3 (extraer el audio y convertirlo a mp3 básicamente).
Lo primero que pensé fue usar ffmpeg, pero me encontré que estaba "deprecated" (descontinuado), así que busqué en google.
Me encontré con este post, pero sólo resolvía el problema de convertir 1 solo archivo; y yo necesitaba convertir una carpeta llena de muchos archivos mp4 a mp3.
Luego me encontré con este otro post, el cual convierte los mp4 a mp3, pero usa ffmpeg, el cual ya no sirve.
Así que lo que hice fue "combinar" ambos scripts en uno solo. El cual les dejo en este link de pastebin.
Para ejecutarlo, lo guardan en un archivo de texto, le ponen extensión .sh y lo ejecutan en la carpeta que contiene los archivos .mp4.
El algoritmo NO es recursivo (no entra a las subcarpetas).
Eso, y ojalá les sirva.
Si tiene un problema, miren los comentarios en los posts originales, ahí se dedican a solucionar posibles problemas.
este script deja los mp3 en la misma carpeta, para moverlos fácilmente ejecuten:
$ mv *.mp3 /carpeta/destino
Saludos.

jueves, 2 de mayo de 2013

Descargar fácilmente una lista de reproducción de youtube

¿No les ha pasado que quieres guardar una lista de reproducción para verla más tarde? Personalmente me gusta descargar videotutoriales para luego verlos en el tiempo libre o mientras viajo, por lo que necesito tenerlos descargados (rara vez tienen internet en el bus).
Para ello en Linux (y windows) hay una forma muy sencilla de hacerlo en la línea de comandos. Esto hace que sólo basta un comando para tener la lista de youtube descargada íntegramente -no sólo sirve con listas de reproducción, sino también con videos.
El comando en cuestión es:
youtube-dl
Lo instalan desde su repo favorito, o para usuarios de windows lo descargan de su página:
http://rg3.github.io/youtube-dl/download.html
Recuerda que en cualquier caso hay que tener el intérprete de Python compatible. Simplemente van a la página de python y descargan el que sea compatible según lo que dice la página de youtube-dl.
Acá la página de Python

Acá la explicación de cómo se usa:
youtube-dl OPCIONES <url>
Y las opciones más usadas son:

-f FMT
donde "FMT" es el formato que queremos descargar, una pequeña lista sería (sacada de manpages.ubuntu.com):
WebM video at 480p: 43
WebM video at 720p: 45 
H264 video in MP4 container at 480p: 18 
H264 video in MP4 container at 720p: 22 
H264 video in MP4 container at 1080p: 37 
H264 video in FLV container at 360p: 34 
H264 video in FLV container at 480p: 35 
H263 video at 240p: 5
3GP video: 17

Nota importante: en caso que no esté el formato requerido, el programa parará y no seguirá descargando; al contrario de la opción --max-quality

-t
esto es para que el título del video quede en el nombre del archivo descagado.

--max-quality webm
--max-quality mp4
Si quieres descargar en la resolución máxima simplemente, pones uno de estos dos (según el formato que prefieras) y listo.
Nota importante: esta opción te descargará SIEMPRE en la mejor calidad, y en caso que no esté el archivo de mayor calidad en el formato puesto, lo descargará en el otro formato.

--playlist-start=N
Donde empieza a descargar los videos. Si no lo pones empieza del primero (el 1).

--playlist-end=N
Donde termina de descargar los videos, si no lo pones termina en el último (el -1)

-R R
Donde R es el número de reintentos para descargar un video

-r L
Donde L es la velocidad máxima, va con sufijo de la unidad por ejemplo: 50k o 2m

-u UN
Donde UN es tu nombre de usuario
-p PW
Donde PW es tu contraseña, útil si es un video con restricción de edad o cosas así.

Personalmente lo uso algo así:
$ youtube-dl -f 45 -t http://www.youtube.com/playlist?list=PLfHn....

Fuente y para más información (en inglés), acá.