Masomenos ya esta terminado...solo un pequeño problema jajaj demora mas de 15 minutos en scannear mi carpeta personal /home/martin y encima se re funde el micro..no puedo hacer mas nada!!! Siempre me canso y mato el proceso ruby antes de dejarlo terminar...mi notebook es un celeron M de 1.43ghz con 1GB DDR ...estaría bueno que alguien lo pruebe, es demasiado ineficiente esto jeje
descargarlo aca -> http://files-upload.com/files/473628/Twister.tar.gz y modificar la ruta en el codigo antes de ejecutarlo Gracias y guarden todo antes de ejecutarlo :P On 8/31/07, Martin Sagastume <[EMAIL PROTECTED]> wrote: > > Lo voy a tener en cuenta, gracias! > > On 8/31/07, Emmanuel Oga <[EMAIL PROTECTED]> wrote: > > Martin: > > > > Ademas del help de internet, podes pedirle ayuda a ruby con el comando > "ri" > > > > ri Hash > > > > si queres ver mas info de un metodo, pones > > > > ri Clase.metodo o ri Clase#metodo > > > > ri Hash.each > > > > Los contenedores de ruby tienen la particularidad de iterarse de forma > muy > > elegante, presta atencion a los metodos "each.." del contenedor que te > > interese. > > > > Hash tiene varios de estos metodos > > > > Ejemplo > > unhash= { :a => 1, :b => 2, :c => 3} > > unhash.each do |key, value| > > puts "La clave #{key} contiene el valor #{value} > > end > > > > Un aspecto a tener en cuenta al hablar de contenedores en ruby tiene que > ver > > con los mixins... > > > > Pensa en metodos que "flotan" en un namespace --modulo en ruby--, que > podes > > incluir en cualquier clase que quieras --o incluso dentro de otro > modulo. > > Aaarrhg! es dificil tratar de explicarlo en unas pocas lineas.... > > > > El tema es que los contenedores solo necesitan definir un metodo "each" > que > > devuelva todos los elementos sucesivos que posee y un metodo "<=>" que > > permita compararlos para ganar toda la funcionalidad del modulo > Enumerable > > (hace ri Enumerable). > > > > En definitiva, una vez que entendes Enumerable te sirve para Hash, > Array,, o > > hasta tus propias clases, si lo incluis de esta forma > > > > class MiLindoContenedor > > include Enumerable > > > > def each > > yield valor > > end > > > > def <=> otro > > self.valor.blablabla <=> otro.blablabla > > end > > > > ... > > end > > > > > > > > Martin Sagastume <[EMAIL PROTECTED]> escribió: > > Despues de haber hecho todo con listas para aprender como se usaban > > las listas descubri como ver los metodos de la Clase Array =S > > > > http://www.ruby-doc.org/core/classes/Array.html > > > > No encontre en internet algun ejemplo que usara la clase Hash pero con > > esta documentacion que parece ser el API entero > > > > http://www.ruby-doc.org/core/ > > > > Veo que hay una clase Hash...voy a mirarlo bien..disculpen haber > > mandado lo anterior, recien descubro esto de Core :P > > > > > > On 8/31/07, Martin Sagastume wrote: > > > Provisoriamente tengo hecho el programa con una Lista lo cuál debo > > > suplantar por un "HashMap" (vengo de Java) ... no conozco nada de lo > > > que ya tiene Ruby y empezar a mirar Modulo por Modulo o Clase por > > > Clase debe ser un trabajo muy lindo :P ...al hacerlo con Lista lo que > > > hice fue incluir la lista en una clase Sistema y ahi hacer los > > > metodos que tendra programada la lista...les dejo la clase, > > > seguramente muchos se rian porq programe los metodos bien caceros y > > > buscar si una lista esta vacia en Ruby (q esta todo ya hecho) debe ser > > > lista.empty? o algo asi...pero como no se por donde empezar a > > > buscar, me hice los metodos re caceros jeje aqui les dejo la clase > > > Sistema asi se rien un poco ¬¬ > > > > > > Sistema > > > ********* > > > > > > class Sistema > > > > > > > > > def getLista > > > return @lista > > > end > > > > > > def agregarEnLista(elemento) > > > @lista << elemento > > > end > > > > > > def agregarEnListaDupes(elemento) > > > @listaDupes << elemento > > > end > > > > > > def estaEnLista(elemento) > > > ([EMAIL PROTECTED]).each do |i| > > > if @lista[i] == elemento > > > puts "ENCONTRE UN DUPPE!!" > > > self.agregarEnListaDupes(elemento) > > > return true > > > end > > > end > > > return false > > > end > > > > > > def getListaDupes > > > return @listaDupes > > > end > > > > > > def esVaciaLista > > > if @lista.length == 0 > > > return true > > > end > > > return false > > > end > > > > > > def mostrarLista > > > for i in ([EMAIL PROTECTED]) > > > puts "Agregados a la lista: [EMAIL PROTECTED]" > > > end > > > end > > > > > > def initialize > > > @lista = Array.new > > > @listaDupes = Array.new > > > end > > > end > > > > > > > > > Necesito Utilizar HashMap en lugar de Lista para almacenar algo asi: > > > > > > -----KEY----- ---------- VALUE ------------ > > > [d3daa1fc... , /home/martin/archivo.txt] > > > > > > El tema es que mire en internet y hay poca documentación...vi que se > > > creaba de la siguiente manera: > > > > > > hash = {} #creo el hash > > > hash [md5] = "archivo1.txt" # ingreso elementos y clave al hash > > > > > > como recorro el hashmap ? > > > como veo las operaciones que puedo realizarle a un HashMap..?? Ej..ver > > > si esta vacio sin hacer mi propio metodo :P > > > > > > Estaba acostumbrado a q en Java HashMap es una clase...voy al API y > > > veo que metodos tiene programados y listo..aca no se ni por donde > > > empezar, estoy medio perdido aún...debe ser porque hace 3 días empezé > > > a leer de Ruby :P > > > > > > Un tiempo estuve tratando de hacer cosas con RoR en lugar de PHP pero > > > estuve muy poco tiempo ya que no entendia mucho y queria programar en > > > RoR sin saber Ruby =P ...ahora que ando con tiempo estoy lanzandome > > > a aprender Ruby!! > > > > > > > > > Gracias por la ayuda ;) > > > > > > > > > On 8/31/07, NachoKB wrote: > > > > Está claro. Lo dije por que era muuuuuuuuuy simple (igual me gustó > el > > > > ejercicio). > > > > Aunque más de una vez me pasó querer resolver algo y no encontrar > cómo > > (o > > > > sea, yo sabía la mejor forma pero no encontraba el nombre del > método)... > > > > recientemente, tenía un array de elementos (gnomos, digamos). Me > > interesaba > > > > separar el gnomo emperador del resto para que una view los muestre > por > > > > separado. Yo buscaba una clasificación de elementos o algo así. > Terminé > > > > haciendo algo como > > > > emperador = gnomos.detect &:emperador? > > > > [ emperador, gnomos - emperador ] > > > > Ayer me crucé con el método > > > > > > > Enumerable.partition*......................................................... > . > > > > > > > > * notar que no es exactamente lo mismo, pero eso era lo que buscaba > en > > un > > > > ppio... Ver > > > > > > http://corelib.rubyonrails.org/classes/Enumerable.html#M002183 > > > > > > > > nachokb > > > > > > > > > > > > On 8/31/07, Emmanuel Oga < [EMAIL PROTECTED]> wrote: > > > > > > > > > > Deprimido? porque? Teniendo en cuenta el contexto asumo que es por > no > > > > conocer el uso recursivo del metodo glob de la clas Dir de la > libreria > > core > > > > de ruby... no? :) > > > > > > > > > > Bueno! creo que no tendrias que preocuparte mucho, si tenes en > cuenta > > que > > > > la libreria core y la libreria estandar de ruby comprenden decenas > de > > > > clases, cada una con decenas de metodos, dificilmente podrias > conocer y > > > > recordar de memoria el comportamiento exacto de cada uno de esos > > metodos. > > > > Para mi la clave esta en compartir la info: lo que no se yo, alguien > mas > > lo > > > > sabra!!! > > > > > > > > > > :) > > > > > > > > > > > > > > > NachoKB escribió: > > > > > Gracias!! > > > > > Igual sigo deprimido... > > > > > > > > > > > > > > > On 8/31/07, Emmanuel Oga wrote: > > > > > > Nacho: > > > > > > > > > > > > Dir.[] o Dir.glob toman como parametro un "glob pattern" ( > > > > http://en.wikipedia.org/wiki/Glob_pattern ) que es un > > > > patron similar a una expresion regular pero menos poderoso que > > generalmente > > > > se usa para describir archivos. > > > > > > > > > > > > El glob Dir[/directorio/**/*'] recorre todos los archivos en el > > > > directorio "directorio" __Y__ sus subdirectorios, por lo que no hace > > falta > > > > que lo implementes por tu cuenta. Otra cosa buena es que a Dir.[] le > > podes > > > > pasar mas de un glob pattern si queres, ejemplo: > > > > > > > > > > > > Dir.glob ["/tmp/**/*", "/etc/**/*"].each do |file| > > > > > > ... > > > > > > end > > > > > > > > > > > > que busca todos los archivos en /tmp y sus subdirectorios __y__ > > todos > > > > los archivos /etc y susu subdirectorios. > > > > > > > > > > > > NachoKB escribió: > > > > > > > > > > > > > > Cuidado que Find no es una clase, sino un módulo. > > > > > > > > > > > > O sea, no es para usarlo directamente... normalmente es para > > > > incorporarlo en una clase (para componer comportamiento). Lo mismo > con > > > > FileTest. > > > > > > > > > > > > Me parece que lo que querés hacer lo podés hacer sólo usando > File y > > > > Dir... > > > > > > > > > > > > Básicamente, vos querés agarrar todos los archivos a partir de > un > > root > > > > dado (recursivamente) y calcularle el MD5: > > > > > > > > > > > > > > > > > > > Dir.new(directorio).map do |fullpath| > > > > > > > [name, Digest::MD5.hexdigest (File.read(fullpath))] > > > > > > > end > > > > > > > > > > > > > > > > > > > El problema es que (1) si bien Dir es Enumerable, enumera sólo > los > > hijos > > > > directo (no rescursivamente) y (2) "fullpath" no quedaría realmente > el > > path > > > > completo... Por lo tanto hice esto, ver qué opinan: > > > > > > > > > > > > > > > > > > > class TraversableDir > > > > > > > include Enumerable > > > > > > > def initialize(*args, &block) > > > > > > > @dir = Dir.new *args, &block > > > > > > > end > > > > > > > def each(&block) > > > > > > > @dir.each do |name| > > > > > > > unless ['.', '..'].include? name > > > > > > > fullpath = self.fullpath(name) > > > > > > > case > > > > > > > when File.directory?(fullpath) > > > > > > > TraversableDir.new(fullpath).each &block > > > > > > > when File.file?(fullpath) > > > > > > > block.call fullpath > > > > > > > else > > > > > > > p "Ojo ni dir ni file: #{fullpath} (hay que hacer algo?)" > > > > > > > end > > > > > > > end > > > > > > > end > > > > > > > end > > > > > > > def fullpath(name) > > > > > > > File.expand_path "[EMAIL PROTECTED]/#{name}" > > > > > > > end > > > > > > > end > > > > > > > > > > > > > > > > > > > Entonces queda: > > > > > > > > > > > > > TraversableDir.new(directorio).map do |fullpath| > > > > > > > [name, Digest:: MD5.hexdigest (File.read(fullpath))] > > > > > > > end > > > > > > > > > > > > > > > > > > > Lo que te daria un array de esta forma: > > > > > > > > > > > > > [ > > > > > > > [ "/path/a1", "ABDCE" ], > > > > > > > [ "/path/a2", "DEADBEEF" ] > > > > > > > ] > > > > > > > > > > > > > > > > > > > Que es un idiom usado en Ruby (es similar a un Hash pero a veces > se > > usa > > > > así, por ejemplo cuando no necesitás acceder a un elemento, sino que > lo > > vas > > > > a iterar). > > > > > > > > > > > > > > > > > > On 8/31/07, Damian Janowski wrote: > > > > > > > On 8/31/07, Martin Sagastume < [EMAIL PROTECTED]> wrote: > > > > > > > > Excelente, eso era lo que necesitaba...muchas gracias!! > > > > > > > > > > > > > > > > Estuve mirando si el "API" de Rails...creo que no vi eso :P > > ..una > > > > > > > > cosa que me llamó la atención es que la clase Find tenga > > programado > > > > el > > > > > > > > método find ...como que es medio desprolijo el hecho de > tener un > > > > > > > > metodo que se llame igual que la clase (ya que en ruby no es > el > > > > > > > > constructor) Buscar.buscar en lugar de Buscador.buscar o > algo > > asi > > > > > > > > ... es por algo en especial ? > > > > > > > > > > > > > > Nu sé :) > > > > > > > > > > > > > > Pero me parece que suele pasar con esas pequeñas > funcionalidades > > que > > > > > > > son casi "helper" y muchas veces quedan como métodos de clase, > > etc. > > > > > > > > > > > > > > Por ejemplo: Iconv.iconv > > > > > > > > > > > > > > Saludos! > > > > > > > _______________________________________________ > > > > > > > Ruby mailing list > > > > > > > [email protected] > > > > > > > > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > > Ruby mailing list > > > > > > [email protected] > > > > > > > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > > > > > > > > ________________________________ > > > > > > > > > > ¡Sé un mejor fotógrafo! > > > > > > Perfeccioná tu técnica y encontrá las mejores fotos. > > > > > > Visitá > > http://ar.yahoo.com/promos/mejorfotografo.html > > > > > > > > > > > > _______________________________________________ > > > > > > Ruby mailing list > > > > > > [email protected] > > > > > > > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > > Ruby mailing list > > > > > [email protected] > > > > > > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > > > > ________________________________ > > > > > > > > > ¡Sé un mejor fotógrafo! > > > > > Perfeccioná tu técnica y encontrá las mejores fotos. > > > > > Visitá http://ar.yahoo.com/promos/mejorfotografo.html > > > > > > > > > > > > > > > _______________________________________________ > > > > > Ruby mailing list > > > > > [email protected] > > > > > > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > > > > > > _______________________________________________ > > > > Ruby mailing list > > > > [email protected] > > > > > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > > > > > > > > > > -- > > > Martín Sagastume > > > 094-575846 > > > Montevideo - Uruguay > > > http://musicapastillera.blogspot.com > > > > > > > > > -- > > Martín Sagastume > > 094-575846 > > Montevideo - Uruguay > > http://musicapastillera.blogspot.com > > _______________________________________________ > > Ruby mailing list > > [email protected] > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > > ________________________________ > > > > ¡Sé un mejor ambientalista! > > Encontrá consejos para cuidar el lugar donde vivimos en: > > http://ar.yahoo.com/promos/mejorambientalista.html > > > > > > _______________________________________________ > > Ruby mailing list > > [email protected] > > http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar > > > > > > > -- > Martín Sagastume > 094-575846 > Montevideo - Uruguay > http://musicapastillera.blogspot.com > -- Martín Sagastume 094-575846 Montevideo - Uruguay http://musicapastillera.blogspot.com
_______________________________________________ Ruby mailing list [email protected] http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar
