Hoy con Ubuntu 12.04 liberado ya puedo oficialmente dar mi review sobre esta nueva versión; como ya les habia comentado, llevo usando esta versión desde sus inicios (alpha 2), puedo decir que ha evolucionado mucho desde la versión 11.10, y claro no creo que les haga falta que lo diga, pero hay muchos cambios.
El primer cambio interesante es la velocidad de inicio del sistema, Ubuntu 12.04 inicia en 10 seg (al menos en mi laptop), cosa que no sucede en Windows, ya que inicia en al menos 30 seg.
Ubuntu 12.04 trae consigo la versión 5.10 de Unity, esto contempla una personalización superior a la versión 4 que estaba presente en ubuntu 11.10, desafortunadamante, la gran mayoría de temas están siendo diseñados para Gnome Shell, dejando a Unity de lado.
Unity es estable, después de 5 versiones, compiz trabaja de una manera muy grata, lo cual merece un aplauso; sin embargo los de Ubuntu se centraron tanto en Unity que han dejado de lado los multiples bugs que las versiones alpha y beta presentaban justo al inicio de ubuntu. Pero regresando al tema de estabilidad, algo que me ha agradado demasiado son las listas rápidas o quicklist en ingles; estas estan desde que aparecio Unity en la versión 11.04, sin embargo lograr manejarlas a nuestro gusto era tedioso y bastante complicado, cosa que ahora es muy simple, ya que basta con tener MyUnity o Ubuntu tweak para lograr agregar listas rápidas a nuestras aplicaciones en el Dock.
Parece ser que el error se da cada que Ubuntu busca actualizaciones en segundo plano, y llega a mostrar hasta 3 veces el mismo error de una sola sentada; he tratado de buscar a que se deba, pero apt-get no muestra errores, y la ventana de error que muestra ubuntu no es de ayuda, espero esto se resuelva con futuras actualizaciones.
El nuevo login ya cambia automaticamente a nuestro fondo de escritorio actual, lo que permite una entrada al sistema muy poco notoria y agradable a la vista, hubiera sido aun mejor si el bloqueo de pantalla se hacia con LightDM, pero según parece esto se aplicara para la versión 12.10.

En recientes días escribí un post sobre cómo hacer nuestra navegación más segura usando Opera (en inglés). El principio de operación es simple: deshabilitar JavaScript por defecto excepto para aquellos sitio en los que plenamente confío.
No fue capricho. En alguna ocasión mordí un anzuelo y, sin intención, mi PC participó en un ataque masivo contra Freenode. ¿Cómo ocurrió? Visité una página que tenía un código malicioso de JavaScript, el cual se ejecutó automáticamente (tal vez gracias a onMouseOver o a onLoad) y mandó spam a dicha red. Me bloquearon varias horas y tuve que contactar a los administradores para explicar el caso. Ellos lidian con este tipo de cosas todo el tiempo (¡señal!).

No es el único tipo de problema de seguridad de JavaScript. Tampoco es el único ataque facilitado por JavaScript: como referencia les dejo XSS, X/CSRF, Clickjacking, Revestimiento de interfaz (UI redressing), fuga de datos personales, etc. No que requieran de este lenguaje, sino que con él son mucho más fáciles de implementar sin que el navegador pueda detectarlos.
Busqué formas de evitar llegar a esa conclusión; después de todo, la mayoría de los sitios Web usan JavaScript. ¿Es posible que el navegador sólo ejecute código bien intencionado? No. Una computadora es tonta. No puede distinguir código malicioso. Incluso existe una broma sobre el tema. ¿Cómo le hacen los antivirus? Se basan en firmas y bases de datos alimentadas por humanos y aún así a veces arrojan falsos positivos. Peor aún, también arrojan falsos negativos.
Sin embargo yo necesito una forma de confiar en mi PC. En el momento en que pierde mi confianza, no sé si está interceptando lo que tecleo o lo que transmito, o si las páginas que me muestra son ilegítimas, o si los programas está alterados de otro modo. No sé si mis passwords y datos de tarjetas de crédito están siendo transmitidos por la red a algún cibercriminal. Y no, no estoy exagerando. Desde el momento en que pierde mi confianza tengo que aplicarle un análisis forense, aunque, por lo general, sale más rápido reinstalar.

