Linux en Tablet

septiembre 3, 2011

Con el empuje de Mariana (la mujer que todo geek querría tener) compré una tablet (Acer W500). Compré la que viene con Windows porque quería instalar Linux. Luego de mirar varias revisiones de ese tablet, me dí cuenta que la principal crítica que tenía era por Windows, no por el equipo en si.
Probé ubuntu con diferentes escritorios: xfce, kde y unity. Me quedé con XFCE (Kde consume recursos, mas lento, experiencia menos “tablet”, Unity: es detestable y no hay modo que me acostumbre a eso).
Casi todo funciona “out of the box” (WiFi, BT, pantalla) excepto un par de molestias: la emulación del botón secundario con el tacto y la rotación de la pantalla.
Todavía no encuentro solución para el tema de la rotación.
Emulación de botones: instalen easystroke que funciona de maravilla. En este foro explican como configurarlo (es sencillo).
Los navegadores que uso no soportan gestos multitáctiles, así que POR AHORA no puedo hacer el clásico zoom con dos dedos. Ya vendrá.
Agregado:
Scrolling en Firefox

Separación silábica en español con Lyx

marzo 28, 2011

Estoy usando cada vez más Lyx para escibir cualquier cosa que requiera de referencias bibliográficas. Lo combino con KBibTex para manejo de citas y Mendeley para manejo de PDFs de artículos científicos.

A la hora de hacer separación silábica, la instalación por defecto (en Ubuntu/Kubuntu) no genera una separación correcta.

Después de buscar un rato, encontré en otro blog que la instalación del paquete texlive-lang-spanish soluciona el problema.

>> sudo apt-get install textlive-lang-spanish

El problema no es de Lyx sino de LaTex (sobre el que se apoya Lyx).

Administración remota de MySQL

marzo 9, 2011

Para un setup rápido y sucio de mysql con administración remota, entrar con ssh al sitio remoto y mediante:

mysql -u root -p

acceder a la cuenta root y luego teclear:

GRANT ALL PRIVILEGES ON *.* to 'root'@'%' IDENTIFIED BY 'password'

Si se cambia “root” por otro usuario, también funciona.
Lo de siempre: lo pongo acá porque se que después lo voy a necesitar.

Moneda, decimales y redondeo en Python

marzo 8, 2011

A pesar de lo obvio que parece después, trabajar con el tipo Float, cuando uno quiere trabajar con moneda & contabilidad en Python, NO es lo mismo.

El módulo decimal, está diseñado específicamente para manejar números que requieran de una representación exacta, como se suele requerir en contabilidad. El tipo float no cumple ese cometido (leer la descripción para ver porqué).

Cuando entramos al modo “decimal”, no siempre Python maneja las conversiones de modo inteligente, por eso nos podemos topar con varias dificultades.

Una es el redondeo. La clase decimal tiene varios tipos de redondeos, pero con fines prácticos, para programas vinculados a contabilidad, modifiqué una rutina que encontré en otro blog. Como siempre lo pongo acá porque se que en algún momento lo voy a precisar.

def redondeo(cifra, digitos=0):
  """Rutina par redondeo de cifras decimales como para uso en contabilidad"""
  # Symmetric Arithmetic Rounding for decimal numbers
  if type(cifra) != decimal.Decimal:
    cifra = decimal.Decimal(str(cifra))
  return cifra.quantize(decimal.Decimal("1") / (decimal.Decimal('10') ** digitos), decimal.ROUND_HALF_UP)

Como siempre, es mejorable, pero da una idea del asunto.

Gmail crackeado o “al carajo en un segundo”

junio 20, 2010

Hoy de mañana me llaman por teléfono y me dicen: “Si no estás en Londres necesitando plata, entonces te entraron a tu cuenta de GMail”.

A eso siguieron varias horas de recuperación de la cuenta, contestar llamadas telefónicas solidarias y mandar mails de disculpas.

Más de uno, alarmado, me pregunta qué pasó, cómo pasó, como hago para que no me pase y qué hago si me pasa.

1. Qué pasó

Alguien se adueñó de mi cuenta de GMail con la finalidad de fingir que me encontraba en apuros económicos y que necesitaba dinero. El objetivo era que la gente se ofreciera a ayudar y de ahí rastrillar algunos dólares.

2. Cómo pasó:

Mediante técnicas fuerza bruta, “olfateo” de datos en la red o explotación de vulnerabilidades, alguien obtuvo mi clave de acceso a GMail. Una vez ahí mandaron un correo masivo a todos mis contactos, borraron todos mis contactos y setearon GMail para derivar los correos a una cuenta en Yahoo. A los que saben que soy Linuxero: las técnicas son independientes del SO (Win, Mac o Lin).

3. Como hago para que no me pase:

