Búsqueda personalizada

domingo, 21 de septiembre de 2008

Microsoft Patenta navegador GPS modular

Desde pequeño me gustaron los legos, pero esto es demasiado, Microsoft ha patentado un navegador de GPS modular al que le puedes ir añadiendo otros dispositivos y funciones como teléfono móvil, cámara digital, micrófono, teclado, conectividad WiFi, lector de tarjetas flash, una batería adicional, etc.

La idea de este dispositivo sería ofrecer un producto moldeado según las necesidades del usuario y reducir los precios de entrada. Esta idea puede ser excelente de llevarse a cabo con un buen diseño (tanto de hardware como de software) permitiéndonos ir acomodando el gadget a nuestras necesidades, pero con un mal diseño o precios muy altos puede ser un estrepitoso fracaso.

Esperemos que no sea sólo una patente al aire y que sea un nuevo producto de MS que veamos, al menos, a mediano plazo (cuestión que dudo, pero soñar es gratis).

Fuente : FayerWayer

viernes, 19 de septiembre de 2008

QuickPwn jailbreak Iphone 3g Windows GUI


Bueno despues de esperar varios dias a que apareciera esta herramienta para windows lo ha hecho hoy, la cual como sabras sirve para jailbreak tu iphone (acuerdate que haciendo esto queda sin garantia tu equipo)
Aqui el link a la pagina oficial para que puedas bajar la aplicacion

Quickpwn for Windows GUI

BlackBerry Storm


Se desató la tormenta; y no, no hablo de Ike. BlackBerry apunta a crear un nuevo estándar en lo que a teléfonos táctiles se refiere, con un nuevo producto del que les habíamos hablado antes, la 9530 (Storm, para los amigos).

Este video de distribución interna estaba dirigido a los empleados… pero uno de ellos no pudo quedarse en silencio y lo subió a YouTube. En él, se ve a Mike Lanman, Chief Manager Officer de Verizon -compañía que tendrá la exclusividad en USA- comentando las bondades de este nuevo aparatejo de RIM.

En una filmación que parece sacada de 1980, Lanman explica detalles técnicos del aparatejo: tiene una vistosa pantalla táctil que ofrece una excelente resolución y el mejor tiempo de respuesta del mercado, cámara de 3,2 MP que soporta grabación de videos, 3G, Visual VoiceMail (OMFG!), navegador web, etcétera… sobre todo etcétera.

Ventana externa

No hay mención alguna a precios o una fecha de lanzamiento clara, pero lo que es claro es que en Verizon le tienen mucha fe a la nueva BlackBerry. ¿Será que alguna compañía lo traerá pronto a Chile? No sé a ustedes, pero a mí me parece una perfecta oportunidad para que cierta compañía (cuyo nombre termina en PCS) dé un golpe al mercado con un equipo de excelentes características.

Prepara tus maletas, iPhone… hay un nuevo chico en el barrio

SDK para televisores Bravia


¿Desarrollar aplicaciones para nuestro televisor? De entrada es algo que no hubiéramos imaginado posible, pero también nos hubiera parecido raro hace años si nos hubieran dicho lo mismo de nuestro reproductor de música y ahí tenemos al iPod touch.

Pero teniendo en cuenta que cada vez son más los dispositivos que disponen de conexión a Internet tiene lógica que estos ofrezcan mayores capacidades y, por qué no, la posibilidad de crear nuestras propias aplicaciones. De momento, es Sony la que ofrece un SDK para sus televisores Sony Bravia.

La idea es desarrollar un modelo similar al que Apple ha implementando con su App Store para el iPhone e iPod touch, de forma que los desarrolladores puedan ofrecer sus aplicaciones y los usuarios descargarlas de forma sencilla. No queda muy claro si se ofrecerían versiones gratuitas u opciones de pago para ellas.

El SDK, que funciona solo bajo Windows XP y Vista, incluye un emulador con el que poder probar estas aplicaciones. De momento son muy pocas las que están disponibles, incluyendo un lector de RSS, un reloj y algunos pequeños juegos, pero si las APIs ofrecen acceso a datos de lo que estamos viendo se me ocurren unas cuantas posibilidades más que interesantes.

Así, podríamos estar viendo una serie en nuestro Sony Bravia mientras en el lateral se nos ofrece información sobre ella, los actores que participan o hasta el argumento general, incluso podríamos chatear con otros que estuvieran viendo la serie. Es solo un ejemplo, pero las posibilidades son casi ilimitadas, siempre que el SDK sea suficientemente potente.

Por ahora solo está disponible en japonés, así que habrá que estar atentos a ver si lanzan una versión internacional.


Fuente : Gizmodo

jueves, 18 de septiembre de 2008

Sliderocket abierto al publico


Bueno entre tantas cosas que he visto ultimamente de servicios web 2.0 he estado probando ahora que se abrio al publico esta web, lo cual en una prueba de uso lo encontre bastante sencillo y comprensible de ocupar, para crear presentaciones con solo hacer un par de clicks, dense una vuelta por el sitio para probarlo, esta en fase beta todavia pero es cuestion de tiempo que estemos desarrollando presentaciones de excelente calidad con este servicio

www.sliderocket.com

miércoles, 17 de septiembre de 2008

Google Audi


Como ya no es gran cosa para Google indexar palabras escritas y como ya se está aburriendo de organizar más de un Billón de sitios en Internet, su próxima movida es el audio, anunciando hoy su nuevo servicio GAudi.

Esta nueva modalidad fue diseñada para trabajar en YouTube, y va a catalogar todas las palabras para así crear una transcripción del audio. El texto resultante será puesto en una base de datos para ser indexado tradicionalmente en su buscador.

Por el momento el servicio está en Beta y sólo está transcribiendo las tonteras los videos de política en los EEUU, así que, o te dedicas a producir videos de tu candidato preferido, o esperas hasta que el servicio salga de Beta… hmmm.. digamos ¿en, unos 5 años más?

