SSH en el Chumby

— [ edit | raw ] migrated from node/950

En esta receta voy a contar cómo activar el SSH del Chumby de forma temporal y permanente, y también cómo ponerle una contraseña.

Enlaces útiles para Chumby

— [ edit | raw ] migrated from node/949

Páginas oficiales de Chumby.com

Debian GNU/Linux en el Dell XPS 420

— [ edit | raw ] migrated from node/951

Recetilla con los pormenores para instalar Debian en el Dell XPS 420.

Carga dinámica de contenido HTML con XMLHttpRequest

— [ edit | raw ] migrated from node/945
El objetivo principal de este mini tutorial es describir cómo podemos cargar código HTML de forma dinámica con el objeto XMLHttpRequest; todo ello sin necesidad de que la página recargue todo su contenido. No me centraré en hablar sobre AJAX ya que hay multitud de páginas que hablan sobre ello.
Veamos un ejemplo en el que disponemos de un menú con tres enlaces y una zona central donde se muestran los contenidos (dependiendo de la pestaña o enlace que pulse el usuario se mostrará un contenido u otro). Aunque visualmente dé la sensación de que la página no se recarga, con el objeto XMLHttpRequest podemos realizar peticiones en segundo plano al servidor. En primer lugar debemos crear el objeto XMLHttpResquest; su creación varía en función del navegador en uso:
<script language=javascript>
var xmlhttp = false;
try{
//comprobamos si es IE
xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e){
try{
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
xmlhttp = false;
}
}
if(!xmlhttp && typeof XMLHttpRequest != 'undefined'){
xmlhttp = new XMLHttpRequest();
}
</script>
Una vez que el objeto XMLHttpResquest ha sido creado, podemos comenzar a trabajar con él para realizar peticiones al servidor. Para este ejemplo, antes de utilizarlo, necesitamos otra serie de ingredientes para completar la receta, como son el menú desplegable con los diferentes enlaces y la capa donde se cargará el contenido de forma dinámica. Creación del menú:
<select id="menu" name="menu" onchange="javascript:cambiaTexto();">
	<option value="pagina1.html">Texto 1</option>
	<option value="página2.html">Texto 2</option>
	<option value="pagina3.html">Texto 3</option>
</select>
Es muy importante que cuando creemos el menú le asociemos un nombre y sobre todo un identificador (id), ya que será necesario para recuperar su valor desde javascript. También asociamos al menú el evento onchange, de tal forma que, cuando cambie su estado (se seleccione una opción diferente) se produzca la llamada a una función, en este caso la hemos denominado cambiaTexto(). Creación de la capa donde se cargará el contenido de forma dinámica:
<div id="texto" name="texto" width=”500” height=”400”></div>
Al igual que ocurría con el menú, también es necesario asociar un identificador para la capa (creada con la etiqueta
). Una vez que tenemos los ingredientes preparados ya podemos implementar la función en código JavaScript que se encargará de variar el contenido de la capa utilizando el objeto XMLHttpRequest. Función cambiaTexto():
function cambiaTexto(){
	var menu = window.document.getElementById("menu");
	var capa = window.document.getElementById("texto");
	xmlhttp.open("GET", menu.value);
	xmlhttp.onreadystatechange = function(){
		if(xmlhttp.readyState == 4 && xmlhttp.status == 200){
			capa.innerHTML = xmlhttp.responseText;
		}
	}
	xmlhttp.send(null);
}
Para poder manipular el menú y la capa creada con código HTML, utilizamos la función getElementById. El valor actual del menú contendrá el enlace de la página que hemos elegido menu.value. Por tanto, podemos hacer la petición del contenido de dicha página con el objeto xmlhttp y la función open. Además, podemos apreciar que en este ejemplo hemos realizado la petición con el método GET, pero es importante saber que no es la única forma, ya que existe varios métodos: GET, POST, HEAD, DELETE, TRACE, OPTIONS y CONNECT. Finalmente, cuando la petición es satisfecha podemos cargar el contenido que ha sido solicitado en la capa (capa.innerHTML = xmlhttp.responseText) Como hemos podido apreciar en este breve tutorial, AJAX se basa principalmente en el uso del objeto XMLHttpResquest. Además, se ha descrito cómo cargar en una capa contenido html de forma dinámica sin recargar todo el contenido de la página principal. Por otra parte, también podemos destacar que la combinación de AJAX y PHP es sencilla y de gran utilidad; en este ejemplo, hemos utilizado el objeto XMLHttpResquest para solicitar páginas html pero, de la misma forma, podríamos haber solicitado páginas PHP que accedan a una base de datos, recuperar información y construir código HTML de forma dinámica. El uso de AJAX cobra sentido cuando tenemos la intención de crear aplicaciones web similares a las aplicaciones de escritorio.