Lo mejor es usar una clave lo más segura posible. La mayor seguridad está en las claves más largas, con mezcla de mayúsculas, minúsculas, números y símbolos. Es inversamente proporcional a la comodidad. Con aproximadamente 10 caracteres que mezclen Min Masc y Numeros, andamos mas o menos bien (mi clave era de 8, solo con Min y Num). Pero lo más importante: nadie está libre. Lo mínimo que uno puede hacer es no tener una cuenta “juan” (usuario “juan”, clave “juan”) porque eso es lo primero que prueba cualquier programa crackeador. Si tienen la info de nuestro cumpleaños o similar, también: evitar claves con fechas clave. Aquí hay otros tips de seguridad.

4. Qué hago si me pasa:

GMail tiene un sistema para recuperar la clave. El tema es que si entraron, pueden haber cambiado la dirección secundaria a donde mandar la clave, con lo cual son boleta. Entonces hay que entrar a la recuperación, marcar que alguien se adueño de la dirección y luego elegir la opción de llenar un formulario. En el formulario nos piden varias cosas pero lo más importante:

* 5 direcciones de correo de uso frecuente

* la fecha (lo más exacta posible) de creación de nuestra cuenta de gmail

* la última clave

* una dirección de correo alternativa

Con eso, llegan los datos para recuperar la cuenta.

Pero la historia no termina ahí: nuestra cuenta está alterada para reenviar los correos que llegan, con lo cual, sin que se den cuenta, los correos de nuestros amigos van a parar a la dirección de estos muchachos. Hay que entrar a  las opciones de configuración POP y cambiar el redireccionamiento (o inhabilitar POP).

Cambien las claves de todos aquellos servicios fuera de google que tengan la misma clave que la que fue crackeada.

Después de eso: la penosa tarea de avisar a nuestros contactos de a uno (porque se borraron las listas).

5. Otros

No reenviar cadenas (suelen traer en la “cola” todas las direcciones de mail por las que pasó). Son usadas para recolectar datos de posibles blancos.

No poner direcciones de correo en las firmas (se suele poner marcelo_en_dominio_punto_com como equivalente de marcelo@dominio.com).

Recuerden que “la nube” (concepción que nos empuja a guardar nuestros datos en la red en lugar de nuestras computadoras) todavía es una nube. Basta un crackeo para perder (como en mi caso y gracias al oligopolio de google):

* blogs (blogger.com)

* correos (gmail.com), attachments y contactos

* grupos (google groups),

* fotos (flickr),

* videos (youtube, pertenece a google)

* calendarios (google calendars)

* documentos (google docs)

Otros (notas, paginas web, etc) (uso casi todos los servicios de google).

Quizás es mejor no poner todos los huevos en la misma canasta.

Lo que espero es no ser asaltado en Londres, porque soy boleta: nadie me va a ayudar porque van a pensar que es joda.

Bienvenidos a GNU/Linux – Ubuntu

junio 9, 2010

Como varios compañeros están dándole una oportunidad a Linux y como Ubuntu suele ser la puerta de entrada, pongo acá unos links que pueden servir (algunos son específicos de Uruguay):

Nivel Básico (precontemplación)
Qué es GNU/Linux
Qué es Ubuntu

Antes o después de instalar

La comunidad es un elemento fundamental para Linux. Todo es trabajo colectivo.

Comunidad Linuxera uruguaya, comunidad Ubuntera uruguaya.
Documentación básica
Foros para novatos. Si buscaron la información que necesitan (si realmente buscaron) y no la encontraron, puedo responder acá alguna pregunta.

Nivel avanzado (crackear el PC de la abuela con Windows 98)

Tuneadores del sistema / Otro blog

Surfers del sistema
Potros de la consola: no necesitan links.

Nota: “conalambre” no es un blog sobre ubuntu ni contiene información util para gente que recién empieza. Hay cientos de blogs más útile para eso.

Administración remota de servidor MySql

abril 20, 2010

Varias veces tropiezo con la búsqueda del mismo dato:
Cómo hago para administrar remotamente un servidor MySQL.
Hay varios formas de hacerlo en diferentes páginas, pero la forma más sucia y simple es:

