Ingresar:

Cristian Denis Mamani Torres :: Blog de amigos

February 09, 2010

http://blog.comunidadhaskell.org/pg/blog/carliros/read/107/estructuras-d

En esta oportunidad quiero compartir una traduccion de una de los subtitulos del libro: Purely Functional Data Structure [Chris Okasaki], que me parecio muy buena.

Estructuras de Datos Funcionales vs. Imperativas

Los beneficios metodologicos de los lenguajes funcionales son bien conocidos, pero aun la mayoria de los programas son escritos en lenguajes imperativos como C. Esta aparente contradiccion es facilmente explicado por el hecho de que los lenguajes funcionales han sido historicamente mas lentos que sus mas tradicionales primos, pero esta brecha se esta reduciendo. Se han hecho impresionantes avances desde un amplio frente, desde tecnologias basicas de compiladores a analisis sofisticados y optimizaciones. Sin embargo, hay un aspecto de la programacion funcional que todo escritor de compiladores debe mitigar - el uso de estructuras de datos inapropiadas o inferiores.

Porque las estructuras de datos funcionales son mas dificultuosas para diseñar e implementar que las imperativas? Hay 2 problemas basicos. Primero, desde el punto de vista de diseño e implementacion de estructuras de datos eficientes, la estructura de la programacion funcional contra actualizaciones destructivas (ej. asignaciones) es una desventaja asombrosa, equivalente a confiscar los cuchillos de un chef master. Al igual que los cuchillos, las actualizaciones destructivas pueden ser dañinas cuando son mal usadas, pero tremendamente efectivas cuando son usadas apropiadamente. Las estructuras de datos imperativas a menudo confian en la asignacion de una forma crucial, y por eso se encuentran diferentes soluciones para los programas funcionales.

La segunda dificultad es que se espera que las estructuras de datos funcionales sean mas flexibles que sus contrapartes imperativas. En particular, cuando actualizamos una estructura de datos imperativa, tipicamente aceptamos que la version antigua de la estructura de datos ya no estara disponible, pero cuando actualizamos una estructura de datos funcional, esperamos que la antigua y nueva version de la estructura de datos estara disponible para futuros procesamientos. Una estructura de datos que soporta multiples versiones es llamado persistente [persistent], mientras que una estrutura de datos que permite solo una simple version en un tiempo es llamado efimera [ephemeral]. Los lenguajes de programacion funcional tienen la propiedad curiosa de que todas las estructuras de datos son auntomaticamente persistentes. 
Las estructuras de datos imperativas son tipicamente efimeras, pero cuando una estructura de datos persistente es requerida, los programadores imperativos no se sorprenden si la estructura de datos persistente es mas complicada y talves incluso asintoticamente menos eficiente que una equivalente estructura de datos efimera.

Ademas, los teoricos han establecido limites inferiores sugeriendo que los lenguajes de programacion funcional podrian ser fundamentalmente menos eficientes que los lenguajes imperativos en algunas situaciones. En vista de todos estos puntos, las estructuras de datos funcionales se parecen algunas veces al oso que baila, de quien se dice, "lo maravilloso no es que el danza muy bien, sino de que el danza de alguna manera!". En la practica, sin embargo, la situacion no es tan triste. Como podremos ver, es a menudo posible eleborar estructuras de datos funcionales que son asintoticamente tan eficientes como las mejores soluciones imperativas.

 

Enviado por Comunidad Haskell San Simon | 0 Comentario (s)

January 27, 2010

http://sergiohinojosa.wordpress.com/2010/01/27/coding-dojo-cochabamba-boliv

Primera reunión de Coding Dojo Cochabamba - Dojobamba

Palabras clave: grails, scaffold

Enviado por Sergio Hinojosa | 0 Comentario (s)

January 02, 2010

Bueno otro año q se va, aun no puedo creer q paso tan rápido aun recuerdo mi primer post en ajayu hace mas de 3 años, cuando me sorprendió la invitación para ser parte de esta comunidad y bueno he tratado de aportar lo mas q se puede a ella. Y lo q aun no puedo creer es q este es mi post 100! no lo tenia planeado pero así salió y bueno q mejor q festejar q escribiendo :)

