No Somos Libres

October 1, 2007

Nuevos juguetitos: tarjeta pcmcia y antena

Filed under: Wifi, Gadgets — Adrián @ 6:15 pm

Esta semana mi novia se ha adelantado a mi cumpleaños (¡gracias mi vida!) y me ha regalado una tarjeta Proxim ORiNOCO 8470-WD 11 b/g PC Card Gold - WORLD. Lleva chipset Atheros, por lo que es compatible con linux y además se puede poner en modo promiscuo…

Tarjeta PCMCIA y antena

Pero para completar, me ha regalado también una antena Hypergain Omnidireccional 5dbi con base magnética (con. MC) que me aporta cierta ganancia a la hora de detectar redes inalámbricas. Habrá que probar las herramientas… ;)

Tarjeta PCMCIA y antena

September 28, 2007

Plantillas para webs en PHP

Filed under: php — Adrián @ 6:48 pm

He estado trabajando en unas plantillas php para webs personales del personal en el trabajo. No es que sean muchas líneas de código ni una cosa muy complicada, pero me parece que han quedado bastante bien y quería comentarlo aquí, y mostrar parte del código que he utilizado. Se trata de unas plantillas que generan la web en función de los ficheros html, php o txt que se encuentren dentro de la carpeta de contenidos definida por el usuario.

Una de las partes que me han parecido más interesantes de programar ha sido la pequeña caché de los directorios de contenidos. El pequeño código es el siguiente:

Code (php)
  1. $info = array();
  2. if (!isset($_SESSION[’subdirs’])){
  3.     $_SESSION[’subdirs’] = array();
  4.     $_SESSION[’subdirs’][$content_dir] = 0;
  5. }
  6. foreach ($_SESSION[’subdirs’] as $key => $value){
  7.     $info = stat($key);
  8.     if ($_SESSION[’subdirs’][$key] != $info[’mtime’]){
  9.         $_SESSION[’subdirs’][$key] = $info[’mtime’];
  10.         $_SESSION[’menu’] = menu_walk($content_dir);
  11.        //echo "ACTUALIZANDO CACHE…<br>";
  12.     }
  13. }

En la variable de sesión subdirs se almacenan todos los directorios por debajo de $content_dir, incluido él mismo. La clave del array es el nombre del subdirectorio y el valor es la fecha de última modificación. Así cada vez que se recarga la página se realiza un stat sobre cada elemento del array y se comprueba si ha sido modificado, y si lo ha sido, se vuelve a indexar el directorio de contenidos y a generar nuevamente las entradas de menú. Para cada tipo de fichero se realiza un tratamiento distinto del contenido, un include si es php, un echo si es html y un formateo por párrafos si es texto plano. El código que realiza esta parte no tiene demasiado interés.

Sí que vamos a ver el código de la función menu_walk () que tiene que ver con la caché en tanto que actualiza el sistema de ficheros virtual ($_SESSION[’subdirs’]) si el cambio que se ha producido en el contenido ha sido la creación de un nuevo directorio:

