Archive for ‘ciencias de la computacion’

julio 26, 2011

Richard Stallman en Guatemala [Agosto 2011]

por Josue Ortega

Creo que no hace falta escribir demasiado en esta entrada. El titulo lo dice todo y gracias a nuestros amigos de COECYS vamos a poder presenciar en vivo una conferencia de Richard Stallman, quien es el fundador del proyecto GNU.

Evento que no se pueden perder para conocer acerca las ideas fundamentales de la cultura libre y que mejor que con el maestro de maestros en el tema 🙂

Lugar: Auditorio Francisco Vela, Facultad de Ingeniería de la Universidad de San Carlos de Guatemala

Fecha: 8 de Agosto de 2011

Hora:10 am

Costo: Q. 75.00

Anuncios
mayo 25, 2011

Tutorial Jlex y Cup

por Josue Ortega

Finalmente tengo una versión final del tutorial de Jlex y Cup que empece a escribir y un tiempo atrás y no había podido terminarlo por falta de tiempo.

El tutorial se encuentra en la seccion de Jlex y Cup de este blog.

Enlace:

https://openfecks.wordpress.com/jlex-y-cup/

mayo 24, 2011

El verdadero significado de ser un Hacker

por Josue Ortega

Me encuentro leyendo el libro “Sofware Libre para una sociedad Libre” de Richard Stallman y encontré un texto que no podía dejar de compartir y así ayudar a contrarrestar la mala fama que los medios le han dado a los hackers, el texto es el siguiente:

   El uso de la palabra «hacker» para definir al «que rompe sistemas
de seguridad» es una confusión promovida por los medios de comu-
nicación. Nosotros, los hackers, nos negamos a reconocer esta acep-
ción y seguimos utilizando este término para describir a «alguien que
ama la programación y disfruta explorando nuevas posibilidades» 
                                            Richard Stallman
Y para dejar aun mas claro todo:
  Resulta difícil dar con una definición sencilla de algo tan variado como es el hacking,
pero creo que lo que la mayor parte de los hackers tienen en común es la pasión lúdi-
ca, la inteligencia y la voluntad de exploración. Podemos decir que el hacking signifi-
ca explorar los límites de lo posible con un espíritu de sagacidad imaginativa.
Cualquier actividad en la que se despliegue esta sagacidad tiene «valor» para el hac-
ker. Puedes ayudar a subsanar este malentendido haciendo una simple distinción
entre la intromisión en la seguridad de un sistema y las actividades de hacking, emple-
ando el término cracking para la primera. Quienes se dedican a esto se denominan crac-
kers. Es posible que un cracker sea también hacker, o ajedrecista, o golfista; pero la
mayoría no lo son («On Hacking», RMS; 2002).
septiembre 22, 2010

Qubes OS: Seguridad Y compatibilidad

por Josue Ortega

La seguridad es algo que como usuarios siempre tomamos muy en cuenta cuando elegimos un Sistema Operativo, pero esto implica sacrificar muchas cosas como la compatibilidadcon aplicaciones que probablemente estamos acostumbrados a usar en otras condiciones.

Al parecer este problema esta llegando a su fin con QubesOS, Qubes OS es un sistema operativo, open source por supuesto, diseñado para ofrecer una fuerte seguridad al usuario. ¿Pero como garantizan la seguridad? La principal característica del OS  es que aísla cada programa por medio de virtualizacion, logrando asi que el comportamiento de determinada aplicacion interfiera con la integridad del resto del sistema.

Qubes esta basado en XEN(Maquina virtual), Linux, y X Window System. Qubes puede correr la mayoria de aplicaciones diseñadas para Linux y soporta una gran cantidad de drivers para este. Algo que me llama bastante la atención es que los desarroladores de Qubes también buscan implementar una compatibilidad con aplicacioens par MS Window$

Otra de las características de Qubes es que permite crear diferentes dominios de seguridad, que son implementaciones de Maquinas Virtuales.

