Con la llegada del MTP (Media Transfer Protocol) desde Android Honeycomb 3.X, cada vez se hace más difícil tener acceso directo al disco interno sin tener que pasar por protocolos intermedios. En las versiones de Android superiores a la 4.X prácticamente es imposible tener acceso UMS (Usb Massive Storage), es por ello que les dejo esta pequeña receta.

Ingredientes

  • Un teléfono ó tableta con acceso a Root.
  • Tener instalado el paquete BusyBox en tu dispositivo.
  • Una PC/Notebook/Netbook con cualquier distribución de Linux. En el caso de correr otro sistema operativo, tener instalado Cygwin (en Windows) ó Homebrew (en OS X). En mi caso usé Debian Whezzy.
  • ADB (Android  Debug Brigde). Este depende de tu Sistema Operativo.
  • USB Debugging Enabled en tu dispositivo.
  • Netcat y pv (Monitor de progreso de datos a través de una tubería).  Este depende de tu Sistema Operativo, que podrá ser instalado a través de Cygwin ó Homebrew.

¡A cocinar!

1. Tener activo el USB Debugging.

2. Reiniciamos el dispositivo en Mode Recovery (esto varía depende del distribuidor del hardware). En mi caso, usé un Samsung Galaxy S4 (I-9505),

3. Abrir una terminal y ejecutar los siguientes comandos ADB:

$ adb forward tcp:5555 tcp:5555
$ adb shell
$ busybox nc -l -p 5555 -e busybox dd if=/dev/block/mmcblk0

Con esto estaremos preparando el volcado del disco interno mmcblk0 desde el dispositivo.

Nota: El disco interno de 16 Gb en el sistema es /dev/block/mmcblk0. 
No necesariamente sea el mismo en su sistema. Verifique el nombre de 
su dispositivo.

4. Ahora solo nos queda volcarlo al disco local con:

$ adb forward tcp:5555 tcp:5555
$ nc 127.0.0.1 5555 | pv -i 0.5 > mmcblk0.img

El proceso de volcado para 16 Gb es aproximadamente 1:15 horas.

Ya con la imagen (mmcblk0.img) creada podremos aplicarles algunos programas para recuperación de datos (En Linux como foremost, photorec, entre otros), ó Recuva (en Windows).

Últimamente he estado haciendo pequeñas aplicaciones con Markdown (tanto así que he estado pensando en dejar de usar wordpress y pasarme a este lenguaje de marcado xD) y me ha tocado buscar información en cuanto a la sintaxis correcta al momento de hacer un documento, les dejare una pequeña lista de las guías que estoy usando, si conocen alguna otra pueden notificarlo en los comentarios y así podemos ir creando una gran lista para referencias futuras :D.

En esta publicación les venimos a presentar otra Suite Ofimática existente en GNU/Linux, recordándoles que gracias a la flexibilidad que brinda el Software Libre, se pueden tener muchas aplicaciones que realizan las mismas funciones pero adaptadas al gusto o a la necesidad de quien la creó. 

De igual manera es importante que sepan que apoyamos principalmente LibreOffice porque es la suite ofimática que más ayuda en los procesos de migración desde MS Office de Windows, tanto por las similitudes gráficas como por la compatibilidad como tal entre archivos, pero el hecho de que apoyemos y usemos esta suite, y que quizas sea la más difundida, no quiere decir que no podemos hacer mención a otras que también existen y que ademas cuentan con variedad de opciones y funciones de excelente calidad.

Si eres de los usuarios que le gusta probar diversas aplicaciones y que no se resiste el cambio esta Suite Ofimática llamada Calligra es la opción perfecta para ti. Calligra fue creada a partir de Koffice (Suite Ofimática de código abierto creada para KDE), fue diseñado inicialmente para funcionar en sistemas operativos tipo Unix, pero desde la versión 2.0 es posible la ejecución de Calligra Suite en Mac OS X así como también en Windows.

Para realizar la instalación correspondiente (si estamos en Distribuciones basadas en debian) como Super Usuario colocamos en la terminal:
  aptitude install calligra  
