Samba en CentOS: “NT_STATUS_ACCESS_DENIED”

Pasé un rato sufriendo con esto, Samba parecía correr bien, pero no podía acceder al contenido de una carpeta compartida:

drmad@dorothy:~$ smbclient //appserver/software
Enter drmad's password:
Domain=[FLISOL] OS=[Unix] Server=[Samba 3.5.10-115.el6_2]
smb: \> ls
NT_STATUS_ACCESS_DENIED listing \*

A parte de corregir el iptables para que deje pasar el Samba (en mi caso, simplemente hice un iptables -F), me había olvidado de SELinux.

Así que el comando:

chcon -R -t samba_share_t /ruta/a/la/carpeta/

hizo la magia :) instruyendo al SELinux que esa carpeta será una compartida de Samba.

 

 

Almuerzo IcaPlanetario, algo así

Después de 2 semanas de intenso planeamiento, Gustavo, Jose (quien aún no es IcaPlanetario) y yo logramos almorzar sin terremotos en Plaza del Sol. Fue una agradable tertulia de tecnología y vida entre KFCs, y algunos movimientos telúricos causados por algún camión  :-)

¿Saben que? Vamos a organizar almuerzos más seguidos. Sería ideal que un día nos reunamos todos en la vida real.

Wallpaper de la Tierra, animada

Hace buen tiempo que tengo en mi papel tapiz una vista del planeta tierra, hecha en Blender, que me gusta. Pero conversando con JJ, me di cuenta que estaba un poco estático. Aun no estoy como para programar en OpenGL, así que renderizé 720 cuadros de animación de la tierra girando :-D

El “sol” le da la vuelta a la tierra cada 24 frames, así que tengo 30 días con sus noches distintas. Cada hora, con un cron, ejecuto este script:

#!/bin/bash
# Cambia el papel tapiz según la hora
# por drmad

DIA=`date +%j`
HORA=`date +%k`
OFS=$(( (($HORA - 5) % 24)  + ( ($DIA % 30) * 24 )  ))
OFS=`printf %04d $OFS`

if [ -z "$DBUS_SESSION_BUS_ADDRESS" ] ; then
    # Esto captura la sesión de dbus, para ejecutarlo desde el cron
    export DBUS_SESSION_BUS_ADDRESS=`cat /tmp/dbus-drmad`
else
    echo $DBUS_SESSION_BUS_ADDRESS > /tmp/dbus-drmad
fi

gconftool-2 --type string --set  /desktop/gnome/background/picture_filename ~/Proyectos/earth_wallpaper/pics/$OFS.png

Le resto 5 a la hora, para que mas o menos caiga la iluminación de la tierra con las imágenes de la tierra. El script lo ejecuto una vez al iniciar mi sesión para que coloque el tapiz, y guarde la sesión de dbus, que luego se usa cuando llamo el script via cron.

El resultado:

A las 8 am:

A las 11am:

A las 5pm:

A las 6pm:

Y a las 7:30pm

Justo ahora se ve el océano pacífico en el wallpaper :) El 3er monitor muestra un programa que hice en Gambas llamado MultiMon. Aun está recontra incompleto, cuando esté en un beta haré un post al respecto :) Mostrará un montón de info, ahorita solo muestra la fecha, y un slideshow.

Cómo no iterar a través de los elementos de un formulario en Internet Explorer

Traducción al español de un post de  Douglas T. Muth sobre este problemita que me estaba haciendo zapatear:

Así que, me encontré iterando a través de los elementos de un formulario hoy. Este código trabajó perfecto en FireFox:

for (key in form.elements) {
   var element = form.elements[key];
   ...
}

Pensaste que eso trabajaría en MSIE también, ¿no? Nooooo… intentar iterar a través de los elementos de esta forma en MSIE hará que obtenga métodos, configuración del lenguaje, y todo tipo de otras cosas que normalmente no se encuentran en el array de elementos. En vez de eso, tuve que hacer esto:

for (var i=0; i < form.elements.length; i++) {
   var element = form.elements[i];
   ...
}

Y por extraño que parezca, form.elements.length retorna solo el número de elementos del formulario, y no los métodos o cualquier otra cosa que haya aparecido antes.

Oh bueno, al menos pude acabar la tarea que se supone debía completar hoy en el trabajo. Eso es la parte importante.

20 años programando

Por estar migrando a Paperclip (Ahora es Paperclip X10 SRL), casi me olvido de este detalle. Hace 20 años, recibí mi primera constancia de programador :)

Programador en Logo Avanzado. Wow. Recuerdo mi primera clase, cuando me senté frente a una IBM PC 5150 de monitor verde, que solo había visto en las revistas que mi padre coleccionaba. Quedé fascinado. Y la fascinación continua hoy, y seguirá en mí hasta el últimos de mis días. Cuando muera, quiero que incineren a Dorothy conmigo :)

Más tarde iré a buscar a mi profesora de Logo :)

Hackeando Jolicloud