Referencias

  • Introducción a AJAX con PHP. Babin, Lee (Ed. Anaya Multimedia). 2005.

Ubuntu 8.04 en Airis Kira 300

— [ edit | raw ] migrated from node/944
En esta receta intentaré explicar los pasos que he seguido para instalar ubuntu 8.04 LST y que funcione todo correctamente en un airis kira 300. Los airis kira son portátiles de bajo coste con 7 pulgadas de pantalla que salieron hace poco tiempo al mercado http://www.airiskira.com/es/index.html. Cuando pides uno de estos ordenadores, tienes la posibilidad de solicitarlo con windows xp o bien una versión de linpus preinstalada, pero esto no quiere decir que otras distribuciones puedan funcionar a las mil maravillas.
La primera piedra que encontramos en el camino es que el portátil carece de unidad de DVD o CD, por tanto, para instalar una nueva distribución necesitaremos una unidad externa o bien instalarla desde una memoria usb. Si finalmente optamos por esta última opción, en http://www.pendrivelinux.com/2008/05/15/usb-ubuntu-804-persistent-install-from-linux/ se explica paso a paso cómo preparar una imagen de ubuntu en una memoria usb para poder instalarla en cualquier ordenador. Una vez que tengamos ubuntu (o cualquier otra distribución) instalada en nuestra memoria usb, el siguiente paso es conectarla a nuestro portátil y proceder a la instalación (es posible que necesites especificar en la bios que arranque desde el usb). La instalación de ubuntu es tan sencilla como ir siguiendo los pasos que nos indica el proceso de instalación. Después de instalar el sistema hay unas cuantas cosillas que aún no funcionan: - Wifi. - Lector de tarjetas. - La tarjerta de vídeo no tiene el mejor rendimiento ni la mejor resolución. - Tampoco funciona la salida VGA. - No monta correctamente los dispositivos usb. Para solucionar estos problemas vayamos por partes (como diría Jack el destripador). 1º) Para solucionar el problema de la wifi, lector de tarjetas y dispositivos usb seguí la siguiente guía: http://foro.airiskira.com/trucos-guias-y-manuales-f11/conseguir-que-funcione-todo-en-ubuntu-t292.htm Una vez que descargas el kernel para el airis kira: http://service.one.de/download/index.php?&direction=0&order=&directory=NOTEBOOKS/ONE_A1xx/Linux%20Drivers/Binary-driver/Kernel 1) Metemos el archivo bzImage en /boot 2) Descomprimimos el archivo modules.tgz en /lib/modules 3) Editamos el archivo /boot/grub/menu.lst y añadimos las siguientes líneas:
title Kernel para el Kira
root (hd0,0)
kernel /boot/bzImage root=/dev/hdc1 ro locale=es_ES lang=es
4) Editamos el archivo /etc/modules y añadimos la siguientes líneas:
r8187
vcrdrm
vmsc
2º) Instalar el driver de la tarjeta gráfica. Lo descargamos de la siguiente página: http://linux.via.com.tw/support/downloadFiles.action , elegimos Ubuntu 8.04 LST y CX700M/VX700 y descargarmos la versión unichrome.83.40692 (2.8M). Para instalarlo es muy sencillo, ejecutamos como super usuario:
$ ./vinstall
Finalmente, sustituimos el archivo /etc/X11/xorg.conf por este otro:
# xorg.conf (X.Org X Window System server configuration file)
#
# This file was generated by failsafeDexconf, using
# values from the debconf database and some overrides to use vesa mode.
#
# You should use dexconf or another such tool for creating a "real" xorg.conf
# For example:
# sudo dpkg-reconfigure -phigh xserver-xorg
Section "InputDevice"
  Identifier  "Generic Keyboard"
  Driver      "kbd"
  Option      "XkbRules"  "xorg"
  Option      "XkbModel"  "pc105"
  Option      "XkbLayout"  "es"