les recomendamos instalar el idioma respectivo (en este caso español), si no estamos seguros de los nombres de los paquetes a instalar ejecutamos lo siguiente:
  aptitude search calligra  
luego verificamos en el listado los paquetes adicionales que se requieran para la correcta configuración, para el idioma en español seria lo siguiente:
  aptitude search calligra-l10n-es  

Luego de instalado lo conseguiremos en el menú Oficina, no tienen que desinstalar su anterior Suite Ofimática, ellas pueden convivir sanamente, sin competencias, una al lado de la otra. Ahora vamos hablar un poco de las aplicaciones que contiene. Como sabemos cuando se habla de "Suite Ofimática" nos referimos a aquellas aplicaciones que cuentan con una recopilación de sub-aplicaciones que la conforman, en este caso a Calligra Suite la conforman las siguientes divididas en tres secciones:
  • Aplicaciones de Oficina:
    1. Calligra Words: es el procesador de texto (equivalente a Libreoffice Writer o a MS Word). Tomado de su web: "Puede crear documentos informativos y atractivo, con un par de clics de sus mouse". 

    2. Calligra Stage: es el manejador de presentaciones

       (equivalente a LibreOffice Impress o MS Power Point). Tomado de su web: "Viene con algunas opciones increíbles y con estilo para sus fondos de las diapositivas"

    3. Calligra Sheets: es la hoja de cálculo, (equivalente a LibreOffice Calc o MS Excel). Tomado de su web: "Se puede utilizar para crear rápidamente hojas de cálculo con fórmulas y tablas, para calcular y organizar los datos". 

    4. Calligra Flow: es la aplicación para el manejo de Gráficos (equivalente a MS Visio). Tomado de su web: "se utiliza para hacer diagramas de flujo y diagramas de red, organigramas, diagramas de flujo y mucho más

    5. Kexi: es el manejador de base de datos (equivalente a LibreOffice Base o MS Acces). Tomado de su web: "Se puede utilizar para el diseño de aplicaciones de base de datos, la inserción y edición de datos, la realización de consultas, y el procesamiento de datos."
clic en la imagen para ampliar
  • Aplicaciones de Gráficos:
    1. Karita: es un programa de Dibujo y Pintura. Tomado de su web: "ofrece una solución para la creación de archivos digitales de pintura desde el principio. Soporta el concepto de arte, creación de cómics y texturas.". 
    2. Karbon: es una aplicación para Gráficos Vectoriales. Tomado de su web: "soporta imágenes con capas para ilustraciones, soporta el formato SVG, el estándar de Internet para las imágenes vectoriales, así como muchos otros formatos de archivo estándar de la industria.". 
clic en la imagen para ampliar
  • Manejadores de Proyectos:
    1. Plan: Aplicación para la gestión de proyectos. Tomado de su web: Está orientado hacia proyectos con múltiples recursos. Ofrece diferentes tipos de dependencias entre tareas y las restricciones de tiempo".
clic en la imagen para ampliar
Si tienen algún comentario, opinión o sugerencia nos pueden escribir a consulta_friki@kioscofriki.com.ve
Y recuerda, si esta información te ayudó y quieres colaborarnos económicamente puedes hacer tu donación aquí

el-codigo-linux1

Saludos compañeros, hoy he querido compartir esta información que me ha servido de mucho en varias ocaciones, y espero que les sirva a ustedes. Se trata de como bajar un site completo para ser visto cuando quieres desde tu computador, todo utilizando wget. Esta información es obtenida de http://www.eliax.com/?post_id=6226. Buen post. Saludos:

Si utilizas Linux o una variante de UNIX (como el mismo OS X) en donde puedas instalar o tengas acceso al comando wget, he aquí un truco que te gustará, ya que te permite descargar un website completo (es decir, todas las páginas web dentro de un mismo dominio) con una sola linea de comando, lo que resulta bastante útil.

El comando es el siguiente y lo debes escribir en una sola linea, aunque simplemente copia-pega directamente desde aquí a tu linea de comando y cambia el final que dice foo.com (nota que como es Linux/UNIX, que debes poner atención a las mayúsculas y minúsculas):

wget –random-wait –limit-rate=64k -e robots=off -r -p -U mozilla http://www.foo.com