Por ejemplo se podrían definir dominios como: trabajo  y cosas personales, estos dos dominios trabajarían bajo una diferente máquina virtual, logrando asi el aislamiento entre los 2 ambientes. Mejorando así la seguridad en las aplicaciones.

Una propuesta bastante buena y sobre todo innovadora

Pagina Oficial del proyecto: http://qubes-os.org

julio 29, 2010

Saludando al mundo con Ensamblador

por Josue Ortega

La semana pasada me dejaron una tarea introductoria al lenguaje ensamblador que consistía en explicar como se hace el famoso programa de “hola mundo”. Asi que decidí subir el “how to” por que me gusto como quedo :P.
El “how” to esta escrito para ser compilado con GAS en la arquitectura IA-32 bueno aquí les va:

Para poder programar en lenguaje ensamblador en nuestro sistema operativo
gnu/linux necesitamos tener instalados GNU Binutils, en el cual estan contenidos
el compilador de ensamblador:as y el linker: ld.
Ya que tenemos instalado el binutils, ya podemos trabajar y hacer nuestros
programas en lenguaje ensamblador.
A continuación imprimiremos en pantalla “Hola Mundo” en ensamblador y lo
compilaremos con GAS.
El código es :

.text
.global _start
_start:
movl $len,%edx
movl $msg,%ecx
movl $1,%ebx
movl $4,%eax
int $0x80
movl $0,%ebx
movl $1,%eax
int $0x80
.data
msg:.ascii"hola mundo"
len=15

A continuación una breve explicacion de cada linea del codigo anterior:
Como se puede notar las directivas van antecedidas por un punto “.”.
Directiva text:
Esta directiva indica donde es el inicio de codigo en el arhivo .as
Directiva global:
Con esta directiva se indica que la etiqueta “_start” es visible para todas las
partes del programa.
Directiva data:
En esta sección se declaran las variables inicializadas, como en este caso la
variable msg que se especifica que es de tipo ascii y su contenido es la cadena
“hola mundo”.
También la variable len que se le asigna el numero 15.
_start: indica donde inicia el programa
A continuación detallare la acción de las lineas de código

movl $len,%edx # mueve el contenido de len al registro edx
movl $msg,%ecx #mueve el contenido de msg a el registro ecx
movl $1,%ebx #coloca el valor de 1 al registro ebx
movl $4,%eax #coloca el valor de 4 al registro eax
int $0x80 #hace la llamada al sistema para kernel mode
movl $0,%ebx #coloca el valor de 0 en el registro ebx
movl $1,%eax #coloca el valor de 1 en el registro eax
int $0x80# llamada al sistema para kernel mode

Básicamente lo que el código anterior hace es mandar de parámetros al kernel el
contenido de los registros para que las acciones correspondientes sean
ejecutadas.
En el registro eax se debe posicionar el codigo de la llamada al sistema que
deseamos ejecutar, en este caso para write, es el numero 4.
En el registro ebx se coloca el codigo de la llamada al sistema para la accion
que se debe realizar despues de imprimir en pantalla, en este caso 1 para que
salga.
En el registro ecx se coloca el valor del mensaje y en el edx el tamaño de la
cadena. El write en un HLL se veria: write(salir, mensaje, len)
Para salir del programa se coloca 0 en el registro ebx y 1 en el eax, y de
ultimo se hace la llamada al sistema.
Compilar el Archivo:
Para compilar el archivo se utiliza el comando as con el parametro -o que genera
una salida con extension .o que contiene codigo objeto.

    as -o hola.o hola.as

Linkear el archivo:
Una vez compilado y con nuestro archivo con codigo objeto necesitamos linkear
nuestro archivo para crear un ejecutable con todas las librerias necesarias

ld -s -o hola hola.o

Una vez creado el ejectable, nuestro programa ya esta listo para correr:

./hola

Y finalmente el output

josue@desktop:~/assembler$ ./hola
hola mundo
enero 17, 2010