Se q he estado alejado por acá, pero prometo q este año q viene será distinto. Una de mis metas es tratar de organizar mejor mi tiempo para poder hacer algunas cosas q me gustan pero q por varios motivos no las hago y una de ellas es escribir.

Un nuevo año comienza y con el varios planes, metas, sueños, viajes etc. Para q se diviertan les dejo un video de como wave se despide del 2009 seguro q varios ya escucharon hablar de Wave y adelantándoles mi siguiente post será sobre Wave ya q me encanta!!! Disfruten el video q esta muy bueno.

FELIZ 2010 PARA TODOS

 

Palabras clave: 2009, 2010, wave

Enviado por Marcelo Zambrana Villarroel | 4 Comentario (s)

November 17, 2009

http://blog.comunidadhaskell.org/pg/blog/darkben/read/104/hsplugins-por-

Eso de que pongan en diferentes lados este codigo pero en cada sitio versiones diferentes es grrrraaave!!

pero por fin encontre el bueno:

http://code.haskell.org/~dons/code/hs-plugins/

http://hackage.haskell.org/package/plugins

 

Enviado por Comunidad Haskell San Simon | 1 Comentario (s)

August 06, 2009

http://blog.comunidadhaskell.org/pg/blog/carliros/read/96/setters-and-ge

En Haskell podemos tambien hacer setters y getters de una forma sencilla.

Tenemos este codigo:

module Main where

data Persona = Persona { ci       :: CI
                      , nombre   :: Name
                      , apellido :: LastName
                      , edad     :: Edad
                      } deriving Show

type CI       = Int
type Name     = String
type LastName = String
type Edad     = Int

-- instancias
juan :: Persona
juan = Persona 14322 "juan" "block" 35

pepe :: Persona
pepe = Persona 44533 "pepe" "torrez" 15

Entonces podemos obtener los datos de cada instancia llamando a la funcion constructora de cada elemento de Persona.

Ejemplo:

*Main> ci pepe

nos retornaria el CI de 'pepe', tambien podemos usar nombre, apellido o edad.

Para setear un valor, podemos hacer

*Main> juan {nombre = "juanes"}
Persona {ci = 14322, nombre = "juanes", apellido = "block", edad = 35}

En la parte de modificar un valor de la instancia es diferente, porque lo que en realidad hace es modificar el valor en una nueva instancia sin tocar su parametro entrante. Solo toma de esté la informacion que no se modifica. Ejemplo:

*Main> juan {edad = 0}
Persona {ci = 14322, nombre = "juan", apellido = "block", edad = 0}
*Main> juan
Persona {ci = 14322, nombre = "juan", apellido = "block", edad = 35}

Enviado por Comunidad Haskell San Simon | 0 Comentario (s)

August 05, 2009

http://blog.comunidadhaskell.org/pg/blog/antonio/read/95/haskell-string-

Un problema muy interesante

s = "λ"
main = do
writeFile "test.txt" s
s2 <- readFile "test.txt"
print (s == s2)

Si analizamos y hacemos correr este pequeño programa el resultado deberia ser True por logica, pero el resultado real es False.

Segun Christian creador del blog Luke Plant's

El problema es con la biblioteca estándar Haskell - muchas de las funciones previstas por el Prelud, System.IO, System.Posix y muchos otros son completamente roto (por diseño).  leer mas

Don Stewart dio la siguiente solucion para este problema

    import Prelude hiding (writeFile, readFile, print)
import System.IO.UTF8

s = "λ"
main = do
writeFile "test.txt" s
s2 <- readFile "test.txt"
print (s == s2)

Si hacemos correr este ejemplo el resultado sera True.

 

 

 

Enviado por Comunidad Haskell San Simon | 0 Comentario (s)

July 30, 2009

Era momento de escribir algo en la sección agradecimientos del documento final para la defensa de grado.