Es importante entender por qué ciertas opciones del comando wget que utilizamos:

–random-wait significa que entre un pedido y otro al website, que espere un tiempo aleatorio, para así no pedir demasiadas páginas y archivos uno detrás de otro y alarmar a algún sistema de seguridad.

–limit-rate=64k significa que no pase de 64 KiloBytes por segundo en transferencia de datos. Este número depende de tu conexión a Internet, y no es recomendado que lo incrementes mucho para no alarmar al website remoto. También puedes especificar el valor en MB/s sustituyendo la “k” por una “m”.

-e robots=off significa que wget no debe prestar atención al archivo robots.txt que indica cuáles páginas no deben accederse por un navegador web.

-r significa que queremos todo de manera recursiva.

-p indice que descargue todos los archivos para desplegar adecuadamente una página HTML.

-U mozilla significa que impersonifique a la familia Mozilla de navegadores (como Firefox).

Y finalmente sustituye http://www.foo.com por el website que deseas descargar.

Noten que este truco es bastante útil para esas páginas que ofrecen miles de fotos para diseñadores gráficos, pero que te hacen moverte una página a la vez de manera manual y lenta. Mientras que con esto puedes dejar a que wget “navegue y descargue” todo por ti.

Manual (“man page”) de wget con las otras opciones que ofrece

autor: josé elías

Con la ayuda de cron y Python podemos pre-programar el envío de tweets sin que estos se repitan y llevar un registro de los que se han enviado. Este corto script hecho en python es mi segunda aventura con este lenguaje que poco a poco me esta enamorando.

La lógica es simple, el programador de tweets lee un archivo que contiene un tweet por linea, actualiza mi estado en twitter con el contenido de esa linea, registra los resultados en un archivo y por ultimo elimina esa linea del archivo evitando así repetir el mismo tweet. Veamos el código fuente:

#!/usr/bin/python
import twitter
import datetime

now = datetime.datetime.now()

with open('lista.txt', 'r') as f:
  first_line = f.readline()
  first_line = first_line.strip('\n')
  print first_line
f.close()

logfile = open('procesados.txt','a')
fecha=now.strftime("%Y-%m-%d_%H:%M:%S")
logfile.write(fecha + ' ' + first_line + '\n')
logfile.close()

#send tweet
api = twitter.Api(consumer_key='',
  consumer_secret='',
  access_token_key='',
  access_token_secret='')

status = api.PostUpdate(first_line)
print status.text

#removing status from queue
lines = open('lista.txt').readlines()
open('lista.txt', 'w').writelines(lines[1:])

Alimentando el script programador de tweets.

Como vieron en el código fuente, solo necesitamos proporcionarle el archivo lista.txt donde cada tweet dependiendo del tipo tiene limitaciones de longitud distintas. Si no posee un hyper vinculo el limite es de 117 caracteres excluyendo la URL mientras que si no tiene un hiper vinculo el limite es de 140 caracteres. El archivo lista.txt se vería algo así:

Just ran out of bacon, the room seems to be shrinking, please help! ... and bacon
Programador de tweets hecho en python https://orvtech.com/planificador-tweets-python.html

Automatizando el envío de tweets.

Leí un poco y se que se puede hacer un demonio y dejar que python se encargue de esto pero para comenzar decidí hacerlo usando cron. Me decidí a tuitear dos veces por día entre semana mientras que los fines de semana solo una vez. Mi crontab se ve así:

15 15  *  *  0,6  /usr/bin/python /scheduler/reader.py >> /scheduler/reader.log 2>&1
14  6  *  *  1-5  /usr/bin/python /scheduler/reader.py >> /scheduler/reader.log 2>&1
11 20  *  *  1-5  /usr/bin/python /scheduler/reader.py >> /scheduler/reader.log 2>&1
El propósito de este artículo es realizar un análisis de las principales variables del entorno y capacidades del emprendedor que se deben tener en cuenta antes de decidir si es un buen momento para iniciar un emprendimiento. Se realiza una comparación de estos factores entre dos casos de emprendimiento Latinoamericanos de características diferentes: la empresa Laboratorios Skudmart, de Colombia, y la empresa Kauel, de Chile.




