Fork en Linux

17 03 2008 Programación
    Existen multitud de programas que mantienen varios procesos para poder atender distintas tareas, resolver en paralelo una tarea compleja o ser más eficientes en las respuestas al usuario. Para ello el programa debe ser capaz de lanzar procesos hijos con capacidad para realizar distintas tareas. Cada proceso es completamente independiente pero puede comunicarse con otros empleando fifos o memoria compartida. Una de las estrategias principales que se emplean con este tipo de programa multiproceso es crear un padre y varios hijos, el padre gestiona la creación, destrucción y administración de los procesos hijos. Un buen ejemplo de este comportamiento lo tenemos en el servidor web apache funcionando en modo MPM (Multi-processing Module). Utiliza una estrategia de este tipo para atender múltiples peticiones simultaneas http procedentes de clientes externos. Veamos como consigue hacer esto.

    Para poder iniciar procesos adicionales en una máquina GNU/Linux, procesos adicionales al que se están ejecutando, se emplea el comando fork cuya firma es la siguiente

pid_t fork(void);

    Su definición se encuentra en los archivos de cabecera sys/types.h y unistd.h. En unistd.h está definida la función y en types.h el tipo pid_t que no es más que un identificador de proceso linux PID.

    Fork crea un proceso hijo que se diferencia de su creador únicamente por su PID y por su PPID (Parent PID, identificador del proceso padre del proceso actual). Además el proceso hijo no hereda los bloqueos de fichero ni las señales pendientes de su padre, en otro artículo hablaremos del clone que si los hereda.

    Tras la creación del proceso hijo ambos procesos son ejecutados en "paralelo", es decir, tenemos dos procesos ejecutando el código del programa. La diferencia entre los dos se haya en lo que devuelve la llamada al fork. En cada uno de esos procesos este valor es diferente, para el proceso padre fork devuelve el PID del proceso recién creado y para el proceso recién creado fork devuelve 0, además el PPID del proceso recién creado es el PID del proceso padre (lógico).

    Para conocer el PID y el PPID de un proceso se pueden emplear las funciones getpid y getppid respectivamente. Nuevamente estas funciones están definidas en el archivo de cabecera unistd.h con la siguiente firma:

__pid_t getpid (void)
__pid_t getppid (void)

Ejemplo de fork:


#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>

int main(int argc, char *argv[])
{
pid_t pid;

pid = fork();

if(pid==-1)
{
printf("Fallo al forkear\n");
return -1;
}
else if (!pid)
{
printf("Proceso hijo: PID %d - PPID %d\n", getpid(), getppid());
}
else
{
printf("Proceso padre: PID %d - PPID %d\n", getpid(), getppid());
}
return 0;
}


    Prueba el programa y observa su salida.

    Nota: si quieres conocer el PID del proceso bash de tu consola puedes ejecutar

$ echo $$

    Este debería corresponderse con el PPID del proceso padre que acabas de crear

    Seguiremos con este tema en próximos días




Bookmark Fork en Linux  at del.icio.us Digg Fork en Linux Mixx Fork en Linux Bloglines Fork en Linux Technorati Fork en Linux Fark this: Fork en Linux Bookmark Fork en Linux  at YahooMyWeb Bookmark Fork en Linux  at Furl.net Bookmark Fork en Linux  at reddit.com Bookmark Fork en Linux  at blinklist.com Bookmark Fork en Linux  at Spurl.net Bookmark Fork en Linux  at NewsVine Bookmark Fork en Linux  at Simpy.com Bookmark Fork en Linux  at blogmarks Bookmark Fork en Linux  with wists Bookmark Fork en Linux  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Ataques y daños

16 03 2008 RPG-WEB
    Se han implementado el comando de ataque y los daños sobre los personajes lo que convierte a RPG-WEB en cercano a ser realmente jugable. Se han añadido un buen numero de tilesets y el editor de mapas es ya funcional. La aplicación no es completamente estable debido ha algunos cambios destacables en las comunicaciones cliente-servidor.

    Pasos a seguir:

  • Creación de un subdominio donde alojar la primera pre-alpha del juego

  • Implementar saltos incondicionales que harán que un personaje cambie automáticamente de mapa al pisar una casilla

  • Implementación de trampas