El "dar gracias" es una expresión tal personal que me incomodó bastante estar restringido al espacio que quedaba, unas generosas 16 líneas. Es que a veces soy bastante »´˝˜"❝'`expresivo`'❞"˝˜´« (tanto que aburro) .

Por eso decidí colocar acá, en mi espacio personal, una versión más completa sin recortes:

Agradecimientos a mi familia por el apoyo y la confianza en las distintas facetas de vida que convergen hoy en mi graduación. Los quiero mucho a todos.

Muchas gracias a mi esposa Casilda por su paciencia, su apoyo incondicional y su infinito amor, y a mi hija Ruth Kimberly por ser la contínua fuerza que me inspiró a seguir adelante.

Agradecimiento especial a mi Padre Jacinto, por haberse constituido en mi principal apoyo intelectual y económico. Gracias por tantos libros en casa, gracias por la música, el inglés y gracias por enseñarme a soñar.

Muchas gracias también a mi madre Eugenia, por su apoyo también incondicional en varios momentos importantes en mi vida, y por contínuamente preocuparse de que ponga los pies en la tierra.

Gracias también a mis hermanos Jonathan, Helen y Edith. Si tuviésemos que narrar nuestra historia conjunta, tal vez diríamos: "Las piedras que en su trayecto río abajo son golpeadas por este y entre sí, eventualmente terminan acostumbrándose, llegan a quererse, y desearían nunca llegar al mar por miedo a separarse". Creo que ninguno podría desear mejores aliados.

Mis compañeros de proyecto, Oscar y Ximena, me han ayudado más allá de lo que algún día pueda retribuírles, muchas gracias "con creces".

Muchas gracias también al personal de la Caja Petrolera de Salud Regional Cochabamba, quienes nos apoyaron con valiosos recursos para el desarrollo del presente proyecto.

Agradecimientos especiales también al personal académico de las Carreras de Informática y Sistemas, especialmente a los docentes que han influido en mi manera de pensar y hacer software. En orden cronológico: a la Lic. Maria Leticia Blanco Coca por las clases introductorias a la programación de quién aprendí a aplicar la elegancia a las tareas de programación y con quién tuve la oportunidad de experimentar la materia de Taller de Ingeniería de Software; al Lic. Nestor Avilés Ríos (Q.E.P.D.) en cuyas clases magistrales tuve la oportunidad de experimentar "el completo aprecio a la dificultad de un problema, y la modestia y elegancia en el uso de herramientas para su resolución"; al Lic. Luis Roberto Ágreda Corrales quién me sumergió a fondo en el "Fascinante Mundo Digital de la Computadora"; a la Lic. Rose Mary Salazar Anaya con quién inicié mis armas en el uso de Bases de Datos; al Ing. Johnny Herrera Acebey cuyos sólidos conocimientos en Sistemas Operativos y Redes de Computadoras continúan siendo un sólido sustento para el cada día; al Lic. Juan Marcelo Flores Solíz por la elaborada y refinada introducción al Modelamiento Orientado a Objetos; a la Lic. Corina Flores Villarroel por el apoyo académico que me permitió compartir parte de la memorable historia del Programa M.E.M.I. y me permitió también devolver a mi carrera parte de los conocimientos adquiridos; al Lic. Hernán Ustariz Vargas por la confianza y apoyo recibidos durante mi estancia en el Laboratorio de Desarrollo de Software (CIDAI) y más allá de ella; al Dr. Pablo R. Azero Alcócer por todos los profundos conocimientos compartidos acerca de la Programación Orientada a Objetos y su apoyo como tutor de este proyecto.

A mis compañeros de colegio y la universidad, repartidos en varios lugares de Bolivia y de varias generaciones, cuyo contacto ha influenciado mucho en convertirme en quien ahora soy. No alcanzaría el espacio para agradecerles a cada uno de ustedes y por ello me disculpo por no llenar este espacio con sus preciosos nombres. Ha sido un gran viaje, el cuál he tenido el privilegio de recorrerlo acompañado de ustedes, gracias por llenar mi vida.

