Skip to content


Sobre iCalendar

Algunos recursos que encontré sobre iCalendar para empezar a hacer boca:

Ésta no es la fecha de mi cumpleaños

  • ¿Qué es ésto de iCalendar?, nuestra amiga la Wikipedia es un buen punto de partida.
  • Para profundizar: RFC de iCalendar.
  • PHPicalendar: Un visor de calendarios iCals escrito en php. No los crea ni edita, sólo es un camino para visualizar calendarios validos IETF 2445,extensión .ics. Algunas aplicaciones que generan archivos .ics aquí. Si tenemos una aplicación que guarda la información de calendario en Icalendar, parece un buen candidato a front-end para mostrar estos datos.
  • Icalcreator: Una clase escrita en php que formatea archivos iCal para sistema no específicos de calendario, como CMS, aplicaciones de agenda, tareas, reserva de espacios….. Es necesario tener un buen conocimiento del estandar rfc 2445 (iCalendar) para su uso. Ésto me apetece probrarlo, si es que no tengo remedio!.  🙂
  • Un buen sitio para conecer propiedades (atributos), métodos y componentes de un objeto iCalendar según la especificación RFC 2445: http://www.kanzaki.com/docs/ical/
  • eventCreator: Crear eventos de  calendario en formato iCal/xCal/rsscal.

Posted in Programación.

Tagged with , , , .


Error PXE-E55 ProxyDHCP service did not reply to request on port 4011. Rembo detrás de cortafuego

“PXE-E55 ProxyDHCP service did not reply to request on port 4011” es el error que recibí después de una instalación de manual, limpia, de libro,… de Rembo versión 2 en un Fedora 12 con el servidor dhcp, versión 4.0, en el mismo equipo. El cortafuegos, activo por defecto en esta distribución, es el “culpable” del problema. La prueba es fácil, basta con deshabitarlo y todo va bien. Pero, si quiero o necesito tener activo el firewall ¿Qué puertos tengo que abrir para Rembo?.

Lo primero es comprobar que rembo está escuchando el puerto PXE (4011), con #>lsof -i udp, obtenemos un listado de las conexiones udp abiertas y por que proceso.

Cliente iniciando rembo

Cliente iniciando rembo

Para ver la configuración del cortafuegos podemos ejecutar #>system-config-firewall, o abrir la utilidad desde la interfaz gráfica en “Sistema->administración->cortafuego”. Esta utilidad escribe las reglas iptables en el archivo /etc/sysconfig/iptables. Tendremos que escribir una regla directamente en el archivo, ya que la utilidad gráfica se queda corta en este caso.

Este archivo tiene por defecto las siguientes reglas:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

La política por defecto para los paquetes de entrada es ACCEPT, pero no te engañes, sólo si los paquetes de entrada están relacionados o pertenecen a un flujo previamente establecido desde el servidor serán aceptados, para el resto, incluidas las conexiones nuevas, se devolvera un paquete ICMP con el código “Host Prohibited”.

Añadir la regla “-A INPUT -m state –state NEW -m udp -p udp –dport 4011 -j ACCEPT”, en principio, debería valer, aceptamos conexiones nuevas al puerto PXE, pero no es así.

No nos queda otra, para ver que está pasando, que instalar un sniffer de red y analizar los paquetes, por ejemplo con wireshark, sucesor del afamado ethreal. Ésto en fedora en bastante fácil, ejecutamos como root #>yum install wireshark wireshark-gnome, y listo. Ahora ejecutamos wireshark, “Aplicaciones->internet->wireshark”, y aplicamos un filtro para ver sólo los paquetes entre nuestro cliente y el servidor, este  puede valer “eth.dst == xx:xx:xx:xx:xx:xx || eth.src == xx:xx:xx:xx:xx:xx”, donde xx:xx:xx:xx:xx:xx, es la dirección ethernet del equipo cliente. Es decir, sólo capturamos los paquetes con origen o destino el equipo cliente.

Los paquetes capturados muestran la negociación dhcp entre el cliente y el servidor, una vez el cliente tiene ip, el servidor devuelve paquetes ICMP  destination unreacheable (host administratively prohobited).