Bookmark Ataques y daños  at del.icio.us Digg Ataques y daños Mixx Ataques y daños Bloglines Ataques y daños Technorati Ataques y daños Fark this: Ataques y daños Bookmark Ataques y daños  at YahooMyWeb Bookmark Ataques y daños  at Furl.net Bookmark Ataques y daños  at reddit.com Bookmark Ataques y daños  at blinklist.com Bookmark Ataques y daños  at Spurl.net Bookmark Ataques y daños  at NewsVine Bookmark Ataques y daños  at Simpy.com Bookmark Ataques y daños  at blogmarks Bookmark Ataques y daños  with wists Bookmark Ataques y daños  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

LDAP, introducción

14 03 2008 Programación
    LDAP significa Protocolo ligero de acceso a datos (Lightweight Directory Access Protocol). Como su nombre indica sirve para acceder a datos tipo directorio (estructurados). El protocolo LDAP está definido en el RFC2251.

    Un directorio es como una base de datos, pero tiende a contener información más descriptiva y basada en atributos. La información en un directorio es generalmente leída mucho más frecuentemente que escrita. Los directorios están optimizados para dar una rápida respuesta a un alto volumen de búsquedas. Cuando la información en un directorio es replicada pueden existir inconsistencias temporales entre las réplicas que finalmente serán sincronizadas.

    Existen muchas maneras distintas de proporcionar un servicio de directorio. Diferentes métodos permiten diferentes tipos de información a almacenar, y diferentes requerimientos de como la información puede ser referenciada, solicitada, actualizada y protegida de accesos no autorizados. Algunos servicios de directorio son locales, proporcionando servicio en un contexto restringido (por ejemplo el servicio finger en máquinas tipo UNIX). Otros son globales permitiendo un contexto de aplicación mucho más amplio.

    LDAP es un servicio de directorio basado en un modelo cliente servidor y que corre bajo conexiones tipo TCP/IP. Uno o más servidores LDAP contienen la información que conforma el árbol de directorios LDAP. Un cliente LDAP se conecta al servidor y le pregunta algo. El servidor responde con la información oportuna y con un puntero que le indica donde puede obtener más información (tipicamente otro servidor LDAP). No importa a que servidor LDAP se conecte un cliente LDAP, este siempre verá el mismo directorio. Este es una característica importante de un servicio de directorio global como es LDAP.

Bookmark LDAP, introducción  at del.icio.us Digg LDAP, introducción Mixx LDAP, introducción Bloglines LDAP, introducción Technorati LDAP, introducción Fark this: LDAP, introducción Bookmark LDAP, introducción  at YahooMyWeb Bookmark LDAP, introducción  at Furl.net Bookmark LDAP, introducción  at reddit.com Bookmark LDAP, introducción  at blinklist.com Bookmark LDAP, introducción  at Spurl.net Bookmark LDAP, introducción  at NewsVine Bookmark LDAP, introducción  at Simpy.com Bookmark LDAP, introducción  at blogmarks Bookmark LDAP, introducción  with wists Bookmark LDAP, introducción  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Firefox 3 más cerca