Mikko Hyppönen presenta en TED un listado de datos de tarjetas de crédito, como los roba un cíbercriminal.
Lo mismo ocurre con el navegador. Yo confío en que el navegador me permite mantener el control mientras navego. Si no confío en el navegador no puedo confiar en los datos que se envían o se reciben, en el contenido de los sitios que visito o si realmente estoy yendo a los sitios que creo. Si mi navegador está comprometido ni siquiera puedo confiar en el cifrado SSL, por lo que ni con HTTPS puedo asegurar la confidencialidad o integridad de mis transacciones.
No por nada existe NoScript para FireFox.
No porque sea la opción más popular significa que sea la mejor o la más segura. Me recuerda a los llamados derechos de administrador. Cuando comencé a usar a Linux, en tiempos de Windows 2000 y cuando 98 era todavía lo más popular, los linuxeros me decían que nunca usara mi PC como root (”root” el usuario privilegiado en Linux, similar al “Administrator”). Yo pensaba: pero entonces no puedo instalar programas, no puedo configurar hardware, mi CD-RW no puede pedir todo el CPU y es propenso a fallas de escritura, no puedo ‘tunear’ mi sistema igual, etc. Todos esos “problemas” eran precisamente los motivos para no usar root por defecto. ¡Es bueno que no tan fácilmente se instale un programa o hardware! ¡Es bueno que no cualquier programa se adueñe del CPU! ¡Es bueno que no tan fácil se puedan hacer ajustes al sistema!
No porque sea la opción más popular significa que sea la mejor o la más segura. Windows 9x era lo más popular en ese entonces y 2000, intentando traerse el núcleo de NT, ahora multiusuario, apenas comenzaba a tomar auge. Muchos programas se rompieron por ese cambio de paradigma.
Ese pequeño cambio de pensar tenía muchísimas ventajas. En Linux y en Mac es rarísimo ver un virus. No que no los haya, pero no son tan fáciles de hacer y tenemos más líneas de defensa. Cada usuario tiene su espacio bien segmentado. Un usuario no puede ver el contenido de otro usuario. Un usuario no puede dañar el sistema, sólo su propia cuenta. Si un virus se inyecta en el sistema es porque explotó una vulnerabilidad y se reconoce como tal.
Pero seguía existiendo la necesidad de instalar programas, y no era fácil. Había que resolver el problema. Aquí es donde tenemos que hacer una pausa, quedarnos en “still” y analizar las posibles rutas:
Afortunadamente en Linux cuenta con su y sudo. Igual, para Windows XP SP2, Microsoft mejoró significativamente la delimitación de las facultades de los usuarios restringidos. Si en Windows 2000 muchos programas se rompieron, con este cambio hubo otra barrida; era obvio. Muchos programadores se quejaron, pero era necesario. En Windows Vista incluyeron UAC pero el plan estuvo mal ejecutado. Me han contado que en Windows 7 finalmente dieron en el clavo. Se tardaron más de 10 años, pero así se hace un cambio de esta magnitud.
Yo veo el uso de JavaScript como estar en la primera opción, atacando el problema incorrecto, y hay que pasarse a la segunda opción. Con la popularidad actual de JavaScript, el cambio tendría que ser sumamente doloroso, pero igualmente necesario.
La única manera de estar seguros contra ataques de JavaScript es apagándolo. Si no lo hago así, cualquier persona puede ejecutar código en mi navegador con simplemente incluirlo en un sitio que yo visite. El código puede ser confiable o malicioso, y en cualquiera de los casos se ejecuta sin mi consentimiento, es decir, antes de yo validar o aceptar dicha ejecución. La única forma de prevenirlo es que yo lo habilite sólo para los dominios en los que confío.
¿Basta con deshabilitar JavaScript? No. Hay otros modos de atacar, pero JavaScript los facilita tremendamente; la mayoría de los ataques están basados y ofuscados con JavaScript.
¿Cómo es que pasamos del deseo de ser productivos, a tener corriendo en nuestras computadoras un lenguaje que permite rastrearnos, atacar otros sitios, etc.?
Peldaño 0. Todo comienza por el principio, y en este caso, las computadoras son simples máquinas que harán lo que su operador le diga. A fin de cuentas eso son: viles, patéticas y despreciables herramientas que simplemente siguen las órdenes de un humano. El programa se hace en un lenguaje cualquiera.
Peldaño 1. No todos los humanos tienen la capacidad de hablarle a una PC en su idioma. Las instrucciones son demasiado primitivas y básicas, de modo que se vuelve una mezcla de ciencia y arte. Se requiere de tiempo y dedicación para hacer un programa medianamente complejo. Entonces, otras personas hacen programas por nosotros. Nosotros nos limitamos a instalarlos en nuestra PC. La PC sigue haciendo lo que el operador le dice… o no exactamente: hará lo que le diga el programador por medio de la autorización del operador.
Existe ahora un punto débil: el operador ahora debe confiar en el programador, pues las instrucciones pueden ser maliciosas. ¿Qué tal si el código del programador, como parte del programa, dice que tome archivos y los mande por correo o por fax? La computadora no puede distinguir la intención de esa instrucción. El código puede ser sintáctica y semánticamente válido y aún así realizar funciones maliciosas. Sólo queda, como línea de defensa, que el operador tome la decisión de instalar el programa o no, según su confianza en el programador.
Esto es crucial. Es imprescindible la libertad de autorización del operador. Esta libertad se puede ver afectada por engaños, por ejemplo, si el programador le muestra un código diferente al operador del que se va a ejecutar, o si el operador no es hecho consciente de lo que está instalando.

XKCD nos cuenta la historia de una madre que le cambió de nombre a su hijo para borrar la base de datos de la escuela de su hijo. Una PC no distingue intenciones buenas de malas.
Sin embargo, se presenta una excepción cuando el programador y el operador son la misma persona. Siempre es más satisfactorio lograr que el programa haga algo que ir a instalar ese programa en la PC, ¡y desmiéntanme! Es sumamente aburrido instalar un programa. Es más aburrido cuando el programador cometió un error y hay que ir a reinstalar una versión nueva, y aún más aburrido cuando esto ocurre una y otra vez.
Peldaño 2. Hay que instalar los programas en PCs que están aquí cerca o allá en el cerro. Su instalación puede requerir cambios en el sistema, potencialmente rompiendo la configuración de la máquina misma. Entonces la industria contempla la posibilidad de ejecutar un programa sin necesidad de ser instalado. Esto simplificaría las implementaciones, ahorraría dinero significativamente y se enfocaría el esfuerzo en el desarrollo del programa, y no en su instalación. La necesidad es obvia: un lenguaje que no requiera compilación, cuyo resultado no requiera una instalación, que funcione en todos lados de forma predecible, que no padezca del infierno de las dependencias (librerías), etc. Y luego existen diferentes computadoras con diferentes características, versiones de sistema operativo, etc.
Por otra parte, se genera otra línea de escalafones de tecnología, la de la World Wide Web:
Peldaño A. El formato de la Web es HTML, que es como hablar de un .doc, pero en lugar de binario, en texto plano. El HTML tiene la característica de que el archivo se renderiza por diferentes programas en diferentes plataformas y da resultados suficientemente similares. Se vislumbra a la Web como algo multiplataforma (vamos a dejar la discusión de los múltiples navegadores para otra ocasión).
Peldaño B. La necesidad de la interactividad de las páginas Web. Más que una necesidad por hacer páginas interactivas, es resolver necesidades de interactividad muy específicas. Por ejemplo, el HTML no incluye semántica para mostrar selectores de fecha o validar direcciones de correo electrónico. El manejo masivo de información comienza a pedir menús de árbol expandibles, tan comúnmente usados en el escritorio. Resulta natural querer poner un menú contraíble en una página. Al iniciar como un lenguaje de texto genérico, HTML no podía dar suficiente semántica para que un navegador ofrezca estas capacidades él mismo. Al final todos pecaron: los navegadores populares no ofrecieron una forma de ofrecer tablas de contenido a partir de las etiquetas H1 a H6. HTML no se extendió con nuevos tipos de elementos INPUT, por ejemplo.