En general esto puede ocurrir por dos motivos, según este tutorial de tcp/ip: http://ditec.um.es/laso/docs/tut-tcpip/3376c24.html,  que son:

  1. Si recibimos el paquete de un router, es porque el router no sabe que hacer con el paquete, como enrutarlo.
  2. Si lo recibimos de un equipo, significa que el protocolo especificado en el campo de número de protocolo del datagrama original no está activo, que ese protocolo no está activo en ese host o bien que es el puerto indicado el que no está activo.

Como sabemos que nuestro cortafuegos es el generador de estos paquetes, basta con buscar el puerto destino en el paquete anterior, para descubir los puertos a los que nuestro cliente pretende conectarse en el proceso de arranque con rembo. Sucesivamente son; 4012 (pda-gate), 4013(acl-manager), 69(tftp), 10008(octopus) y 10009(swdtp-sv).

Por último el cliente establece conxiones con puerto origen 1038 (mtqp) en un puerto arbitrario del servidor rembo.

Con esta información modificamos el fichero /etc/sysconfig/iptables, para permitir estas conexiones, quedando como sigue:

# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 69 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 10008 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 10009 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 4011 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 4012 -j ACCEPT
-A INPUT -m state –state NEW -m udp -p udp –dport 4013 -j ACCEPT
-A INPUT -p udp –sport 1038 -j ACCEPT

-A INPUT -j REJECT –reject-with icmp-host-prohibited
-A FORWARD -j REJECT –reject-with icmp-host-prohibited
COMMIT

En negrita las nuevas reglas. Eso es todo, rembo detrás de un cortafuego restrictivo.

Posted in Sistemas.

Tagged with , , .


Template tag and functions in woordpress; dos caras de la misma moneda

La API de wordpress nos ofrece dos posibilidades para usar en las plantillas (themes) o complementos (plugins), que vienen a ser dos caras de la misma moneda y, como estoy comprobando poco a poco, en muchas ocasiones podemos encontrar, dada una función (functions), un template tag equivalente o viceversa.

http://www.cyberhades.com/wp-content/uploads/2009/12/PHP_Programmers_Brain_3873.jpg

Imagen by www.cyberhades.com

La diferencia entre ambas posibilidades es que los template tag devuelve en resultado formateado en código html, mientras que las functions, lo hacen de la forma que, supuestamente podemos esperar, o bien una cadena de texto, o un array, o un objeto, …. en definitiva en alguno de los tipos de variables posibles en php.

Veamos un ejemplo:

Template tag bloginfo: Muestra información de nuestro blog. ¿Qué información?, pues la que se puede suministrar en el perfil de usuario y en las opciones generales en el panel de administración de wordpress.

Para mostrar por ejemplo el título de nuestro blog podemos poner <? php  bloginfo(‘name’); ?   >.

Observa que no tenemos que hacer “echo” del resultado. La otra cara de la moneda es la función get_bloginfo();

Function get_bloginfo(): Esta función nos devuelve una cadena (string) que podemos después usar en nuestro código php: < ? php $descripcion = get_bloginfo(‘description’); ? >. En “$description” almacenamos la decripción del blog, y después, la mostramos, la pasamos a mayúscula, sustraemos una subcadena, compramos, ….. en definitiva, la obtenemos para un posterior procesamiento.

Os dejo algunos enlaces para profundizar en el tema:

Posted in diseño wordpress, plugins wordpress, Programación, Wpmu.

Tagged with , , , .


Alternativas libres: Openshot 0.8.2

Openshot es una alternativa open-source para edición de video en linux. Para empezar a conocerlo, y abrir una nueva categoría en este blog, “Alternativas libres”, tiramos de audiovisual, en este caso, un video alojado en Vimeo.

A la espera de sacar un ratillo para probrarlo, solo os puedo decir que ha llegado a mis oidos valoraciones positivas varias.

[vimeo]http://vimeo.com/5388329[/vimeo]

Posted in Alternativas libres.

Tagged with , , .


¿Y si virtualizamos?

¿Y si virtualizamos?….. 4 Sistemas operativos corriendo simultaneamente sobre UBUNTU, Utilizando : VirtualBox: Xubuntu + WinXP PearPC : Mac OS X SheepShaver : Mac OS 9.

[youtube]http://www.youtube.com/watch?v=plWRAEzIVSg[/youtube]

Posted in Sistemas.

Tagged with , , .


Como mostrar el nombre de la categoría en wordpress

http://pillateunlinux.files.wordpress.com/2009/06/html.jpg

image vía http://pillateunlinus.files.wordpress.com

Worpress puede cargar un archivo distinto en cada petición de usuario, ya vimos en este blog algo sobre la jerarquía de archivos en una plantilla (aquí el enlace a la documentación en wordpress). Este es el camino, por tanto, para conseguir distintos layout o diseños para la página de inicio (home.php), los resultados de una busqueda (search.php), la lectura de un artículo (single.php), o el diseño de una categoría en particular (category.php), entre otros.

Si éste es nuestro caso: Queremos diseñar un layout distinto al de la página de inicio para mostrar los artículos de cualquier categoría y necesitamos mostrar un encabezado o título, por ejemplo, “Artículos en la categoría: títlulo_de_la_categoría_actual“.

Tenemos una función en la API de wordpress para ello: single_cat_title($prefix,$display). (Ver documentación en wordpress)

Signatura de single_cat_title($prefix,$display):

  • $prefix: String (Opcional). Texto a mostrar antes del título.
  • $display: Booleano (Opcional). Si se muestra el título o no, por defecto su valor es true.

Ejemplo:

single_cat_title(‘Artículos en la categoría: ‘);

Otras funciones relacionadas:

Posted in diseño wordpress.

Tagged with , , , , , .


Roles y capacidades en wordpress mu: capabilities.php

http://blufiles.storage.live.com/y1pdqB0fS5rgxBeLeU7YjuvfKMnCuarNl__ArjkC-HLlnDVvmC1FLe3urh3Sn-jCwsztZOaXZw15lsUno de los archivos involucrados en determinar que puede hacer cada usuario en un sistema wordpress mu es capabilities.php. Este archivo está en el directorio wp-includes. Un vistazo rápido.

En él se definen tres clases:

  • WP_Roles: Roles de wordpress, añadir y borrar roles, añadir y borrar capacidades, obtener roles o una lista de sus nombres.
  • WP_Role: Añadir y borrar capacidades de un determinado rol y conocer si un rol tiene una determinada capacidad.
  • WP_User: Gestiona los roles y capacidades de un usuario: añadir, borrar, obtener ….. tanto roles como capacidades.

Y se definen las funciones:

add_role:

Añade un rol si no existe y devuelve un objeto WP_Role, en caso contrario no hace nada y retorna null.

La signatura de esta función es la siguiente:

null|WP_Role add_role (string $role, string $display_name, [array $capabilities = array()])

Devuelve null o un objeto WP_Role, y los parámetros de entrada son string $role (nombre del rol, interno), string $display_name (nombre del rol a mostrar en la interfaz) y array $capabilities (lista de capacidades del rol).

current_user_can:

Si el usuario actual tiene o no un rol o capacidad.

La signatura de la función es la siguiente: bool current_user_can (string $capability). Devuelve un true o false, el parámetro de entrada es la cadena con el nombre la capacidad o rol.

get_role:

Obtener un objeto de tipo WP_Role.

La signatura: object get_role (string $role), devuelve un objeto de tipo WP_Role, el parámetro de entrada es una cadena con el nombre del rol.

remove_rol:

Si existe borrar un rol.

Signatura: null remove_role (string $role), devuelve null y acepta como parámetro de entrada un string con el nombre del rol.

Posted in Programación, Wpmu.

Tagged with , , , , .


Roles y capacidades en wordpress mu: Introducción y modelo de datos

WordPress mu es un sistema multi-usuario y multi-blog, de ahí que cada usuario del sistema puede ser miembro de más de un blog y en cada uno de ellos puede tener un rol distinto.

Los roles en wordpress mu son:

  • Administrator: Tiene acceso a todas las características administrativas.
  • Editor: Puede publicar y administrar sus propios artículos asi como los de otros usuarios.
  • Author: Puede publicar y administrar sus propios artículos.
  • Contributor: Puede escribir y administrar sus artículos, pero no los puede publicar.
  • Susbcriber: Alguien que puede leer comentarios, escribirlos, recibir boletines de noticias, entre otras cosas.http://bitacoras.com/noticias/wp-content/uploads/2009/07/xmas_wordpress_ex2.png