Pondré un enlace a esta página en el documento, no estoy seguro si lo permitirán. Si es así, gracias.

En la vida nunca se logra agradecer lo suficiente. Gracias por leer esta entrada.

P.D.: Hay un apótrofe desbalanceado en el segundo párrafo, ¿lo notaste? Gracias por darte la molestia.

P.D.2: Gracias "mi querido Ajayu" y gracias a quienes lo mantienen vivo y vigente.

Palabras clave: FCYT, Gracias, INF-SIS, Personal, Prank, Thanks, UMSS

Enviado por Johans Marvin Taboada Villca | 3 Comentario (s)

July 29, 2009

http://blog.comunidadhaskell.org/pg/blog/carliros/read/89/cabal-common-a

 

Hoy revizaremos una forma de instalar Cabal, una herramienta muy comoda para instalar y construir aplicaciones y librerias de haskell.

Para una informacion mas detallada puedes ver Biliotecas adicionales con Cabal.

Pero hagamos lo nuestro:

La forma que abordaremos es instalar cabal atraves de un bootstrap, el cual se encargara de descargar las fuentes, configurarlas e instalarlas.

Antes de continuar debemos preveer que disponemos de 3 cosas basicas (Doy por supuesto que tienen instalado ghc 8 o superior):

Nota.- Los siguientes comandos son para un sis ope basado en Debian (esto incluye a ubuntu).

1.- parsec library of ghc.
     Si no tienes instalado, puedes instalarlo con:
        apt-get install libghc6-parsec-dev libghc6-parsec-doc

2.- network library of ghc.
     Si no tienes instalado, puedes instalarlo con:
        apt-get install libghc6-network-dev libghc6-network-doc libghc6-network-prof

3.- zlib.h header of C.
        Podemos encontrar el header zlib.h en la libreria zlib1g-dev.
        Comandos para instalarlo:
        apt-get install zlib1g-dev

Despues de preever las anteriores cosas podemos descargar el Cabal Install Tool de la pagina http://www.haskell.org/cabal/download.html.

Descargar Cabal Install Tool 0.6.2.tar.gz, y ejecutamos el bootstrap.sh

Ejecutando ./bootstrap.sh se descargara las fuentes de cabal de la web, luego se configuran y finalmente se instalaran en tu sistema (Debes notar que necesitaras una coneccion a internet cuando estes ejecutando el bootstrap).

 

Ahora que ya esta instalado cabal, debemos publicar el comando cabal ubicado en /root_or_user_/.cabal/bin. Podriamos crear un enlace a este comando en /usr/bin con
         ln -s /root/.cabal/cabal cabal

Antes de usarlo debemos actualizar la lista de paquetes con
       cabal update

Ahora podremos disfrutar de Cabal, e instalar otras aplicaciones.

Enviado por Comunidad Haskell San Simon | 0 Comentario (s)

July 17, 2009

Se podria decir que en Java existe algo de punteros. Todas las variables no primitivas son referencias a objetos, es decir, punteros a objetos. Lo que no existe en Java es la aritmética de punteros.

Arreglos

Creando un arreglo de tamanio 5 con los numeros: 0, 2, 4, 6, 8

int b[5];
int i;
for (i=0; i<5; i++)
b[i] = i*2;

El resultado:

b = [0, 2, 4, 6, 8]

 

Aritmetica de punteros

Hacemos lo mismo que hace rato, pero esta vez recorremos y accedemos a los elementos del arreglo a traves de punteros:

 

int *n=&b[0];          // Asignamos la posicion del primer elemento en n 
for (i=0;i<5;i++)    
{
   *n=i*2;                 //Ponemos como valor de donde referencia n a i*2
   n++;                    //Nos vamos a la sgte posicion del arreglo.
}

Se pueden citar mas ejemplos, colabora... :)

Palabras clave: arreglos, iPhone, punteros

Enviado por Cristian Denis Mamani Torres @ iPhone | 4 Comentario (s)

