; Vince y el mundo del software

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.