12 03 2008 Programación
    Ya está aquí la beta 4 del Firefox 3. Ha juzgar por el ritmo con el que están sacando betas y el acabado de estas podemos afirmar que el lanzamiento de la nueva versión de Firefox está bastante cercana. De la escasa semana en la que he estado utilizando las últimas betas de este producto destacaría varias cosas que me han agradado bastante, aunque seguro que hay muchas más que se me han pasado por alto y que estoy deseando descubrir.

    La primera es la forma de añadir bookmarks desde la misma barra de navegación sin necesidad de desplegar ningún menú. De una manera muy similar a como en gmail pasas un correo a 'starred'. Haciendo click sobre una pequeña estrella que se ilumina. Otra de las gratas sorpresas que me he llevado y que seguramente muchos habréis detestado en firefox y en otros navegadores es que cuando introducías un password en un formulario se te daba la opción de recordarlo pero no sabias si ese password lo habías escrito o recordado correctamente. Ahora firefox utiliza una aproximación al problema mucho mejor, una característica que seguro que está para quedarse (habrá que tener cuidado de todas formas en cuando a sus implicaciones en seguridad). En esta nueva manera, tras rellenar el formulario y enviarlo, se te preguntará en la siguiente página cuando ya veas que el acceso se te ha permitido o denegado si quieres almacenar este password mediante una pestaña que se deslizará de arriba a abajo (similar a las solicitudes de instalación de nuevos plugins para contenido especial en la página).

    Hay otra cosas que me han gustado, páginas de sindicación rss/atom rehechas, método de validación de certificados seguros etc. Que añaden ha esta versión mucho más fuerza. El programa responde bien, ocupa menos memoria y parece más rápido en general utilizando ya directamente elementos nativos del sistema operativo (botones, text-box etc).

    Su motor de renderizado pasa la prueba acid2 y queda en buen lugar con la acid3, aunque espero que mejore un poco más en esta última cuando salga la versión final. Ver información sobre estos tests de navegadores

    Espera hay más cosas que se me quedan en el tintero. Al escribir en la barra de direcciones se desplegará el histórico de urls que ya has visitado y que sean similares a la que estas tecleando (autocomplete), pero esta contiene mucha más información -titulo de la página y favicon- para que lo reconozcas más rápidamente. Además la búsqueda entre estas páginas es múltiple y puedes buscar también por su título.

    Otra cosa muy, muy importante es el zoom completo de la página. En versiones anteriores de firefox cuando hacías zoom este era sólo del texto ahora todo el contenido hace zoom. Seguro que esta característica ha tenido bastante entretenido al equipo de desarrollo. Es una pequeña espina que Explorer ya tuviera esta característica en la versión 7.

    Puedes además arrastrar y soltar las pestañas para recolocarlas en la barra superior y así tenerlas más organizadas (se echaba de menos algo así). Bueno, tiene mil características nuevas que son difíciles de describir una a una. He encontrado una página que al menos las enumera bastante bien. Hechadle un vistazo (inglés):

http://www.squarefree.com/burningedge/releases/trunk-for-firefox-3.html

Bookmark Firefox 3 más cerca  at del.icio.us Digg Firefox 3 más cerca Mixx Firefox 3 más cerca Bloglines Firefox 3 más cerca Technorati Firefox 3 más cerca Fark this: Firefox 3 más cerca Bookmark Firefox 3 más cerca  at YahooMyWeb Bookmark Firefox 3 más cerca  at Furl.net Bookmark Firefox 3 más cerca  at reddit.com Bookmark Firefox 3 más cerca  at blinklist.com Bookmark Firefox 3 más cerca  at Spurl.net Bookmark Firefox 3 más cerca  at NewsVine Bookmark Firefox 3 más cerca  at Simpy.com Bookmark Firefox 3 más cerca  at blogmarks Bookmark Firefox 3 más cerca  with wists Bookmark Firefox 3 más cerca  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Tests ACID

08 03 2008 Programación
    Para medir el comportamiento de los diferente navegadores en cuanto a su capacidad para soportar los estandares web se han diseñado las pruebas acid.

    Aqui está la acid2:

ACID 2

    y la acid3:

ACID 3

    Después de visitar estas dos páginas donde podrás observar como queda tu navegador. Aquí tienes una comparativa de resultados de distintos navegadores para la prueba ACID 3

Resultados ACID 3 para diferentes navegadores

Contiene los resultados para Firefox3 beta3 y IE8 beta1 para que podamos ir sacando conclusiones. Como podrás observar no hay ningún navegador que a dia de hoy haya pasado la prueba.

Bookmark Tests ACID  at del.icio.us Digg Tests ACID Mixx Tests ACID Bloglines Tests ACID Technorati Tests ACID Fark this: Tests ACID Bookmark Tests ACID  at YahooMyWeb Bookmark Tests ACID  at Furl.net Bookmark Tests ACID  at reddit.com Bookmark Tests ACID  at blinklist.com Bookmark Tests ACID  at Spurl.net Bookmark Tests ACID  at NewsVine Bookmark Tests ACID  at Simpy.com Bookmark Tests ACID  at blogmarks Bookmark Tests ACID  with wists Bookmark Tests ACID  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