July 14, 2009

1º Google Chrome OS El sistema operativo de Google:
Google ha nombrado a grandes marcas tecnológicas como Hewlett-Packard (HP), Acer y Lenovo como socios.Veremos como le va a nuestro buscador Favorito.
http://www.noticiasdeinformatica.info/noticias/1-software/760-google-chrome-o
http://www.imatica.org/bloges/2009/07/130741052009.html
http://www.infobaeprofesional.com/notas/84466-Las-netbooks-definiran-la-p


2º Ejército norcoreano, detrás ataques internet a Surcorea:
"El laboratorio número 110 del Ministerio de las Fuerzas Armadas Populares de Corea del Norte, que es un equipo de piratas informáticos, recibió la orden de destruir las redes surcoreanas",
http://mx.news.yahoo.com/s/reuters/090711/tecnologia/internet_co


3º La botnet que atacó a las webs de Corea del Sur y Estados Unidos se vuelve en contra de sus PC:
Los ataques han sido titulares en todo el mundo. En Corea del Sur, afectó a las principales páginas web, incluyendo uno de los sites de subastas online más famosos, portales de banca electrónica y las páginas oficiales del Ministerio Nacional de Defensa, la web de Presidencia, o la de la Asamblea Nacional. En Estados Unidos, el ataque se inició el 4 de julio y dejó inoperativas las webs de la Comisión Federal de Comercio o el Departamento del Tesoro, entre otras.
http://www.csospain.es/La-botnet-que-ataco-a-las-webs-de-Corea


4º ¿0 day en SSH? - Peligroso defecto de seguridad probablemente sólo una falsa alarma:
El programa, llamado OpenSSH (Secure Shell), está instalado en decenas de millones de servidores de proveedores tales como Red Hat, Hewlett-Packard, Apple e IBM. Es utilizado por los administradores para hacer conexiones encriptadas con otros ordenadores y realizar tareas como la actualización de archivos de forma remota.
Una verdadera vulnerabilidad de día cero en OpenSSH podría ser devastador para la Internet, permitiendo a los hackers a tener carta blanca para el acceso a servidores y PCs hasta que una solución o un parche esté listo.
http://blog.segu-info.com.ar/2009/07/0-day-en-ssh-peligroso-defecto-


5º El hacker más famoso del mundo visita Campus Party Colombia:

Kevin Mitnick, lleva más de 15 años explorando e investigando la vulnerabilidad de los sistemas operativos y de las herramientas de comunicación de las empresas. Mitnick ha compartido con los periodistas y campuseros lo que para él es hoy la mayor amenaza de seguridad: “la ingeniería social, un tipo de ataque altamente efectivo que potencia el elemento humano de la seguridad corporativa”
http://www.ticpymes.es/Noticias/General/200907090003/El-hacker


6º Microsoft mueve ficha en la partida contra Google:
Microsoft reacciona y anuncia el lanzamiento de versiones online de algunos de sus programas más importantes, así como los planes de su nuevo sistema operativo “cloud”, Azure, diseñado para llevar Windows a Internet. La nueva plataforma de Google no verá la luz hasta mediados de 2010, mientras que el sistema cloud de Microsoft se espera que llegue este año.
http://www.ticpymes.es/Noticias/General/200907130032/Microsoft


7º Por ultimo una historieta bastante entretenida especialmente para los que aman la ingenieria reversa.(English)

 

http://hackerschool.org/DefconCTF/17/B300.html


PD:
“Las organizaciones gastan millones de dólares en firewalls y dispositivos de seguridad, pero tiran el dinero porque ninguna de estas medidas cubre el eslabón más débil de la cadena de seguridad: la gente que usa y administra los ordenadores”
– Kevin Mitnick


Comunidad
Seguridad Informatica
Ajayu.

Atte Gonzalo

Cualquier duda,critica o comentario a g.nina.m@gmail.com.

Palabras clave: seguridad

Enviado por Gonzalo @ Seguridad Informatica | 1 Comentario (s)

<< Atrás