Fuente: FayerWayer

Google lanzará su sistema operativo portátil

El próximo 23 de septiembre se desvelarán detalles sobre su lanzamiento.

Android debutará en un equipo fabricado por HTC.

En menos de un mes, Google realizará dos anuncios que apuntan a mercados desconocidos para ellos y donde Microsoft, su principal rival, le lleva harta ventaja. A comienzos de mes, liberó a Chrome, su primer navegador de internet. Ahora, anunciará el estreno de Android, su sistema operativo para celulares.

Según informó "The New York Times", este 23 de septiembre se celebrará una conferencia en la que se conocerán detalles sobre el celular basado en Google Android, que comercializará la empresa T-Mobile.

La fecha de lanzamiento, los precios o la compatibilidad con programas informáticos son algunas de las grandes preguntas que esperan ser resueltas cuando se celebre la rueda de prensa donde se sabrá si el nuevo teléfono podrá competir con el iPhone y el Blackberry.

Se espera que Android se transforme en un contendiente serio para plataformas de teléfonos inteligentes como Windows Mobile, de Microsoft; Symbian; y el que utiliza Blackberry de RIM.

Varios fabricantes esperan la presentación de equipos con esta tecnología para instalar el sistema operativo en sus propios modelos.

En la red algunos sitios ya publican la presunta fotografía del mencionado teléfono de HTC y aseguran que además de competir en el mercado 3G, Google entrará de lleno en el mercado virtual de las aplicaciones

Fuente : Cooperativa.cl

sábado, 7 de junio de 2008

Sitio Web de Amazon se recupera lentamente despues de la caida de sus servidores

El sitio Web de Amazon, uno de los mas grandes tiendas de retailer online, sufrio una caida a las 10:37 am ( Viernes 6 de Junio, hora del Pacifico) de acuerdo a un post del foro de discucion de amazon.

Cerca de las 1:30 pm el sitio volvio lentamente a estar online.

El post titulado "Amazon Un-Planned Event (06/06) " (evento no planificado de Amazon) dice, "estamos actualmente investigando un tema que impacto en la disponibilidad del sitio Amazon.com. Ingenieros estan activamente comprometidos in resolver este tema y le daremos mayor informacion una vez que este resuelto. Apreciaremos su paciencia durante este tiempo".

Amazon no dio espacio para poder poner un comentario.

Durante el tiempo que duro el problema, al tratar de ingresar a Amazon daba el siguiente mensaje de error "Lo lamentamos!, un error ocurrio cuando tratamos de procesar tu requerimieto. Estamos ya trabajando en el problema y esperamos resolverlo cortamente. Si ud estaba intentando de hacer una compra, por favor verifique Su Cuenta para confirmar que la orden fue tomada. Le pedimos disculpas por el inconveniente"