Después de poco menos de año y medio con Hellboy, me di cuenta que casi no ejecutaba aplicaciones ahí. Lo que más hago es navegar por la Interweb, y conectarme a Dorothy para trabajar ahí. Entonces pensé que tener todo un Ubuntu 10.10 instalado era demasiado. Quería un Linux que  cargara “al toque”, y que sea liviano, sin tantos programas cargados, que no uso.

Ya había probado el Ubuntu Netbook Edition. Pero cuando lo probé, estaba esperando un Linux más completo… quizás por eso no quise volverlo a probar. Por ahí leí que Kubuntu era amigable a las netbooks. Lo instalé, y lo borré a la media hora, muy bloated.

Y llegué a Jolicloud.

Jolicloud es un nuevo sistema operativo “basado en la nube”, donde las aplicaciones son páginas web, como Google Docs y Facebook. En versiones anteriores, estuvo basado en Mozilla Prism, ahora usa un fork de Google Chromiun, llamado “Nickel” (y esto les suena un tanto irónico a los fans de Chrome OS, pero Jolicloud tiene una visible delantera en esta carrera).

Lo primero que me llamó la atención, era que el desktop está hecho con HTML5. Incluso puedes instalar la app en tu Chrome y darle una probada antes de instalarlo. Hace mucho tiempo que venía buscando cómo hacer eso, así que me animé a instalarlo.

La versión 1.1 está basada en Ubuntu Netbook Edition 10.04 (lo que es muy conveniente, ya que es un entorno familiar y tiene muchas aplicaciones en sus repos) e inicia muy rápido (con una splash screen animado guapo ;) )

Para el login usa SLiM, un login manager muy sencillo, ligero, y bastante configurable. Una vez iniciada la sesión (y registrado en su página web), aparece su dashboard:

Puedes sincronizar tu desktop con otra computadora, y ambos tendrá las mismas aplicaciones (incluso las tradicionales, como pidgin), así como otras aplicaciones.

Googleando un poco, encontré que el script /usr/bin/jolicloud-launcher es el responsable de lanzar el dashboard. En la línea 79 está esto:

my $OFFLINE_URL = "file:///usr/share/jolicloud-daemon/htdocs/index.html";

Que define la URL que debe de cargar cuando la PC está sin conexión a Internet (que en mi caso, es siempre, ya que la conexión a la red se da mucho después que todo el sistema ha iniciado). Entonces modifiqué este ficherito para que esperara la conexión a Internet, y redireccionara a una página web mia:

<!DOCTYPE html>
<html lang="en">
<head>
<title>Loading Jolicloud...</title>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="styles.css" />
<script>

URL='http://paris/pwp/';

function redirect() {
   setTimeout ( check, 1000 );
}

function check () {
   req = new XMLHttpRequest();
   req.open  ( 'GET', URL + "ping.php", true );

   req.onreadystatechange  = function() {
      if ( this.readyState == 4 ) {
         if ( this.responseText == 'OK!' ) {
            window.location = URL;
         }
      }
   }

   req.send( null );
   setTimeout ( check, 2000 );
}

</script>
</head>
<body onload="redirect();">

<div class="loading">Esperando la conexión con Paris...<br />
<br />
<img src="ajax-loader.gif" /></a>
</body>
</html>

Esta nueva web espera a que pueda recabar el contenido del script ping.php en mi servidor (“Paris”). Cuando esto sucede, quiere decir que está conectado a Internet (y en mi caso, a la intranet de Paperclip via VPN). Ya que esto sólo funcionará en Chrome, usa directamente el XMLHttpRequest

El script ping.php es sencillo:

<?php
    // Esta página no debe ser guardada en cache
    header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
    header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header("Cache-Control: no-store, no-cache, must-revalidate");
    header("Cache-Control: post-check=0, pre-check=0", false);
    header("Pragma: no-cache");

    header ( 'Access-Control-Allow-Origin: *' );

    echo "OK!";
?>

Simplemente imprime un “OK!”, y evita que sea grabado en la caché de los servidores, proxies, y navegador web . El Access-Control-Allow-Origin es para alterar la política del mismo origen, y permitir que el script grabado en Hellboy se conecte vía AJAX a un script en otro lado.

Una vez conectado, se muestra mi desktop HTML5. Es muy fácil programar en Javascript para un único navegador… y el Chrome soporta bastantes cositas del CSS3, como background-size, para hacer que la imagen de fondo cambie de tamaño según el tamaño del contenedor. Así que ahora éste es el escritorio de Hellboy, :

A la izquierda están mis enlaces más usados, que son simples tags <a>. Tendría que hacer una aplicación para Chrome para poder ejecutar programas y otras apps. Eso será después. A la derecha pienso mostrar algún tipo de información, aun no sé qué. Todo está dibujado usando Javascript, el HTML solo tiene un <script>init();</script>, que inicia todo.

Le he puesto también un pequeño selector para el wallpaper:

Un paseo ilegal por flickr me dio algunos de los wallpapers :) Ha sido un lindo ejercicio de Javascript, CSS3 y DOM. Aun falta algunas cosas por implementar, pero ahora lo que quiero hacer es compilar el nickel en Ubuntu, y usarlo para el wallpaper de Dorothy. Eso si será alucinante :)