Lo que cada usuario puede o no puede hacer en el sistema se llama “Capacidad”. Por ejemplo, algunas de las capacidades del rol Editor son: delete_others_pages, delete_others_posts, delete_pages, delete_posts, delete_private_pages, delete_private_posts, delete_published_pages, delete_published_posts, edit_others_pages, edit_others_posts, edit_pages, edit_posts, edit_private_pages…… Los nombres de las capacidades son bastantes descriptivos. En definitiva, el conjunto de capacidades define de forma inequívoca un determinado rol de usuario.

¿Como almacena y gestiona el sistema de roles y capacidades wpmu (wp)?

Modelo de datos:

En la tabla wp_usermeta se guarda meta información de los usuarios, entre ellas el rol de cada usuario en cada uno de sus blogs. Esta tabla tiene 4 campos:

  • umeta_id: Identificador del registro y clave primaria.
  • user_id: Una referencia al identificador de usuario en la tabla wp_users.
  • meta_key: Almacena la “key” para identificar y poder interpretar el valor del siguiente y último campo (meta_value).
  • meta_value: Valor de la “key” del campo anterior (meta_key).

La “key” wp_N_capabilities” indica que el contenido del campo “meta_value” se interprete como el rol del usuario identificado por el valor del campo “user_id” en el blog con idenficador “N”. Una entrada en esta tabla sería de esta forma:

umeta_id user_id meta_key meta_value
6 1 wp_1_capabilities a:1:{s:10:”subscriber”;b:1;}

Está entrada indica que el usuario con id igual a 1, en el blog con identificador 1, tiene el rol subscriber. El valor del campo meta_value, a:1:{s:10:”subscriber”;b:1;}, es bastante enigmático ya que su formato está evidentemente pensado para que sea fácil de procesar por software y no por humanos. Obtener un array a partir de esta cadena con la función explode de php no parece tarea difícil.

Respecto a los capacidades, key wp_N_capabilities, los posibles valores de esta cadena son:

  • a:1:{s:6:”member”;b:1;}
  • a:1:{s:10:”subscriber”;b:1;}
  • a:1:{s:11:”contributor”;b:1;}
  • a:1:{s:6:”editor”;b:1;}
  • a:1:{s:6:”author”;b:1;}
  • a:1:{s:13:”administrator”;b:1;}

La cadena s:11:”contributor” indica que es un string de longitud 11 (s:11).

Las cadenas “a:1” y “b:1” son, de momento, un enigma…… Que espero resolver buceando por el código,…. pero esto para otro artículo.

Posted in Programación, Wpmu.

Tagged with , , .


¿Qué es Android?

Con este artículo inicio una serie dedicada al entorno final de usuario móvil…… bueno, esa es mi idea … no lo aseguro … espero que sí …. ;-)

http://t1.gstatic.com/images?q=tbn:EDGRFih1UB74TM:http://img.xataka.com/2007/11/android.jpg

Image by img.xataka.com

El desarrollo de aplicaciones para móviles, es ya una realidad que no podemos pasar por alto, y si me apuras,…. llegamos tarde. Con precios cada vez más bajos y con cada vez más servicios y de más calidad hace que el uso de estos dispositivos sea cada más frecuente.

En fcom, hemos empezado a hacer un guiño codificando algunos enlaces en qr-code. Con un lector instalado en el móvil, seguir el enlace es tán fácil como activar la cámara, apuntar a la pantalla y elegir “Ir al enlace”.

Empiezo, como no puede ser de otra manera, al menos desde mi punto de vista, enfocando este tema atendiendo a los principios de “software Libre” y “estándares abiertos”, por ética … aunque abordaré también entornos privativos, por….. diría yo…. “profesionalidad”.

¿Qué es Android?

Resumídamente:

  • Andorid es un sistema operativo basado en el nucleo Linux. (Empezamos bien ;-) )
  • Esta plataforma está respaldada por un consorcio de 48 compañías de hardware, software y telecomunicaciones comprometidas con la promoción de estándares abiertos para dispositivos móviles. (Bien, ¿no? ;-) ).
  • Para el desarrollo de software tenemos dos alternativas:
    • Código en Java usando SDK proporcionada por google.
    • Código en C usando NDK, también de google.
  • La mayoría del código para Android está licenciado bajo licencia de software Apache.
  • Google lanzó la última versión de Android, la Cupcake 1.6, en Octubre de 2009.