Durante ese tiempo, la pagina inicial aparecia disponible en su version Segura (https://www.amazon.com), pero los links no funcionaban.

viernes, 21 de marzo de 2008

Links de interes para la instalacion de pvm y Aurora Linux

Bueno ahora pondre algunos links de interes para conseguir pvm


Pvm en rpm para distintas distribuciones
Rpm Varios


Pvm Oficial si no pueden con los rpm

Home page : http://www.csm.ornl.gov/pvm/
Para Bajar el codigo y compilarlo : http://www.netlib.org/pvm3/pvm3.4.5.tgz

Pagina oficial de Aurora : http://auroralinux.org/


Para Descargar las Iso, yo solo ocupe los 2 primeros cd (la version 1.0 )asi que bajen esas por mientras para que tengan lista las iso para cuando tengan instalarlo en las maquinas, la otra opcion es Solaris, voy a averiguar cuando tengan la version exacta para que la puedan instalar:

Iso

ya eso, cualquier cosa al mail

darkrandor@hotmail.com

viernes, 25 de enero de 2008

Como Compilar y ejecutar programas con PVM

Antes de compilar se tendrá que comprobar que la PVM esta activa de la siguiente forma:

$$>$pvm

Una vez activada la PVM utilizaremos el comando quit para salir de esta.

Seguidamente se creará un archivo llamado Makefile.aimk que esta en la carpeta Examples en Pvm, que tendrá la siguiente estructura:

DEBUG =

SDIR = ..

BDIR = $(HOME)/pvm3/bin

#BDIR = $(SDIR)/../bin

XDIR = $(BDIR)/$(PVM_ARCH)

CC = gcc

OPTIONS = -g

CFLAGS= $(OPTIONS) -I$(PVM_ROOT)/include $(ARCHCFLAGS)

LIBS = -lpvm3 $(ARCHLIB)

GLIBS = -lgpvm3

LFLAGS= $(LOPT) -L$(PVM_ROOT)/lib/$(PVM_ARCH)

default: nombre_programa -master nombre_programa-slave

nombre_programa-master : $(SDIR)/ejer5-master.c $(XDIR)newli $(CC) $(DEBUG) $(CFLAGS) -o $@ $(SDIR)/ejer5-master.c $\backslash $

$(LFLAGS) $(LIBS) -lm

cp $@ $(XDIR)

nombre_programa-slave : $(SDIR)/nombre_programa-slave.c $(XDIR)

$(CC) $(DEBUG) $(CFLAGS) -o $@ $(SDIR)/nombre_programa-slave.c $\backslash $

$(LFLAGS) $(LIBS) -lm

cp $@ $(XDIR)

$(XDIR):

- mkdir $(BDIR)

- mkdir $(XDIR)

clean:

rm -f *.o nombre_programa-master nombre_programa-slave $(XDIR)/nombre_programa-master $(XDIR)/ nombre_programa -slave

Para compilar los programas fuentes únicamente se tendrá que hacer:

$$>$ aimk

En el caso de que se quiera borrar los código objeto:

$$>$ aimk clean

Una vez que tenemos los programas ya compilados para ejecutarlos se realizará lo siguiente:

$$>$ programa-master Numero de procesos

Instalacion Pvm

Bueno continuando con el tema de Pvm vamos a ver la instalación correspondiente

Se Descargo el paquete(http://rpm.pbone.net/index.php3/stat/4/idpl/2396522/com/pvm-3.4.3-4.i386.rpm.html) en formato fuente y .rpm y se instalo en todas las maquinas usando el comando.


rpm -ivh pvm-3.4.3-4.i386.rpm


Con esto se instalo en nuestro sistema el programa PVM y el compilador aimk , el paso siguiente fue configurar las variables de entorno agregando esto al fichero ~/bashrc


export PVM_ROOT=/usr/share/pvm3
export PVM_ARCH=LINUX
export PATH=$PATH:$PVM_ROOT/lib:$HOME/pvm3/bin/$PVM_ARCH
export PVM_DPATH=$PVM_ROOT/lib/pvmd
export PVM_RSH=/usr/bin/ssh
export MANPATH=$MANPATH:$PVM_ROOT/man


Donde PVM_ROOT es el directorio donde se instalo el programa PVM_ARCH representa la arquitectura del sistema en el que se intalo la herramienta en nuestro caso contamos con 2 arquitecturas distintas LINUX para la maquina intel (x86)y LINUXSPARC para las station.


Tambien es necesario hacer notar que por defecto PVM trabajo con conexión mediante rsh lo que se cambio a SSH mediante la cariable PVM_RSH.


Existe otra manera de cambiar la ultima opcion que consiste en cambiar antes de compilar el pvm el archivo ../pvm3/conf/LINUXSPARC.def, el cual es para cuando se compila el programa (cuando no haya el sistema de paquetes rpm), si es ese el caso primero hay que configurar las variables de entorno para que se pueda compilar sin problemas


Luego el siguiente paso fue ejecutar pvm y configurar algunos aspectos extras, desde pvm.

pvm>add con este comando agregamos la lista de maquinas que correran pvm como lo muestra la siguiente imagen (conf muestra las maquinas agregadas)




Luego en las maquinas se procedio a configurar el compilador aimk modificando el fichero Makefile.aimk con los siguientes cambios:

# $Id: Makefile.aimk,v 1.16 1998/11/20 19:46:41 pvmsrc Exp $

#

# Makefile.aimk for PVM example programs.

#

...

#

SHELL = /bin/sh

# CAMBIO 1

#PVMDIR = ../..

# se sustituye por

PVMDIR = /usr/share/pvm3/

#CAMBIO 2

#SDIR = $(PVMDIR)/examples

#se sustituye por

SDIR = $(HOME)/pvm3/examples

# CAMBIO 3

#BDIR = $(PVMDIR)/bin

se sustituye por

BDIR = $(HOME)/pvm3/bin

XDIR = $(BDIR)/$(PVM_ARCH)

CFLOPTS = -g

CFLAGS = $(CFLOPTS) -I$(PVMDIR)/include $(ARCHCFLAGS)

##### Need to select some architecture-specific libraries to link tasks

# The default setup is for workstations

### Select PVMLIB depending on architecture.

# For MPPs (PGON and AIX4SP2/SP2MPI) select:

# PVMLIB = -lpvm3pe

# For Workstations and shared memory architectures select:

# PVMLIB = -lpvm3

PVMLIB = -lpvm3


A continuacion se compila un prograama para chequear el correcto funcionamiento de la herramienta, y esto se hace mediante un ejemplo clasico el HolaMundo que viene en los ejemplos de PVM, se compila con aimk mediante el siguiente comando:

$ aimk hello

Luego con el comando spawn dentro de pvm iniciamos el subprograma hello como se ve en la imagen y el llamado a otra maquina en este caso se ejecuto desde Rocco y llamo a Keyra





Como paso final se creo el archivo pvm.hosts el cual contiene los nombre o en su defecto las Ip de las maquinas que se desean agregar al iniciar el demonio pvmd, el cual se ejecuta al inicio con el comando add


$pvm>add pvm.hosts

viernes, 18 de enero de 2008

Funciones Pvm

a) Control de procesos

pvm_mytid():Esta función incorpora a la PVM al proceso que la invoca, propor

cionándole un número de tarea único en toda la máquina virtual,

denominado tid. Esta función debe ser la primera rutina que se in

voque antes de cualquier otra.

pvm_exit(): Comunica al demonio local que el proceso está abandonando la

PVM. Esta primitiva no elimina el proceso en sí, sino que éste

continúa pero como un proceso convencional de UNIX.

pvm_spawn():Inicializa un conjunto de tareas que se incorporarán a la PVM.

Para determinar en qué EP se van a crear estas nuevas tareas, la

heurística utilizada podría estar diseñada en función de las medi

das de carga de los EP de la PVM y de la capacidad de cómputo

de los mismos. La función devuelve el número de tareas creadas

en una o más máquinas de la configuración.

Si las tareas han sido inicializadas correctamente, como pará

metro de salida, devuelve un vector con los tids y en caso que

alguna tarea no haya podido ser inicializada, devuelve en su

correspondiente componente del vector, un código de error,

indicando el motivo por el que no ha podido iniciarse dicha

tarea.

pvm_kill(): Elimina de la PVM la tarea identificada por el parámetro tid.

b) Información de la máquina virtual

pvm_parent(): Devuelve el tid del proceso que creó la tarea que invoca a esta

función. Si existe algún error devuelve un error tipo

PvmNoParent.

pvm_pstat(): Devuelve el estado de una tarea PVM identificada por tid.

Devuelve PvmOk si la tarea está en ejecución, PvmNoTask si no

lo está, y PvmBadParam si el tid es incorrecto.

pvm_mstat(): Devuelve PvmOk si el EP está ejecutando tareas PVM,

PvmHostFail si no es posible acceder al EP, o PvmNoHost si ese

EP no está en la PVM. Esta función es útil en el diseño de

aplicaciones tolerantes a fallos. En todo momento se puede

interrogar por el estado de cualquiera de las máquinas