Tabla de Contenido generada automáticamente por Wikipedia para sus documentos. De forma similar, un navegador podría generar automáticamente la TdC según lo indiquen los elementos H1 a H6.
Desafortunadamente para HTML, todo mundo le quiso poner diferentes funciones para hacer algo “innovador”, como las etiquetas MARQUEE, BLINK y FRAME. Tuvo que llegar el momento de estandarizar, simplificar y reencauzar el lenguaje. Esto también demoró su progreso.
Aquí entra el auge de JavaScript. Por sí misma, la interactividad no debería ser riesgosa para los usuarios. El problema es la aplicación de la misma por medio de un lenguaje de programación (es decir, de propósito general) en lugar de un lenguaje de formato, semántico, específico. Aquí es donde se rompe el peldaño 1: el código escrito en este lenguaje se ejecuta en el navegador sin intervención del usuario.
Al final, se unen las dos escaleras para crear un monstruo. En la combinación navegador-JavaScript, los desarrolladores encuentran una plataforma para resolver el problema de la difícil implementación (descrito en el peldaño 2), mientras que el boom de la interactividad (peldaño B) facilita el auge. Lo anterior, a pesar del romper la libertad de autorización del usuario u operador (descrito en el peldaño 1). JavaScript hace que la implementación de programas sea extremadamente simple, pero a costa del usuario. Ahora el usuario tiene una plataforma de propósito mezclado: por una parte la lectura de la Web y por otra la de aplicaciones Web.
Sobre este ladrillo roto se han estado construyendo más tecnologías. Al principio las aplicaciones web eran páginas cuya interactividad se extendía con JavaScript, pero cada vez se depende más de JavaScript. Ahora hay sitios que generan las páginas mismas desde el script. Esto crea un nivel extra de abstracción que los navegadores no pueden optimizar fácilmente. Al final se traduce en mayor consumo de memoria y CPU, haciendo cada vez más lento al navegador en general. Para mi gusto, es un abuso generalizado de JavaScript, pero que también devela una especie de ruta natural, una ruta de menor resistencia, que es mejor atacar por los cuernos.
Lo que deberíamos tener es:
CSS es un lenguaje sumamente poderoso. Sin necesidad de JavaScript se pueden efectos muy interesantes. Esta página muestra 30 efectos con CSS puro que se pueden hacer hoy por hoy.
¿Podría comprar un boleto de avión sin JavaScript? Poco a poco sería más factible hacer una compra de avión menos frustrante. El wizard estaría programado del lado del servidor y se usaría HTML5 (o tal vez sería necesario inventar algo nuevo) para mejorar la accesibilidad y la interactividad (validaciones, controles de fecha y demás). Imagino que el contenido del wizard se va acumulando en la misma página conforme se llena, alimentado por procesos del lado del servidor. De esta forma podría imprimirse todo el wizard una vez lleno. Habría que estar al pendiente del tiempo restante a la expiración de la sesión. El elemento META podría contener un atributo “session_expiration” y el elemento FORM podría contener un atributo de “partial_action” que permitiría al navegador poner un contador en segundos y un botón de “refresh” para mantener la sesión activa y refrescar el estado del wizard.
¿Podría tener validaciones arbitrarias del lado del cliente? Afortunadamente HTML5 ya permite esto con el atributo pattern, en el que se le puede poner una expresión regular a cumplir como requisito para enviar el formulario. HTML5Pattern muestra algunos ejemplos de validación arbitraria por expresión regular.
¿Funcionarían los SSO como Google Accounts, etc.? Probablemente también se necesiten extensiones semánticas, pero quisiera que que el navegador tuviera un indicador de cuentas en las que tengo sesión en este momento, principalmente basados en OpenID, BrowserID y otros protocolos abiertos. Sería responsabilidad de Facebook desarrollar su propio “provider” para Facebook Connect.
El día de Internet y de las Telecomunicaciones es un proyecto en red que pretende dar a conocer las posibilidades que ofrecen las nuevas tecnologías para mejorar el nivel de vida de los pueblos y de sus ciudadanos.
El Día de Internet se realizará el próximo 17 de Mayo, aporta una oportunidad para dar a conocer las posibilidades que pueden ofrecer las TIC a las sociedades y economías. Internet debe ser considerado como un recurso verdaderamente público.
En el marco de este día, COSIT (@CositMX), invita a los amantes de la tecnología a que describan en 140 caracteres lo que representa Internet en su vida diaria, en su trabajo o en demás actividades.
Los tweets para ser considerados deben mencionar la cuenta de Twitter @CositMX. Los 50 comentarios más originales recibirán entradas gratuitas al Congreso de Tecnología de la Información y Comunicación (TIC) #COSIT2012 que se realizará en Agosto próximo en la ciudad de Coatzacoalcos.
Sigue a @CositMX y @Cosit_Staff para estar al pendiente de todo lo publicado con motivo del Dia Mundial de Internet.
La lista de ganadores junto con su correspondiente tweet será publicada el 18 de Mayo en el sitio de internet www.cosit.mx/2012. El comité organizador se pondrá en contacto con los participantes para el envío de boletos electrónicos para #COSIT2012.
touch XdefaultsXft.dpi: 96![]() |
| Escritorio - Clic para ampliar |
Normalmente apoyo el uso de Libre Office, sin embargo debemos reconocer que este aun tiene problemas de compatibilidad al momento de abrir archivos de extensión .docx; por lo que hace unos cuantos post atrás publique como instalar MS office 2007 en cualquier versión de Ubuntu (esto incluye las versiones mas recientes como 11.10 y 12.04).
Sin embargo, con la llegada de MS office 2010 nos topamos con el problema de la “versitionitis”, que hace que queramos tener lo mas reciente siempre, dejando así un poco “inservible” el tutorial de como instalar la versión 2007; hoy para aquellos que sufrimos de esto, les presento como instalar MS Office 2010 en Ubuntu de 64 bts, así que, ¿les parece si iniciamos?
Abrimos nuestra querida terminal y ejecutamos los siguientes comandos (recuerde, uno por uno):
sudo add-apt-repository ppa:ubuntu-wine/ppa
sudo apt-get update
sudo apt-get install wine1.5
Lo anterior, agrega a nuestros repositorios las versiones más recientes de Wine, cabe aclarar que este tutorial solo se puede lograr con las versiones 1.4 en adelante de wine, nosotros instalamos la verson 1.5 por ser la mas reciente.
(Solo usuarios de Ubuntu de 64 bits)Una vez hecho lo anterior y con wine ya instalado ejecutamos el siguiente comando:
export WINEARCH=win32
El comando anterior crea una arquitectura de 32bits para wine, ya que en Ubuntu no podemos combinar arquitecturas (64 y 32 bits).
Hecho lo anterior, cerramos nuestra terminal y procedemos a instalar MS office 2010 como siempre se ha hecho, es decir, ejecutando el instalador o colocando el CD de office.
Una vez completada la instalación no ejecuten office, debemos abrir abrimos winecfg desde el menú principal (logo de ubuntu)
Con la ventana de las configuraciones de wine abierta, accedemos a la pestaña de librerias, buscamos y seleccionamos la libreria “riched20″, una vez en la lista inferior, la volvemos a seleccionar y cambiamos su opción a “nativa”; esto con el fin de poder ejecutar MS PowerPoint sin problema alguno.
Una vez terminado lo anterior, ya podemos correr MS Office desde el menu principal, por errores en Ubuntu, el menu principal no muestra los iconos correspondientes, pero los programas funcionan.
Nota: No recomiendo su uso diario, a pesar de funcionar, debemos recordar que MS office no es nativo de Linux, dejandolos inestables; mi recomendación seria que se use solo para visualizar archivos con extensiones .docx, .pptx, y .xlsx.
Siempre es preferible usar Libreoffice para la creación y edición de este tipo de documentos.
Usuarios con el parche de vídeo para intel este tutorial es muy riesgoso para nosotros, recomiendo la no instalación ya que pude dejar el sistema sin entorno gráfico.
Las personalizaciones a Linux siguen dejándome sorprendido, incluso lo fácil que ha llegado a ser me sorprende aun más, menciono esto ya que yo pensaba que para poder modificar el plymouth (imagen con el logo de Ubuntu antes del GDM) debía hacerse mediante puro código, cosa que me daba temor y flojera hacer, también pensaba que la instalación de Burg (interfaz gráfica para GRUB) seria complicada, pero ayer me entero que todo se puede lograr con el fantástico programa Super Boot Manager.
Super Boot Manager permite, como ya mencione, la instalación y modificación de Burg y Plymouth de manera fácil.
Para poder instalar este programa debemos ir a nuestra ya conocida terminal (Menu Dash - buscar: Terminal) y colocar los comandos uno por uno.
sudo add-apt-repository ppa:ingalex/super-boot-manager
Usuarios Ubuntu 12.04:
Antes de seguir, deben descargar este archivo .deb (i386)/ .deb (x86) e instalarlo en su sistema, este .deb es la versión correcta del programa buc que requiere SBM, ya que la versión que nuestra distro trae consigo es incompatible.
sudo apt-get update && sudo apt-get install super-boot-manager
Una ves echo lo anterior podremos abrir el programa desde el menú Dash y buscando super boot manager (no es necesario poner todo).
Ya abierto el programa solo damos clic en aluna de las opciones disponibles:
Aparecerá la ventana correspondiente a cada programa.
Advierto, tengan cuidado con el Burg, ya que su instalación es un poco mas compleja y requiere que recuerdes donde se ha instalado grub (normalmente es en /deb/sdb) y si se colocan mal los parámetros Ubuntu pude quedar inhabilitado.
Si se trata de Plymouth no hay mayor problema que seguir las instrucciones en su ventana para poder cambiar la animación, si tu plymouth no se llega a mostrar y en su lugar solo hay un guion bajo parpadeando descarga este scrip y sigue las instrucciones de la pagina. (contenido en ingles).
Suerte a todos.
Me apacere el mensaje explorador de windows dejo de funcionar cuando abro el panel de control en cualquier opción (Desinstalar un programa, Sistema y Seguridad)
El problema radica con los iconos del panel de control que son incompatibles con windows 7, la cosa es buscar al culpable, dentro de c:/windows/system32 y buscar los que tengan extensión .cpl y ordenar por fecha, e ir cambiando la extensión a .cp- y probar hasta que desaparezca el error.
En mi caso habia instalado Firebird 1.5 y pues el archivo culpable fue: Firebird2Control.cpl
Buscando en la red sobre como incrementar el rendimiento de Linux (ubuntu) encontre una página de jEsuSdA en donde habla de un script que nos ayuda a acelerar el procesador y procesos mediante CGROUPS (Grupo de Control)
Bueno las instrucciones son muy simples, y el rendimiento es algo notorio para los que utilizamos mucho la computadora, no olviden que todo como root ( sudo su - )
Editar el archivo /etc/rc.local y antes de exit 0
mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo “/usr/local/sbin/cgroup_clean” > /dev/cgroup/cpu/release_agentexit 0
Despues creamos, editamos el siguiente archivo: /usr/local/sbin/cgroup_clean
#!/bin/sh
rmdir /dev/cgroup/cpu/$*
Y hacemos ejecutables los 2 archivos antes mencionados
chmod +x /etc/rc.local
chmod +x /usr/local/sbin/cgroup_cle
Ahora para que funcione el truco, en cada usuario modificamos el archivo .bashrc que esta en la raiz de nuestra carpeta /home/USUARIO ó /root y al final ponemos:
if [ "$PS1" ] ; then
mkdir -p -m 0700 /dev/cgroup/cpu/user/$$ > /dev/null 2>&1
echo $$ > /dev/cgroup/cpu/user/$$/tasks
echo “1″ > /dev/cgroup/cpu/user/$$/notify_on_release
fi
Y listooo!! para que funcione ejecutamos /etc/rc.local o reiniciamos la computadora si así lo desean.
Ok, hasta aquí la explicación sin sentido y abstracta no mortal. Vamos reduciendo esto a términos del ciudadano de a pié en un ejemplo que viene en el artículo de wikipedia:
- Yo que tenía ya mucho rato que no escuchaba nada de Complex Event Processing, incluso ya lo daba por muerto, y hoy vuelvo a escucharlo.
- Y que Dios nos agarre confesados niños. Si hoy día les da miedo lo que se hace con la info que hay en twitter o en FB, con CEP se cagan.
- Si quieren entender lo que se puede hacer con CEP, investiguen que chingados es la Psicohistoria de Asimov.
- @wadita digamos que vas a tener un software analítico que con una serie de datos dados va a ser capaz de predecir tendencias y manipularlas
En ocasiones, puede resultar muy útil implementar sistemas de autenticación genéricos en el lugar donde trabajas, no todos lamentablemente usan Linux y por el contrario, están tan acostumbrados a usar un sistema de autenticación basado en un Windows Server sobre un dominio.
Por tal motivo, si desarrollas una aplicación web bajo un servidor linux, pero necesitas autenticación existente en un Servidor Windows tienes la posibilidad de hacerlo mediante LDAP.
Según wikipedia: LDAP son las siglas de Lightweight Directory Access Protocol (en español Protocolo Ligero de Acceso a Directorios) que hacen referencia a un protocolo a nivel de aplicación el cual permite el acceso a un servicio de directorio ordenado y distribuido para buscar diversa información en un entorno de red. Habitualmente, almacena la información de autenticación (usuario y contraseña) y es utilizado para autenticarse aunque es posible almacenar otra información.
Por ello, es posible utilizarlo de intermediario entre nuestra aplicación y el sistema de autenticación de Windows. En mi caso especifico, desarrolle algunas aplicaciones web’s basadas en PHP y Apache2 corriendo bajo un Ubuntu Server, así que, mostraré solo el pedazo de código que me permite autenticar.
function authLDAP($username, $password){ $ldap_domain = 'midominio'; $adServer = "miservidor"; $ldapconn = ldap_connect($adServer) or die("Could not connect to LDAP server."); $ldaprdn = $username; # Descomentar si la App corre bajo Apache2 sobre Windows Server #ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3) $ldapbind = ldap_bind($ldapconn, "$ldaprdn@$ldap_domain", $password); if($ldapbind) return true; else return false; }
Fácil, sencillo y útil. Si necesitas mas información o detalles técnicos del modulo LDAP para PHP puedes consultarlo en http://php.net/manual/en/book.ldap.php.
Como punto importante, hay que tener el módulo LDAP para PHP activado. Así que si estas en un servidor Debian/Ubuntu, solo basta con instalar los siguientes paquetes.
$ sudo apt-get install php5-ldap php-net-ldap php-net-ldap2 php-auth
Y confirmar que esté realmente activo el modulo en el archivo /etc/php5/conf.d/ldap.ini de la siguiente manera.
; configuration for php LDAP module extension=ldap.so
Reiniciamos Apache.
$ sudo /etc/init.d/apache2 restart
Y ya tendremos el modulo activado.
Notas adicionales:
Si tu aplicación web esta corriendo sobre un Apache2 instalado en un Windows Server, activar el modulo basta con descomentar la linea en el archivo php.ini quitando el punto y coma “;”.
extension=php_ldap.dllY añadir los módulos al iniciar Apache2 en el archivo httpd.conf
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so LoadModule ldap_module modules/mod_ldap.so
El buen ebboby frecuentemente comenta en #linux_mx que todos tenemos la tendencia a buscar las opiniones que coinciden con las nuestras, este es uno de esos casos
En mi cruzada de hoy en busca de matar el tiempo me puse a ver un video en TED, y el que me llamó la atención rápidamente fue este que publico arriba, donde Susan Cain nos habla de su experiencia como introvertida y como el mundo debería ser mucho más tolerante con este tipo de personas, no porque deban ser venerados, sino porque cada quien tiene un espacio y una aportación, sin embargo la sociedad actual tiende mucho a despreciar el pensamiento interno, y el análisis solitario para privilegiar a el trabajo en equipo y la sociabilización.
Este tema como muchos es complicado, Susan bien dice que esto no se trata de absolutos, todos tenemos algo de introvertidos y de extrovertidos, pero actualmente la popularidad se basa en gran medida en la “extrovertividad”, en el ser explícito y carismático, y la gente se olvida de que muchas aportaciones valiosas se dan por parte de ese grupo (que puede ser la mitad de la población) que no adora ser el foco de atención, o que no necesita estar rodeado de personas para ser feliz o siquiera productivo.
Un punto clave de este tema es la educación (de los niños y jóvenes), por ejemplo mis hijas caen perfectamente en ambos extremos, y prácticamente podríamos decir que Carmen y yo también, pero sin absolutos, para unas cosas parecemos todo lo contrario, a Carmen se le facilita mucho sociabilizar, sin embargo no le gustan los lugares demasiado concurridos, y a mi se me dificulta un poco sociabilizar, pero adoro los lugares concurridos, yo nunca me engento.
Pero volviendo al punto de la educación, varias veces hemos considerado el “educar desde casa” a nuestras hijas, en gran medida por los problemas sociales que existen en el país actualmente, nunca hemos vivido nada super complicado, pero a veces suena a mejor idea simplemente no salir a correr el riesgo. Una de las razones principales por la que no lo hemos hecho es que consideramos que sociabilizar es una habilidad importante, y la escuela es una excelente forma de enseñarles a sociabilizar a tus hijos.
Ahora, parte de el problema expuesto por Susan es que las escuelas actualmente tienden mucho a despreciar las actitudes solitarias, siempre se nos pide que seamos cooperativos, que trabajemos juntos, etc. y no solo en las escuelas, muchos de nosotros hemos tenido que trabajar, o de plano trabajamos actualmente, en lugares donde la privacidad es prácticamente una leyenda urbana, en galerones repletos de cubículos de 1×0.5 mts, forzados a escuchar a los compañeros de trabajo más verbales.
No por nada es tan popular aislarte con unos buenos audífonos que cancelan sonido ambiental, hemos llegado a una situacion en la que de plano se ignoran por completo las necesidades del sector de población que se considera menos productivo, a pesar de que probablemente contribuya con el 50% del trabajo, o más.
Ahora, no es una gran tragedia, los introvertidos aprendemos a vivir entre extrovertidos, y desarrollamos el clásico filtro mental y auditivo que nos permite simplemente ignorar a los demas en los momentos en los que no necesitamos saber de ellos. Por otro lado, el trabajo en equipo es algo valioso, y debemos seguir promoviéndolo, tanto como la creatividad solitaria, ambas cosas son valiosas.
Te invito a pensar con más detalle cuando intentes forzar a tu hijo a ser más sociable, quizá ya es lo suficientemente sociable y lo que necesita es más apoyo en sus actividades solitarias, quiza no lo estás dejando desarrollarlas suficiente… O quizá si
, el chiste es no perder el contexto.
De igual manera en las relaciones laborales, necesitamos aprender a valorar más el trabajo productivo (en equipo o no) que las personalidades atractivas, recuerda que muchos de los grandes líderes no eran el estereotipo clásico del carismático actor de hollywood.
En fin, ya hay que empezar las actividades de la semana !
buena semana para todos o/
Esta nueva temporada de screencasts va a estar dedicada a Vim. Vim (del inglés Vi IMproved) es una versión mejorada del editor de texto vi, presente en todos los sistemas UNIX.
Su autor, Bram Moolenaar, presentó la primera versión en 1991, fecha desde la que ha experimentado muchas mejoras. La principal característica tanto de Vim como de Vi consiste en que disponen de diferentes modos entre los que se alterna para realizar ciertas operaciones, lo que los diferencia de la mayoría de editores comunes, que tienen un sólo modo en el que se introducen los órdenes mediante combinaciones de teclas o interfaces gráficas.
Vim es uno de los mejores amigos no solamente de un sysadim sino también de developers. Estén atentos a estos screencasts de vim.
Durante el sabado 28 de Abril de 2012, se celebro el Festival Latinoamericano de Instalación de Sofware Libre, tuve la oportunidad de presentar una platica en la ciudad de Cuernavaca en Morelos, gracias al apoyo general del Grupo de Software Libre de Morelos y en particular de varias personas entre ellas alemani, GaRaGeD (Hasta que por fin nos conocimos) y el kwame quien nos dio asilo por un par de días y hasta la hizo de guía de turista(Gracias!).
Decidí hacer una platica NO técnica, pero el resultado fue una plática con un efoque muy particular sobre un tema muy polemico, nada más y nada menos que de Vi y Emacs, lo cual pudo ser de poco interés para los participantes si no estaban familiarizados con dichos temas.
En Aguascalientes por cuestiones de logística se llevará acabo el Sabado 5 de Mayo de 2012, la organización va por cuenta del Grupo de Usuarios de Linux en Aguascalientes (Los Pingüinos en el Alambre), aquí estaré dando la misma plática y la presentación la dejo aquí abajo, quiero agradecer en particular por el espacio y sobre todo el gran entusiasmo al buen betiux.
Ahora le toca el turno a Linux, ya había puesto un post para acelerar Firefox, específicamente desfragmentando la base de datos de SQLite3 pero para MAC
Bueno los pasos son muy similares, primero instalar SQLite3
sudo apt-get install sqlite3
Y después buscar nuestra carpeta de profiles de Firefox, probamos con:
cd .mozilla/firefox/
ls
y la carpeta que aparezca será nuestro profile, en mi caso se llama: ddwnau8t.default
cd ddwnau8t.default
ls -lh places*
sqlite3 places.sqlite “vacuum”
ls -lh places*
El comando ls -lh es para ver el tamaño de los archivos, vemos que han sido modificado, y listoo!!
ya esta desfragmentada la base de datos de Firefox
Misión Cumplida :-P
As stated in the 2012-04-30 edition of the Debian Project News, this weekend I will be meeting Holger Levsen (who has been there for over a week now) in Managua, Nicaragua, as part of the Debian Tour 2012, a set of talks meant to raise awareness and interest on Debian between the Nicaraguan (+Central American) user groups, university students, companies and government.
Not all of the planned activities are present in the Debian Tour webpage. I know I will be giving my talk on Debian in the Free Software projects' universe, this Saturday at Universidad Centro Americana (UCA). Besides this, we will be meeting on Monday with the UCA staff to discuss some DebConf-specific issues. Sunday? Well, I hope^Wfully trust we will have interesting activities as well :)
El escuchar la música es mi pasatiempo favorito. Desde mi niñez pasaba mucho tiempo disfrutando todos los tipos de música. Recientemente hay mas y mas sitios en el internet en que puedo escuchar mis grupos favoritos. A mi me gusta usar el pandora.com y el grooveshark.com. Las altavoces de los Dell computadoras de escritorio son los mejores para escuchar y disfrutar la música. ¡Lo mío tiene las mejores altavoces que hay!
Cada día yo escucho la estación del grupo Two Door Cinema Club por pandora.com antes de que yo vaya para la escuela. En la escuela hay Dell computadoras touch screen y por eso no necesito dejar de escuchar mi música cuando llegue. Lo mejor es que el Dell computadora touch screen tiene las altavoces como mi computadora y no hay sacrificio de sonido. A veces los maestros y profesores no les gusta que yo escuche en clase, pero es bien difícil obedecerles porque me encanta la música.
Yo creo que las altavoces de mi computadora son tan buenas porque un ángel descendió y las hizo. Yo uso las altavoces para escuchar música, jugar video juegos, y ver videos del YouTube, pero el mejor uso es el música. Hoy estaba usando pandora.com y un grupo nuevo se apareció en mi lista discográfica de Two Door Cinema Club. El grupo se llama Silversun Pickups y suena muy bien. Puedo hablar de mis grupos favoritos por un mil paginas, pero no tengo tanto tiempo para escribir. Solo quiero decir que yo gasto horas y horas escuchando la música mía. Para mi los sitios sean importantes, pero si no tengo altavoces excelentes no vale nada. Es similar a ver un Blu-Ray video en una televisión horrible. No es posible disfrutarlo completamente.
Bueno, quiero hablar mas de mis sitios favoritos. He usado grooveshark.com para compilar una lista discográfica para mi baile es bien fácil porque hay miles y miles de canciones y cuando descubres una que te gusta solo necesitas guardarla en tu lista de canciones favoritas. ¡Es tan fácil! A mis amigos y yo nos gustan bailar a los Dubstep canciones. Especialmente las del Skrillex. Esta semana pasada mi amigo se compilo el mejor lista de canciones que hay, y todos nosotros bailamos con mucha fuerza. Fue un evento inolvidable. Me gusta usar los sitios pandora.com y grooveshark.com al mismo tiempo porque si a mi me gusta un artista o un grupo puedo hacer una estación en pandora y descubrir otros artistas y grupos que son similares. Si me gusta una canción solo puedo escucharla una vez en pandora.com y esperar a escucharla otra vez a otro tiempo. Pero, si uso grooveshark.com también, puedo disfrutar esta canción cuandoquiera. ¡Que combinación!
Por eso mis sitios favoritos son el pandora.com y el grooveshark.com para escuchar la música mía. Si tienes tiempo para escuchar la música tuya, necesitas usar estos sitios. No hay otra manera mejor. ¡Son tan importantes que aun tengo pandora en mi Smartphone! ¡Las única cosas que le faltan mi Smartphone son las altavoces increíbles de mi computadora!
In order to use the “Return to libc†technique; you need to get the address memory of some fuctions that are into libc.
Taking advantage that all C programs include libc library, we can get the addresses using whatever program that you want. As a example:
// program.c
main(){}
Then‌
Este año (como el pasado) estuve de invitado para impartir una plática, y en este caso, con la temática de algunos experimentos que durante mis ratos libres (ya realmente son pocos) he estado probando con python y webkit.
Webkit ya es considerada como una plataforma para aplicaciones, podemos embeberla sencillamente con python para transportar una aplicación web a una aplicación de escritorio, y aprovechar toda la tecnología que Apple, Google y la comunidad ha venido desarrollando.
Los a credos a Python como yo, sabemos que este lenguaje es hermoso, pero mas allá de la estética en sintaxis, encontramos una infinidad de librearías para casi todo, y es por ello que juega un papel importante.
Dejo la presentación para aquellos que quisieran darle una simple vista, y en breve subiré los pocos códigos de ejemplo que presenté.
En estas últimas semanas ha habido muchos cambios, excepto en la publicación de notas en mi blog ![]()
Ya migramos de vuelta a Cuernavaca, y la estamos pasando muy bien
, si fue un show, y va a seguir siendolo por un rato, el migrar en medio del ciclo escolar, y todo eso, pero la familia entera quería este cambio.
Entre las cosas nuevas de mi nuevo trabajo (en el CIE) está el ayudar a quien solicite ayuda en cuestiones de “cómputo”, y recientemente me preguntaron cómo hacer un script que haga una consulta asíncrona para determinar si un proceso ejecutado en “background” ya finalizó para posteriormente cargar la página de resultados.
La parte platicada fue fácil, todavía me acuerdo de los trucos de dojo, aunque y hace exactamente 2 años que no lo uso para nada.
Los conceptos son los mismos todavía, hay que ejecutar los siguientes pasos:
Para ello me puse a escribir un PoC que hiciera casi todo eso, lo que me falta es un “if” que discierna entre las respuestas posibles para hacer lo correcto, pero eso no tiene ciencia, realmente el chiste está en la consulta asíncrona que se ejecuta cada cierto tiempo.
al final quedó de esta manera:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Tutorial: Hello Dojo!</title>
<script>
dojoConfig= {
has: {
"dojo-firebug": true
},
parseOnLoad: false,
foo: "bar",
async: true
};
</script>
<!-- load Dojo -->
<script src="//ajax.googleapis.com/ajax/libs/dojo/1.7.2/dojo/dojo.js"
data-dojo-config="async: true"></script>
<script>
require(["dojox/timing", "dojo/_base/xhr", "dojo/dom", "dojo/domReady!"], function(timing, xhr, dom){
function setText(){
// Execute a HTTP GET request
xhr.get({
handleAs: "text",
// The URL to request
url: "get-date.php",
// The method that handles the request's successful result
// Handle the response any way you'd like!
load: function(result) {
//alert("The message is: " + result);
dom.byId("somediv").innerText=result;
}
});
}
var t = new dojox.timing.Timer(10000);
t.onTick = function(){
console.info("Ten seconds elapsed");
// Call the asynchronous function
setText();
};
// start the timer
t.start();
});
</script>
</head>
<body>
<h1 id="test">test: <a href="#" id="somelink">click here</a></h1>
<div id="somediv">default</div>
</body>
</html>
Ahora, para llegar a esto me tomó como 4 horas en total, en gran medida por los cambios tan radicales que han hecho en la sintaxis de Dojo en la versión 1.7, ahora hay algo llamado AMD( asynchronous module definition ) que modifica mucho la forma en la que se cargan los módulos, y no es totalmente intuitiva la forma en la que se hace todo, estuve un buen rato experimentando con formas de cargar todo lo necesario, hasta que terminé con lo que se ve arriba, que se ejecuta automáticamente con el “dojo/domReady!”, creando el timer que ejecuta una función que hace la llamada asíncrona y actualiza un div con la respuesta.
A partir de ahí, todo debería ser miel y dulzura…
Es todo por el momento, ahi se ven
P.D. El get-date.php solo tiene 2 lineas:
<?php
echo date("D, d M Y H:i:s");
El día de hoy Canonical ha hecho oficial el nombre que tendrá la próxima versión 12.10 de , una de las distros de más utilizadas en el mundo, y el nombre de esta será Quantal Quetzal, el nombre de un ave hermosa y común en, y México, por lo que Canonical sigue con su tradición de utilizar nombres de animales para nombrar sus versiones de .
La parte de “Quantal” derivaría de la nueva red de virtualización Quantum, que haría su estreno en la versión 12.10. Haciendo referencia al Quetzal, Mark Shuttleworth también hizo mención de que “el café está fuera y se necesita algo colorido y ligero”, por lo que podríamos esperar algunos cambios en el diseño de la nueva versión también.
Este anuncio llega como sorpresa ya que los usuarios y fanáticos de esta distro esperan con ansias a que llegue el próximo día jueves 26 de abril, en el cual será lanzada la Canonical sigue bautizando a Ubuntu con nombres de animalesversión 12.04 LTS llamada Precise Pangolin.
Mientras Precise Pangolin (12.04) debería estar lanzándose este mes, Quantal Quetzal vería la luz en octubre
En la versión Quantal Quetzal llegarán muchas novedades, aunque han mencionado que Unity seguirá siendo mejorado, además de que habrán “Drasticos cambios y mejoras en el entorno Grafico”. Ubuntu 12.10 llegará en su fase definitiva el 18 de octubre, pero antes estará disponible desde el 7 de junio una versión en fase Alpha, eso sí, estas fechas pueden variar como lo han hecho en ocasiones anteriores.
Quality has a new name (Mark Shuttleworth)
Calendario de Lanzamiento de Ubuntu 12.10 | Anuncio en el blog de Mark

Thanks to my coworker Dan for making a whole bunch of these based on our day job adventures
Here's a really simple C code example of ImageMagick's MagickWand:
// Borrowed from http://members.shaw.ca/el.supremo/MagickWand/
// Last updated 2008/11/04 10:53
// A simple example equivalent to
// convert logo: logo.jpg
#include <stdio.h>
#include <wand/magick_wand.h>
int main(int argc, char **argv) {
MagickWand *mw = NULL;
MagickWandGenesis();
/* Create a wand */
mw = NewMagickWand();
/* Read the input image */
MagickReadImage(mw,"example.jpg");
/* write it */
MagickWriteImage(mw,"example-c.png");
/* Tidy up */
if(mw) mw = DestroyMagickWand(mw);
MagickWandTerminus();
return 0;
}
Compilation goes like this:
$ gcc wand.c -lMagickWand -lMagickCore -I/usr/include/ImageMagick
Here's the same code using the amazing GO's import "C"
/*
Small example for using ImageMagick's Wand C interface in GO
Based on http://members.shaw.ca/el.supremo/MagickWand/
Written by xiam@menteslibres.org
*/
package main
/*
#cgo LDFLAGS: -lMagickWand -lMagickCore
#cgo CFLAGS: -fopenmp -I/usr/include/ImageMagick
#include <stdlib.h>
#include <wand/magick_wand.h>
*/
import "C"
func main() {
var mw *C.MagickWand = nil
C.MagickWandGenesis()
mw = C.NewMagickWand()
C.MagickReadImage(mw, C.CString("example.jpg"))
C.MagickWriteImage(mw, C.CString("example-go.png"))
if mw != nil {
mw = C.DestroyMagickWand(mw)
}
C.MagickWandTerminus()
}
And compiling:
$ go build wand.go
Go's ability of importing C like a boss is just impressive!
$ gpasswd -a user group
$ ./group-requiring-app
$ Error: 'user' is not in 'group'.
$ su -l user
$ Password:
$ ./group-requiring-app
$ Nice, you're in the appropriate group :-).
You can also try:
$ exec su -l user