Arquitectura de Android.

Una imagen vale más que mil palabras.

http://upload.wikimedia.org/wikipedia/commons/thumb/1/13/Diagrama_android.png/800px-Diagrama_android.png

Aunque las palabras también son necesarias. En este caso, menos de mil…. creo.

  • Aplicaciones: Las aplicaciones base incluirán un cliente de email, programa de SMS, calendario, mapas, navegador, contactos, y otros. Todas las aplicaciones estan escritas en lenguaje de programación Java.
  • Framework de aplicaciones: los desarrolladores tienen acceso completo a los mismos APIs del framework usados por las aplicaciones base. La arquitectura está diseñada para simplificar el reutilización de componentes; cualquier aplicación puede publicar sus capacidades y cualquier otra aplicación puede luego hacer uso de esas capacidades (sujeto a reglas de seguridad del framework). Este mismo mecanismo permite que los componentes sean reemplazados por el usuario.
  • Bibliotecas: Android incluye un set de bibliotecas C/C++ usadas por varios componentes del sistema Android. Estas características se exponen a los desarrolladores a través del framework de aplicaciones de Android; algunas son: System C library (implementación biblioteca C standard), bibliotecas de medios, bibliotecas de gráficos, 3d, SQLite, entre otras.
  • Runtime de Android: Android incluye un set de bibliotecas base que proporcionan la mayor parte de las funciones disponibles en las bibliotecas base del lenguaje Java. Cada aplicación Android corre su propio proceso, con su propia instancia de la máquina virtual Dalvik. Dalvik ha sido escrito de forma que un dispositivo puede correr múltiples máquinas virtuales de forma eficiente. Dalvik ejecuta archivos en el formato Dalvik Executable (.dex), el cual está optimizado para memoria mínima. La Máquina Virtual está basada en registros, y corre clases compiladas por el compilador de Java que han sido transformadas al formato.dex por la herramienta incluida “dx”.
  • Núcleo – Linux: Android depende de Linux versión 2.6 para los servicios base del sistema como seguridad, gestión de memoria, gestión de procesos, stack de red, y modelo de controladores. El núcleo también actúa como una capa de abstracción entre el hardware y el resto del stack de software.

Para finalizar:

Una lista de dispositivos con Android:

Y algunas referencias:

Este artículo esta basado en la información que tenemos en la Wikipedia sobre Android. Para empezar, no está mal.

Posted in Programación, Sistemas.

Tagged with , , .


¿Qué es Zembly?

http://ec.mashable.com/wp-content/uploads/2008/07/sometrics-zembly.gif

Zembly es un lugar donde crear y alojar aplicaciones para plataformas sociales (Facebook, OpenSocial, Meebo, iPhone….) de forma colaborativa. Aunque simpre tenemos la posibilidad de coger nuestro código y alojarlo en nuestro propio servidor.

Es y será libre. Por lo tanto, siempre podremos crear y alojar aplicaciones para faccebook, opensocial, widgets,….

Es parte de Sun Mycrosystem. Las aplicaciones construidas en zembly se hospeda en zembly automáticamente se alojan en Sun hardware / software y se ejecuta en network.com ‘s la próxima generación de plataforma cloud-computing.

Zembly es algo así como una Wikipedia de aplicaciones sociales, donde se pueda editar código de manera colaborativa y plantearse el desarrollo de herramientas útiles para gran cantidad de gente. La premisa principal es que el desarrollo de grandes aplicaciones o servicios web puede estar basado en multitud de pequeños widgets, que desde luego pueden ser desarrollados en Zembly.

Zembly se ofrece como PaaS, plataforma como servicio, y no sólo resuelve el problema de la infraestructura hardware – máquinas, ancho de banda, escalado, disponibilidad – sino también varias capas de infraestructura software: el desarrollador en este tipo de soluciones no necesita instalar, configurar y mantener sistemas operativos, sistemas de bases de datos y servidores de aplicaciones…. Solo se centra en desarrollar.

Reblog this post [with Zemanta]

Posted in Programación.

Tagged with , , .




Ir a la barra de herramientas