Tutorial JLEX y JAVA CUP

por Josue Ortega

Debido a que en la web no se encuentran ejemplos concretos del uso de JLEX y JAVA CUP,  he decidido escribir un tutorial para el  generador de analizadores léxicos  JAVA JLEX y el generador de analizadores sintácticos JAVA CUP, he creado una nueva pagina en este blog dedicada a un tutorial y al estudio de estas herramientas, el enlace es: https://openfecks.wordpress.com/jlex-y-cup/

septiembre 28, 2009

Turorial: Parser Descendente Recursivo

por Josue Ortega

Bueno para los que se preguntan como hacer un parser a partir de una gramática que hemos diseñado, aquí le enseñare brevemente como hacer un parser descendente recursivo

Tenemos que tomar en cuenta lo siguiente:

1. Nuestra gramática no debe ser recursiva a la izquierda.Por ejemplo la producción

E::=Er

es recursiva  la izquierda, para este tipo de gramáticas nuestro parser no sería funcional, asi que hay que quitarle la recursividad a la izquierda

2.Debemos construir los conjuntos: First, Follow, para cada producción de nuestra gramatica.

Estructura del parser:

LookAhead: Esta variable(global), inicialmente es el token de mas a la izquierda de la entrada.

Por cada NO TERMINAL de la gramática debe existir un procedimiento del parser.Para hacer mas fácil su programación, el nombre del procedimiento tendrá el nombre del no terminal.

Cada una de las opciones del no terminal formaran el cuerpo del procedimiento.

Procedimiento Match: Con este procedimiento sabremos si es el TERMINAL correcto, lo detallare a continuación

void Match(token simbolo){
if(lookahead==simbolo)
lookahead=siguienteSimbolo;/* para obtener el siguiente simbolo se puede hacer un procedimiento para pedir el siguiente toke que recibimos del analizador lexico*/
else
ERROR
}

Bueno, ahora a programar, escribiré un parser para la siguiente gramática:

terminales: x,y,z;

E:=xP | H     /*  E produce x segido de la producción P ó la producción H       */

P:=Tz

H:=y

T:=yx;

****************************************************************

var token lookahead;//variable del tipo del token que ustedes utilicen

void main {

//Iniciar Scanner si s necesario

lookahead=nexToken() // funcion que devuelve el token siguiente

E();
}
void E(){
if(lookahead==x)
Match(x);
P();
else
H();
}
void P(){
T();
Match(z);
}
void T(){
Match(y);
Match(x);
}
void H(){
Match(z);
}

Y así de sencillo es un parser descendente Recursivo 🙂

Si se dan cuenta el parser recorre el árbol de arriba hacia abajo de allí viene descendente,

Y Recursivo se debe a que el parser puede llamarse a si mismo directa o indirectamente por medio de sus funciones 🙂

Espero que les sirva de algo,

Dudas, comentarios o sugerencias, no duden en escribir

saludos

septiembre 25, 2009

Agenda FX, proyecto Estructuras de Datos

por Josue Ortega
AGENDAFX
AGENDAFX

Muchas veces es difícil al principio de un proyecto implementar o abstraer lo que se nos esta pidiendo, creo que a la mayoría en el curso de Estructuras de Datos al principio andamos un poco perdidos de como empezar.

Los ejemplos visto en clase no son lo suficiente claros o muy sencillos, luego acudimos a la web para ver si podemos darnos una idea de como implementar lo que se nos pide, pero al final solo encontramos ejemplos sencillos o los mismos ejemplos en todas las paginas.

Por eso e decidido subir mis proyectos, al menos los que me queden bien jaja, para poder ayudar  a los que tienen este problema, y empiezo con mi proyecto de Estructuras de Dato.

Se nos pidió desarrollar una agenda web, con las siguientes funciones:

Calendario, cada día del año con una festividad y evento, Una lista de contactos, una libreta de apuntes, y gráficas de reporte.