¿Como medir la complejidad?

05 03 2008 Articulos programación
    Con este pequeño artículo trataré de explicar como es posible medir la complejidad de algo, computacionalmente hablando. Aunque ciertamente estas ideas podrían ser utilizadas en otras muchas ramas en donde se presenta un problema que debemos resolver y la eficiencia de su resolución (en tiempo) sea un parámetro importante.

    La resolución práctica de un problema computacional exige por una parte un algoritmo o método de resolución y por otra un programa o codificación (implementación) de ese algoritmo en un ordenador real. El algoritmo es esencial a diferencia de la codificación que puede convertirse en anecdótica, aunque lo más normal es que no lo sea, a fin de cuentas los bugs están en la implementación y no en el algoritmo.

    A efectos prácticos además hay que tomar en consideración la cantidad de recursos, tanto de tiempo como de memoria que la implementación de un algoritmo puede precisar. Este suele depender del tamaño del problema pues el algoritmo y la implementación se deban adaptar a diferentes parámetros de entrada, por ejemplo, no es lo mismo ordenar alfabéticamente un array con nombres para un tamaño de array de 100 que para otro de tamaño 100.000 tanto en tiempo como en memoria empleada. El concepto exacto que mide el tamaño del problema depende de la lógica del mismo y es por lo tanto imposible dar una regla para su medición.

    Aunque el tamaño en memoria que una implementación pueda ocupar debe ser tomado en consideración esto ha dejado de ser problemático debido al aumento de la capacidad de memoria de los equipos y aunque puede parecer que a la capacidad de cálculo le pasa lo misma esto no es así. Y es un error común pensar que la optimización del código pueda ser dejada de lado confiando en la potencia de cálculo de nuestros equipos o de equipos futuros. Es pues el tiempo de ejecución el principal baremo a tener en cuenta a la hora de diseñar un algoritmo o afirmar que un algoritmo es "mejor" que otro.


Continua leyendo "¿Como medir la complejidad?"


Bookmark ¿Como medir la complejidad?  at del.icio.us Digg ¿Como medir la complejidad? Mixx ¿Como medir la complejidad? Bloglines ¿Como medir la complejidad? Technorati ¿Como medir la complejidad? Fark this: ¿Como medir la complejidad? Bookmark ¿Como medir la complejidad?  at YahooMyWeb Bookmark ¿Como medir la complejidad?  at Furl.net Bookmark ¿Como medir la complejidad?  at reddit.com Bookmark ¿Como medir la complejidad?  at blinklist.com Bookmark ¿Como medir la complejidad?  at Spurl.net Bookmark ¿Como medir la complejidad?  at NewsVine Bookmark ¿Como medir la complejidad?  at Simpy.com Bookmark ¿Como medir la complejidad?  at blogmarks Bookmark ¿Como medir la complejidad?  with wists Bookmark ¿Como medir la complejidad?  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

Numeros 'aleatorios' para la mecanica del juego

23 02 2008 RPG-WEB
    Para todos los que conozcan el funcionamiento básico de cualquier juego de rol, está claro que una de las partes más importates de su mecánica es como resolver las acciones que intenta cada personaje, es decir su éxito su fracaso o la posible gradación en los resultados de una acción. Dicen que no todo es blanco ni negro. Es pues importante decidir estas cuestiones y para ello la solución habitual es emplear dados o algún sistema generador de números aleatorios.

    Comenzando con el desarrollo de la mecánica del juego para RPG-WEB, está claro que debemos decidir la manera en que los números aleatorios (nuestras tiradas de dados) van a ser implementadas. Tras darle vueltas al asunto he decidido que para evitar el problema de una distribución erronea de resultados que es propia de una tirada de dados. Donde todos los resultados tienen la misma probabilidad de suceder. Es emplear una distribución Gaussiana donde los resultados más normales, aquellos que son más propios de la habilidad inherente de nuestro personaje, son más probables y los resultados inhabitules, éxitos criticos y pifias tienen menos probabilidad.

    La tirada básica estará pues modificada por esta curva de probabilidad, los parametros que en principio utilizaré y que caracterizan esta distribución es sigma igual a 0.2 y nu igual a 0 multiplicandolo por 100 para dar lugar a un pseudoporcentaje, la inmensa mayoria de los resultados estarán situados en torno a -100 y 100 aunque son posibles resultados mayores y/o menores y donde los resultados en torno a cero serán los mas habituales.

    Todas las tiradas estarán modificados por la habilidad del personaje y suelen contraponerse a una habilidad opuesta en otro pesonaje o a un modificador de dificultad de la acción que se va a llevar a cabo.

