Source: https://planet-backend.debian.org/es/
Timestamp: 2020-01-21 08:21:18+00:00

Document:
24 June, 2019 10:45AM by larjona
11 May, 2017 05:41PM by larjona
Hoy vengo a contaros que se pueden conseguir certificados SSL válidos en todos los navegadores, y sistemas operativos, por cero Euros. Aunque realmente lo que quiero contar es como ponerlo en marcha rápidamente, que es lo que espero no sepáis para que terminéis de leer esto
27 April, 2016 09:43AM by Alberto Gonzalez Iniesta
Esta vez me toca salirme un poco de mi temática de administración de sistemas, pero todo sea por retomar el Blog (y repartir un poco de leña )
11 November, 2015 12:27PM by Alberto Gonzalez Iniesta
Si tienes trato conmigo, me habrás oído hablar algo de Jabber/XMPP.
¿Te vienes a dar un paseo por la mensajería instantánea libre?
Es un protocolo de comunicación, como el correo electrónico o el FTP.
Antes se llamaba Jabber, ahora se llama XMPP
Permite la mensajería instantánea entre dispositivos usando internet (ordenadores, móviles, otros aparatos).
Permite charlar persona a persona y también en grupo.
El estándar es abierto y funciona con un servidor donde se crean las cuentas, y programas clientes (para ordenador o móvil) que sirven para enviar/recibir los mensajes. Te puedes comunicar con personas que tengan cuenta en un servidor XMPP distinto al tuyo (como en el caso del correo, tu servidor le pasará el mensaje al servidor del destinatario, que lo entregará).
Se puede usar con software libre (y gratuito) tanto en el lado del servidor como en los programas clientes, y permite el uso de cifrado punto a punto, para que ni los servidores ni los “mirones” vean el contenido de los mensajes.
Mi cuenta es larjona@jabber.org
Me hice la cuenta hace algún tiempo y ese servidor está algo saturado, así que a la familia y amigos ahora les recomiendo otros, por ejemplo mijabber.es. Si quieres buscar otro diferente, tienes una lista con muchos servidores aquí: https://xmpp.net/directory.php
Para registrarse, puedes ir con un navegador web a la página del servidor y crear la cuenta, o puedes usar algún programa cliente que permita el registro automático (esto último no lo he probado).
Elige tu servidor, y elige un apodo que esté libre. Y ya está (bueno, algún servidor puede que te pida un correo electrónico para poder recuperar tu contraseña si se te olvida, o algún otro dato personal. Tú decides).
Hay clientes para muchos sistemas operativos distintos.
También, muchos servidores, ofrecen un cliente web, para no tener que instalar nada. Por ejemplo: https://mijabber.es/jappix/
En GNU/Linux, Android, e iOS, usa el repositorio oficial para instalar el que quieras (puedes tener varios, si quieres). En Windows/OS X, visita las páginas web de los proyectos para descargar los ejecutables.
Yo uso Xabber en mi móvil (Android 2.x), y Conversations esporádicamente en mi tableta (Android 4.x). También he probado Tigase y Yaxim. Todos disponibles en F-Droid.
En el ordenador (con Debian), he probado varios: Psi, Psi+, Jitsi. Tengo pendiente probar Gajim.
En Windows sólo he probado Jitsi, pero conozco gente que usa Gajim o Pidgin.
Algunos clientes tienen estructura modular, y hay que instalar complementos para poder usar el cifrado, o la videollamada, u otras funciones avanzadas.
Chatear, y grupos
Una vez hemos instalado el cliente, iniciamos sesión con nuestra cuenta identificativa o JID, por ejemplo pepita.pulgarcita@mijabber.es y la contraseña.
Podemos añadir contactos (indicando sus JID), y se enviará una solicitud de autorización al contacto. También podemos entrar en grupos, (según el cliente que uses, verás que los llaman “grupos”, “salas”, “conferencias”, o MUC (“multi user chat”)). Por ejemplo en la sala redeslibres@salas.mijabber.es (haz clic y echarás un ojo ahora mismo desde el navegador) o crear tú uno en un servidor que permita la creación de grupos (salas.mijabber.es es uno de ellos, simplemente creas un nuevo nombre como “familiadepepitapulgarcita@salas.mijabber.es” y ya).
Cuando nos unimos a una sala de charla, podemos usar un apodo diferente, invitar a gente, proteger la sala con contraseña, y otras cosas.
En la conversación uno a uno, podemos activar el cifrado OTR, llamada de voz, o videollamada, si nuestro cliente y el de nuestro interlocutor lo soportan.
El estándar XMPP permite enviar/recibir archivos de dos maneras diferentes, y cada servidor y programa cliente decide de cuál manera lo hacen. Esto es un poco problemático, porque tú con tu cliente y tu cuenta en tu servidor podrás enviar archivos y quizá el servidor del receptor o el cliente no admite ese método… es cuestión de ponerse de acuerdo.
En general, los clientes de escritorio permiten el envío de archivos, y algunos clientes móviles (Conversations) también.
El método que funciona en todo caso es subir el archivo a algún sitio y proporcionar a tu interlocutor o interlocutores la URL Pero no te des por vencido/a, haz pruebas y actualiza frecuentemente tus clientes porque esta situación está evolucionando para bien.
Existen aplicaciones que utilizan XMPP pero no son del todo compatibles, porque han adaptado el sistema a sus necesidades.
Un ejemplo de derivado libre es Kontalk (a partir de la versión 3, versiones anteriores no usaban XMPP).
El servidor es XMPP, pero el programa crea la cuenta de usuario aplicando una función “hash” al número de teléfono del usuario, con lo que se obtiene un JID algo complicado, tipo aedc28ed561209dfa98dee@beta.kontalk.net, y ése es el JID que tienes que decir a tus contactos que usan XMPP estándar para que te agreguen… Porque además el cliente de Kontalk no permite agregar contactos manualmente (aún), sólo usando la lista de números de teléfono. Además, no es posible hoy por hoy iniciar sesión con tu JID de Kontalk usando otro cliente XMPP, porque Kontalk usa cifrado GPG con un par de claves, en lugar de contraseña. Así que los usuarios de Kontalk, en la práctica, sólo pueden usar la aplicación de Kontalk para comunicar.
Kontalk, por ahora, no permite grupos, aunque se está trabajando en ello (así como en mejorar el sistema para que se puedan usar otros clientes XMPP para comunicarse).
El código del servidor y del cliente es libre, por lo que es posible, por un lado, instalar más servidores para crear una red federada como la XMPP estándar, y por otro, como sabemos, se puede adaptar y mejorar todo el sistema (de hecho, el desarrollo es comunitario, con 2 personas dirigiendo el proyecto y una comunidad bastante activa).
Un ejemplo de derivado no libre es Whatsapp.
Han adaptado el servidor, cliente y protocolo para que se registren las cuentas automáticamente mediante el número de teléfono (de forma similar a como hemos explicado con Kontalk), y al no estar el código fuente disponible, es difícil saber cómo lo han hecho, y si han hecho más cosas. Han eliminado prácticamente cualquier posibilidad de control por parte del usuario: el usuario no puede saber su JID, tampoco puede especificar otro servidor para usar, y aunque se averiguara el JID, por acuerdo de términos de servicio, no puede usar otra aplicación distinta a la “oficial” para conectarse. Así, la empresa proveedora se ha reservado para sí todo el control. Todas las cuentas están en el mismo servidor, y usan el mismo cliente, y el usuario no puede cambiar nada; se asegura entonces el funcionamiento del envío de archivos (aunque éste se limita a sólo archivos de determinados tipos) y se asegura que todas las comunicaciones pasan por el servidor de Whatsapp, lo que permite controlar la comunicación, pero también perjudica a todos los usuarios si hay un problema en ese servidor.
En conclusión, la empresa usa XMPP para aprovechar sus ventajas en exclusiva, sin conceder al usuario esas ventajas que XMPP podría ofrecerle.
GTalk era el cliente de mensajería instantánea de Google. Funcionaba usando el estándar XMPP, pero Google no implementó ciertos estándares de seguridad que exigen la mayoría de los servidores XMPP actuales. Como GTalk no era software libre, tampoco era posible arreglar esta situación por parte de la comunidad.
Cuando Google lanzó su nuevo sistema de mensajería y videollamadas, Hangouts (abandonando definitivamente GTalk), seguía sin ser libre, y además resultó incompatible con XMPP. Así, todas las personas que usaban XMPP estándar, dejaron de ver conectados a sus amigos que usaban GTalk/Hangouts, y viceversa. Google no informó a los usuarios de GTalk de que perderían la conectividad con sus contactos XMPP en otros servidores, al actualizar a Hangouts. Desde mi punto de vista, sólo eso es razón para dejar de usarlo y volver al XMPP estándar creando una cuenta en cualquier (otro) servidor…
Los usuarios de Hangouts tienen además el problema de la centralización del servidor, como hemos comentado anteriormente con Whatsapp. Si su servidor tiene problemas, no podrán usar ese sistema (no hay otro servidor de Hangouts donde crearse cuenta).
Cuando nos dicen que determinada empresa/aplicación de mensajería ofrece mejor experiencia de usuario, es interesante pensar cómo lo consigue, o a costa de qué. Desde mi punto de vista, centralizar la comunicación haciendo que todos pasemos por un mismo servidor es hacer “trampa” (y además, tiene implicaciones muy importantes acerca de la privacidad de las comunicaciones, por ejemplo).
Llevo un tiempo usando XMPP, y veo que las aplicaciones de cliente y servidor están en continua evolución, resolviendo retos nada triviales (envío de archivos, videollamada, compatibilidad móvil/PC, comunicación síncrona y asíncrona…), sin renunciar a la interoperatividad y la federación (elementos claves de la supervivencia de una red que quiera ser una verdadera red) y a poner el control en manos de los usuarios y sus comunidades (elementos claves para que podamos comunicarnos con libertad).
Si piensas que el ecosistema XMPP se mueve despacio, y necesitaría un buen empujón para alcanzar la usabilidad y el nº de usuarios de los otros, ¿a qué esperas para colaborar? Úsalo, estúdialo, mejóralo, difúndelo. Es software libre, ¡tienes todo el derecho a ello!
Puedes comentar sobre este artículo en este hilo de pump.io.
Y también, usando XMPP, en la sala redeslibres@salas.mijabber.es
12 July, 2015 05:43PM by larjona
Una entrada en cron para que se ejecute todos los días y listo!. El script supone que los ficheros de zona se llaman como el ORIGIN (dominio), es decir para el dominio inittab.net el fichero se llama inittab.net, y supone que está en /etc/bind. Así como que las claves se encuentran en /etc/bind/keys. Sin duda es mejorable y se aceptan parches. Pero si lo hago de esta manera es porque para aprender siempre es mejor usar el mínimo de magia. Un día migraré a dnssec-tools, que entre otras cosas gestiona el cambio (rotación) de claves (KSK y ZSK), proceso que habría que hacer con cierta periodicidad. Pero si has llegado hasta aquí ya tienes una base de DNSSEC para seguir solito
19 May, 2015 02:00PM by Alberto Gonzalez Iniesta
04 May, 2015 01:00PM by Alberto Gonzalez Iniesta
Esta entrada de publicó antes de terminarse. En cuanto esté lista aparecerá como una nueva. Perdón por el despiste
21 April, 2015 12:00PM by Alberto Gonzalez Iniesta
Un libro que me encantó es «Homeland» de Cory Doctorow, trata sobre un grupo de hackers que se ven envueltos en situaciones que los deja expuestos a uno de los gobiernos y empresas más poderosas que existen y deben hacer algo aún así los haga correr peligros. Una historia de ficción sobre gente como Aaron Swartz.
Pero lo mejor del libro, es que precisamente cierra con dos cartas, una por Jacob Appelbaum, uno de los primeros mimbros de Wikileaks y desarrollador del proyecto Tor; y otra por Aaron Swartz. La carta de Aaron la traduje y publico a continuación, espero les sirva de inspiración para que sigan en sus luchas aún cuando a veces parezca que quién da la batalla del otro lado es muy grande e invencible:
Hola, soy Aaron. Se me ha dado este pequeño espacio aquí al final del libro porque soy un humano de carne y hueso, y cómo tal, puedo decirte algo que no creerías si viniese de la boca de cualquiera de esos carácteres ficticios:
Claro, no hay alguien llamado Marcus o Ange realmente, al menos no que yo conozca, pero sí sé de gente real justo como ellos. Si quieres, puedes ir a San Francisco y conocerlos. Y mientras estás allí, puedes jugar D&D con John Gilmore o construir un cohete en Noisebridge o trabajar con algunos hippies en un proyecto de arte para Burning Man.
Y si algo de las cosas más relacionadas con conspiraciones en el libro te parecen demasiado alocadas para ser verdad, bueno, simplemente googlea Blackwater, Xe o BlueCoat. (Yo mismo tengo una solicitud FOIA pendiente para saber más de "software para manejo de persona", pero los federales dicen que les va a tomar tres años más redactar todos los documentos relevantes.)
Ahora, yo espero que te hayas divertido quedándote despierto toda la noche leyendo acerca de estas cosas, pero la parte que viene es importante así que presta atención: lo que está pasando ahora no es algún reality show de televisión donde simplemente puedes sentarte en casa y ver.
Esta es tu vida, este es tú país -- y se quieres mantenerlo seguro, debes involucrarte.
Sé que es fácil sentirse sin poder, como si no hubiese algo que puedas hacer para que baje la marcha o detener "el sistema." Como si todos los hilos son movidos por fuerzas oscuras y poderosas lejanas a tu control. Yo me siento de esa forma también, a veces. Pero simplemente no es verdad.
Hace menos de un año, un amigo me llamó para decirme sobre un proyecto de ley oscuro del cuál había escuchado llamado Acta para Combatir la Vulneración En Línea y La Falsificación o COICA (En Inglés es: Combatting Online Infringement and Counterfeitting Act, de allí la abreviación COICA). Mientras leía el proyecto empecé a preocuparme más y más: bajo estas provisiones, el gobierno podría censurar sitios web que no le gusten sin algo como un juicio. Sería la primera vez que el gobierno de los EEUU se le darían poderes para censurar el acceso a la red.
El proyecto había sido introducido hace un día o dos, pero ya tenía un par de docenas de senadores apoyándola. Y, a pesar de nunca haber un debate ya estaba siendo programada para ser votada en sólo un par de días. Nadie había reportado al respecto y ése era justamente el punto: ellos querían apurar esta cosa para que pasara antes que alguien se diese cuenta.
Afortunadamente, mi amigo se dió cuenta. Nos quedamos despiertos todo el fin de semana y lanzamos un sitio web explicando qué decía el proyecto de ley, con una petición que podías firmar en rechazo al proyecto que te daría números de teléfonos para llamar a tus representantes en el senado. Le dijimos al respecto a algunos amigos y ellos le dijeron a algunos de sus amigos y en cuestión de un par de días teníamos más de 200 mil personas en nuestra petición. Fue increíble.
Bueno, la gente promoviendo esta ley no paró. Ellos gastaron literalmente decenas de millones de dólares haciendo lobby para éste proyecto de ley. La cabeza de cada compañía de medios grandes voló a Washington, D.C. y allí se reunieron con el jefe de personal del presidente y amablemente le recordaron de los millones de dólares que le habían donado a la campaña del presidente y le explicaron cómo lo que ellos querían -- la única cosa que querían -- era que esta ley se aprobara.
Pero la presión pública siguió creciendo. Para intentar sacar a la gente del camino ellos intentaron cambiando el nombre de la ley -- llamándola PIPA y SOPA, incluso llamándola E-PARASITES Act -- pero no importó cómo la llamaron, más y más personas se siguieron diciéndole a sus amigos sobre la ley y consiguiendo más y más personas que se opusieran. Pronto, las firmas en nuestra petición iba en millones.
Logramos detenerlos por más de un año con diferentes tácticas, pero se dieron cuenta que si esperaban más quizás nunca lograrían tener un chance de pasar esta ley. Así que programaron un voto apenas volviesen de la pausa de invierno.
Pero mientras los miembros del congreso estaban fuera en la pausa de invierno, manteniendo reuniones públicas y en las salas de sus pueblos en casa, la gente empezó a visitarlos. En todo el país, miembros del congreso empezaron a ser cuestionados por sus electores acerca de su apoyo a esa sucia ley de censura del internet. Y los miembros del congreso empezaron a asustarse -- algunos llegando tan lejos como responderles atacandome.
Pero esto ya no se trataba de mi -- nunca se trató de mi. Desde el principio fue sobre ciudadanos tomando las cosas en sus propias manos: haciendo vídeos en YouTube y escribiendo canciones oponiéndose a la ley, haciendo gráficos mostrando cuánto dinero los promotores de la ley habían recibido de las industrias promoviéndola, y organizando boycotts poniéndo presión en las compañías que habían promovido la ley.
Y funcionó -- tomó la ley desde un punto político sin problema alguno que se suponía debía pasar unánimamente a una posición más parecida a tener un balón tóxico que nadie quería tocar. ¡Incluso los promotores de la ley empezaron a sacar declaraciones oponiéndose a la ley! Oh sí, esos dueños de medios estaban molestos...
Así no es como se supone que el sistema deba funcionar. ¡Un montón de chicos no detienen unas de las fuerzas más poderosas en Washington simplemente escribiendo en sus portátiles!
Pero pasó. Y tú puedes hacer que pase de nuevo.
El sistema está cambiando. Gracias a la Internet, todos los días personas pueden saber acerca de cosas y organizarse incluso si el sistema está determinado a ignorarlo. Ahora, quizás no ganes todo el tiempo -- esto es la vida real, después de todo -- pero finalmente tenemos una oportunidad.
Pero sólo funciona si tú tomas parte en ello. Y ahora que has leído este libro y aprendido cómo hacerlo, estas perfectamente informado sobre cómo hacerlo de nuevo. Es correcto: ahora depende de ti cambiar el sistema.
11 January, 2015 05:53PM
Alejandro Ríos P.
Lo de siempre, los ingenieros deben saber cómo resolver un problema, analizándo todos los requisitos a cumplir de manera sistémica. Hoy en día es más importante saber cómo buscar la información necesaria para resolver los problemas que aprenderla de memoria, ser capaces de llegar al fondo de cómo funcionan las cosas, un ingeniero debe tener tanto una visión global de todas las tecnologías, como un conocimiento profundo de alguna de ellas en particular. Y sobretodo, leer la Carta a García.
Una habilidad que es importante inculcar, es la de publicar, compartir, crear un portafolio de proyectos que son la carta de presentación, participar en comunidades, tener un repositorio de código, contribuir a un proyecto open source, publicar en blogs, etc. Ojalá todo en INGLES
Pero lo más importante sería enseñarles todas las variables que hacen que un producto sea de gran calidad: desde el diseño, pasando por la creación, pero no quedarse ahi, sino pensar también cómo eso se inserta en un entorno de producción escalable, cómo se debe probar, documentar y mantener en la vida real.
2. Habilidades de negocios
En un mundo globalizado no solo se requiere generar soluciones, sino saber cómo éstas se llevan al mercado. Los ingenieros de hoy deben entender cómo se gestiona un proyecto con herramientas como el PMBOK, pero también con AGILE, Scrum, etc. Hay que enseñarles a que sepan plantear un proyecto como un caso de negocio, que piensen como emprendedores, que no se queden solo en una idea, sino que sepan cómo llevar esa idea a satisfacer un mercado (Lean Startup), cómo vender, cómo manejar un presupuesto.
3. Habilidades humanas
Finalmente, los ingenieros tienden a ser muy cuadrículados y encerrados en su mundo. Hay que cultivar habilidades de comunicación, oral y escrita, habilidades gráficas, cómo hacer una presentación agradable a la vista, que comunique las ideas, cómo diseñar interfaces de usuario agradables, usables, deseables. Cómo interactuar con un equipo multidisciplinario, cómo mantener un ritmo de vida productivo y saludable.
Lo más importante es que sepan cuál es su pasión. Un ejercicio interesante que se me ocurre, sería ponerlos a investigar ofertas laborales en bolsas de empleo, o perfiles de gente muy dura en LinkedIN, que ellos vean un perfil o Biografía de alguien que sea su modelo a seguir. Y luego que afronten su aprendizaje con ese perfil en mente. Que cuando salgan, estén ya perfilados hacia una meta de carrera real.
Son muchos los retos de un ingeniero en la vida real, espero que esta información te sea de utilidad,
01 September, 2014 05:30PM by Unknown (noreply@blogger.com)
transloadit-api v1.0.0-rc1
El release candidate de v1.0.0 para transloadit-api ya está disponible.
Puedes instalarlo vía npm y probarlo:
npm install transloadit-api@1.0.0-rc1
Ahora soporta la API completa de transloadit: firmas, assemblies, notifications y manejo de plantillas.
El código está en github, la documentación en este website así como en los comentarios del código (que son la fuente para el website) y por supuesto: cualquier problema repórtalo en el tracker de github. Tiene un montón de pruebas pero aún le faltan algunas, especialmente para operaciones que requieren internet.
Quizás tenga tiempo para escribirlas esta semana y entonces lanzar una v1.0.0 como es.
14 May, 2014 05:09AM
Primera versión de angular-geocomplete
Esta es la historia de un día que necesitaba con una dirección o el nombre de una ciudad conseguir un array JSON que me diese los posibles lugares donde eso fuese cierto.
Y entonces nació angular-geocomplete.
Lo fino es que se puede combinar con algún typeahead y se obtiene un autocompletado demasiado genial como el de Google Maps.
Y sí, usa el API de Google Maps.
¿Cuál es la gran ventaja? Que obtienes no sólo el nombre del lugar sino sus coordenadas.
Instalable vía bower también con bower install angular-geocomplete.
Problemas a los issues de GitHub.
13 May, 2014 12:02PM
12 March, 2014 08:44PM by larjona
Gente que no usa ninguna red social: si eres nueva en las redes sociales, por favor, usa una basada en software libre. Puede ser Pump.io, Friendica, Diaspora*… la que sea. Yo conozco Pump.io, y por eso la recomiendo. Llegué a pump.io por accidente, ya que usaba Identi.ca para microblogueo, y sabiendo que iba a haber una migración de StatusNet a pump.io, empecé a curiosear en la plataforma. Es nueva, así que muchas cosas aún están en desarrollo, pero es nueva, flexible y moderna, ha aprendido de los fallos de otras plataformas. ¿Por qué no? Y lo más importante: ¡hay gente guay en pump.io! No hay una actividad abrumadora, sin publi, sin spam (pero si lo quieres, puedes ir a la manguera
Finalmente, creo que estaría bien tener una presentación en vídeo sobre pump.io (digamos 5 minutos, quizá menos) que pueda ser traducida a diferentes idiomas y compartida en todos los sitios para correr la voz sobre esta red social. Quizá ya está hecha (si sí, ¡por favor enviadme un enlace!). Quizá algunos usuarios pueden intentar hacerla. Pero creo que yo no soy la persona adecuada para esta tarea. Mira este artículo, ¡es demasiado largo! Escribir algo para sólo 5 minutos es una tortura para mí
03 November, 2013 10:21PM by larjona
13 June, 2013 10:30PM by Unknown (noreply@blogger.com)
12 June, 2013 05:55PM by Unknown (noreply@blogger.com)
11 June, 2013 02:10PM by Unknown (noreply@blogger.com)
10 June, 2013 10:35PM by Unknown (noreply@blogger.com)
Actualización [2013-05-11 14:31:11 UTC-0430]: Justamente 1 día antes de producirse esta noticia en Venezuela, en Chile anuncia el REUNA (el Reacciun chileno) que cuadruplicaron su capacidad hasta 1.35Gbps hacia el extranjero para que los investigadores y científicos tengan más con que trabajar, así como anunciaron que han unido más universidades con IXPs locales.
Actualización [2013-05-10 22:22:16 UTC-0430]: Para entender un poco más de cómo funciona el internet pueden ver este vídeo precisamente sobre IXP y de donde sale el internet junto a sus interconexiones.
Hoy ha salido a relucir, gracias a @uraisa, que el CENIT reducirá el ancho de banda a las universidades venezolanas, mediante orden de la OPSU.
Un poco de background sobre la red universitaria
El CENIT ofrece -- entre varios otros servicios -- un enlace dedicado a la Red Académica venezolana llamada Reacciun. Esta red es lo que se llama un NREN, un ISP dedicado a apoyar las necesidades de las comunidades de investigación y educación en un país.
No entiendo cómo degradar un servicio apoya las necesidades de comunidad alguna, mucho menos de investigación y educación donde más bien se necesita estar adelantados al resto de los servicios para permitir la innovación.
Según un monitoreo que hicieron desde la OPSU, aún sin publicar, se subutiliza el ancho de banda y debido a eso decidieron «sincerar» su uso, porque muchas universidades no lo «aprovechan adecuadamente».
¿Pero qué es el ancho de banda digital?
El ancho de banda es la capacidad máxima de transferencia entre un punto y otro. Esta capacidad depende de la infraestructura instalada, por lo cuál el ancho de banda en una red hogareña cableada suele estar entre los 10Mbps y los 100Mbps, pero cuando hacemos uso del internet nuestro ISP limita el ancho de banda basado en cuanto hemos contratado y esos planes están limitados por su propia capacidad instalada. Es decir, para que CANTV mejore sus planes tiene que crear una mejor infraestructura y comprar más tráfico a algún Internet Transit Provider o crear un enlace a algún Internet Exchange Point (o IXP, el cuál suele salir mucho más barato que un Internet Transit Provider, pues consiste en hacer peering en una infraestructura común y evitar pasar por un Transit Provider).
Ahora, si Reacciun es una red propia, con una capacidad de ancho de banda instalada ya, suficiente para proveer el actual ancho de banda, y el Internet Transit Provider o IXP limita es la cantidad de datos consumidos y no el ancho de banda, que está limitada sí por la capacidad instalada en el enlace Reacciun/ISP ➜ ITP/IXP (es decir, cuánta data por segundo aguanta el cable que conecta Reacciun a su proveedor de tráfico), ¿entonces cuál es la verdadera razón para bajar el ancho de banda?
¿Por qué no más bien se conectan a otro IXP o cobran bajo consumo?
Es difícil ver un aumento en el costo de mantener una infraestructura ya montada, siendo el costo mayor siempre la creación y no el mantenimiento.
Si se está cobrando por un servicio donde sobra capacidad significa que se está cobrando demás, deberían más bien bajar los precios ¿no? O invertir ese extra en conectarse a otro IXP y aumentar el tráfico por peering y abaratar aún más los costos mientras se mejora el servicio.
O incluso, para sincerar, cobren simplemente por consumo y no por ancho de banda, dejen que las universidades puedan conectarse tan rápido como les permita su hardware.
¿Por qué no mejor implementan IPv6?
Son un NREN, deberían estar adelantados. Más cuando sus clientes son tan pocos a nivel tal que pueden reunirse con todos ellos en una sala.
¿Por qué propongo mejorar el ancho de banda?
Porque es falso que las universidades no la usen, más bien ha sido una limitante constante. Raisa muy bien lo dice en su artículo y cuando fui estudiante en la UNET también era un punto que surgía una y otra vez al proponer servicios con salida al internet.
Les explico: proponer un repositorio Debian al que se tenga acceso desde la internet en una universidad venezolana es casi prohibitivo, sólo la ULA tiene uno. Mientras que en otros países es precisamente la academia la que ha prestado apoyo a la comunidad open source para replicarse y tener infraestructura donde desarrollarse.
De igual forma, la limitación de ancho de banda ha hecho que en muchas universidades se apliquen reglas de calidad del servicio para evitar el abotellamiento de paquetes en la red.
¿Y nos van a decir que no se usa? ¡Si más bien la poca que hay es una enorme limitante para más y mejores desarrollos!
Degradar un servicio es retrógrado
Es retrógrado degradar un servicio, es retrógrado ofrecer peor conexión, es retrógrado cuando hay más y más data cada vez rondando en la internet. Es retrógrado cuando entramos en la era de la BigData y no se puede hacer uso de ella porque nos están limitando más en vez de ampliar capacidad. Es retrógrado porque la capacidad instalada para soportar esto ya está instalada.
Es retrógrado, es absurdo y habla mucho de las intenciones del gobierno para con las universidades: atraso.
10 May, 2013 05:00AM
A pesar de eso, estoy condensando mis observaciones en este post para que, idealmente, lo lean en las discusiones públicas que se den.
¿Basado en software libre?
Lo primero que me preocupa es el uso de la frase «basado en software libre» en vez de «ser software libre». El software usado en la administración pública venezolana tiene que ser software libre, no basado. ¿Por qué no dejar el «basado en»? Porque hay licencias de software libre como la MIT y la BSD que permiten el relicenciamiento de código derivado a cualquier otra licencia, entre las cuáles se incluyen licencias cerradas.
Igualmente, el artículo 12 debería obligar a la autoridad competente a publicar ese registro de programas informáticos que poseen los poderes públicos venezolanos, en conjunto con su licenciamiento y proveedores. Esto es vital sobretodo en las excepciones que permite el artículo 51. Necesitamos transparencia, necesitamos saber qué software se está usando que no es software libre y qué razones se dieron. Igualmente se necesita un mecanismo para apelar estas excepciones previamente y posterior a su otorgamiento.
Sobre la "transferencia del conocimiento asociado para su comprensión"
Hay una apreciación errónea sobre las libertades en los programas libres, en la ley aparece repetidamente la frase «y la transferencia del conocimiento asociado para su comprensión» en conjunto con la definición de software libre. Esto no es cierto y de hecho se contradice con lo escrito en muchas licencias de software libre, que el software es entregado «AS IS», sin garantías de que funcione y con cláusula de desprendimiento de responsabilidad en caso de que algo funcione mal y cree un gran problema (o incluso un pequeño problema). Además transferir el conocimiento asociado para su comprension requeriría que el programa el enseñara a las personas a programar, pues si alguien no programa no lo comprenderá, o hacer una documentación extensiva de la aplicación lo cuál no es cierto. Entiendo que esto esta incluído en la multitud de contratos que ha tenido el gobierno con proveedores, pero ahí es donde pertenece, en los contratos, no en la ley de infogobierno, mucho menos en las deficiones sobre software libre.
El artículo 36 incluso lo dice explícitamente como parte de las «Licencias», cuestión que en ninguna licencia de software libre actual podrán encontrar.
Queremos más transparencia
Lo poco que llegamos a ver sobre transparencia no obliga en ninguna forma a nadie a publicar. No sólo no obliga sino que en las partes donde no se limita a citar una ley que regula el acceso a la información pública, lo que hace es pedir a burócratas quienes históricamente no han sido transparentes en sus actuaciones a que promuevan la transparencia (41.5); por lo que tendremos que unirnos a las propuestas de Espacio Público y Transparencia Venezuela para lograr más en ese campo, quienes ya entregaron un proyecto de Ley Orgánica de Transparencia y Acceso a la Información Pública.
¿Cómo es la cooperación?
El artículo 30 habla del principio de cooperación entre el Poder Público y el Poder Popular, sin embargo, nada dice de cómo debe ejercerse esto. Dejar este tema para el reglamento de la ley es excluir al poder popular de voz al momento de establecer los mecanismos para esta cooperación. Ha sido histórico el conflicto Poder Popular vs. Poder Público en este tema, incluso entre grupos del mismo factor político, por lo que establecer de inmediato en la ley, que es consultada al pueblo, los mecanismos daría certeza y una gran muestra de verdadero deseo cooperativo.
Y este no es un problema de esta ley nada más, es un problema de interpretación de quién es el Poder Popular. Según la interpretación del gobierno nacional y la mayoría de los gobiernos regionales el Poder Popular sólo está representado mediante los consejos comunales y las comunas. Aquí quedan por fuera las comunidades organizadas en esquemas diferentes a consejo comunal/comuna, mucho menos las ONGs. Esto hace que la colaboración y cooperación entre pueblo y gobierno se vea limitado a solo los que componen y coinciden en ese «Poder Popular». Se está excluyendo a los que no participan y se deja de apreciar las cooperaciones por su valor para pasar a apreciarse por su origen.
Del comité de tecnología sin tecnólogos
El anteproyecto contempla la creación de un Comité Nacional para el Uso de Tecnologías de Información, cuyo fin sería promover y consolidar el uso y aprovechamiento de las TI en la APN. ¿Quienes espera uno que conformen ese comité? Personas expertas en promover el uso y expertas en uso de TI, sin embargo, está conformado por burócratas que si acaso serán usuarios casuales de TI, y que de todos sólo uno es de la materia de TI (el Ministro con competencia en tecnología de información).
¿Qué puede lograr un comité que no tiene ni idea de lo que le corresponde promover? Y no es sólo promover, ¡inclusive le corresponde «establecer lineamientos y estrategias pra el desarrollo de las tecnologías de información»! (41.2)
Sí, hay «unidades de apoyo», pero ¿por qué no son esas unidades de apoyo los miembros permanentes de ese comité y los que toman las decisiones? ¿Por qué hay que seguir dependiendo de la cima de la pirámide jerárquica para tomar decisiones si la idea es ir aplanando esa pirámide y volver las decisiones tan horizontales como sean posibles? ¿Por qué darle más funciones a burócratas que ya no son capaces de cumplir a cabalidad con las funciones que tienen asignadas? ¿Qué eficiencia se puede esperar entonces?
Y si la excusa es que se necesitan tomar decisiones políticas entonces les recuerdo que las cabezas de los ministerios no se llenan con personas capaces en la materia sino ya están son personas que tomen decisiones políticas y no técnicas, los técnicos son los asesores.
(Artículo 39 en adelante).
El capítulo I del título III tiene conflicto absoluto con el capítulo II del mismo título (inclusive con el capítulo III donde habla del CNTI). Este segundo capítulo empodera con capacidad de decisión al ministerio con competencia en tecnologías de información, sin embargo, tiene mucha de las mismas competencias que el comité de tecnología sin tecnólogos.
Sin competencias claras no es que se hacen las cosas 2 y 3 veces sino que ¡no se hacen y se tienen 2 y 3 excusas!
En la ley se menciona que todas las actuaciones se harán bajo el respeto a la vida privada y confidencialidad de los ciudadanos, sin embargo, esto sólo es demostrable si las actuaciones del poder público son auditables. Más cuando el artículo 53 en su numeral 9 permite a la SUSCERT «Extraer, revisar y analizar las trazas y bitácoras de equipos y herramientas de redes.», siendo evidente que estas incluyen las de CANTV y probablemente cualquier otro ISP. Tiene que ser pública la razón de esa extracción de datos así como la información a menos que amerite ser privado. La única forma de que se extraiga información privada sobre un ciudadano debería ser por solicitud judicial y para atender una causa ya en proceso.
Sobre la homologación de equipos y aplicaciones con soporte criptográfico
Aquí hace falta ser más explícito. Dice que la certificación tendrá una duración de tres años pero ¿esto soporta cambio de versiones? ¿Qué cambios se cubren y qué cambios no? ¿Qué hace que una aplicación o equipo califique para que se haga de nuevo la revisión para la homologación?
Artículo 5.2: Documento electrónico no es un documento digitalizado, es un documento digital.
Artículo 27: la certificación solicitada para documentos que deberían ser impresos por ley debe aplicar a todos los documentos electrónicos, incluso aquellos que no estén destinados por ley a ser impresos. Otorgar una certificación y un repositorio digital desde donde se pueda bajar una copia para la comprobación de su autenticidad es básica para dejar atrás el ciclo del papel.
Queremos realidades, no leyes bonitas. Desde el 2009 la Ley del Registro Civil contempla la digitalización del registro civil venezolano, la otorgación de un número único de identidad desde el nacimiento a los venezolanos y la vacatio legis era de 12 meses apenas.
Ya es mitad del año 2013 y nada de esto está si quiera en los planes de los burócratas.
No queremos una ley que esté hecha a medida del gobierno, un gobierno que le encanta la propaganda, firmar papelitos y mostrarlos como hechos. Queremos hechos que se hagan conocidos porque son realidad no porque los repiten y los repiten en los micros del gobierno pero que al ir a una institución pública no tienen ni idea de qué se les está hablando. (Que es lo que pasa con los registros y la ley del Registro Civil).
Comentarios a @joseluisrivas o @ghostbar.
07 May, 2013 11:23PM
25 March, 2013 12:42PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)
18 March, 2013 03:13PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)
23 November, 2012 07:40PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)
02 November, 2012 12:23AM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)
26 August, 2012 01:01AM by n0rman
16 August, 2012 02:56PM by Lisandro Damián Nicanor Pérez Meyer (noreply@blogger.com)
Debconf 12 – Volviendo a casa
Tengo que decir que de las 4 semanas pasadas, los últimos días en Nicaragua han sido de lo mejor. Un gran equipo local, demasiados Debianitas de todo el mundo y una buena cantidad de cerve^W comida local han hecho de esta, la Debconf12 una experiencia excelente.
Pude conocer a Thomas (mi sponsor y compañero en el phpunit-team) y empaquetar una nueva versión de phpunit-selenium, colaboré un poco en el Front Desk y estuve en el videoteam trabajando con h01ger.
Ya hay muchos posts hablando de la conferencia, así que sólo dire: Mil gracias localteam (de todos los que pude despedirme y de los que no) y nos vemos en la Debconf13 en Suiza
15 July, 2012 04:40PM by luisuribe
By: xbytemx
No se si sea post post install pero yo agrego el clasico:
apt-get build-dep $(paquetes aqui)
11 July, 2012 09:04PM by xbytemx
25 June, 2012 07:57PM by n0rman
21 May, 2012 03:49AM by luisuribe
¡Asistiré a la DebConf 12 en Nicaragua!
Debconf 12
Pues eso, ya tengo los tiquetes comprados y la gestión en la empresa para asistir a la Debconf 12 en Nicaragua, del 8 al 14 de Julio de 2012 (Aunque planeo llegar el 5 de Julio). Espero además colaborar de alguna manera con el equipo local.
Aún hay muchas formas de ayudar a la realización de este evento, así no asistas: http://debconf12.debconf.org/helpus.xhtml
05 March, 2012 04:14AM by luisuribe
15 January, 2012 11:04PM by luciano
29 December, 2011 05:43AM by n0rman
12 December, 2011 05:57PM by n0rman
Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 en formato DKMS
Como veo que los artículos en los que he publicado los parches para el driver de este dispositivo TDT están teniendo seguimiento en este blog y harto de compilar a mano un montón de cosas en cada actualización del kernel ayer dediqué un ratillo a preparar un paquete más automático usando DKMS. DKMS es un sistema que compila módulos del kernel en varios eventos (actualización del kernel, nuevo kernel, actualización de drivers, etc...) sin intervención del usuario. Muchos paquetes de Debian y Ubuntu lo usan (drivers de NVIDIA/ATI, VirtualBox, etc...) ¿Porqué no tenerlo para el driver AF9035? He dado de alta un PPA en Launchpad , que contiene el paquete fuente y el .deb generado listo para instalar en cualquier distribución . El paquete sólo depende de dkms por lo que debería funcionar en i386/amd64 y desde versiones cuyo kernel sea 2.6.26 o superior (en el 3.0.0 de Debian Unstable funciona sin problemas) El paquete compila 6 módulos: af9033, dvb-core, dvb-usb-af9035, dvb-usb, mxl5007t, tua9001 que se instalan en /lib/modules/`uname -r`/updates/dkms por lo que tienen preferencia sobre los módulos instalados. Puede que rompa otros drivers de TDT pero normalmente no se suelen tener varios modelos funcionando a la vez. El paquete se ha generado partiendo del código fuente de dvb-usb-af9035, cabeceras y fuentes de la rama v4l e incluye el firmware /lib/firmware/dvb-usb-af9035-01.fw necesario.
28 July, 2011 12:28PM by mario
Well, I booked my plane tickets on March, but there was some $JOB related problems, since the company where I work is facing a merge(and I was pretty sure that I will finish being unemployed), so I was really sad that I’ll have to drop my plans and loose some money, but so far everything looks ok, I’m lucky and the government did not approve the merge and asked for more bureaucratic documents, this give us one year more, so I can finally say that I’ll go to DebConf11
This year I’m planning to came a bit early and stay at least two days on DebCamp, my work plan is to work on pkg-boinc’s long TODO list, I’m really happy since I missed DebConf10, long time without see some Debian friends faces
13 June, 2011 03:03PM by churro
By: zodman
te falto vim-full vim-addon-manager :)
27 May, 2011 02:30PM by zodman
Carlos shared a pretty cool link with me this morning. Codility is a platform to help recruiters and contractors to test developers before hiring them. Both the idea and the execution are beautiful. They’ve done a stunning job.
As part of my visit to the page I gave a try to the demo test. As it was funny to solve it, I’m sharing my solution here. The problem was quite easy. It reads like this:
(sum of zero elements is zero) 7 is not an equilibrium index, because it is not a valid index of sequence A.
Assume the sum of zero elements is equal zero. Write a function int equi(int[] A); that given a sequence, returns its equilibrium index (any) or -1 if no equilibrium indexes exist. Assume that the sequence may be very long.
They gave me 30 minutes to design, code and test my solution. Here it is (tests omitted):
def equi(A):
if A is None or len(A) == 0:
lsum = index = 0
rsum = reduce(operator.add, A[1:], 0)
lsum += A[index-1]
rsum -= A[index]
It scores 100/100 and runs in linear time (that’s tricky because O(n2) algorithms will cause performance tests to fail) :)
22 April, 2011 12:41PM by Nacho Barrientos
Local public transportation in my pocket
I’ve lately spent some time developing a webapp for mobile devices to interact with some of the data published by the Gijón City Council. More specifically, data about local public land transportation schedule and live arrivals. The way they are presenting that information for mobile devices at the moment is very very heavy and slow, so I thought it may be useful to do something simpler for personal usage.
Basically, it is a simple web service that intensively caches data (to avoid stressing the data origin with many requests) and a fancy AJAX-powered frontend with some CSS with mobile browsers in mind (works flawlessly on Android’s browser and Mobile Safari). Additionally, if you add it as a bookmark to your iPhone’s home screen it behaves like a native application (you know, splash screen, custom icon, taskbar and so on).
I’m now working on client-side caching using HTML5 caching for offline usage. This way the application will boot way faster. It’s almost done, but it still needs some debugging.
I don’t intend to make it public for now. However, if you find it useful feel free to drop me a line. Beta testers are always welcome (but unfortunately won’t be rewarded).
This is how it looks like at the moment. The source will be released soon.
Update (23:26): Android screenshots provided by Javier Pozueco. Thanks buddy!
29 March, 2011 12:08PM by Nacho Barrientos
Nuevo modelo Multiseat 8840
Hace unas semanas hemos comprado directamente el fabricante (Asia) un nuevo modelo de ZeroClient o también conocido como MultiPoint/MultiSeat: MWS8840 Afortunadamente el chipset es el mismo que el anterior MWS300 y funciona correctamente. Es más, con gran sorpresa veo que los vídeos de Youtube funcionan a pantalla completa . El dispositivo tiene una entrada USB (que se conecta al servidor de terminales) una entrada de alimentación (5V - 3A), entrada de micro, salida de audio y 4 puertos frontales USB 2.0 (en dos de ellos se conecta el teclado y el ratón). Además este modelo trae una peana para colgarlo en la parte trasera de un monitor TFT o ponerlo en vertical. Aquí podeis ver unas cuantas fotos. El tamaño de la caja es de aproximadamente 10cm x 10cm En breve lanzaremos desde Thinetic una completa y económica solución comercial con estos aparatos tan prometedores, y todo ello con Software Libre .
24 March, 2011 10:42PM by mario
Search term completion using a search tree
Nowadays it’s very usual to find websites offering hints while you’re typing on a search box. Google is a pretty good example of it. But, how could it be implemented?
This feature could be implemented either in the client side or in the server side. If the word list is big (usually it is), it’s recommended to keep the lookup logic in the server side to save some bytes while transferring the page to the client and also to save some computing power using server-side caches (cool when you plan to serve many requests).
Either way, there should be a data structure somewhere containing the word list and an algorithm to do the lookup. The simplest approach may be to use a list to store the words and issue something like this when you want to get a list of hints for a given prefix:
filter(lambda x: x.startsWith(prefix), word_list)
That’s Python’s filter, but it works the same way the well-known Haskell’s first-order function filter does. It builds a new list with the elements of the original list (word_list) that match the predicate (the lambda function).
Although the results can (and should) be cached, the very first lookup (or when the cache expires) would be very inefficient because the entire list must be traversed and that operation will take linear time. Not bad, but when the size of the problem gets bigger (i.e. more and more words in the database) the lookup process may be too slow, especially whether you’re serving several users at the same time. If the list was sorted, the execution time could be improved a little bit by writing a more sophisticated algorithm, but let’s keep it that way for now.
Fortunately, there are better and faster ways to face the problem. If you don’t want to write code (usually the best choice) you may use some high-performance indexing engine such as Apache Lucene. But if you prefer the ‘do-it-yourself’ way (for learning purposes), a search tree (more specifically, a trie or a prefix tree) is a good approach.
I’ve poorly benchmarked both alternatives (the list and the tree) and as expected the tree is pretty quicker generating hints. What I did was to feed both data structures with the content of an American English word list holding ~640k words (debian package wamerican-insane).
So, assuming four is a reasonable minimum prefix length, I measured the time it would take to get a list of words prefixed by hous (yes, just one, remember I said this was a poor benchmark? ;). Unsurprisingly, it took around 230 times longer for the list alternative to generate the hints (438.96 ms vs 1.92 ms). Wow.
My implementation of the tree is as follows. The API is quite straightforward, the “hot” methods are put and get_hints. I’ve stripped off the test suite for space reasons.
>>> tree = HintSearchTree()
>>> tree.put("nacho")
>>> tree.put("nachos")
>>> tree.put("nachete")
>>> tree.get_hints("nach")
['nachete', 'nacho', 'nachos']
>>> tree.get_hints("nacho")
['nacho', 'nachos']
>>> tree.delete("nacho")
['nachos']
>>> tree.count_words()
>>> tree.get_hints("n")
['nachete', 'nachos']
>>> tree.is_indexed("nachete")
>>> tree.is_indexed("nach")
>>> tree.empty()
class HintSearchTreeNode(object):
def __init__(self, parent=None, terminal=False):
return self._terminal
@terminal.setter
def terminal(self, value):
self._terminal = value
class HintSearchTree(object):
self._root = HintSearchTreeNode()
"""Adds a word to the tree."""
# TODO: Sanitize 'word'
self._put(self._root, word)
"""Retrieves the number of indexed words in the tree."""
return self._count_words(self._root)
def is_indexed(self, word):
"""Returns True if 'word' is indexed."""
node = self._find(self._root, word)
return node is not None and node.terminal is True
def get_hints(self, prefix):
"""Returns a list of words prefixed by 'prefix'."""
return self._match_prefix(self._root, prefix)
def delete(self, word):
"""Deletes 'word' (if exists) from the tree."""
terminal = self._find(self._root, word)
if terminal is not None:
terminal.terminal = False
self._prune(terminal.parent, word)
"""Returns True if the tree contains no elements."""
return len(self._root.children) == 0
def _put(self, node, word, depth=0):
next_node = node.children.get(word[depth])
next_node = HintSearchTreeNode(parent=node)
node.children[word[depth]] = next_node
if len(word)-1 == depth:
next_node.terminal = True
self._put(next_node, word, depth+1)
def _count_words(self, node):
words = 1 if node.terminal is True else 0
words += self._count_words(node.children[k])
def _match_prefix(self, node, prefix):
terminal = self._find(node, prefix)
return self._harvest_node(terminal, prefix)
def _harvest_node(self, node, prefix, path=""):
if node.terminal is True:
hints.append(prefix + path)
hints.extend(self._harvest_node(node.children[k], prefix, path+k))
def _find(self, node, word, depth=0):
if depth == len(word):
child = node.children.get(word[depth])
return self._find(child, word, depth+1)
def _prune(self, node, word):
if self._count_words(node.children[word[-1]]) == 0:
del node.children[word[-1]]
if len(node.children) == 0 and node.parent is not None \
and node.terminal is not True:
self._prune(node.parent, word[:-1])
The code is released in the public domain.
24 March, 2011 11:31AM by Nacho Barrientos
Some Perl to redirect HTTP requests
After almost a year without publishing a single post, it seems this week I’m going to beat all my records.
A week ago, I wanted to prank my brother for a while. Nothing sophisticated… just some Iptables rules, Tinyproxy and HTTP magic. To go ahead with my evil plans, I needed “something” able to redirect a HTTP request. Actually, there are several ways to do that: Apache redirects, Tornado, Netcat* and so on. These alternatives are fast, bulletproof and time-saving, but not fun.
As many of you probably know, I didn’t get a job yet. That necessary means that I’ve got plenty of free time to waste. So… what did I do? I wrote some Perl and today I’m publishing the source code just in case someone finds it useful somehow. Like the previous entry, it’s published in the public domain.
The script just collects connections, issues 301 back (Moved Permanently) and sets Location to the URI specified as a command line argument (option -u). It lacks some security checks (left as an exercise to the reader) but it does what it is supposed to do. You may likely spot some silly bugs as I haven’t spent much time reading it again. Reports are welcome!
For those wondering, the prank was a big success. I’m afraid I can’t spare any detail by now but it turns out my bro is still thinking that his computer has been cracked.
$ perl redir.pl -p 7070 -v -t 3 -u http://31337.pl
2011/02/24 21:41:54 Listening on port 7070
2011/02/24 21:41:54 Redirecting HTTP requests to: ‘http://31337.pl’
2011/02/24 21:41:54 3 thread(s) working under the hood
use HTTP::Status qw(:constants status_message);
use Data::Validate::URI qw(is_http_uri);
use constant MAX_THREADS => 10;
use constant MAX_LEN_HEADERS_BUFFER => 8*1024;
use constant DEFAULT_REDIRECT_URI => "http://www.example.org";
use constant DEFAULT_PORT => 80;
use constant DEFAULT_POOL_SIZE => 3;
my $redir_uri = DEFAULT_REDIRECT_URI;
my $server_port = DEFAULT_PORT;
my $thread_pool_size = DEFAULT_POOL_SIZE;
GetOptions('url=s' => \$redir_uri,
'port=i' => \$server_port,
'threads=i' => \$thread_pool_size,
'verbose'  => \$verbose) or exit -1;
die "Invalid redirect URI (e.g. http://www.example.org)\n" unless is_http_uri($redir_uri);
die "Invalid port (e.g. 8080)\n" unless 0 < $server_port && $server_port < 2**16;
die "Invalid pool size (should be in [1..".MAX_THREADS."])\n"
unless 0 < $thread_pool_size && $thread_pool_size <= MAX_THREADS;
Log::Log4perl->easy_init( level => $verbose? $DEBUG : $INFO );
my $pending = Thread::Queue->new();
my $lsock = IO::Socket::INET->new( LocalPort => $server_port,
Reuse => 1 ) or die "Couldn't bind listening socket ($!)\n";
INFO("Listening on port $server_port\n");
INFO("Redirecting HTTP requests to: '$redir_uri'\n");
for (1..$thread_pool_size) {
if ($thread = threads->create("worker")) {
push(@workers, $thread);
DEBUG(sprintf("%d thread(s) working under the hood\n", $#workers+1));
# Set a tidy shutdown just in case an external agent SIG{INT,TERM}s the process
$SIG{'INT'} = $SIG{'TERM'} = sub {
# Dirty hack. threads->kill() does not wake up the thread :(
$pending->enqueue(-1);
for (@workers) {
DEBUG(sprintf("Worker %d terminated: %d clients served\n", $_->tid, $_->join()));
close($lsock);
my $csock = $lsock->accept() or next;
$pending->enqueue(POSIX::dup(fileno $csock));
DEBUG(sprintf("New client enqueued: %s:%s\n", $csock->peerhost, $csock->peerport));
close($csock);
while(my $fd = $pending->dequeue) { # API promises thread safety :-)
if ($fd == -1) {
return $clients_served;
my $sock = IO::Socket::INET->new_from_fd($fd, "r+");
DEBUG(sprintf("Dequeued client %s:%d by worker %d.\n", $sock->peerhost,
$sock->peerport, threads->tid()));
# CAUTION: there isn't any self protection against very long lines
goto BYE if length $buf > MAX_LEN_HEADERS_BUFFER;
if (my $request = HTTP::Request->parse($buf)) {
INFO(sprintf("[%s] %s {%s}\n", $request->method, $request->uri, $sock->peerhost));
printf $sock "HTTP/1.1 %d %s\r\n",
HTTP_MOVED_PERMANENTLY, status_message(HTTP_MOVED_PERMANENTLY);
printf $sock "Date: %s\r\n", DateTime::Format::HTTP->format_datetime;
print $sock "Location: $redir_uri\r\n";
print $sock "Server: Simple HTTP Redirection/0.1 ($^O)\r\n";
$clients_served++;
(*) just an approach, may drop connections:
do echo -e "HTTP/1.1 301 Moved Permanently\r\nLocation: http://31337.pl\r\n\r\n" | nc -l 7070;
24 February, 2011 09:55PM by Nacho Barrientos
Reverse Polish Notation Evaluation in Python
This introduction is followed by some Python code (function evaluate_postfix_expr) to evaluate expressions (only integers, but may be extended with ease) in Reverse Polish Notation (RPN). Some simple tests are also included in the bundle.
I agree it’s a little useless, but I thought it might be useful for someone (CS students maybe?). If you want to examine the stack in each iteration you only have to turn debugging on. That can be accomplished by changing logging.INFO to logging.DEBUG (line 7).
Copy, distribute or do whatever you want with it. It’s released in the public domain.
operators_table = {'+': int.__add__,
'-': int.__sub__,
'*': int.__mul__,
'/': int.__div__,
'^': int.__pow__}
class ExpressionError(Exception):
self._message = "Expression error: %s" % message
message = property(_get_message)
class TestEvaluation(unittest.TestCase):
self.assertEqual(666, evaluate_postfix_expr("666"))
self.assertEqual(2+3-6, evaluate_postfix_expr("2 3 + 6 -"))
self.assertEqual(2*3+4, evaluate_postfix_expr("2 3 * 4 +"))
self.assertEqual(2*(3+4), evaluate_postfix_expr("2 3 4 + *"))
self.assertEqual(3**4, evaluate_postfix_expr("3   3  *     3  *      3 *"))
self.assertEqual((7/2)**4, evaluate_postfix_expr("7 2 / 4 ^"))
self.assertEqual((2**3)**4, evaluate_postfix_expr("2 3 ^ 4 ^"))
self.assertEqual(5+((1+2)*4)-3, evaluate_postfix_expr("5 1 2 + 4 * 3 - +"))
def test_malformed(self):
self.assertRaises(ExpressionError, evaluate_postfix_expr, "+")
self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 +")
self.assertRaises(ExpressionError, evaluate_postfix_expr, "+ 2 2")
self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 2")
self.assertRaises(ExpressionError, evaluate_postfix_expr, "2 2 + -")
self.assertRaises(ExpressionError, evaluate_postfix_expr, "a 2 -")
def evaluate_postfix_expr(expr):
atoms = re.split(r"\s+", expr)
if atom in ["+", "-", "*", "/", "^"]:
raise ExpressionError("Too few operands (unbalanced)")
logging.debug("Calculating %d %s %d" % (op1, atom, op2))
atom = operators_table[atom](op1, op2)
atom = int(atom)
raise ExpressionError("Unable to parse '%s' as integer" % atom)
stack.append(atom)
raise ExpressionError("Too long expression")
logging.debug("Pushed element %d. Stack status: %s" % (atom, stack))
raise ExpressionError("Too many operands (unbalanced)")
23 February, 2011 12:03AM by Nacho Barrientos
Drivers de TDT (DVB) AverTV TwinStar 07ca:0825 para kernel 2.6.37
Esta es la continuación de otro artículo de hace más o menos un año , en estos días en Debian unstable ha entrado una nueva versión del kernel (2.6.37) y las anteriores fuentes ya no compilan. Las nuevas instrucciones quedan así (el nuevo parche disponible aquí ): 1.- Descargar nueva rama v4l: hg clone http://mercurial.intuxication.org/hg/s2-liplianin/ cd s2-liplianin zcat s2-liplianin-af9035-af9033.diff.gz | patch -p1 2.- Añadir al v4l/.config estas líneas: ############################### CONFIG_DVB_AF9033=m CONFIG_DVB_USB_AF9035=m CONFIG_MEDIA_TUNER_TUA9001=m ############################## 3.- Compilar make 4.- Instalar en un temporal make install DESTDIR=`pwd`/tmp 5.- Copiar al directorio de módulos del kernel sudo cp -ra tmp/lib/modules/$(uname -r)/kernel/drivers/media/ \ /lib/modules/$(uname -r)/updates/v4l sudo depmod -a 6.- Reiniciar y disfrutar (del hardware porque de la tele últimamente no mucho) UPDATE . Para el kernel 2.6.38 nuevo parche: aquí
19 February, 2011 03:18PM by mario
Gestión de dispositivos extraíbles en MultiSeat
Hacía tiempo que programar me aburre (según que cosas claro) pero el fin de semana pasado me lo he vuelto a pasar como un niño escribiendo código. Problema: En la Consejería de Educación de la Comunidad de Madrid han empezado a usar un nuevo invento llamado Multiseat ( Microsoft lo llama Multipoint ) que consiste en unos pequeños aparatos que de una forma lógica vienen a ser un HUB USB que contiene una tarjeta de vídeo, una tarjeta de sonido, y 4 puertos USB, si conectamos varios (pongamos seis) en un equipo automáticamente multiplicamos los puestos disponibles en ese equipo (por USB conectamos un teclado y un ratón a cada Multiseat) (puedes ver algún detalle más en la web de Thinetic Systems ) El cómo hicimos andar todo este montaje es otra historia que algún día contaré, pero lo que hoy nos centra es un pequeño problema, y es la gestión de los dispositivos de almacenamiento que se conectan a los puertos USB del Multiseat, para que todos lo entendamos, cuando conectamos una memoria USB se conecta físicamente al servidor (con un HUB USB por el medio) y teníamos que inventar una manera de que sólo pudiera verlo/usarlo el usuario sentado directamente en ese puesto. Ya os adelanto que en Microsoft aún no lo han conseguido (que yo sepa) . Solución: En los sistemas basados en Linux durante los últimos años se han venido usando distintas soluciones para el automontaje de discos extraibles (usbmount, HAL, DeviceKit), ahora estamos en la era de UDisk . Es un software que se conecta al gestor de dispositivos del kernel (udev) mediante unas reglas (/lib/udev/rules.d/80-udisks.rules) y crea un bus de sistema (en dbus) donde expone todo lo que encuentra, así las aplicaciones que quieran gestionar un dispositivo sólo tienen que escuchar esos eventos. UDisks permite inhibir el montaje (sigue reconociendo lo que enchufamos pero advierte en dbus que está inhibido y no realiza ninguna acción) por lo que no se montan los dispositivos automáticamente, a este inhibidor se le puede pasar un comando que cuando termine deje de inhibir... un ejemplo de uso práctico es el asistente de instalación gráfico que usa Ubuntu (ubiquity) y que inhibe el montaje de dispositivos (por razones obvias) durante la modificación de particiones y la instalación. Nuestra primera aplicación a desarrollar es un demonio que se conecte al bus del sistema, escuche los dispositivos que se conectan y desconectan, leemos sus propiedades y a partir de ellas adivinamos (por el DEVPATH) en que puesto Multiseat se ha conectado para entonces montarlo con privilegios exclusivos para ese usuario y crearle un icono en el escritorio para que pueda desmontarlo. Este demonio decidí programarlo en python y lo bauticé como multiseat-udisks.py se ejecuta cuando (al arranque) encuentra los puestos MultiSeat (subcarpetas en /dev/usbseat) Ya tenemos solucionado que los dispositivos de almacenamiento se automonten en su sitio y con sus permisos, ahora viene cuando el usuario quiere extraerlo, GNOME crea un icono en el escritorio con nuestro pendrive, realmente no es un archivo y con el inhibidor por el medio no lo va a crear por lo que modifiqué multiseat-udisks.py para que crease un lanzador *.desktop especial con la línea mágica « X-multiseat-desktop=x » siendo x el puesto donde esta montado (subcarpeta de /dev/usbseat ). Para desmontar tenemos dos problemas, primero el usuario no es root y como el dispositivo no está en fstab no le va a dejar desmontarlo, y segundo ese icono del escritorio nos permite abrir el contenido del dispositivo de memoria pero no extraerlo de manera segura (sync && umount) lo primero que se me ocurrió es hacer una extensión para Nautilus (gestor de archivos de GNOME) para que cuando se haga click derecho sobre un archivo *.desktop busque la línea mágica y, si existe, añada una entrada a ese menú derecho del tipo « Desmontar dispositivo extraíble multiseat », cuando se pulse sobre esa opción se llama al proceso de desmontar. Esta extensión (también escrita en Python) la bauticé como nautilus-umount-multiseat.py Para el problema de los privilegios tuve que programar la tercera ficha de este puzle, una pequeña aplicación en C (instalada con bit SUID) y que eleva privilegios a root para llamar al comando de desmontaje umount.multiseat.c . Muchas aplicaciones de montar y desmontar (instaladas en /sbin) van con el BIT SUID por lo que me parece una manera bastante estandar de hacerlo y más teniendo en cuenta que los usuarios que usan MultiSeat pueden estar en un LDAP. Cuando la extensión de Nautilus detecta que el icono es de un dispositivo conectado a un Multiseat, llama a esta aplicación que eleva los privilegios a root (mediante setuid(0) ) y llama a multiseat-udisks.py con 2 argumentos, el primero es el dispositivo montado (ejemplo: /dev/sdc1 ) y el segundo que se genera dentro del programa C es el UID (identificador numérico del usuario que quiere desmontarlo). El script multiseat-udisks hace una serie de comprobaciones para que los parámetros sean correctos y que el usuario pueda desmontar ese dispositivo (que el punto de montaje le pertenezca) lo desmonta y limpia tanto la carpeta donde se ha montado como el icono del escritorio. El sistema lo hemos probado en varias instalaciones y funciona a la perfección, más tarde convertí el código en paquete *.deb y a instalar en los centros... El motivo por el que me he vuelto a divertir programando es que nadie había hecho algo del estilo y la documentación que podía buscar por internet solo se centraba en el uso de cada herramienta o API por separado por lo que el desarrollo ha sido desde cero hasta algo terminado y funcionando. Siento el tostón técnico pero a algunos nos gusta contar nuestras frikadas
03 February, 2011 12:56PM by mario
15 January, 2011 07:03PM by Miry
22 December, 2010 07:03PM by Miry
Flasheando Nexus One con CyanogenMod 6.1.0-rc1
Seguir los pasos escrupulosamente, no me responsabilizo de posibles daños en tu teléfono. Este proceso es para teléfonos nuevos, si has flasheado alguna ROM antes quizás te sobre algún paso. Descargar herramientas necesarias	Fastboot . Android SDK (necesitamos el adb) ROM y Google APPS (ACTUALMENTE update-cm-6.1.0-RC1-N1-signed.zip y gapps-hdpi-20101025-signed.zip) Radio en versión zip FRF50-radio-4_06_00_12_7.zip Recovery 1.8.0.1 recovery-RA-nexus-v1.8.0.1-aw.img Descomprimimos el zip del fastboot y el SDK (copiar el binario adb de la carpeta tools) y arrancamos el teléfono en modo fastboot (power+trackball) Desde consola ejecutamos sudo ./fastboot devices	(deberá salir un número de serie HTXXXXXXXX y luego la palabra fastboot) Desbloqueamos el terminal (con esto se pierde la garantía) sudo ./fastboot oem unlock	En el teléfono aparece (muy bien explicado lo que estamos haciendo) pulsar Vol Up y después Power para desbloquear. Ahora volvemos a arrancar en modo fastboot (Power + Trackball) para instalar el recovery sudo ./fastboot flash recovery recovery-RA-nexus-v1.8.0.1-aw.img	Dejamos que reinicie y volvemos a entrar a fastboot para pasar al BOOTLOADER->RECOVERY (Vol Down y Power) (Recovery se verá en verde) Ahora deberíamos ver algo parecido a GRUB con varios menus, tenemos que copiar en la SDCARD la nueva radio sudo ./adb devices (se tiene que ver nuestro teléfono) sudo ./adb push FRF50-radio-4_06_00_12_7.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (tenemos que ver el archivo que acabamos de copiar)	Desde el teléfono con el trackball bajamos hasta la opción "Flash zip from sdcard", buscamos el zip del radio y pulsamos el trackball para actualizar el radio, cuando termine reiniciamos y volvemos al recovery siguiendo los mismos pasos del punto 6. Copiamos la ROM de Cyanogen y las Google APPS. sudo ./adb devices (deberíamos ver el teléfono) sudo ./adb push update-cm-6.1.0-RC1-N1-signed.zip /sdcard/ sudo ./adb push gapps-hdpi-20101025-signed.zip /sdcard/ sudo ./adb shell ls /sdcard/*zip (deben verse estos 2 archivos) Desde el teléfono vamos al menú "Flash zip from sdcard" e instalamos PRIMERO el zip update-cm-6.1.0-RC1-N1-signed.zip, cuando termine y sin reiniciar el otro gapps-hdpi-20101025-signed.zip. Antes de reiniciar hacemos wipe (volver a datos de fábrica) desde el menú del teléfono, Wipe -> Wipe data/factory reset, wipe cache, wipe dalvik-cache y reiniciamos. El primer arranque es un poco más largo de lo normal, podemos ver como se van configurando por primera vez las aplicaciones con este comando: sudo ./adb logcat
08 November, 2010 01:31PM by mario
Ana Beatriz Guerrero Lopez
03 October, 2010 02:18PM by Ana
If you are curious you can see all changes since 6.2.14(Current version on lenny) http://packages.debian.org/changelogs/pool/main/b/boinc/current/changelog
The main feature for this release is that now nvidia and ATI users can use their GPU with boinc(they need to download the non-free libs and apply some workarounds).
And if you read trough here, and you are a boinc user and want to help us, please send an email to pkg-boinc-devel@lists.alioth.debian.org, we need freshblood there
01 October, 2010 05:03PM by churro
At least for me is a good time to say cheers!, holding a beer and keep trying to still be around for at least 27 years more
23 September, 2010 05:59AM by churro
13 July, 2010 05:17PM by luciano
Yakuake + mouse
Hay pequeñas customizaciones que, aun siendo de lo más simple, te alegran un poco la vida.
Desde hace un tiempo vengo usando yakuake casi en exclusiva como emulador de terminal, y de las pocas pegas que tenía era que a veces es un poco molesto soltar el ratón para dar a F12 solo para ver si, por ejemplo, ha terminado algo que has dejado ejecutando.
En mi caso lo he solucionado añadiendo a ~/.xbindkeysrc:
"qdbus org.kde.yakuake /yakuake/window org.kde.yakuake.toggleWindowState"
Con eso (y añadiendo xbindkeys a ~/.bashrc o similar) puedo ocultar/mostrar yakuake con el botón lateral del mouse, que es bastante cómodo.
02 July, 2010 09:40AM by admin
Convocatoria reunión ADE
El próximo día 23 de julio a las 17:30, tendrá lugar una reunión de la
Asociación Debian España en las instalaciones de la Escuela Técnica Superior de
Ingenieros de Telecomunicación de la Universidad Politécnica de Madrid.
- Informe de estado de la Asociación (cuentas, infraestructuras y recursos)
- Renovación de estatutos (posibilidad de poner cuota de socio)
- Preparación de actividades 2010/2011 (recepción de propuestas de socios)
Una hora antes de la misma, se abrirá la posibilidad de inscribirse en la
Asociación, permitiendo así la participación en la reunión de aquellos que no
fuesen socios hasta la fecha.
Esperamos veros a todos allí y os rogamos que le deis la mayor difusión a esta
29 June, 2010 10:15AM by admin
Al final el rollazo este del mundial va a tener algo bueno. Twitter ha pospuesto el “OAuthcalypse” un mes y medio.
Esto es una buena noticia para algunos de los clientes de Twitter que hay en Debian actualmente, que todavía no tenían implementado este protocolo por una serie de razones. En algunos casos los upstream directamente no se habían dado por enterados (y han sido convenientemente avisados), aunque en los casos en los que el upstream ha implementado la feature, los paquetes no están aún subidos, por que (y ahora hablo de qwit) usan qoauth, que a pesar de llevar mucho tiempo en ITP todavía no está empaquetado.
Después de algunas discusiones sobre temas de licencias (enlaza con openssl), el ITP ha sido convenientemente «hijackeado» por uno de los mantenedores de choqok y es de suponer que en un plazo razonable al menos qwit y choqok tengan implementado el soporte de oauth (no puedo hablar por otros clientes), aunque todavía no está del todo claro cómo se van a gestionar los tokens.
¿A donde quiero llegar con todo esto? Si usas algún cliente de Twitter en Debian (o en cualquier otra distribución), deberías interesarte por si está preparado para el “apagón” y en caso contrario reportar el bug. De lo contrario a partir de agosto no podrás seguir usándolo.
22 June, 2010 07:09PM by admin
Después de una serie de dramáticas coincidencias con el anterior blog, el disco duro del servidor donde se alojaba y los discos de backup…vuelvo a levantarlo, con algunos cambios.
21 June, 2010 08:41PM by admin
16 April, 2010 09:25AM by Miry
05 December, 2009 06:10PM by Miry
03 December, 2009 11:12AM by Ana
This weekend while I was on Guatemala just a few hours before to give a talk, my acer one decided to suddenly shut down, I tried to started again, remove the battery, plug the charger, etc, I actually even tried to bott it with some liv-usb distro, but the netbook keep shutting down a few seconds after boot
I’m still not sure what happend to the computer, it could be the motherboard or the HDD, I still have to check if it can be fixed…
30 November, 2009 03:48AM by churro
Se dispone de un feed completo en cualquiera de los formatos de sindicación, obtén el enlace correspondiente de uno de los siguientes botones.
Última actualización: 21 Jan 2020 08:17
Todos los tiempos están en UTC.
Contacto: Debian Planet Maintainers
Feeds ocultos
Tienes entradas ocultas. Mostrar todo
Alberto Gonzalez Iniesta (feed)
Alejandro Ríos P. (feed)
Carlos Galisteo (feed)
Fernando C Estrada (feed)
José Luis Rivas (feed)
Luciano Bello (feed)
Luis Uribe (feed)
Mario Izquierdo (feed)
Rodrigo Gallardo (feed)
William Vera (feed)

References: artículo 12
 artículo 51
 artículo 36
 artículo 30
 artículo 53

Artículo 5

Artículo 27