Ahora vamos con lo emocionante, para implementar la parte de el calendario hice lo siguiente:

Voy a empezar con el nodo mas elemental, que era el nodo de eventos, este esta contenido en una lista doble enlazada ordenada por prioridad de evento. La lista de los eventos esta contenida en el nodo de día, este nodo de día esta contenido en una Matriz Ortogonal(en el proyecto es la clase melOrto.java) o Lista Ortogonal, es decir cada nodo tiene 4 punteros a otros nodos.Cada instancia de la Matriz Ortogonal conforma una lista doble enlazada que es con la que se maneja el año en curso.

Para almacenar los contactos utilice un árbol AVL, el cual tenía que desplegar sus contactos : InOrden, post-Orden, PreOrden.

También se despliegan los contactos en un grafo.

Para los apuntes no es mayor ciencia, una lista doble enlazada circular.

Para ingresar los eventos y contactos se puede hacer de 2 maneras:

Manual o cargando un archivo XML al servidor.

A continuacion les describo que herramientas use para hacer la agenda:

Sistema Operativo: GNU/Linux Debian Lenny 5.0.2
Tecnologia:JSP
Java: Java Enterprise Editition.
IDE: NetBeans 6.7.1
Servidor web: Glassfish v2.1
Parser XML: JDOM.
JAR  para enviar archivos al servidor: commons-fileupload-1.2.1, commons-io-1.4.

El enunciado se encuentra en la carpeta del proyecto, los JAR antes mencionados y el JDOM se encuentran en la carpeta “dist” donde encuentran un archivo con extensión “war” lo descomprimen , en la carpeta resultante pueden encontrar las librerías.

Cualquier duda o comentario de como implementar una estructura, no duden en preguntar en este blog, haré lo posible por contestar 😛

CLICK EN LA IMAGEN PARA DESCAGAR

septiembre 17, 2009

tomando un poco de aire…

por Josue Ortega

Un mes de ausencia en el blog, 2 proyectos: Compiladores 1, Estructuras de Datos, look a lo Richie Stallman, regreso a postear un poco de mis ideas ,buenas o malas, la verdad no lo se. Bueno creo que todos los que estudiamos Sistemas en USAC, tenemos algo en común: esperar(rogar) por una prorroga, de un proyecto que nos consume totalmente,(Lo peor es cuando no la dan…).Ahora surge una pregunta en mi mente, si los catedráticos o auxiliares a la hora de plantear el proyecto, toman conciencia de evaluar en verdad los conceptos del curso, o solamente poner un obstáculo mas para el estudiante.

Con lo que va del semestre, y con lo que va de los proyectos, el proyecto de Estructuras de Datos, bastante extenso por cierto, pero la forma en que será evaluado es acorde al contenido del curso. Situación que no se dio con el Proyecto de Organización de Lenguajes y Compiladores 1, donde usamos Jlex y Cup, para el análisis léxico y análisis sintáctico respectivamente, donde nosotros teníamos que diseñar la gramática o al menos deducirla de un enunciado bastante confuso, que da la impresión de que lo hicieron bastante rápido. Y la forma en que será evaluado el proyecto o al menos la ponderación en la hoja de calificación no evalúan nuestros conocimientos en teoría de autómatas, ni de operaciones con gramáticas, pero bueno, creo que me desvíe un poco del tema.

Creo que es tiempo de dejar de pensar en proyectos donde solo se evalúa la resistencia del estudiante para desvelarse, y empezar a proponer proyectos donde en realidad se creen nuevas tecnologías o soluciones para problemas existentes. Proyectos que nazcan de las inquietudes los estudiantes, quien sabe que se conviertan en soluciones para nuestra sociedad o nuestro país…

En fin solo queda seguir hechandole ganas y a divertirnos con esos preciosos proyectos 😀 jeje.

Un saludo para el mártir de Compi 1: BorisCougar, que arriesgo su vida por la ciencia hahahaha

saludos a todos como leí por ahí…

id y programad todo