involucradas en la maquina virtual

pvm_config(): Devuelve información acerca de la PVM, incluyendo el número

de EPs, tipo de arquitecturas, etc.

pvm_tasks(): Devuelve información sobre las tareas en ejecución en la PVM.

c) Configuraciones dinámicas

pvm_addhost (), pvm_delhost () :Estas primitivas permiten añadir o eliminar

un EP de la configuración inicial de la PVM.

d) Primitivas de señalización

pvm_sendsig(): Envía la señal signum a otra tarea PVM identificada por un tid.

pvm_notify(): Provoca el envío de un mensaje a una serie de tareas

especificadas, al ocurrir un evento en la PVM. Los posibles

eventos que pueden ocurrir son: una tarea ha finalizado, una

máquina ha caído o ha sido eliminada, o si se ha añadido una

nueva máquina.

e) Primitivas de mensajes de error

pvm_error(): Imprime el estado de error de la última primitiva PVM.

pvm_serror(): Seleccionar esta rutina permite enviar mensajes de error de

forma automática, y de esta forma cualquier error que se

produzca, automáticamente notificará el mensaje de error

asociado.

f) Envío y recepción de mensajes

El envío de mensajes conlleva los pasos siguientes:

· Se debe inicializar un buffer de envío a través de una primitiva particular.

· Los datos que van a ser enviados deben ser empaquetados (primitivas de

empaquetado).

· El mensaje se envía a otro proceso (primitivas de emisión).

Un mensaje podrá ser recibido a través de una primitiva de recepción con o sin

bloqueo. Después se debe desempaquetar cada elemento del mensaje. En la PVM, sólo existe un buffer de envío y otro de recepción activos por cada proceso en un instante dado. El usuario es responsable de gestionar qué tipo de mensaje está activo en cada momento, pudiendo crear los que sean necesarios.

pvm_mkbuf(): Crea un buffer de envío vacío y especifica un código para

designarlo. Existen varias opciones para la codificación de

los datos en este mensaje, dependiendo del valor de la

constante encoding:

· PvmDataDefault. Codificación estándar XDR.

· PvmDataRaw. No realizar codificación.

· PvmDataInPlace. Los datos se quedan en el mismo EP.

pvm_initsend(): Limpia el buffer de envío y lo prepara para empaquetar

nuevos datos. Esta primitiva debe ejecutarse antes de

empaquetar los datos. Los valores de encoding son los

mismos que en la función anterior.

pvm_freebuf(): Elimina el buffer identificado por el parámetro bufid. Se

debe ejecutar esta primitiva siempre que se deje de utilizar

este buffer.

pvm_getsbuf(): Devuelve el número del buffer de envío activo en ese

momento.

pvm_getrbuf(): Devuelve el número del buffer de recepción activo.

pvm_setsbuf(): Selecciona el nuevo buffer de envío activo y devuelve el

identificador del anterior.

pvm_setrbuf(): Selecciona el nuevo buffer de recepción activo, retornando el

identificador del anterior. El empaquetado de los datos se

realiza con diferentes primitivas que empaquetan un

conjunto de elementos del mismo tipo en el buffer de envío

activo. Estas primitivas pueden ser llamadas múltiples veces

y en cualquier orden. De esta forma, un mensaje puede

contener varios vectores de datos de distintos tipos. No

existen restricciones relativas a cuan complejos pueden ser

estos mensajes. La única condición que existe es que se

deben desempaquetar en el mismo orden en que fueron em

paquetados. Se dispone de primitivas para empaquetar

bytes, enteros, reales, complejos, caracteres, etc.

El envío y recepción de datos se lleva a cabo con las siguientes primitivas.

pvm_send(): Esta primitiva etiqueta un mensaje con un valor entero,

msgtag, que indica un número de mensaje, y lo envía a una

tarea especificada por un tid.

pvm_mcast(): Etiqueta el mensaje con un identificador entero, msgtag, y lo

envía a las tareas especificadas por tids.

pvm_nrecv(): Recepción sin bloqueo. Si el mensaje solicitado no ha sido

recibido, esta primitiva devuelve un cero. Esta rutina puede

ser invocada repetidamente para solicitar el mensaje y

comprobar si ha llegado. Mientras el mensaje llega, se

puede seguir realizando otro trabajo entre dichas llamadas.

Si llega un mensaje con etiqueta específica desde una tarea

tid concreta, entonces se colocará el mensaje en el buffer

activo.

pvm_recv(): Primitiva de recepción con bloqueo. Espera hasta que un

mensaje con la etiqueta especificada y/o con tid

determinado haya llegado.

pvm_bufinfo(): Devuelve información acerca del mensaje con el

identificador especificado.

pvm_recvf(): Uso de definiciones propias de la primitiva de recepción de

mensajes.

g) Primitivas de grupos de procesos

Estas funciones permiten controlar un conjunto de procesos que por cuestiones del problema a resolver, interesa que estén agrupadas. Cuestiones como la sincronización de los procesos, se pueden realizar permitiendo que todos los procesos pertenezcan a un grupo. Dentro de un grupo, se pueden realizar diferentes funciones que aquí comentamos. Cualquier tarea PVM puede incorporarse o abandonar un grupo de procesos en cualquier momento sin tener que informar al resto de tareas del grupo.

pvm_joingroup (): Permite que una tarea se incorpore al grupo. Crea un

grupo con el nombre especificado y asigna la tarea a ese

grupo. A cada tarea, al incorporarse a un grupo, se le

asigna un número, a través del cual se gestionan los

grupos.

pvm_lvgroup(): Una tarea abandona un grupo invocando a esta primitiva.

En caso de volver a incorporarse, el número asignado

será posiblemente distinto al que tenía anteriormente.

Los números se asignan dinámicamente.

pvm_gettid(): Devuelve el tid del proceso que está en un grupo con un

número determinado.

pvm_getinst(): Devuelve el número que tiene una tarea dentro de un grupo.