EndSection
Section "InputDevice"
Identifier "Configured Mouse"
Driver "mouse"
EndSection

Section "InputDevice"
Identifier "Synaptics Touchpad"
Driver "synaptics"
Option "SendCoreEvents" "true"
Option "Device" "/dev/psaux"
Option "Protocol" "auto-dev"
Option "HorizEdgeScroll" "0"
EndSection

Section "Device"
#Identifier "Configured Video Device"
#Driver "vesa"
Identifier "device1"
Driver "via"
#Option "DPMS"
#Option "ActiveDevice" "DFP,CRT"
#Option "PanelID" "8"
#Option "LCDPort" "DFP_HIGHLOW"
#Option "NoDDCValue"
#The Option we were searching for:
Option "DisplayHardwareLayout" "TTLLCD"
Option "FnHotkey" "LCD, CRT"
#Option "DisplayHardwareDevice" "LCD"
Option "ActiveDevice" "LCD"
#Option "ForceLCD"
EndSection

Section "Monitor"
Identifier "monitor1"
VendorName "Generic"
ModelName "640x480 @ 60 Hz"
HorizSync 30.0 - 72.0
VertRefresh 50.0 - 75.0

Modeline "800x480" 29.58 800 816 896 992 480 481 484 497

# 800x480 @ 60.002 Hz (GTF) hsync: 29.82 kHz; pclk: 29.58 MHz
Modeline "800x480@60gtf" 29.58 800 816 896 992 480 481 484 497 -HSync +Vsync

# 800x480 59.48 Hz (CVT) hsync: 29.74 kHz; pclk: 29.50 MHz
Modeline "800x480@60cvt" 29.50 800 824 896 992 480 483 493 500 -hsync +vsync

# TV fullscreen mode or DVD fullscreen output.
# 768x576 @ 79 Hz, 50 kHz hsync
ModeLine "768x576" 50.00 768 832 846 1000 576 590 595 630

# 768x576 @ 100 Hz, 61.6 kHz hsync
ModeLine "768x576" 63.07 768 800 960 1024 576 578 590 616
EndSection

Section "Screen"
Identifier "Default Screen"
Device "Configured Video Device"
Monitor "Configured Monitor"
SubSection "Display"
Modes "1024x768" "800x600"
EndSubSection
EndSection

Section "ServerLayout"
Identifier "Default Layout"
Screen "Default Screen"
InputDevice "Synaptics Touchpad"
EndSection
Con esto tenemos solucionado el problema de la tarjeta gráfica y la salida VGA. Me imagino que tras seguir estos pasos, la resolución por defecto será 800x480 que es, desde mi punto de vista, con la que mejor se ve la pantalla. Aún así podrás elegir de forma manual desde gnome aquella que más te guste. El único problema que no he conseguido solucionar todavía es que la luz de la wifi luce constantemente, a pesar de que se desactive. Si consigo solucionarlo editaré la receta para compartir la solución.

Crear sistemas de ficheros XFS

— [ edit | raw ] migrated from node/906

Todos estamos acostumbrados a utilizar en nuestros sistemas GNU particiones Extended3 (ext3). Sin embargo existen otras muchas alternativas. En esta receta voy a explicar cómo usar una muy interesante: XFS.

Prácticas de programación infames (1ª parte)

— [ edit | raw ]
migrated from node/943
Como supongo que sabéis, los pobres desgraciados que osan utilizar "continue" van al infierno y arden como teas por toda la eternidad. El castigo por usar "goto" no es muy distinto:

Auctex para torpes

— [ edit | raw ] migrated from node/942

Modo PDF-Tex

Bindings Python de librerías C++ con Boost.Python

— [ edit | raw ] migrated from node/939

Ejemplos mínimos para empezar con Boost.Python, probablemente la mejor libreŕia de generación de bindings Python para C++.