La Bañera
Originally uploaded by alerios.

La Bañera. Óleo sobre lienzo (50x70cm). Va a estar 20 dias expuesta en la biblioteca de la universidad CEIPA, en Sabaneta, como parte de las obras del semestre del taller de extensión de la escuela Débora Arango.

Mi primera exposición, que emoción :p

Después de varios años decidí iniciarme en el mundo de Python y jugar un poco con el API de Twitter así que decidí hacer un programa en Python que compara tu lista de seguidores con tu lista de amigos para obtener una lista de las personas que tu sigues pero no te siguen. Es decir, quien te dejo de seguir en Twitter o como dicen en la red, quien te ha dado unfollow.

Como era mi primer intento decidí usar python-twitter que por lo que leí era la mas sencilla de usar. Para instalar este paquete de Python pueden ejecutar:

pip install python-twitter

El programa para listar unfollowers es este:

#!/usr/bin/python
#orvtech_no_me_sigue.py para API 1.0
import twitter

#Prepare the needed data for twitter's oauth

api = twitter.Api(consumer_key='<YOUR_CONSUMER_KEY_HERE>',
                  consumer_secret='<YOUR_CONSUMER_KEY_HERE>',
                  access_token_key='<YOUR_TOKEN_KEY_HERE>',
                  access_token_secret='<YOUR_TOKEN_SECRET_HERE>')

#Get followers by handle
followers = api.GetFollowers()
seguidores =[]

for u in followers:
  seguidores.append(u.screen_name)

#Get friends by handle
friends = api.GetFriends()
siguiendo =[]
for f in friends:
  siguiendo.append(f.screen_name)

#Get the list of people that you follow that but that are not in the followers list
unfollowers = list(set(siguiendo) - set(seguidores))
count_uncool = len(unfollowers)
print "Total friends not following you: " + str(count_uncool)
for uncool in unfollowers:
  print uncool + " " + "https://twitter.com/" + uncool

Como ven para poder ejecutar este programa y ver sus unfollowers deberán obtener una serie de datos de dev.twitter.com para autentificar su programa contra oauth. El producto de este programa se vera algo similar a esto:

Total friends not following you: 61
planetfedora https://twitter.com/planetfedora
twitter https://twitter.com/twitter
TwitterEng https://twitter.com/TwitterEng
twittercomms https://twitter.com/twittercomms
twitterapi https://twitter.com/twitterapi
fedora https://twitter.com/fedora
make https://twitter.com/make
dickc https://twitter.com/dickc
TwitterIO https://twitter.com/TwitterIO
TwitterSF https://twitter.com/TwitterSF
safety https://twitter.com/safety

Por ahora lo que quiero es exportarlo a una aplicacion web, si tienen sugerencias me las pueden dejar en los comentarios, me gustaría un poco de orientación de como hacer de este programa una aplicacion web.


UPDATE: Junio 20 del 2013

Con la salida de el API 1.0 de Twitter el código que esta arriba queda obsoleto y rápidamente alcanza el limite de peticiones de la API. El codigo a continuación trabaja perfectamente con la API versión 1.1 siempre y cuando no tengas mas de 5000 seguidores o mas de 100 personas que no te siguen.

#!/usr/bin/python
#orvtech_no_me_sigue.py para API 1.0
import twitter

#Prepare the needed data for twitter's oauth
api = twitter.Api(consumer_key='<YOUR_CONSUMER_KEY_HERE>',
                  consumer_secret='<YOUR_CONSUMER_KEY_HERE>',
                  access_token_key='<YOUR_TOKEN_KEY_HERE>',
                  access_token_secret='<YOUR_TOKEN_SECRET_HERE>')

followers = api.GetFollowerIDs()
friends = api.GetFriendIDs()

unfollowers = list(set(friends) - set(followers))
count_uncool = len(unfollowers)
nombre = api.UsersLookup(user_id=unfollowers)

print "Total friends not following you: " + str(count_uncool)

counter = 0
for uncool in nombre:
  print nombre[counter].name + " https://twitter.com/" + nombre[counter].screen_name
  counter += 1