pvm_gsize(): Devuelve el número de miembros que existen en un grupo.

pvm_barrier(): Cuando se invoca a esta función, el proceso se bloquea en

espera de que todas las tareas implicada ejecuten esta

función.

pvm_cast(): Etiqueta un mensaje con un identificador entero, y envía el

mensaje a todas las tareas de un grupo determinado. Si una

tarea se incorpora a un grupo durante la llegada de este

tipo de mensajes, podría no recibirlo.

Pvm Informacion General

La herramienta Pvm, es un conjunto de librerias necesarias para trabajar con el concepto de clusters y crear una maquina paralela virtual. Para que Pvm funcione necesariamente tiene que estar funcionando la red de computadores, permitiendo la conexión de los mismos y el inicio de sesiones en hosts remotos.

La maquina paralela virtual es una maquina que no existe, pero un API apropiado nos permite programar como si existiese. El modelo abstracto que nos permite usar el API de la Pvm consiste en una maquina multiprocesador completamente escalable (es decir, que podemos aumentar y disminuir el numero de procesadores en caliente, esto en cualquier momento). Para ello, nos va a ocultar la red que estemos empleando para conectar nuestras maquinas, asi como las maquinas de la red y sus caracteristicas especificas.

Demonio Pvm

La arquitectura de la pvm se compone de dos partes. La primera parte es el demonio, llamado Pvmd. El demonio ha de estar funcionando y configurado en todas las maquinas que vayan a compartir sus recursos computacionales con la maquina paralela virtual. A diferencia de otros demonios y programas del sistema, el demonio de Pvm puede ser instalado por el usuario en su directorio particular (de hecho, la instalacion por defecto es asi). Esto nos va a permitir hacer supercomputacion como usuarios, sin tener que discutir con el administrador de la red que programas vamos a poder ejecutar. Una vez que un usuario instalo en un directorio Pvm todo los usuarios pueden hacer uso de esa instalacion con el requisito de que el directorio donde esté instalada Pvm sea de lectura al usuario que quiera hacer uso de ella.

El demonio Pvmd es el responsable de la maquina virtual de por sí, es decir, de que se ejecuten nuestros programas para Pvm y de gerenciar los mecanismos de comunicación entre máquinas, la conversión automatica de datos y de ocultar la red al programador. Por ello, una vez que Pvm esté en marcha, el paralelismo es independiente de la arquitectura de la maquina, y solo depende de la arquitectura ed la maquina virtual creada por Pvm. Esto nos va a evitar el problema que teniamos con los Sockets, ya que teniamos que hacer una rutina de codificacion y otra de decodificacion, al menos, por cada arquitectura distinta del sistema.

Cada usuario, arrancará el demonio como si de un programa normal se tratase, para ejecutar el codigo de Pvm. Este programa se queda residente, realizando las funciones anteriores.

Biblioteca de desarrollo

La segunda parte es la biblioteca de desarrollo. Contiene las rutinas para operar con los procesos, transmitir mensajes entre procesadores y alterar las propiedades de la maquina virtual. Toda aplicación se ha de enlazar a la biblioteca para poderse ejecutar después. Tendremos tres ficheros de bibliotecas, la libpvm3.a (biblioteca basica en C), la libgpvm3.a (biblioteca de tratamiento de grupos) y la libfpvm3.a (biblioteca para fortran)

Tareas

Un programa para Pvm va a ser un conjunto de tareas que cooperan entre si. Las tareas se van a intercambiar información empleando paso de mensajes. Pvm, de forma transparente al programador, nos va a ocultar las transformaciones de tipos asociadas al paso de mensajes entre maquinas heterogeneas. Toda tarea de Pvm puede incluir o eliminar maquinas, arrancar o parar otras tareas, mandar datos a otras tareas o sincronizarse con ellas.

TIDs

Cada tarea en Pvm tiene un número que lo identifica inequívocamente, denominado TID (Task Identification Number). Es el numero al que se mandan los mensajes habitualmente. Sin embargo, no es el unico metodo de referenciar una tarea en Pvm. Muchas aplicaciones paralelas necesitan hacer el mismo conjunto de acciones sobre un conjunto de tareas. Por ello, Pvm incluye una abstracción nueva, el grupo

Grupos

Un grupo es un conjunto de tareas a las que nos podemos referir con el mismo codigo, el identificador de grupo. Para que una tarea entre o salga de un grupo, basta con avisar de la salida o entrada al grupo. Esto nos va a dotar de un mecanismo muy comodo y potente para realizar programas empleando modelos SIMD (Single Instruction, Multiple Data), en el que vamos a dividir nuestros datos en muchos datos pequeños que sean faciles de tratar, y después vamos a codificar la operación simple y replicarla tantas veces como datos unitarios tengamos de vivir el problema. Para trabajar con grupos, ademas de enlazar la biblioteca de Pvm (libpvm3.a) tenemos que enlazar tambien la de grupos (libgpvm3.a)

Funcionamiento

Habitualmente para arrancar un programa para Pvm, se lanzará manualmente desde un ordenador contenido en el conjunto de maquinas una tarea madre. La tarea se lanzará con el comando spawn desde un monitor de la maquina virtual, que a su vez se activará con el comando pvm. Esta tarea se encargará de iniciar todas las demás tareas, bien desde su funcion main (que va a ser la primera en ejecutarse), bien desde alguna subrutina invocada por ella. Para lanzar nuevas tareas se emplea la funcion pvm‗spawn, que devolverá un código de error, asociado a si pudo o no crearla, y el TID de la nueva tarea.

Clases de Arquitectura

Para evitar el problema de andar realizando transformaciones continuas de datos, Pvm define clases de arquitectura. Si es la misma, no necesita convertir datos, con lo que se tiene un gran incremento en el rendimiento. En caso que sean distintas las clases de arquitectura se emplea el protocolo XDR para codificar el mensaje.