Bookmark Numeros 'aleatorios' para la mecanica del juego  at del.icio.us Digg Numeros 'aleatorios' para la mecanica del juego Mixx Numeros 'aleatorios' para la mecanica del juego Bloglines Numeros 'aleatorios' para la mecanica del juego Technorati Numeros 'aleatorios' para la mecanica del juego Fark this: Numeros 'aleatorios' para la mecanica del juego Bookmark Numeros 'aleatorios' para la mecanica del juego  at YahooMyWeb Bookmark Numeros 'aleatorios' para la mecanica del juego  at Furl.net Bookmark Numeros 'aleatorios' para la mecanica del juego  at reddit.com Bookmark Numeros 'aleatorios' para la mecanica del juego  at blinklist.com Bookmark Numeros 'aleatorios' para la mecanica del juego  at Spurl.net Bookmark Numeros 'aleatorios' para la mecanica del juego  at NewsVine Bookmark Numeros 'aleatorios' para la mecanica del juego  at Simpy.com Bookmark Numeros 'aleatorios' para la mecanica del juego  at blogmarks Bookmark Numeros 'aleatorios' para la mecanica del juego  with wists Bookmark Numeros 'aleatorios' para la mecanica del juego  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!

IPC: Sockets

07 03 2007 Articulos programación
    Los sockets son una abstraccion que nos proporciona un estructura de direccionamiento y un conjunto de protocolos utilizado para la comunicacion entre procesos. Estos procesos pueden estar en la misma maquina (dominio local) o en distintas maquinas (dominios de internet).

    Los tipos de sockets definen las propiedades de la comunicación que estarán disponibles para la aplicación. Los procesos solamente pueden comunicarse mediante sockets del mismo tipo. Existen 5 tipos diferentes:

    Stream socket - comunicación en dos sentidos, secuenciada y segura (SOCK_STREAM). En el dominio de internet utiliza el protocolo TCP (similar a una conversación telefónica)

    Datagram socket - comunicación en dos sentidos, no asegura la secuencialidad de los mensajes enviados (un mensaje que ha sido enviado después de otro puede llegar antes que este) y tampoco es segura (el equipo de origen no sabe si el mensaje ha alcanzado su objetivo o no) (SOCK_DGRAM). En el dominio de internet utiliza UDP (similar al envío y recepción de correos)

    Secuencial packet socket - comunicación en dos sentidos, secuenciada y segura para datagramas de tamaño fijo (SOCK_SEQPACKET). No existe protocolo en internet que implemente este tipo de socket.

    Raw socket - Proporciona acceso a la capa de comunicaciones.

    Los sockets son orientados a datagramas pero sus características exactas dependen del interfaz proporcionado por el protocolo.

    La utilidad de conocer y poder realizar aplicaciones que utilizen sockets es indiscutible. Si deseas comunicar tu aplicación con otras aplicaciones en otras maquinas o incluso dentro de tu maquina mismo debes conocer a utilizar los sockets.

Bookmark IPC: Sockets  at del.icio.us Digg IPC: Sockets Mixx IPC: Sockets Bloglines IPC: Sockets Technorati IPC: Sockets Fark this: IPC: Sockets Bookmark IPC: Sockets  at YahooMyWeb Bookmark IPC: Sockets  at Furl.net Bookmark IPC: Sockets  at reddit.com Bookmark IPC: Sockets  at blinklist.com Bookmark IPC: Sockets  at Spurl.net Bookmark IPC: Sockets  at NewsVine Bookmark IPC: Sockets  at Simpy.com Bookmark IPC: Sockets  at blogmarks Bookmark IPC: Sockets  with wists Bookmark IPC: Sockets  at Ma.gnolia.com wong it! Bookmark using any bookmark manager! Stumble It!