1. Entrar al servidor en modo consola con SSH
ssh mi.servidor.com
2. Editar el archivo de configuración de mysql (Ejemplo: sudo
sudo nano /etc/mysql/my.cnf
3. Comentar la línea que dice “bind-address = 127.0.0.1″
# bind-address = 127.0.0.1
4. Reiniciar el servidor mysql:
sudo /etc/init.d/mysql restart

CGI con Python y flush() en Apache 2

febrero 5, 2010

Para mi sorpresa, un script “correctamente” hecho con python, que procesaba gran cantidad de información, no mandaba su salida en formato HTML hasta que completaba. El usuario debía tener alguna pista visual de qué era lo que estaba haciendo la máquina.

A pesar de usar:

import sys
...
sys.stdout.flush()

… no cambiaba el comportamiento de la página.
Después de googlear un poco, me encuentro con que Apache 2 tiene habilitado por defecto el módulo de compresión (deflate), con lo cual, el sistema espera que termine de renderizar la página, comprime y manda.
Basta con deshabilitar este módulo con:

sudo a2dismod deflate
sudo /etc/init.d/apache2 restart

Con lo que quedó solucionado el problema…
Lo pongo porque se que después me va a pasar lo mismo y voy a terminar… acá.

Sistemas de control de versiones distribuidos

enero 28, 2010

Para quienes no provienen del área informática, un sistema de control de versiones (en español)  es un sistema que tienen los desarrolladores de software para trabajar de forma distribuida en un mismo proyecto. El sistema se encarga de llevar las versiones, analizar diferencias entre códigos, evaluar conflictos, etc. En los sistemas clásicos hay un servidor que almacena una versión “oficial”. En los sistemas descentralizados cada computadora es un servidor y un repositorio. No hay centro: cada quien desarrolla y va posteando, todo lleva un “merge” en una “branch” transformándose en una “release”.
Hay toda una jerga desarrollada por desarrolladores para poder manejar proyectos descentralizados (la enorme mayoría del software libre se desarrolla con sistemas de control de versiones [que pueden o no  ser distrubuidos], los distribuidos son cada vez más frecuentes). Esa jerga podría ser útil para manejo de cualquier tipo de producción intelectual colectiva que deba tener un “output” o “deliverable” único.

Los sistemas clásicos son CVS, Subversion y otros. Los más actuales: Bazaar, Git, Mercurial y otros.

Desarrollando un proyecto de sistema de gestión basado en web (python + php + ruby) surgió la necesidad de controlar los cambios que se van produciendo y a la vez dejar una puerta abierta para poder el día de mañana liberar el código (y que se puedan sumar otros desarrolladores).

Después de evaluar unos cuantos me decidí por Bazaar (muy tentado por Git y asombrado por la elección del equipo de Python de usar Mercurial por un tema de “antipatía” por Git). Git fue inicialmente desarrollado por el mismísimo Linus Torvalds y es el sistema que actualmente se usa para muchos de los proyectos más grandes y complejos: Linux Kernel, Gnome, Qt, X, etc). La elección de Bazaar tiene más que ver con la facilidad que proporcionan las interfases gráficas para una tarea que recién estoy aprendiendo. Si fuese un poco más experimentado, quizás usaría Git.

En realidad este post era para poner un link a una presentación sobre Git que me pareció interesante en varios aspectos:

  • Ilustra de forma muy gráfica el proceso de desarrollo descentralizado.
  • Enseña a manejar Git y a conceptualizar un poco más allá
  • Es interesante como técnica de presentación (alternativa al clásico “Powerpoint”): una guía al costado y un uso adecuado de los espacios, gráficos y texto.

El desafío para los “no desarrolladores” es poder aprender de estas herramientas que se mostraron más que eficaces para manejo de proyectos enormes y pequeños (escalabilidad), de forma centralizada o distrubuida (flexibilidad) con un esquema de trabajo que trasciende la programación y entra más en la informática (por ejemplo: es usado por desarrolladores gráficos [íconos, señalizaciones, etc]).

Buscar y reemplazar desde Ruby

noviembre 8, 2009

Dado que la línea de comando es un chorizo de caracteres que no siempre es fácil recordar, pensé en hacer un script en ruby que hiciera lo mismo pero con una sintaxis de tipo:

srchreplace cadena_a_buscar cadena_nueva *.php

Básicamente lo que quería hacer era, por ejemplo, encontrar todos los archivos de php que hacen  referencia a “contabilidad.php” y cambiarlos por “contabilidad.py” .

Lo primero, para no reinventar la rueda fue buscar un script similar. Lo más parecido que encontré fue en la página “Erik on Rails“. Si bien no era exactamente lo mismo, tenía una clase que se podía aprovechar. Gracias Erik.

Lo segundo fue crear el script que haga uso de esa clase.

Acá va el script:

#!/usr/bin/env ruby
class File
def replace(pattern, string)
full_path = File.expand_path path
return if !File.file?(full_path)

reopen(full_path, 'r')
lines = readlines

changes = false
lines.each do |line|
changes = true if line.gsub!(pattern, string)
end

if changes
reopen(full_path, 'w')
lines.each do |line|
write(line)
end
close
end
end
end

if ARGV.count != 3
puts "Error: argumentos incorrectos"
puts "Uso: srchrep.rb cadena_buscar cadena_reemplazar archivos"
puts "Donde 'archivos' es una lista de archivos en formato *.* entre comillas "
else
# ver si existe archivo
# hacer una lista de archivos que tengan la cadena buscada
files = Dir.glob(ARGV[2])
numarch = files.count
# por cada archivo de la lista
for filename in files
arch = File.open(filename)
arch.replace(/#{ARGV[0]}/,ARGV[1])
end
end

El principal problema es que el shell convierte la línea de comandos expandiendo los comodines, por lo cual la sintaxis pasa a ser:

./srchreplace.rb cadena_buscar cadena_reemplazar "*.php"

No encontré manera más elegante de hacerlo. Pero me resulta práctico.


Seguir

Get every new post delivered to your Inbox.