Las clases de arquitectura están mapeadas en números de codificacion de datos, que son los que realmente se transmiten y, por lo tanto, los que realmente determinan la necesidad de la conversión

Paso de Mensajes

El modelo de paso de mensajes es transparente a la arquitectura para el programador, por la comprobación de las clases de arquitectura y la posterior codificación con XDR de no coincidir las arquitecturas. Los mensajes son etiquetados al ser enviados con un número entero definido por el usuario, y pueden ser seleccionados por el receptor tanto por dirección de origen como por el valor de la etiqueta.

El envío de mensajes no es bloqueante. Esto quiere decir que el que envía el mensaje no tiene que esperar a que el mensaje llegue, sino que solamente espera a que el mensaje sea puesto en la cola de mensajes. La cola de mensajes, además, asegura que los mensajes de una misma tarea llegarán en orden entre si. Esto no es trivial, ya que empleando UDP puede que enviemos dos mensajes y que lleguen fuera de orden (UDP es un protocolo no orientado a conexión). TCP, por ser un protocolo orientado a la conexión, realiza una reordenación de los mensajes antes de pasarlos a la capa superior, sin embargo, tiene el inconveniente que establecer las conexiones entre nodos empleando TCP supone, si tenemos n nodos, tendremos un mínimo de

($n)(n$-1) conexiones TCP activas. Provocando esto que hasta para números ridículos de $n$ nos quedamos sin puertos por éste planteamiento. Establecer conexiones TCP entre procesos en lugar de entre nodos es peor todavía, por las mismas razones que en el caso de los nodos.

La comunicación de las tareas con el daemon se hace empleando TCP. Esto se debe a que, al ser comunicaciones locales, la carga derivada de la apertura y cierre de un canal es muy pequeño. Además, no vamos a tener tantas conexiones como en el caso de la conexión entre daemons, ya que las tareas no se conectan entre sí ni con nada fuera del nodo, por lo que sólo hablan directamente con su daemon. Esto determina que serán n conexiones TCP, que sí es una cifra razonable.

La recepción de los mensajes podemos hacerla mediante primitivas bloqueantes, no bloqueantes o con un tiempo máximo de espera. La PVM nos dotará de primitivas para realizar los tres tipos de recepción. En principio nos serán más cómodas las bloqueantes, ya que nos darán un mecanismo de sincronización bastante cómodo. Las de tiempo máximo de espera nos serán útiles para trabajar con ellas como si fuesen bloqueantes, mas dando soporte al hecho de que puede que el que tiene que mandarnos el mensaje se haya colgado. Por último, la recepción de mensajes mediante primitivas no bloqueantes hace de la sincronización un dolor de cabeza. De cualquier forma, en los tres casos anteriormente citados la misma PVM se encargará de decirnos cuándo una tarea acabó. Para informarnos de lo que pasa, emplea un mecanismo de eventos asíncronos.

La PVM puede ser empleada de forma nativa como funciones en C y en C++, y como procedimientos en Fortran. Basta para ello con tomar las cabeceras necesarias (si trabajamos con C o C++); y, para los tres, enlazar con la biblioteca adecuada, que viene con la distribución estándar. En el caso de C es libpvm3.a y en el del Fortran libfpvm3.a.

Si deseamos trabajar en otros lenguajes puede ser un poco más complejo. Si el lenguaje permite incorporar funciones nativas en lenguaje C (como es el caso, por ejemplo, de Java) no hay ningún problema; ya que podemos invocar la función; bien directamente si el lenguaje lo permite, bien haciendo alguna pequeña rutina para adaptar el tipo de los datos, el formato de llamada a función o cualquiera de las restricciones que nos imponga el lenguaje que empleemos para invocar funciones en C.

Hemos de destacar que toda función en C pvm_alguna cosa tiene como equivalente en Fortran pvmfalgunacosa, y viceversa.

El programa PVM corresponde al interprete de comandos de nuestra máquina virtual. Algunos de los comandos más importantes son:

* add máquina: Incorpora la máquina indicada a la máquina paralela virtual.

* delete máquina: Elimina la máquina indicada del conjunto de máquinas

asociadas a la máquina paralela virtual. Como es lógico, no podremos

eliminar la máquina desde la que estamos ejecutando el interprete de

comandos.

* conf: Configuración actual de la máquina paralela virtual.

* ps: Listado de procesos de la máquina paralela virtual. ps -a lista todos los

procesos.

* halt: Apaga la máquina paralela virtual. Esto significa que mata todas las

tareas de la PVM, elimina el daemon de forma ordenada y sale del

programa pvm.

* help: Lista los comandos del programa.

* id: Imprime el TID de la consola.

* jobs: Genera un listado de los trabajos en ejecución.

* kill: Mata un proceso de la PVM.

* mstat: Muestra el estado de una máquina de las pertenecientes a la PVM.

* pstat: Muestra el estado de un proceso de los pertenecientes a la PVM.

* quit: Sale de la máquina paralela virtual sin apagarla.

* reset: Inicializa la máquina. Eso supone matar todos los procesos de la PVM

salvo los programas monitores en ejecuciónón, limpiar las colas de

mensajes y las tablas internas y pasar a modo de espera todos los

servidores.

* setenv: Lista todas las variables de entorno del sistema.

* sig señal tarea: Manda una señal a una tarea.

* spawn: Arranca una aplicación bajo PVM. Es un comando bastante

complejo cuyas opciones veremos en una sección aparte.

* trace: Actualiza o visualiza la máscara de eventos traceados.

* alias: Define un alias predefinido, es decir, un atajo para teclear un

comando.

* unalias: Elimina un alias predefinido.

* version: Imprime la versión usada de la PVM

miércoles, 16 de enero de 2008

Steve Jobs presento Mac book Air

Hoy (15 de enero 2008) luego de una gran espera se dio a conocer en la MacWorld Expo de San Francisco lo que Steve Jobs nos tenia preparado y no decepciono a los presentes.