Code (php)
  1.  
  2. function menu_walk ($directorio)
  3. {
  4.     if (is_dir($directorio)){
  5.         if ($gestor = opendir($directorio)) {
  6.             /* El menú se compone de un array de pares (arrays) cuya primera componente es el nombre del directorio o fichero y su segundO
  7.              * componente el enlace
  8.              * al archivo. En el caso de que se trate de un directorio, la segunda componente es un array con los archivos de ese subdirectorio.
  9.              */
  10.             $menu = array();
  11.             $cont = 1;
  12.            //Iteramos en el directorio hasta haberlo leído todo.
  13.             while (false !== ($archivo = readdir($gestor))) {
  14.                 if (strpos($archivo,"_") === 0){
  15.                     //El archivo no debe ser mostrado y por tanto no generamos las entradas de menú.
  16.                 }else{
  17.                     //La funcion de php is_dir está rota y requiere el directorio padre para detectar si un archivo es directorio
  18.                     $d = $directorio."/".$archivo;
  19.                     if (is_dir($d) && ($archivo != "..") && ($archivo != ".")){
  20.                         $menu[$cont] = array("<a href="http://www.nosomoslibres.com/#">".ucwords(strtolower($archivo))."</a>",menu_walk($d));
  21.                         /*
  22.                          * Actualizo el "sistema de ficheros" con el nuevo subdirectorio creado, de tal forma que se pueda actualizar la caché
  23.                          * sin tener que recorrer de nuevo el directorio. De esta forma se puede realizar stat() sobre todos los subdirectorios
  24.                          * y comprobar si han sido actualizados desde la última vez.
  25.                          */
  26.                         $info = stat($directorio."/".$archivo);
  27.                         //Comrpobamos que el directorio no había sido añadido anteriormente a la caché.
  28.                         if (!in_array($directorio."/".$archivo,$_SESSION[’subdirs’])){
  29.                                 $_SESSION[’subdirs’][$directorio."/".$archivo] = $info[’mtime’];
  30.                         }
  31.                     }else{
  32.                         //comprobamos que se trata de un archivo con extensión permitida (html, htm, txt o php)
  33.                         $partes_ruta = pathinfo($archivo);
  34.                         $extension = $partes_ruta[’extension’];
  35.                         $basename = $partes_ruta[’basename’];
  36.                         if (strtolower($extension) == "html" || strtolower($extension) == "htm" || strtolower($extension) == "txt" || strtolower($extension) == "php") {
  37.                             $menu[$cont] = array(basename($basename,".".$extension),"<a href="http://www.nosomoslibres.com/contenedor.php?display=%22.$directorio.%22/%22.$archivo.%22">".ucwords(strtolower(basename($basename,".".$extension)))."</a>");
  38.                         }
  39.                     }
  40.                 }
  41.                 $cont++;
  42.             }
  43.             closedir($gestor);
  44.             return $menu;
  45.         }
  46.     }else{
  47.         echo "El parámetro especificado no es un directorio";
  48.         return $menu;
  49.     }
  50. }

El código no queda demasiado legible debido a los comentarios y las frases demasiado extensas, pero si lo copiáis a un editor de texto está tabulado y se entiende mejor. menu_walk() actualiza el array menú y el “sistema de ficheros” para que la caché siga funcionando. Existe una función menu_print() que es la encargada de mostrar el menú formateado como es debido. El fichero contenedor.php es el encargado de leer el fichero a mostrar y darle el formato apropiado, como he comentado más arriba. En fin, eso es todo lo interesante. Si alguien quiere ver el código completo o utilizarlo para él, que me lo pida y se lo envío encantado.

August 4, 2007

¿Y si los protagonistas de Héroes fueran Informáticos?

Filed under: Series, Informática — Adrián @ 11:17 pm

heroespc1fs6.jpgHace ya bastante tiempo, localicé por la red -no recheroespc2df2.jpguerdo donde-, este par de pósters que explican qué poderes tendrían los protagonistas de la serie Héroes si fueran informáticos. Esta serie no ha tenido mucho calado en España, pese a que la primera temporada cumple expectativas, en parte imagino porque se ha emitido en Telemadrid, en lugar de en alguna cadena  de difusión nacional. Para los que hayáis seguido la serie, y los que seáis un poco geeks, disfrutaréis de estas imágenes.

August 1, 2007

Cómo montar un sencillo servidor de Subversion

Filed under: Informática, GNU/Linux — Adrián @ 1:58 pm

Subversion es un Sistema de Control de Versiones, similar a CVS, pero que incluye muchas características que lo hacen, desde mi punto de vista, más útil que CVS. Para más información sobre las diferencias y las similitudes entre estos dos sistemas mirad en los links que os he dejado arriba.

Subversion tiene paquete en las distribuciones basadas en Debian, así que si sois los afortunados usuarios de una de estas, tan sólo tendréis que teclear en vuestro terminal (o buscar en sinaptic):

aptitude install subversion

Si no, lo bajáis de la página oficial y seguimos. Después creáis la carpeta (ya sabéis, mkdir …) que queréis que contenga los repositorios de subversion. Yo he elegido /var/svn. Después tendréis que usar el comando svnadmin (como root) para crear el repositorio que queráis. Por ejemplo:

montseny:/# cd /var/svn/
montseny:/var/svn# svnadmin create myrepo

Con esto tenemos creado el repositorio myrepo dentro de /var/svn, pero aún nos queda configurar el acceso al mismo y configurar subversion para que sirva ese repositorio al exterior. Los ficheros de configuración están dentro de la carpeta myrepo/conf. El fichero authz puede dejarse tal como viene, todo comentado, siempre que todos los usuarios vayan a tener acceso total a todos los repositorios. Si se quiere especificar quién tendrá acceso a qué repositorio y con qué permisos, o incluso crear grupos de usuarios, ese es vuestro fichero. Vienen ejemplos bastante sencillos así que no haremos más hincapié en él. En el fichero passwd debemos poner los usuarios que esperamos manejen el repositorio y trabajen en él:

[users]
adrian = mypassword
billy_puertas = supassword

Nos queda svnserve.conf, donde debemos descomentar las siguientes lineas, y configurarlas según nuestra preferencia. Yo he especificado que los usuarios autenticados tienen permisos de escritura en los repositorios y los no autenticados no pueden hacer nada:

[general]
anon-access = none
auth-access = write
password-db = passwd

La directiva password-db indica a subversion dónde autenticar a los usuarios. Existen muchas variedades, pero puesto que aquí se trata de montar un repositorio sencillo, para uso “doméstico”, dejaremos passwd, que es el fichero donde hemos añadido nuestros usuarios. Con esto tenemos perfectamente configurado el servidor, sólo nos queda lanzar el demonio que lo sirva a través de internet, con la siguiente linea:

montseny:~# svnserve -d –listen-host xxx.xx.xx.xxx -r /var/svn

El parámetro -d indica que se comportará como un demonio y correrá en background, listen-host es la ip del servidor y -r el directorio que contiene los repositorios. Aseguraos de abrir el puerto de subversion si tenéis firewall, que por defecto es el 3690 udp y tcp. Ahora sí que sí, tenéis funcionando subversion. Esto se puede complicar mucho, hasta el punto de montar clones de sourceforge como gforge, que usan subversion por debajo pero con la configuración almacenada en base de datos. Fue tan complicado montar gforge que creo que me llevaría un libro escribir un tutorial, así que de momento no creo que lo haga.

Un ejemplo de gforge: http://gforge.org
El clásico sourceforge: http://sourceforge.net

July 20, 2007

La partida perfecta de Damas acaba en tablas

Filed under: Noticias, Informática, General — Adrián @ 1:28 pm

Es algo que ya se sospechaba, desde que Jonathan Schaeffer inició sus trabajos sobre este entretenido juego de tablero. Fue él quien en los 90 creó Chinook, el primer programa que jugaba a las damas a nivel de torneo, y que por cierto derrotó al campeón del mundo. Durante 18 años se han explorado todas las posibilidades del juego, en su versión de 16 piezas en tablero de 8×8. Resulta cuanto menos curioso que a este efecto se dedicaran 200 ordenadores a tiempo completo (sustituidos por 50 más potentes) durante todo ese tiempo.
El resultado del estudio revela que un ordenador que empieza a jugar con las negras, y con todos los datos recopilados durante estos 18 años, no perderá nunca, e incluso ganará, si las blancas comenten un error.
Pero lo interesante del estudio, y lo que me ha llevado a escribir esta entrada es que si ambos jugadores (o máquinas) jugasen “La partida perfecta”, es decir, no cometieran ningún error, el juego acabaría invariablemente en tablas. Es curioso.

Fuente: microsiervos

Y hasta la semana que viene. Servidor se va unos días a londres a descansar.

July 19, 2007

El Póquer, España y Linux

Filed under: Póquer, Noticias, GNU/Linux — Adrián @ 5:21 pm

logo-wsop.gifCoincidiendo con la noticia de que el psicólogo Jerry Yang se ha coronado como ganador de las WSOP 2007, me gustaría hacer algunas reflexiones sobre este mundillo como aficionado que soy. En primer lugar, resulta sorprendente que la prensa española se haya hecho eco de la noticia, siendo el póquer un juego minoritario y que nunca había tenido espacio en los periódicos nacionales. Más raro resulta que publiquen la nota de prensa sobre Jerry Yang cuando no se publicó nada sobre la victoria del español Carlos Mortensen en el WPT. Esta noticia en la prensa, llega simultáneamente a el anuncio de Card Player Magazine y su próxima aparición en España. También se están retransmitiendo torneos, como el EPT, en algunas cadenas españolas (Antena3.nova). ¿Será que el póquer se está abriendo un hueco en nuestro país? Es posible que así sea, y ojalá, porque la gente tiene una concepción bastante malograda del jugador de póquer. Lo menos que se puede decir es que esa idea preconcebida es antigua, ya que actualmente la mayoría de jugadores profesionales resultan ser gente con estudios y buenos trabajos, y no malaspintas y truhanes como hace 20 años.

Revista Card PlayerLa otra cara de la popularización del póquer pasa por las distintas plataformas informáticas. Actualmente no existe ningún cliente para las salas online de póquer que corra nativamente en Linux. El crecimiento que experimenta el sistema del pingüino aún no se ha dejado notar en el mundillo del póquer online. Quizá el mayor impedimento es que la comunidad no puede desarrollar un cliente para una sala de póquer concreto debido a que las especificaciones del servidor no están disponibles; y por supuesto las salas no se han preocupado por desarrollar una alternativa. Gracias a los chicos de W.I.N.E. algunos clientes como el de PokerStars funcionan “bien” en Linux y nos permiten a los usuarios exclusivos de este sistema operativo seguir disfrutando de nuestro hobby, eso sí, con ciertas mermas. Hay que recordar que el cliente no es nativo y por tanto sufre algunos cuelges de vez en cuando, y por supuesto aplicaciones de ayuda como Poker Office o Poker Tracker no corren en el emulador. Si alguna sala de póquer online (¿Titán? ¿EuroSuperPoker?) estuviera interesada en desarrollar un cliente para GNU/Linux, aquí encontrarían a un programador dispuesto, y seguro que no sería el único en participar en el proyecto.

Jerry Yang obtiene el brazalete de las WSOP

July 11, 2007

Más Juegos en Linux

Filed under: Videojuegos, Informática, GNU/Linux — Adrián @ 1:05 pm

Hace no demasiado escribí varias entradas sobre juegos en linux, con la finalidad de dar a conocer a la gente videojuegos para este sistema operativo que, aunque lo parezca, no está tan dejado de la mano de Dios en este campo. Pues bien, hoy blogeando un poco he localizado este artículo sobre videojuegos, que amplía la sección y además me ha permitido probar el S.C.O.U.R.G.E, un juego de rol con la peculiar característica de que las batallas pueden realizarse por turnos o en tiempo real. Es un juego interesante al que dedicaré más tiempo si consigo sacarlo de alguna parte.
Espero que disfrutéis jugando también a estos juegos.

Otro concurso de bloggers y para bloggers

Filed under: Gadgets, General — Adrián @ 12:56 pm

Después del concurso realizado por JP-Geek en el que sorteaba un iPod nano, y que ganó un amigo mío muy geek aficionado a los Gadgets, CrackVan ha decidido realizar uno en su blog sobre Linux. El blog de CrackVan es un lugar de consulta habitual para mí, ya que me parece muy útil en ocasiones y curioso cuanto menos en el resto. Os recomiendo que os paséis. El concurso está patrocinado por SinCables, tienda especializada en Wireless, Wifi USB y NetGear, y dona lo siguiente como premio:

  • Adaptador USB WiFi X USB SMA 11Wimacom con Chipset ZYDAS + Antena 5dBi, es compatible con Linux con Kernel 2.6.16 o superior, con Mac OSX y otros sistemas inferiores como Windows.
  • 1xCD Ubuntu Feisty 7.04 x86, 1xCD Kubuntu Feisty 7.04 x86, 1xCD Edubuntu Feisty 7.04 x86 (estuche y serigrafia original)
  • Antena planar 11′5dBi + 3 metros cable SMA-RP (28º x 25º)

Como habréis adivinado he decidido participar en el sorteo, cuyas bases podéis consultar en este post del blog de CrackVan. Deseadme suerte y animaos a participar.

June 26, 2007

Nuevo modelo de ratón: Vertical

Filed under: Gadgets, Noticias — Adrián @ 10:55 am

Un desarrollo más de la universidad de Berkeley estará pronto a la venta. Se trata de un ratón que se mantiene vertical sobre la mesa, permitiendo mantener a la mano una postura más natural y -según dicen-, reduciendo la cantidad de estrés que sufre la mano.  Lo que sí parece interesante es que la verticalidad incluye más botones, hasta cinco, ya que la posición de la mano te permite alcanzarlos todos cómodamente, por lo que sería más agradable su utilización.

vertical3.PNG

Su precio es de 80 euros, quizá un poco caro aún, pero vale la pena considerarlo.

vm3_buttons.jpg

June 24, 2007

Microsoft afirma que Ubuntu es perfecto

Filed under: Microsoft, Noticias, GNU/Linux — Adrián @ 6:24 pm

Sí, como suena. Yo tampoco lo creía, pero durante un periodo breve en el Windows Marketplace, se promocionaba el Sistema Operativo de Cannonical. Actualmente no aparece, pero aún se puede ver en la caché de google. No creo que Cannonical esté en trámites de realizar un pacto similar al de Novell, principalmente por las declaraciones que habían realizado varios de los encargados del proyecto.

Sea como sea, es altamente sospechoso este comportamiento de los chicos de Redmond que, seguramente, no traman nada bueno. ¿FUD? Quizá hacernos creer que no le tienen miedo a la competencia, o que pensemos que Canonnical tiene algún tipo de conversación por debajo de la mesa con Microsoft (qué tufillo al escenario político español). Que cada uno saque sus conclusiones.

Next Page »

Powered by WordPress