; Vince y el mundo del software: enero 2015

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