Se trata de la Macbook Air el portatil mas delgado del mundo con dimensiones desde 0.4 a 1.94 cms de ancho, pantalla de 13 pulgadas, camara incorporada iSight, teclado retroiluminado y trackpad.

Ademas tiene como caracteristicas de poseer 2 gb de memoria, procesadores Intel Core 2 duo de 1.6Ghz y 1.8Ghz especialmente hechos para las dimensiones del equipo y tambien conexion wireless 802.11n, que estaran a la venta en las proximas semanas (se puede reservar desde su pagina http://www.apple.com/macbookair/) y que tendra precios de 1799 y 3098 dolares.

Tambien se dio a conocer nuevas funcionalidades del Iphone a traves de una actualizacion y un sistema de arriendo de peliculas a traves del sistema iTunes en calidad HD y con el respaldo de las principales cinematograficas.

martes, 15 de enero de 2008

Mapa de Registros Maquina Sparc

Los procesadores SPARC realizan un “sistema de ventanas”. Cada ventana son 24 registros (a los cuales se le suman 8 más que son globales, o sea, accesibles por todas las ventanas; la suma de 32 registros es visible en todo momento) que pertenecen a un procedimiento o subprograma. A medida que se van creando nuevas ventanas los registros de salida de la ventana actual se solapan sobre los de entrada de la ventana siguiente. Los CPU registros locales y de salida de la ventana actual son diferentes a los registros locales y de salida de la ventana siguiente. Esta figura lo muestra esquemáticamente:

En la figura, CWP es el índice de la ventana actual. El comando SAVE y las TRAPS decrementan dicho índice, y RESTORE y RETT lo incrementan.

Para verificar si un número de ventana es válido se utiliza el registro WIN (Window

Invalid Mask) de 32 bits. Si el bit i-ésimo está en 1 indica que esa ventana inválida y si se intenta acceder esta, segenera un error (TRAP “window_overflow”).

El registro G0 está fijo por medio del hardware con el valor 0. En él, los almacenamientos no alteran su valor. Los registros G1 a G7 son globales y pueden contener variables enteras, apuntadores a tablas u otros datos importantes. Los registros de salida son de O0 a O7 y son usados por los procedimientos para pasar parámetros a los procedimientos que llaman. El primer parámetro va al registro O0, el siguiente al O1 y así sucesivamente. El registro O6 (AE) se utiliza como apuntados a la pila de memoria. La pila se usa para los parámetros que exceden los registros, espacio de asignación dinámica de la pila, ventanas apiladas en memoria, así como para salvar registros de punto flotante, apuntadores a buffers en donde los procedimientos llamados pueden enviar

estructuras y arreglos de datos, etc. La instrucción CALL (llamada) deposita la dirección de retorno en el registro O7. Los 8 registros para variables locales L0 a L7, se pueden usar en la forma que el programador o el compilador considere más conveniente. Las 8 variables de entrada I0 a I7 son los parámetros que son pasados al procedimiento actual por el que le llama: Los registros no utilizados pueden contener variables locales adicionales. I6 (FP) es el apuntador de marco que se usa para direccionar variables en el marco de pila. A diferencia de SP que solo puede cambiar mientras el procedimiento se ejecuta, FP apunta la misma palabra en memoria durante toda la ejecución del procedimiento, siendo más apropiado para la indexación que el SP. La dirección de retorno del procedimiento se encuentra contenida en el registro I7.

Por lo tanto y en general, existen 4 grupos de registros diferentes:

Registros Globales : G0-G1

Registros de Salida: O0-O7

Registros Locales: L0-L7

Registros de Entrada: I0-I7

Set de Intrucciones Maquina Sparc

Aqui va otra info sobre maquinas sparcs, lo hago por que por lo general cuesta encontrar informacion al respecto, espero que les sirva.

op1, op2 y op3 pueden ser un registro, dirección de memoria, desplazamiento

Instrucciones aritméticas

ADD[cc]: Suma op1 a op2 y almacena el resultado en op3.
ADDX[cc]: Suma op1 a op2 y el carry y almacena el resultado en op3.
SUB[cc]: Resta op2 a op1 y almacena el resultado en op3
SUBX[cc]: Resta op2 y el carry a op1 y almacena el resultado en op3

Instrucciones lógicas

AND[cc]: Realiza el "and" bit a bit entre op1 y op2 y almacena el resultado en op3.
OR[cc]: Realiza el "or" bit a bit entre op1 y op2 y almacena el resultado en op3.
XOR[cc]: Realiza el "xor" bit a bit entre op1 y op2 y almacena el resultado en op3.

Instrucciones de desplazamiento

SLL: Realiza un shift a la izquierda de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits más significativos de op2 para determinar el valor del contador. Rellena con ceros.
SRL: Realiza un shift a la derecha de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits más significativos de op2 para determinar el valor del contador. Rellena con ceros.
SRA: Realiza un shift a la derecha de los bits de op1, op2 lugares y almacena el
resultado en op3. Sólo considera los 5 bits menos significativos de op2 para determinar el valor del contador. Realiza expansión de signo, es decir, rellena con el bit más significativo de op1.

Instrucciones de memoria

LDSB: Carga en op2 el valor del byte almacenado en la dirección de memoria op1.
realiza expansión de signo.
LDSH: Carga en op2 el valor de la media palabra (2 bytes) almacenada a partir de
la dirección de memoria op1. Realiza expansión de signo.
LDUB: Carga en op2 el valor del byte almacenado en la dirección de memoria op1 .
no realiza expansión de signo. Rellena con ceros.

LDUH: Carga en op2 el valor de la media palabra (2 bytes) almacenada a partir de la dirección de memoria op1. No realiza expansión de signo. Rellena con
ceros.
LD: Carga en op2 el valor de la palabra (4 bytes) almacenada a partir de la
dirección de memoria op1.
STB: Guarda en el byte ubicado en la dirección de memoria op2 los 8 bits menos
significativos de op1.
STH: Guarda en la media palabra (2 bytes) ubicada a partir de la dirección de
memoria op2 los 16 bits menos significativos de op1.
ST: Guarda en la palabra (4 bytes) ubicada en la dirección de memoria op2 el
valor de op1.
SWAP: Intercambia los valores entre la palabra ( 4 bytes ) almacenada en la
dirección op1 en el registro op2 .
SETHI: Coloca en los 22 bits más significativos de op2 el valor op1.


Instrucciones de bifurcación incondicional

CALL: Coloca en el registro %15 el valor actual del PC (es decir de la instrucción
que contiene el CALL) y realiza un salto incondicional a la dirección
PC+4*desp30
JMPL: Coloca en el registro op2 el valor actual del PC (es decir de la instrucción
que contiene el JMPL) y realiza un salto incondicional a la dirección op1.
RETT: Es usada para retornar de un servicio a interrupción. Verifica que el retorno
sea válido y en caso de serlo transfiere el control a la dirección op1.


Instrucciones para manejo de ventanas

SAVE: Guarda la ventana del procedimiento llamador.
coloca en el registro op3 de la nueva ventana el valor op1 + op2 calculado
a partir de los valores de los registros de la ventana vieja.
RESTORE: Guarda la ventana del procedimiento llamador.
coloca en el registro op3 de la nueva ventana el valor op1 + op2
calculado a partir de los valores de los registros de la ventana vieja.






Instrucciones de bifurcación condicional

BA: Esta instrucción es en realidad un salto incondicional pero es equivalente en
formato a todas las demás que realizan saltos condicionales en el sentido de
realizar un salto a la dirección PC+4*op1 considerando el signo de op1.
BNE: En caso que la flag de Zero sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BE: En caso que la flag de Zero sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BG: Si la condición anterior se cumple entonces implica que en caso de haber sido
realizada una resta (una comparación) A-B de dos números A y B codificando
enteros en complemento a 2 entonces AB y AB entonces A > B y se
realiza un salto a la dirección PC+4*op1 considerando el signo de op1.
BLE: La condición es la negación del caso anterior ( ver BG) es decir que el salto
se realiza si A B considerando el signo.
BGE: La condición se cumple si N = V y por lo tanto es verdadera cuando A B
considerando el signo (ver BG) y en ese caso se realiza el salto.
BL: La condición es la negación del caso anterior (ver BGE)
se produce si A < B (ver BG) considerando el signo.
BGU: Si la condición anterior se cumple entonces implica que en caso de haber
sido realizada una resta (una comparación) C-D de dos números C y D
codificando enteros sin signo entonces C D y C D entonces C > D y se
realiza un salto a la dirección PC+4*op1 considerando el signo de op1.
BLEU: Es la negación de la condición anterior es decir que se realiza el salto si
C D (ver BGU) sin considerar el signo de C y D.
BCC: En caso que la flag de Carry sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1. Es equivalente a C D (ver BGU).
BCS: En caso que la flag de Carry sea 1 se realiza un salto a la dirección
PC+4*op1 considerando el signo de op1. Es equivalente a C < D (ver BGU).
BPOS: En caso que la flag Negative sea 0 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BNEG: En caso que la flag Negative sea 1 realiza un salto a la dirección PC+4*op1
considerando el signo de op1.
BVC: En caso que la flag de Overflow sea 0 realiza un salto a la dirección
PC+4*op1 considerando el signo de op1.
BVS: En caso que la flag de Overflow sea 1 realiza un salto a la dirección
PC+4*op1 considerando el signo de op1.


Manejo especial del registro PSR(Program Satutus Register)

n Z v C
23 22 21 20

Los bits del 20 al 23 del PSR almacenan las banderas de la IU. Estos bits son
modificados por las instrucciones con cc (por ejemplo ANDcc) y por la instrucción WRPSR.

RDPSR: Copia el PSR a op1.
WRPSR: Coloca en PSR el valor op1 op2 1 2 Å .
RDWIM: Copia el WIM ( Window Invalid Mask ) a op1.
WRWIM: Coloca en WIM el valor op1 op2.
RDTBR: Copia el TBR ( Trap Base Register ) a op1.
WRTBR: Coloca en TBR el valor op1 op2.

sábado, 12 de enero de 2008

Configuracion Conexion SSH sin clave

Lo siguiente en configurar a la hora de trabajar fue lo de la conexion ssh en los equipos para que pudiera ingresar directamente sin clave.

1.- En la maquina que nos vamos a conectar creamos el fichero con la llave publica con cifrado rsa, esto con el comando

ssh-keygen –t rsa

Esto genera la carpeta ~/.ssh con los archivos

id_rsa id_rsa.pub known_hosts,

2.-Tomamos el archivo id_rsa.pub y lo sacamos desde la maquina que va a realizar la conexión, en este caso generamos la clave en la maquina llamada pc1 y sacamos el archivo desde la maquina llamada pc2, con el siguiente comando


scp pc1: ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys


con esto copia el archivo desde pc1 a pc2 y lo guarda en el archivo authorized_keys, luego modificamos el archivo de configuración en /etc/ssh/sshd_config y la linea AutorizedKeysFile .ssh/authorized_keys, luego guardamos y reiniciamos el demonio sshd mediante el siguiente comando:

service sshd restart

Repetimos esto en las maquinas correspondientes y en vez de poner authorized_keys, lo guardamos en un archivo temporal y ese archivo temporal lo concatenamos al archivo authorized_keys de cada maquina para que guarde cada configuración de las maquinas.

esto lo hacemos de este modo:
cat archivotemporal >> authorized_keys

de este modo queda configurado ssh para poder conectarse sin necesidad de ingresar nuevamente las claves

Otra forma más efectiva para hacer el intercambio de las claves es que se cree un archivo con todas las claves que se genera y este repartirlo en las maquinas correspondiente, esto lo hace mucho mas corto el proceso si se tiene mas de 2 maquinas (como me sucedio a mi).

Espero que les sirva