<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-30573458</id><updated>2012-01-29T15:41:47.177-07:00</updated><category term='smart phone applications'/><category term='parallel computing'/><category term='wiimote'/><category term='vacaciones'/><category term='ganancia'/><category term='Das Höhlengleichnis in Zeiten des Fernsehen'/><category term='meaning'/><category term='lukas podolski lied'/><category term='relaciones de odio en redes socials'/><category term='nivel de materia'/><category term='memoria wiimote'/><category term='el arte de negociar'/><category term='racismo'/><category term='interacion humano computadora'/><category term='lyrics'/><category term='ich liebe facebook'/><category term='christianity and faithfulness'/><category term='programa en C del puerto paralelo'/><category term='android adb driver windows 7 64 bit install'/><category term='amplificador operacional'/><category term='hola mundo en gstremear'/><category term='aprendizaje de maquina'/><category term='scratchbox'/><category term='reportes en el wiimote'/><category term='IPV4'/><category term='mitos urbanos de las WLAN'/><category term='relaciones positivas en redes sociales'/><category term='ich hasse Facebook'/><category term='glutStrokeFont'/><category term='dolly server'/><category term='how the wiimote works'/><category term='relacion CPU teclado'/><category term='VON WEGEN'/><category term='wii generates blue screen of death'/><category term='como pedir las cosas'/><category term='cloning with dolly'/><category term='Connie Francis'/><category term='blue screen of death'/><category term='CHINOOK_X86'/><category term='GTK for dummies'/><category term='aprendizaje de conceptos'/><category term='amo a giovani dos santos'/><category term='ST 4128 BWP'/><category term='los amigos del deporte son compadres'/><category term='text to speech'/><category term='was ich mag'/><category term='knn'/><category term='ducking sockets'/><category term='IPV2'/><category term='LDA'/><category term='eros'/><category term='leyendo el nivel de la pila'/><category term='boosting en español'/><category term='tecnologia en la UNAM'/><category term='ARMEL'/><category term='espiando con el celular'/><category term='maemo'/><category term='flash plugin'/><category term='rain'/><category term='crisis economica y las admisiones a la universidad'/><category term='buttons and javascript'/><category term='computer architecture'/><category term='U7849 6Q63'/><category term='hello world in gstreamer'/><category term='Interfaz HID'/><category term='bocinas del wiimote'/><category term='ubuntu'/><category term='traduccion al español'/><category term='love'/><category term='Mexico'/><category term='was ich muss'/><category term='depressed because I failed'/><category term='how stuff works en español'/><category term='amplificador operacional derivador'/><category term='dass ich dort studieren kann...'/><category term='ich esse'/><category term='client'/><category term='linux 64 bit'/><category term='portaudio'/><category term='acceleration'/><category term='como funciona el teclado'/><category term='guilt'/><category term='me quiero suicidar porque odio redes'/><category term='sensores en el wiimote'/><category term='appendchild'/><category term='reconocimiento de texto'/><category term='espeak'/><category term='instalacion de qt en visual studio'/><category term='diferencia entre IPV4 e IPV2'/><category term='death...'/><category term='mrtg'/><category term='nokia'/><category term='que es boosting'/><category term='captura de informacion personal con el celular'/><category term='introduccion machine learning'/><category term='soul'/><category term='android driver porting'/><category term='ACELEROMETRO Y EL WIIMOTE'/><category term='how can be faithful'/><category term='conjunto de entrenamiento'/><category term='inteligencia artificial'/><category term='how to play .mov files in qt'/><category term='conjunto de hipotesis'/><category term='morining sickness'/><category term='spanisch'/><category term='ADXL330'/><category term='amplificador de voltaje'/><category term='incubadora de negocios UNAM'/><category term='andoridsdk'/><category term='botones del wiimote'/><category term='Broadcom 2042'/><category term='messing up'/><category term='liberty'/><category term='hipótesis'/><category term='opengl fonts'/><category term='support vector machine'/><category term='código de viterbi'/><category term='english'/><category term='detector de esquinas'/><category term='Gstreamer tutorial'/><category term='la cancion de giovani dos santos'/><category term='editar videos en android'/><category term='sigo odiando redes'/><category term='mensajes de error del router'/><category term='_outp'/><category term='thread'/><category term='movie player'/><category term='how to step up qt in visual studio'/><category term='un tour por google'/><category term='speech synthesizer'/><category term='server'/><category term='samba'/><category term='eating pizza in bed'/><category term='favorite love poems'/><category term='qt movie format for dummies'/><category term='ciencia cognitiva'/><category term='luces'/><category term='qt'/><category term='bluetooth y el wiimote'/><category term='openl'/><category term='leds del wiimote'/><category term='letra'/><category term='como compartir archivos entre linux y windows'/><category term='sayit'/><category term='arquitectura de computadoras'/><category term='Interfaz HID y el wiimote'/><category term='analisis inteligente de palabras'/><category term='la pila del wiimote'/><category term='xephyr'/><category term='diferencia entre TCP y UDP'/><category term='sportfreunde stiller'/><category term='gstreamer for dummies'/><category term='nacionalismo'/><category term='access usb android'/><category term='Harris Corner Detector for dummies'/><category term='windows 7'/><category term='concept learning'/><category term='removechild'/><category term='dibujar imagenes sobre video'/><category term='iphone'/><category term='tutorial .mov file format player'/><category term='viterbi'/><category term='rolling'/><category term='markov en español'/><category term='poems in your life'/><category term='pila'/><category term='k nearest neighbor tutorial'/><category term='beca anita borg para chicas'/><category term='como instalar samba'/><category term='alles auf anfang'/><category term='how to display video in android'/><category term='componentes wiimote'/><category term='traslation of german song'/><category term='german songs in spanish'/><category term='bluesoleil'/><category term='meego'/><category term='und leide was ich muss'/><category term='favorite poems'/><category term='where does passion come from'/><category term='amplificador de voltaje inversor'/><category term='Schöner Fremder Mann'/><category term='rebelde'/><category term='school'/><category term='using my cellphone to spy'/><category term='BCM2042'/><category term='Harris Corner detector'/><category term='nur ein wort translation'/><category term='mr messy'/><category term='como funciona el wiimote'/><category term='information from wii'/><category term='likelihood probabilities'/><category term='opencv 2.1 version'/><category term='android'/><category term='Hector Zarate Rea'/><category term='acelerometros'/><category term='Nur ein Wort'/><category term='android drivers for windows 7'/><category term='los k vecinos mas cercanos'/><category term='snmp'/><category term='como programar un celular'/><category term='leer y escribir en wiimote'/><category term='partes wiimote'/><category term='crisis'/><category term='salidas del wiimote'/><category term='discriminacion'/><category term='espanol'/><category term='overlaying images on video'/><category term='Reality Mining'/><category term='Plessy Punkt-Detektor'/><category term='stay home saturday'/><category term='my cellphone knows what I&apos;m doing'/><category term='nokia n900'/><category term='desplegar video en android'/><category term='memoria flash del wiimote'/><category term='adding elements dynamically to a form'/><category term='wiiyouself'/><category term='spanish translation'/><category term='entradas del wiimote'/><category term='voltaje offset'/><category term='rumble del wiimote'/><category term='pitch'/><category term='songtext'/><category term='ddk'/><category term='windows xp y el puerto paralelo'/><category term='Türkisch'/><category term='deutsche musik'/><category term='javascript childnode'/><category term='what is passion'/><category term='no tengo permiso de escribir al puerto paralelo'/><category term='creating a button'/><category term='german music'/><category term='c++ tutorial for opencv'/><category term='SEx aNd the city quotes'/><category term='aprendizaje'/><category term='comunicacion en el wiimote'/><category term='new song'/><category term='funcionamiento teclado'/><category term='aleman'/><category term='wir sind helden in spanish'/><category term='quiero visitr mountain view'/><category term='facultad de ingenieria'/><category term='gstreamer'/><category term='voltaje pico a pico'/><category term='maestria'/><category term='practica  1'/><category term='adb android classpath'/><category term='significado'/><category term='reinforcement learning for dummies'/><category term='christian love'/><category term='kubuntu'/><category term='vision por computadora'/><category term='UNAM'/><category term='tutorial'/><category term='hardware del wiimote'/><category term='wii'/><category term='que es samba'/><category term='poemas de amor en ingles'/><category term='ICMP'/><category term='hate in social networks'/><category term='mujeres'/><category term='2raumwohnung'/><category term='matlab'/><category term='conferencias de Google'/><category term='bluetooth'/><category term='eeprom del wiimote'/><category term='cele'/><category term='ecke detektor'/><category term='ich bitte dich Gott'/><category term='keep walking'/><category term='android driver installation'/><category term='differencia entre  RFC 1918 y rfc 791'/><category term='why oh why did I swallow that fly'/><category term='tutorial machine learning library opencv'/><category term='H7824HE'/><category term='celulares'/><category term='wir sind helden'/><category term='puerto paralelo'/><category term='el wiimote desde abajo'/><category term='failure'/><category term='universidad'/><category term='don&apos;t stop never give up'/><title type='text'>Little Saiph's Blog</title><subtitle type='html'>Música,codigo, Inteligencia Aritifical, Interfaces... todo a la Mexicana!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default?start-index=101&amp;max-results=100'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>102</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-30573458.post-2263087751427459175</id><published>2011-10-14T15:02:00.013-06:00</published><updated>2011-10-16T00:02:46.341-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aleman'/><category scheme='http://www.blogger.com/atom/ns#' term='significado'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion al español'/><category scheme='http://www.blogger.com/atom/ns#' term='cele'/><category scheme='http://www.blogger.com/atom/ns#' term='wir sind helden in spanish'/><category scheme='http://www.blogger.com/atom/ns#' term='new song'/><category scheme='http://www.blogger.com/atom/ns#' term='espanol'/><category scheme='http://www.blogger.com/atom/ns#' term='alles auf anfang'/><category scheme='http://www.blogger.com/atom/ns#' term='nur ein wort translation'/><category scheme='http://www.blogger.com/atom/ns#' term='meaning'/><category scheme='http://www.blogger.com/atom/ns#' term='UNAM'/><title type='text'>Alles Auf Anfang, o la cancion para empezar tu vida</title><content type='html'>Tenia meses que queria compartir esta cancion. Es una cancion alemana de uno de mis grupos favoritos: Wir sind Helden. (Nosotros somos los heores!) . Esta cancion me encanta la melodia, es de esas cancione que me pone de buen humor escucharla, me dan ganas de bailar. Pero lo mejor que tiene esta cancion es la letra. El mensaje que yo entiendo es que debes tomar accion! Si hay cosas que no te agradan de la vida, esta en tus manos cambiarlas. Ponte las pilas. Da todo cada dia! Alles auf anfang! Da todo en este principio que viene! Venga Pumas vamos!&lt;br /&gt;&lt;br /&gt;Aqui esta la cancion. Enjoy!&lt;br /&gt;&lt;iframe width="560" height="315" src="http://www.youtube.com/embed/VtQDWGrX78c" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Version Alemana:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 5px dashed green;"&gt;&lt;br /&gt;&lt;b&gt; 23.55: Alles auf Anfang&lt;/b&gt;&lt;br /&gt;Du wirst zahnlos geboren und ohne Zähne gewogen&lt;br /&gt;Kriegst sie bis Mitte zwanzig, schon wieder gezogen&lt;br /&gt;Bist oh so verschüchtert, verzagt und vernagelt&lt;br /&gt;Kein Licht dringt zu dir, so geplagt bist du, sternhageldicht&lt;br /&gt;Was dich runterzieht, sind deine schweren Arme&lt;br /&gt;Wer schleicht, dem wird leicht kalt, darum schleichst du ins Warme&lt;br /&gt;Du nennst es Weltschmerz, ich nenn' es Attitüde&lt;br /&gt;Es ist erst fünf vor zwölf und du bist schon so müde&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;&lt;br /&gt;Nimm deine Zähne, leg sie unter dein Kissen&lt;br /&gt;Und sag der Fee du möchtest folgendes wissen:&lt;br /&gt;"Warum sinkt mir mein Herz in meine schweren Beine?&lt;br /&gt;Ich kann kein Ende sehen von meiner langen Leine"&lt;br /&gt;Das was dich so beschwert, das sind die dicken Bären&lt;br /&gt;die sie dir aufbinden, du könntest dich beschweren&lt;br /&gt;Ob das von Bein haut, das wäre nun zu klären&lt;br /&gt;Wenn die kleinlauten, kleinen Leute im Kleinen deutlich lauter wären&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;&lt;br /&gt;Wer "A" sagt muss auch "B" sagen&lt;br /&gt;Nach dem ganzen "ABC" fragen&lt;br /&gt;Wer "ach" sagt muss auch wehklagen&lt;br /&gt;Wer "ja" sagt auch "ach nee" sagen&lt;br /&gt;&lt;br /&gt;Fühlst du dich mutlos? Fass endlich Mut, los!&lt;br /&gt;Fühlst du dich hilflos? Geh' raus und hilf, los!&lt;br /&gt;Fühlst du dich machtlos? Geh' raus und mach, los!&lt;br /&gt;Fühlst du dich haltlos? Such Halt und lass los!&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Fünf vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Vier vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Drei vor zwölf, alles auf Anfang"&lt;br /&gt;Ihr sagt: "Kein Ende in Sicht"&lt;br /&gt;Wir sagen: "Zwei, eins, auf die Zwölf"&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h&gt;&lt;span style="font-weight: bold;"&gt;Version En Espa~ol!&lt;/span&gt;&lt;/h&gt;&lt;br /&gt;&lt;div style="border: 5px dashed purple;"&gt;&lt;br /&gt;&lt;b&gt; 23.55: Listos para empezar!&lt;/b&gt;&lt;br /&gt;Naciste sin dientes y sin ellos te pesaron ,&lt;br /&gt;Haz que lleguen hasta tus veinti-tantos&lt;br /&gt;Con buena fe arragantelos.&lt;br /&gt;Estas tan intimidado, tan fracasado y atrapado,&lt;br /&gt;Ningun rayo de  luz llega a ti, estas tan molesto&lt;br /&gt;&lt;br /&gt;Lo que a ti te cansa, son tus brazos pesados,&lt;br /&gt;quien anda a hurtillas, a escondidas, estara un poco friolento, por eso entras tu al calor a escondidas.&lt;br /&gt;Tu lo llamas "Cansancio de estar vivo", yo lo llamo 'Actitud'&lt;br /&gt;Ya son 5 para las doce, y tu ya estas cansado&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia"&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Toma tus dientes y dejalos debajo de tu cojin,&lt;br /&gt;y preguntale al raton de los dientes, todo lo que quieras saber:&lt;br /&gt;"Por que mi corazon se cae hasta mis pesadas piernas?&lt;br /&gt;No puedo ver el fin desde mi larga linea"&lt;br /&gt;Lo que a ti te pesa es que te estan haciendo pendejo,te puedes ir a quejar,&lt;br /&gt;talvez sea un problema con la piel de tu pierna, se puede eso aclarar,&lt;br /&gt;cuando la gente chiquita y docil se une, es mucho mas fuerte.&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos:"Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Quien dice A tiene tambien que decir B&lt;br /&gt;Pide por todo el alfabeto&lt;br /&gt;Quien dice "ahh": tambien debe empezar a llorar&lt;br /&gt;Quien dice "si" debe tambien decir "duh!, obvio!"&lt;br /&gt;&lt;br /&gt;te sientes sin animos? Vamos animate!&lt;br /&gt;Te sientes sin ayuda? Vamos sal a ayudar a la gente!&lt;br /&gt;Te sientes impotente? Vamos sal y hazte cargo!&lt;br /&gt;Te sientes desorientado? Vamos sal y orientate!&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: "Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos:"Son las cinco para las doce, vamos a dar el todo en este nuevo dia&lt;br /&gt;Ustedes dicen: "No se ve el fin"&lt;br /&gt;Nosotros decimos: dos, uno...vamos por el doce!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Algo que me agrado de hacer esta traduccion, fue que aprendi una frase en aleman nueva:&lt;br /&gt;" jmd. einen Bären aufbinden", es como bromear con alguien, yo lo tome como vacilarlo, hacerlo pendejo etc. Se me hace una frase rara porque Bären es oso. O.o&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2263087751427459175?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2263087751427459175/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2263087751427459175' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2263087751427459175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2263087751427459175'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/10/vamos-dar-el-todo-en-este-nuevo-dia.html' title='Alles Auf Anfang, o la cancion para empezar tu vida'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/VtQDWGrX78c/default.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-5407682402162827055</id><published>2011-10-06T17:40:00.008-06:00</published><updated>2011-10-06T23:31:09.106-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='el arte de negociar'/><category scheme='http://www.blogger.com/atom/ns#' term='mujeres'/><category scheme='http://www.blogger.com/atom/ns#' term='como pedir las cosas'/><title type='text'>El arte de negociar, y la diferencia de generos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-ash4/315011_10150855172550437_814810436_21110139_1499418942_n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 480px; height: 640px;" src="https://fbcdn-sphotos-a.akamaihd.net/hphotos-ak-ash4/315011_10150855172550437_814810436_21110139_1499418942_n.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El dia de hoy mi universidad invito a la autora de  Ask For It: How Women Can Use the Power of Negotiation To Get What They Really Want y Women Don’t Ask:The High Cost of Avoiding Negotiation and Positive Strategies for Change, Sara Laschever. Pense en hacer un peque~o post respecto a lo que aprendi en esta platica y compartirlo con mis lectores, porque creo que para muchos (no solo mujeres) el pedir por las cosas es un acto dificil.&lt;br /&gt;&lt;br /&gt;Dentro de la platica, Sara hablo de como los hombres ven el negociar muy diferente a como lo ven las mujeres. Para los hombres. negociar es algo agradable es como un juego de baseball donde debes tener estrategias. Para las mujeres, el negociar es algo tedioso, algo horrible, como ir al dentista. La autora dijo que esta diferencia de percepcion, radicaba en la diferencia de crianza que existia entre ni~os y ni~as. A las nenas, usualmente se les da juegos que involucran el cuidado de los demas: les dan bebes de juguete, sets de cocina etc. Mientras que a los ni~os, se les dan juegetes donde tienen que explorar su propio ingenio para salir adelante: se les da sets de trenes, donde deben construir rutas y ver como saltar obstaculos etc. A las ni~as tambien se les suele dar tareas diferentes a la de los ni~os. A las ni~as las tareas que se les da son relacionadas con cuidar bebes o a sus herman@s peque~os, ayudar en la cocina. Usualmente todas las tareas en las que se involucran a las nenas hay un adulto supervisando, mientras que a los ni~os, las tareas que se les asigna en el hogar tienen que ver con lavar el coche,  quitar la nieve de la acera, arreglar el jardin, sacar la basura etc. Los ni~os reciben menos supervision que las ni~as en las tareas que se les da, y en muchos casos a los ni~os se les paga por el trabajo que ejecutaran: hey te dare 10 pesos si lavas el coche etc. Desde chicos, los ni~os aprenden a negociar las cosas, porque comienzan a decirle a sus padres: Solo 10 pesos? Pero es un auto grande y ademas lo aspirare, dame mejor 15 pesos! Mientras que las ni~as se acostumbran a hacer sus quehaceres por amor. "Por amor cuidare a mis hermanos."&lt;br /&gt;Adicionalmente la sociedad, ve mal a las mujeres demandantes, mandonas, e interesadas en el dinero&lt;br /&gt;Estas cosas provocan que cuando crezcan, los hombres y las mujeres tengan muy distintos sentimientos respecto al acto de negociar. Esto explica porque, mientras el 65% de los hombres pide un incremento de salario, solo el 12% de las mujeres lo hace.&lt;br /&gt;El no negociar o pedir las cosas, hace que uno tenga grandes perdidas. Porque la persona que pidio las cosas, tiene ya un mejor CV que la persona que no pidio nada. La autora hablo de casos, donde los hombres pedian a su Universidad dinero para asisitir a conferencias. La Universidad les daba el dinero y los hombres hacian grandes conexiones por haber podido asistir. Las mujeres, como nunca preguntaron si era posible que la universidad les pagara el viaje, perdian la oportunidad de asisitir a la conferencia y expandir sus horizontes.&lt;br /&gt;&lt;br /&gt;la autora hablo de verios puntos para mejorar la negociacion. Algunos de ellos son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Asume que TODO es negociable&lt;/li&gt;&lt;li&gt;Piensa que el mundo es tu ostia ( Tu tesoro). Todo es una oportunidad.&lt;/li&gt;&lt;li&gt;Vuelvete mas chingona. ( crea conexiones con gente que esta en el poder, estudia una segunda carrera para tener mejor CV, obten diferentes asesores, gente que te puede dar consejos)&lt;/li&gt;&lt;li&gt;Haz tu investigacion (Obten informacion de cuanto puedes pedir, hay recurso en internet que te muestran salarios promedios de diferentes compa~ias, pregunta con tus amistades.Es importante estar bien informado)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Por ultimo, algo que dijo la autora que me gusto, es que si aceptas un mal salario, es aceptar que eres chafa. Es como el vino, usualmente si ves un vino barato que cuesta 20 pesos, no esperas mucha calidad de el, en cambio si ves un vino de 200 pesos, es probable que consideres que es de mucha mejor calidad y sabor. Entonces cuando aceptas salarios bajos, estas comunicando algo de ti, estas diciendo que eres el vino de mala calidad de 20 varos. Lo cual no es algo que quieres! Acepta siempre buenos tratos de buena calidad. Tu lo vales! ( Ja comercial loreal ;)&lt;br /&gt;&lt;br /&gt;Y algo curioso que dijo la autora, es que para poder persuadir a las personas, es importante que la mujer sea amigable. (Esto por lo mismo que se menciono anteriormente, que la sociedad ve mal que la mujer sea mandona y agresiva).&lt;br /&gt;&lt;br /&gt;Por ultimo, me gustaria escribir sobre el consejo que uno de mis amigos me dio, respecto a pedir cosas: La persona a quien le pediras X cosa, es un adulto que sabe decir NO. Entonces si no peude dartelo, sabe decir NO. no tienes por que preocuparte, no es una situacion incomoda para la otra persona. Y si lo pides, estas mejor que si no lo pides, porque en el peor de los casos, estas donde empezaste.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-5407682402162827055?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/5407682402162827055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=5407682402162827055' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5407682402162827055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5407682402162827055'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/10/el-arte-de-negociar-y-la-diferencia-de.html' title='El arte de negociar, y la diferencia de generos'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-1863925407632050750</id><published>2011-07-14T09:58:00.022-06:00</published><updated>2011-09-30T10:35:32.414-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='editar videos en android'/><category scheme='http://www.blogger.com/atom/ns#' term='dibujar imagenes sobre video'/><category scheme='http://www.blogger.com/atom/ns#' term='overlaying images on video'/><category scheme='http://www.blogger.com/atom/ns#' term='how to display video in android'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><category scheme='http://www.blogger.com/atom/ns#' term='desplegar video en android'/><title type='text'>Getting your  Images laid (pause) over a video in android</title><content type='html'>This post is a short tutorial on how to overlay images on video in android. I created this tutorial, after making an android application that plays a video and with certain user interactions displays images on top of the video.  This Image-Video effect can also be achieved through action script, but in this tutorial we avoid any extra programming tools and stick to working with the android API.&lt;br /&gt;&lt;br /&gt;Before we begin, we need to giver a quick overview of concepts:&lt;br /&gt;&lt;br /&gt;Most of the user interface components on Android are Views. A View represents a rectangular area on the screen and it is responsible for drawing and event handling. The ImageView class displays an arbitrary image, such as an icon. The VideoView class displays a video file. The ViewGroup class is considered a special view that can contain other views (called children.) This class is the base class for layouts.&lt;br /&gt;&lt;br /&gt;In Android, a layout holds all the elements that appear to the user, and defines where they will be placed. The layout can be declared in an XML file or can be programmatically defined by creating View Objects. A particular type of layout is RelativeLayout. This Class holds the concept that each component in the interface can be described in relation to each other or to its parent.&lt;br /&gt;&lt;br /&gt;The overall idea is that the image on video overlay can be accomplished by using RelativeLayout and placing the VideoView as the first child of the RelativeLayout and the ImageView as the second child. This way in the camera preview, the ImageView will appear to be "on top of" the VideoView.&lt;br /&gt;&lt;br /&gt;The step-by-step instructions are as follows:&lt;br /&gt;&lt;br /&gt;1. In Eclipse, create a Simple Android Project From Scratch (Make sure to have created a main activity).&lt;br /&gt;&lt;br /&gt;2. Under the  res folder  in your project go to the drawable folder (if you don't have a folder titled "drawable" in res, create it) and add all of the images you plan on working with there.&lt;br /&gt;&lt;br /&gt;3. Add the video or videos you plan on working with to the SD memory card of your android phone. (This can be done by connecting  your phone via USB to your PC and on the phone, selecting  "notifications", then  "USB connected", and in the new window that appears clicking: "Turn on USB storage". After a few seconds a new removable disk should appear on your PC. Copy to it your videos. The video format of my videos was mp4)&lt;br /&gt;&lt;br /&gt;4. Back in your android project in your layout folder, add a new xml file with the name of your choice (for example video_over_image.xml) .In this xml we will define the elements and the layout of our application. For this particular application, we want the following layout:&lt;br /&gt;A text-box in the upper part of the window, where the user types the name of the video they wish  to play. The space below the text-box is where the video will be displayed.&lt;br /&gt;The image overlaid on the video will appear on the upper portion of the video. (But it is possible to place it wherever one desires).&lt;br /&gt;Our XML file to accomplish this layout is as follows:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed red;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;?xml version="1.0" encoding="utf-8"?&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:orientation="vertical"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:layout_width="fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:layout_height="fill_parent"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &amp;lt;TextView android:id="@+id/label"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;              android:layout_width="fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;              android:layout_height="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;              android:text="Type video name here:" /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &amp;lt;EditText&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        android:id="@+id/edittext"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        android:layout_width="fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        android:layout_height="wrap_content"/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;RelativeLayout&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  xmlns:android="http://schemas.android.com/apk/res/android"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  android:orientation="vertical"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  android:layout_width="fill_parent"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  android:layout_height="fill_parent"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;Button android:id="@+id/topBtn"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:layout_width="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:layout_height="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:text="Top"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    android:layout_centerHorizontal="true"&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/Button&amp;gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &amp;lt;VideoView android:id="@+id/surface_view"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 android:layout_width="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 android:layout_height="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&amp;lt;ImageView   android:id="@+id/overlayImage"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  android:layout_width="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  android:layout_height="wrap_content"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   android:layout_below="@+id/topBtn"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &amp;lt;/RelativeLayout&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &amp;lt;/LinearLayout&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;An interesting point to notice about this layout is that we added a dummy button to it. Because the video is defined right after this dummy button, the video will completely   "cover" the  button, so it will not appear on the interface. This button helps in positioning our image; Our image is  set relative to this button. In this case, because we sought for the image to appear in the "mid-top" portion of the video the  image's layout was set to be below this button. It is also important to note, that the image was declared after the video, because this  permits  the image to be displayed "on top of" the video.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;5. In our java activity file in the onCreate method, we now need to establish that we will be using this layout. We also need to establish a listener for the textbox, which after the user has typed the name of the video to play and pressed "enter" will start playing the desired video. Furthermore it is also necessary to establish what images will be overlaid  and when that will occur.&lt;br /&gt;To facilitate this example, we will establish that when the user types 1, video A (which should already be on the phone's SD card) will be played and image c1 will be overlaid on the video. Similarly, when the user types 2, video B will be played and image c2 will now be overlaid on the video. We will also add some effects to the image, in specific alpha blending.&lt;br /&gt;In the following, we will present all the code to accomplish this task and subsequently review each part of it:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed red;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;package com.example.android.videooverimage;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.app.Activity;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.media.MediaPlayer;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.media.MediaPlayer.OnCompletionListener;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.os.Bundle;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.util.Log;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.widget.MediaController;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.widget.VideoView;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.net.Uri;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import  android.widget.EditText;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.view.KeyEvent;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.view.View.OnKeyListener;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.view.View;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.content.res.Resources;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;import android.widget.ImageView;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;public class VideoOverImageActivity extends Activity &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;VideoOverImageActivity&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public void onCreate(Bundle icicle) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     super.onCreate(icicle);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     setContentView(R.layout.&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;video_over_image_activity&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        final EditText edittext = (EditText) findViewById(R.id.edittext);&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        edittext.setOnKeyListener(new OnKeyListener() &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         public boolean onKey(View v, int keyCode, KeyEvent event) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                // If the event is a key-down event on the "enter" button&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         if ((event.getAction() == KeyEvent.ACTION_DOWN) &amp;amp;&amp;amp; (keyCode == KeyEvent.KEYCODE_ENTER)) {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  // Perform action on key press&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;              int aInt=0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                   aInt = Integer.parseInt(edittext.getText().toString());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 catch (NumberFormatException e)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  Log.e("debug","Error finding Image: "+e.getMessage());&lt;/span&gt;&lt;br /&gt;              &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 }&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    VideoView videoHolder = (VideoView) findViewById(R.id.surface_view);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    MediaController mc=new MediaController(&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;VideoOverImageActivity&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.this);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 Boolean returnValue=true;&lt;/span&gt;&lt;br /&gt;             &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  switch (aInt) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  {&lt;/span&gt;&lt;br /&gt;               &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                   case 1:&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;                &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    startPlaying(videoHolder,mc,"file:///sdcard/video1.mp4",0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    break;&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                   case 2:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    startPlaying(videoHolder,mc,"file:///sdcard/video2.mp4",1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    break;&lt;/span&gt;&lt;br /&gt;                &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                   default: &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    returnValue=false; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                    break;&lt;/span&gt;&lt;br /&gt;               &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 }&lt;/span&gt;&lt;br /&gt;             &lt;br /&gt;          &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 return returnValue;&lt;/span&gt;&lt;br /&gt;            &lt;br /&gt;              &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                }&lt;/span&gt;&lt;br /&gt;           &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                return false;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        });&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    public void startPlaying(VideoView videoHolder,MediaController mc,String nameVideo, int song)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    {&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     Resources res = &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;VideoOverImageActivity&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;.this.getResources();&lt;/span&gt;&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     ImageView image = (ImageView) findViewById(R.id.overlayImage);&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      R.drawable.class.getField("b" + song).getInt(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      image.setImageDrawable(res.getDrawable(R.drawable.class.getField("b" + song).getInt(0)));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      image.getDrawable().setAlpha(55);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     catch (Exception e)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      Log.e("debug","Error finding Image: "+e.getMessage());&lt;/span&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         videoHolder.setMediaController(mc);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         videoHolder.setVideoURI(Uri.parse(nameVideo));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         videoHolder.requestFocus();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         videoHolder.start();&lt;/span&gt;&lt;br /&gt;     &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         videoHolder.setOnCompletionListener(new OnCompletionListener()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          public void onCompletion(MediaPlayer arg0) &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;          { &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           try&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;            Log.e("debug","MediaPlayer seek to 0...");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  arg0.seekTo(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  Log.e("debug","MediaPlayer start...");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  arg0.start();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  Log.e("debug","MediaPlayer started");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 }&lt;/span&gt;&lt;br /&gt;       &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 catch(Exception ex)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  Log.e("debug","MediaPlayer error: "+ex.toString());&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                 }&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                } &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           });&lt;/span&gt;&lt;br /&gt;   &lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-1863925407632050750?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/1863925407632050750/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=1863925407632050750' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1863925407632050750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1863925407632050750'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/07/getting-images-laid-pause-over-video-in.html' title='Getting your  Images laid (pause) over a video in android'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6412703402798588127</id><published>2011-06-30T15:46:00.014-06:00</published><updated>2011-09-30T10:35:20.464-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='android drivers for windows 7'/><category scheme='http://www.blogger.com/atom/ns#' term='android driver porting'/><category scheme='http://www.blogger.com/atom/ns#' term='android adb driver windows 7 64 bit install'/><category scheme='http://www.blogger.com/atom/ns#' term='adb android classpath'/><category scheme='http://www.blogger.com/atom/ns#' term='access usb android'/><category scheme='http://www.blogger.com/atom/ns#' term='andoridsdk'/><category scheme='http://www.blogger.com/atom/ns#' term='android driver installation'/><title type='text'>Android SDK on Windows for Dummies: A focus on the debuggin part</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://thecellphonejunkie.files.wordpress.com/2010/12/android-2-2-froyo.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 343px; height: 353px;" src="http://thecellphonejunkie.files.wordpress.com/2010/12/android-2-2-froyo.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I have recently started developing android apps  on Windows 7 (life sucks, everyday I wish I were on Linux, but it is what it is). Today  for testing my apps I was given a very unique smart phone from a dubious manufacturer. Since it was not the typical android phone, the normal procedures from :   &lt;a href="http://developer.android.com/sdk/win-usb.html" class="external text" title="http://developer.android.com/sdk/win-usb.html" rel="nofollow"&gt;http://developer.android.com/sdk/win-usb.html#WinUsbDriver&lt;/a&gt; did not seem to work :( I followed all of Google's instructions. But  when I tried to update the driver I encountered a few problems:  windows asked me where to search for the driver software, and I  selected: "Browse my Computer for driver software", then clicked "Browse" and Explore to C:\Android\usb_driver. I also checked the "Include Subfolders", clicked Next and... I got the following error message: "Windows was unable to install your android phone"&lt;br /&gt;&lt;br /&gt;After hours and hours of working around it, I finally found a solution to the problem and thought I'd share it, so people can avoid some of the pitfalls I encountered and the installation will hopefully not be as challenging as it was for me.&lt;br /&gt;&lt;br /&gt;Basically what worked for me was to download PdaNet for android from : &lt;a href="http://www.junefabrics.com/android/download.php"&gt;http://www.junefabrics.com/android/download.php&lt;/a&gt; . I  installed PdaNet with the phone connected to the PC and android was up and running (and not suspended).&lt;br /&gt;&lt;br /&gt;PdaNet is technically a tool  for supplying Internet access to an unconnected device from a device (such as a mobile phone) which does have Internet access. I believe PdaNet is useful in this case, because it automatically sets up all of the environment for having communication between the computer and the phone.&lt;br /&gt;&lt;br /&gt;Once PdaNet has been successfully installed, I ran from a windows command propt "adb.exe" and "fastboot.exe". Now, when I ran the latter, I received a message stating that a .dll file was not found, I search for that file, and added its location  to my path.&lt;br /&gt;Here it might be important to state that adb.exe is the "android debug bridge", a tool that  can deal with the emulator or the device. Fastboot on the other hand, is a diagnostic protocol used primarily to modify the flash file system in Android smart phones from another computer over a USB connection.&lt;br /&gt;&lt;br /&gt;With this,I had  communication with my android phone!&lt;br /&gt;&lt;br /&gt;One can test it out, by typing in a command propt: &lt;span style="font-weight: bold;"&gt;adb devices&lt;/span&gt; and obtain a list of connected devices, including the phone. With that communication between our device and our computer is achieved, so running and testing our  application is now  a cinch.&lt;br /&gt;happy hacking :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6412703402798588127?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6412703402798588127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6412703402798588127' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6412703402798588127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6412703402798588127'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/06/android-sdk-on-windows-for-dummies.html' title='Android SDK on Windows for Dummies: A focus on the debuggin part'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3428171921855136372</id><published>2011-05-16T23:19:00.004-06:00</published><updated>2011-05-16T23:34:31.483-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LDA'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje de maquina'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion machine learning'/><title type='text'>LDA is not Ladies Ditching Apes</title><content type='html'>I have recently been working on Topic Modelling and thought I'd do a brief tutorial on how to automatically divide a text into a series of relevant topics.&lt;br /&gt;&lt;br /&gt;Before we dive into our coding, let's give a brief overview of the topic so we are all on the same page:&lt;br /&gt;&lt;br /&gt;Topic Modelling is all about automatically finding the thematic structure of a document or a series of documents.&lt;br /&gt;&lt;br /&gt;Topic modelling specifies a probabilistic method through which documents can be created. Initially a distribution over topics is selected. For example, the topics of Love and Mexico could be chosen, but each assigned a certain weight or probability. If it was sought for the article to have a greater political inclination, Mexico would be assigned a greater weight than Love. Whereas if the purpose was to write a romantic novel, Love would have a much higher weight or probability assigned than Mexico. Once the topics along with their corresponding probabilities have been assigned, a topic is chosen randomly according to the distribution, and a word from that topic is drawn. This process of randomly choosing a word from a topic is done iteratively until the system has finished "writing" the article.&lt;br /&gt;&lt;br /&gt;Besides creating documents automatically ( Hasta la vista estudiantes de Literatura :P) Topic Modelling can also infer the set of topics responsible for generating a collection of documents.&lt;br /&gt;We care about Topic Modelling because it can enhance search in large archives of texts, it also permits for better similarity measures: given two documents exactly how similar are they?&lt;br /&gt;&lt;br /&gt;Different algorithms exist for finding the thematic structure of a document. Today we will focus on one particular algorithm called Latent Dirichlet Allocation (LDA). Which is a "...generative probabilistic model for text corpora...".&lt;br /&gt;The intuition behind LDA is that a document is conformed of a series of different topics, and each topic is a probability distribution over words. Each document is a random mixture of corpus-wide topics, where each word of a document is drawn from one of these topics. LDA intents to infer how the documents are divided according to these topics, and what the topics are. The only information LDA has, are the documents.&lt;br /&gt;&lt;br /&gt;In the following, we will use THE FORMAL notation of LDA, (mathematical style!) to make things a bit more clearer:&lt;br /&gt;P(z) denotes the topic distribution z of a particular document. P( w | z ) is the probability distribution of words w given topic z. LDA assumes each word wi in a document (where the index refers to the ith word token) is generated by first sampling a topic from the topic distribution, then choosing a word from the topic-word distribution. We write P( zi = j ) as the probability that the jth topic was sampled for the ith word token and P( wi | zi = j ) as the probability of word wi under topic j.&lt;br /&gt;&lt;br /&gt;LDA assumes that the topics present a Dirichlet distribuition, i.e. the mixture weights θ are generated by a Dirichlet prior on θ. Each topic is modelled as a multinomial distribution&lt;br /&gt;over words.&lt;br /&gt;Hopefully this brief overview will allow us to have some Python coding fun for our next post!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.quarterinchpublishing.com/fabric/images/fabric_ninos_words_green.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 500px; height: 634px;" src="http://www.quarterinchpublishing.com/fabric/images/fabric_ninos_words_green.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3428171921855136372?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3428171921855136372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3428171921855136372' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3428171921855136372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3428171921855136372'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/05/lda-is-not-ladies-ditching-apes.html' title='LDA is not Ladies Ditching Apes'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7897611838003725070</id><published>2011-03-05T16:12:00.067-07:00</published><updated>2011-03-14T11:56:27.957-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje'/><category scheme='http://www.blogger.com/atom/ns#' term='parallel computing'/><category scheme='http://www.blogger.com/atom/ns#' term='computer architecture'/><category scheme='http://www.blogger.com/atom/ns#' term='arquitectura de computadoras'/><category scheme='http://www.blogger.com/atom/ns#' term='reinforcement learning for dummies'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion machine learning'/><title type='text'>How to use Machine Learning to boost up your Parallel  Computing</title><content type='html'>In the past, programmers would find reassurance to their problems of running extremely large programs in the yearly speed up of computer processors. Every year or so, the speed of computers would double and a faster computer would be in the market which would be able to rapidly execute their large sized code. But, in today's world this is not the case, analysing the  GHz speed of the processors in a desktop computer of 2 years ago, versus the speed new desktop computers present, proves  that it has barely, if any, increased, this mainly due to the fact that it is very difficult to build reliable low-cost processors that run significantly faster. This is the reason why, the solution to running faster code has focused on doubling the number of processors that exist on a single chip. Actually researchers believe, that in the following years we will have systems, which present twice the number of cores with every new technology generation. &lt;br /&gt; &lt;br /&gt;It is important to note, that these multi-processors have laid the road for using parallel computing, in which a large program can be divided into smaller programs, each of which is then assigned to a processor with shared or independent resources. Parallelism is what is generally used today, for providing Performance improvement. &lt;br /&gt;&lt;br /&gt;This approach although generally highly functional, has shown in some cases to degrade the performance considerably! The problem is that the scheduling of parallel jobs is a very complicated task which is highly dependent on a series of different factors: the workload, the blocking algorithm being utilised, the local operating system, the parallel programming language and the machine architecture. Expert humans are who tend to make the design specifications for these highly complicated tasks,and as a result they tend to be somewhat rigid and unsophisticated [1].&lt;br /&gt;&lt;br /&gt;Because of this, machine learning techniques have in recent years provided a solution to this problem. Machine learning is a field which intends to build computer systems that automatically improve with experience. Researchers have been applying  machine learning algorithms to problems of resource allocation, scheduling, load balancing, and design space exploration, among other things. &lt;br /&gt;&lt;br /&gt;Such is the work done, in Cost-Aware Parallel Workload Allocation Approach based on Machine Learning Techniques. Here the authors tackle the problem of finding adequate workload allocations in a cost-aware manner, by learning from training examples how to allocate parallel workload among Java threads.&lt;br /&gt;Given a program, their system computes its feature vectors, and utilising a nearest neighbour approach finds from the training examples, the best parallel scheme for this new program.&lt;br /&gt;&lt;br /&gt;One may initially wonder, what type of training examples were utilised for this problem and how  were they generated? &lt;br /&gt;The training examples came from a series of programs coded in java, which presented  different for loops. From each for loop its corresponding feature vector was calculated along with its associated  label, this conformed each training example. In this case, the feature vector corresponded simply to the workload the for loop presented,  and the label to the optimal number of threads that should be utilised with that specific workload.&lt;br /&gt;The programs which were utilised for the training examples were manually selected, each had the purpose of bringing a certain workload variety to the training pool.The labels were set by an automatic program, which tested each workload (loop description) with a different number of threads, and then calculated what was the optimal thread number required for that specific workload to achieve optimal performance. It is important to note, that in this approach the computation cost of calculating the feature vectors was diminished by calculating an implicit estimate of the workload, the features which conformed the workload were: 1) loop depth; 2) loop size; 3) number of arrays used; 4) number of statements within the loop body, and 5) number of array references.&lt;br /&gt;&lt;br /&gt;Since not all program features play an equal role in workload estimation different weights were assigned to different features during classification, with higher weights given to feature 1), 2) and 4). Within the paper it was not clearly explained how the values of these weights were assigned or what their values were. It might have been adequate to also utilise a learning algorithm which was capable of finding the most adequate weights given a certain training example, because it might be the case that under certain  conditions a feature might be weaker for classification than an other, and therefore other weights need to be utilised. A broader explanation on the weight manner could have provided more insight and restricted this speculation, but it is interesting to ponder none the less.&lt;br /&gt;&lt;br /&gt;On the other hand, in this example the authors opted for a supervised learning approach, where each training example that was handed to the system was manually selected and labelled. This is clearly a tedious task to do, and at times may not be the most optimal, since manually finding which examples provide more information for the learning process in comparison to other possible training examples is difficult and non-trivial. One therefore wonders if an unsupervised learning algorithm could have provided better results. In this type of approach, the machine can  be "thrown into the wild" and through observations discover previously unknown structures or relationships between instances or their components, this could eliminate the problems mentioned previously, but has the shortcoming that if the learning phase is done online the algorithm might take much longer than if an instance based learning approach had been taken.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Furthermore it does not seem that their approach accounts for any long-term consequences. Each decision within a for loop was done independently of what had been decided for the other for loops within the program, this might mean, the decision to use X amount of threads for that workload might be locally optimal but not globally optimal, this could in the long run deteriorate the performance. This situation seems to suggest that for this problem instead of using instant based learning, a better approach would have been to use Reinforcement Learning. In Reinforcement Learning, the machine is not told which actions to take, but rather must infer them, by analysing what yields the best reward. The following figure presents an overview of how reinforcement learning works&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-4UuyiC8o__E/TX5WVVmAtSI/AAAAAAAABCA/BaMIAMei2pA/s1600/x2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-4UuyiC8o__E/TX5WVVmAtSI/AAAAAAAABCA/BaMIAMei2pA/s320/x2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5583995512559809826" /&gt;&lt;/a&gt;&lt;br /&gt;For this particular case, if they authors had used this other learning method, it could have been possible for the machine to analyse the program as a whole, and decide then what the  best long-term thread allocation for each workload would be. In specific, the machine would have interacted with the "environment" (in this case the supplied java program) over a discrete set of time steps. In each step the machine would have "sensed" the environment's current state (which would match the number of threads being used in each  for loop) and executed an action(an action would correspond to assigning or removing more threads to certain for loops). This action would modify the environment’s state (which the machine could sense in the next time step) and produced an immediate reward (The reward would be the overall performance obtained for that particular thread assignation).&lt;br /&gt; The machine’s objective would be to maximise its long-term cumulative reward by learning an optimal policy that maps states to actions. &lt;br /&gt;In its most basic form, Reinforcement Learning  brings a knowledge-free trial-and-error methodology in which the machine intents various actions in numerous system states, and learns from the consequences of each action. &lt;br /&gt;From this, it is clear that the advantage of using this learning method is that no explicit model of either the computing system being managed or of the external process that generates workload or traffic are necessary.Additionally, Reinforcement Learning is capable of treating dynamical phenomena in the environment, as mentioned before, it can analyse how current decisions may have delayed consequences in both future rewards and future observed states.&lt;br /&gt;&lt;br /&gt;Now, while this  can sound very promising, it is necessary to also take into consideration, the challenges which Reinforcement Learning faces in the real world. Firstly, Reinforcement Learning can suffer from poor scalability in large state spaces, furthermore in times the performance obtained during  online training can be below average, due to the lack of domain knowledge or good heuristics. In addition, because reinforcement learning procedures need to include "exploration" of actions, the selection of actions can be exceedingly costly to implement in a live system. This is the reason why, many modern applications that utilise reinforcement learning in order to address the above practical limitations,take a hybrid approach. Such an example, is the work done in A Hybrid Reinforcement Learning Approach to Autonomic Resource Allocation. Here the authors propose for the machine to have an offline training phase. They suggest that given enough training examples which follow a certain optimisation policy , the learner (machine) using reinforcement learning will be able to converge to the correct value function, it will be able to find a new policy which greedily maximises the value function and is able to improve the original policy that was given. In this form,  the poor performance that is obtained by using live online training is avoided. Another benefit of their method is that multiple iterations can be done: Through training a new  policy, which is the improved version of the original policy, is obtained. This improved policy  can then be feed into the system again, acting as the original non-optimal policy, with this second policy a second data set is collected, which can then be used to train a further improved policy.  This enables the possibility of running the algorithm iteratively till a desired "reward" is obtained. &lt;br /&gt;&lt;br /&gt;It was mentioned before that reinforcement learning, presents the problem of having expensive  exploration of actions, the authors  tackled this problem by replacing the generally used  lookup table for representing the value function with a nonlinear function approximator, in particular a neural network. A function approximator provides a solution to the mentioned issue, because it is mechanism for generalising training experience across states, therefore it is no longer necessary to visit every state in the state space. It also allows for generalisation  across actions, so that the need for exploratory off-policy actions is also greatly reduced.&lt;br /&gt;&lt;br /&gt;Their hybrid Reinforcement Learning approach was tested on realistic prototype Data Center, which dynamically allocates servers among multiple web applications so as to maximise the expected sum of SLA (service level agreement) payments in each application.&lt;br /&gt;&lt;br /&gt;Although their proposed solution resolves most of the problems encountered with reinforcement learning, we can observe an aspect of their work, that might call for improvement: In their algorithm with each iteration, the model of the system is modified. They always assume the model "learned" from the use of a certain set of  policies can never be applied to a set conformed of other policies. The authors never explored if this is always the case, could a model learned with certain policies still be valid under other policies which hold a degree of similarity to the original policies, or is it always necessary to learn from scratch the model, as a result of changes to an active set of policies?  &lt;br /&gt;Additionally, the authors utilised a neural network for finding the states to explore, and although this did solve the exploratory problem mentioned before, because the neural network has hidden states it is not possible to determine beforehand  exactly how many states will be explored given the current used policies, knowing beforehand this number could improve computational costs as better planning can be done. In the work done in "An Adaptive Reinforcement Learning Approach to Policy-driven Automatic Management", the authors addressed  this problems and show how a Reinforcement Learning Model can be adapted to accommodate this.&lt;br /&gt;The authors analysed how previously learned information about the use of policies can be effectively used in a new scenario. For this, they consider policy modifications as well as the amount of time used to form the model before the changes. Similarly to the work in Hybrid Reinforcement Learning Approach to Autonomic Resource Allocation, a state transition model, which uses a set of active expectation policies is defined, but in difference to Hybrid Reinforcement Learning Approach to Autonomic Resource Allocation, instead of using a neural network, the authors capture the management system's behaviour through a state-transition graph, what their system is lacking and could be beneficial in the future is mapping directly  how changes in policies effect the  state-transition models&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7897611838003725070?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7897611838003725070/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7897611838003725070' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7897611838003725070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7897611838003725070'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/03/how-to-use-machine-learning-to-boost-up.html' title='How to use Machine Learning to boost up your Parallel  Computing'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-4UuyiC8o__E/TX5WVVmAtSI/AAAAAAAABCA/BaMIAMei2pA/s72-c/x2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-1990142377098927115</id><published>2011-01-24T23:38:00.009-07:00</published><updated>2011-01-25T00:38:36.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Türkisch'/><category scheme='http://www.blogger.com/atom/ns#' term='racismo'/><category scheme='http://www.blogger.com/atom/ns#' term='traslation of german song'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion al español'/><category scheme='http://www.blogger.com/atom/ns#' term='nacionalismo'/><category scheme='http://www.blogger.com/atom/ns#' term='ich hasse Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='discriminacion'/><category scheme='http://www.blogger.com/atom/ns#' term='deutsche musik'/><title type='text'>Soñando con Tacos  en la ciudad de las estrellas de cine rodeada de angeles</title><content type='html'>&lt;span style="color: rgb(153, 51, 153);"&gt;(Este post es dedicado a mi lectora favorita!) &lt;/span&gt;&lt;br /&gt;Mi&lt;a href="http://ihatecomicsans.com.mx/"&gt; lectora favorita&lt;/a&gt;, (ya que parece ser la unica que tengo..jajaja :P) Me recomendo ayer una cancion alemana ochentera. En general odio la musica ochentera, I'm all about the sixties man! Pero dado que  tenia un estilo peculiar y fue recomendada por mi lectora favorita, decidi hacer un post de Musica Alemana al alcanze Mexicano!&lt;br /&gt;Mi traduccion de D.A.F. KEBAB TRäUME!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Version Alemana:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed red;"&gt;&lt;br /&gt;Kebabträume in der Mauerstadt,&lt;br /&gt;Türk-Kültür hinter Stacheldraht&lt;br /&gt;Neu-Izmir ist in der DDR,&lt;br /&gt;Atatürk der neue Herr.&lt;br /&gt;Miliyet für die Sowjetunion,&lt;br /&gt;in jeder Imbißstube ein Spion.&lt;br /&gt;Im ZK Agent aus Türkei,&lt;br /&gt;Deutschland, Deutschland, alles ist vorbei.&lt;br /&gt;&lt;br /&gt;Kebabträume..&lt;br /&gt;&lt;br /&gt;Miliyet...&lt;br /&gt;&lt;br /&gt;Kebabträume...&lt;br /&gt;&lt;br /&gt;Miliyet...&lt;br /&gt;&lt;br /&gt;Wir sind die Türken von morgen.&lt;br /&gt;Wir sind die Türken von morgen..&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;h&gt;&lt;span style="font-weight: bold;"&gt;Version En Espa~ol!&lt;/span&gt;&lt;/h&gt;&lt;br /&gt;&lt;div style="border: 2px dashed blue;"&gt;&lt;br /&gt;Sue~os de Kebabs en la ciudad del Muro &lt;span style="color: rgb(102, 102, 102);"&gt;(Los Kebabs son un platillo tipico turco, usualmente llamado por ellos Döner kebab, la ciudad del Muro se podria referir a Berlin. )&lt;/span&gt;&lt;br /&gt;Cultura turca atras de ese alambre de puas.&lt;br /&gt;La nueva capital Turca esta en el este de alemania&lt;br /&gt;Atatürk el nuevo Se~or &lt;span style="color: rgb(102, 102, 102);"&gt;( Atatürk fue el primer presidente de Turquia!)&lt;/span&gt;&lt;br /&gt;"nacionalidad" para la Union Sovietica. &lt;span style="color: rgb(102, 102, 102);"&gt;( La palabra Miliyet no esta en aleman, sino en turco y significa Nacionalidad)&lt;/span&gt;&lt;br /&gt;en cada cafeteria un espia&lt;br /&gt;La administracion de los partidos comunitas regidos por alguien de Turquia. &lt;span style="color: rgb(102, 102, 102);"&gt;( En la cancion usan la abreviacion ZK que es Zetralkomitee, el cual representaba el  cuerpo administrativo de los partidos comunistas en Alemania- De acuerdo a Wikipedia)&lt;/span&gt;&lt;br /&gt;Alemania Alemania, Todos esta perdido.&lt;br /&gt;Sue~os con Kebabs...&lt;br /&gt;Nacionalismo (en turco)&lt;br /&gt;Sue~os con Kebabs...&lt;br /&gt;Nacionalismo (en turco)&lt;br /&gt;Nosotros somos los Turcos de Ma~ana,&lt;br /&gt;Nosotros somos los Turcos de Ma~ana....&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;...wow...debo admitir que ME ENCANTO hacer esta traducccion! Muchas gracias a quien la recomendo!&lt;br /&gt;No solo me sirivio para recordar el aleman, sino para aprender un poco de historia.&lt;br /&gt;&lt;br /&gt;Considero que  es duro como se refieren los turcos que viven en Alemania a ALemania: " Todo esta perdido." No se si yo me podria atrever a decir algo similar de un pais viviendo alli.&lt;br /&gt;Muchos Mexicanos viven en EUA, pero no se si piensen o canten: EUA todo esta perdido...EUA todo esta perdido. Es una cancion muy nacionalista turca, que hace   menos a la cultura alemana. Los demas que opinan?&lt;br /&gt;&lt;br /&gt;Creo que es dificil ser extranjero en Alemania, se que en los trenes los policias tienen derecho a interrogar y pedir boletos a los que vean sospechosos y usualmente la selecion se hace de modo racial. Entonces ha de ser incomodo, no tener los ojos claros y el pelo rubio y verse como un tipico aleman. Talvez de alli viene ese sentimiento de enojo hacia Alemania y decirle que esta acabado, que quienes tienen el poder son ellos.&lt;br /&gt;Alguien mas siente que la cancion es extremadamnete agresiva hacia los alemanes?&lt;br /&gt;&lt;br /&gt;A veces pienso que si me gusta gritarle a los extranjeros el amor que tengo por Mexico, por nuestros tacos al pastor, la barbacoa, los corridos, los sones jaroches, por todas las cositas que son Mexico. Pero no se si me iria al extremo de decirles que su pais esta terminado. Se que por ejemplo,  varios federales de EU han matado de modo violenta a la juventud mexicana. Pero aun no siento en mi sangre, tanto odio para cantarles que su pais ya cayo, ya termino.&lt;br /&gt;Los Mexicanos que opinan?&lt;br /&gt;Sue~o con Tacos..Sue~o con Tacos en la ciudad llena de estrellas de cine y rodeada de Angeles...&lt;br /&gt;&lt;iframe src="http://www.youtube.com/embed/El-UTSMl5TU?fs=1" allowfullscreen="" frameborder="0" height="344" width="425"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-1990142377098927115?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/1990142377098927115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=1990142377098927115' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1990142377098927115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1990142377098927115'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2011/01/sonando-con-tacos-en-la-ciudad-de-las.html' title='Soñando con Tacos  en la ciudad de las estrellas de cine rodeada de angeles'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/El-UTSMl5TU/default.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6435277512425521487</id><published>2010-11-25T08:50:00.006-07:00</published><updated>2010-12-29T12:37:30.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meego'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia n900'/><category scheme='http://www.blogger.com/atom/ns#' term='speech synthesizer'/><category scheme='http://www.blogger.com/atom/ns#' term='text to speech'/><category scheme='http://www.blogger.com/atom/ns#' term='espeak'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='portaudio'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='sayit'/><title type='text'>Talk to me baby</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://t0.gstatic.com/images?q=tbn:Be6c2sdlP7hg6M:http://www.everymilesamemory.com/Images%205/Pin%20Up%20Girl%20on%20Phone.jpg&amp;amp;t=1"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 194px; height: 259px;" src="http://t0.gstatic.com/images?q=tbn:Be6c2sdlP7hg6M:http://www.everymilesamemory.com/Images%205/Pin%20Up%20Girl%20on%20Phone.jpg&amp;amp;t=1" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I finally got running on my n900 code that converts text to voice. For it, I'm using eSpeak, which "is a compact open source software speech synthesizer for English and other languages, for Linux and Windows."&lt;br /&gt;Today I will explain the steps I took to accomplish this.&lt;br /&gt;One can first check out examples of this software in action by downloading from the application manager of the n900 espeak applications. I downloaded the server and the client, which includes a nifty UI with some mad and sexy lips MMMMm!&lt;br /&gt;If you want to create your own application that does similar things to what eSpeak does,one must:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Install PortAudio. Download PortAudio from: http://www.portaudio.com/download.html But pick the 18th version &lt;a href="http://www.portaudio.com/archives/portaudio_v18_1.zip"&gt;portaudio_v18_1.zip&lt;/a&gt;, since the 19th one has problems with the code from eSpeak and you will get many random errors. ( A coffee and a beautiful afternoon later I figured that out :(&lt;/li&gt;&lt;li&gt;Copy the zip file to your scratch box and unzip it with:&lt;br /&gt;unzip -a portaudio_v18_1.zip &lt;/li&gt;&lt;li&gt;Then do: ./configure &amp;amp;&amp;amp; make&lt;/li&gt;&lt;li&gt;type:make install&lt;/li&gt;&lt;li&gt;type:ldconfig&lt;/li&gt;&lt;/ol&gt;With that you should have portaudio working within scratchbox, and you are now ready to start working with eSpeak!&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Download eSpeak from http://espeak.sourceforge.net/download.html.  I personally picked the latest stable version they were offering.&lt;/li&gt;&lt;li&gt;Uncompress it and move it to scratchbox .&lt;/li&gt;&lt;li&gt;Enter the src folder and the easiest thing to do is to modify the Makefile, change the binDirectory and the LibDirectory so it points to where you have your PortAudio folder. In my case, I changed it to something like:&lt;br /&gt;BINDIR="/home/saiphcita/portaudio_v18_1/bin"  and&lt;br /&gt;LIBDIR="/home/saiphcita/portaudio_v18_1/lib"&lt;/li&gt;&lt;li&gt;Type: Make&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;With that you should have been able to compile eSpeak, you can now send to the n900 the eSpeak binary you have just created, execute it and test it out!&lt;br /&gt;You can now modify the code and do as you please n_n.&lt;br /&gt;i'm using this for an awesome eyes free application! =D (you know because instead of having to display the text or what not to the user, one can now read back to the user, and allow for their eyes to concentrate on more important things, such as driving or their lover's lovely smile! &lt;3 ;)&lt;br /&gt;Let me know if you have any troubles and we can try to solve them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6435277512425521487?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6435277512425521487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6435277512425521487' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6435277512425521487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6435277512425521487'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/11/talk-to-me-baby.html' title='Talk to me baby'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6928825219008249208</id><published>2010-08-13T16:42:00.006-06:00</published><updated>2010-08-13T19:25:36.333-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++ tutorial for opencv'/><category scheme='http://www.blogger.com/atom/ns#' term='instalacion de qt en visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='how to step up qt in visual studio'/><title type='text'>Visual Studio and Qt.</title><content type='html'>In this post we will explain how to get Qt installation for visual studio.&lt;br /&gt;&lt;br /&gt;1. Download Qt source code. This is currently available in the nokia website: &lt;span style="font-weight: bold;"&gt;http://qt.nokia.com/downloads&lt;/span&gt;,&lt;br /&gt;Unzip the file into e.g. c:\qt\4.6.1-vc.  Important to use  a path with no embedded spaces, as the Qt build tools have problems with them.&lt;br /&gt;Install the SDK completely. Install also the plugin for Qt in visual studio.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/TGXUZYAXarI/AAAAAAAAA9w/JXRjW4zr-Ls/s1600/visualstudio.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/TGXUZYAXarI/AAAAAAAAA9w/JXRjW4zr-Ls/s320/visualstudio.png" alt="" id="BLOGGER_PHOTO_ID_5505039651936103090" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2. Add these  3 paths to the Environment Variables: “C:\Qt\2009.01\bin” ,&lt;br /&gt;“C:\Qt\2009.01\qt\bin” and   &lt;visualstudiodirectory&gt; \VC\bin .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3. Run the Visual Studio Command prompt. Start &gt; Program Files &gt; Visual Studio &gt; Visual and go to the Qt installation directory. Type vcvars32.bat.&lt;br /&gt;This will create the environment variables required for the next step. The batch file resides in the VC\bin directory of your Visual Studio installation.&lt;br /&gt;&lt;br /&gt;4. Type configure -platform win32-msvc2008. (will take a long time)&lt;br /&gt;This will tell Qt to prepare itself for being compiled by the Visual Studio compiler. Again, if you use another version of VS than 2008, replace win32-msvc-2008 with the makespec appropriate for you. We need to this, because the prebuilt binaries that come with the Open Source Qt distribution for Windows cannot be used by the Visual Studio compiler.So to  fix this, we  have to build those files from the Qt sourcecode using the Visual Studio compiler.&lt;br /&gt;&lt;br /&gt;5. Type nmake (will take even longer)&lt;br /&gt;&lt;br /&gt;6. It will stop after a LONG while  with an error&lt;br /&gt;&lt;br /&gt;7. Delete all the  instances of mocinclude.tmp, they are usually in:&lt;br /&gt;src/3rdparty/webkit/WebCore/tmp/moc/{debug,release}_shared&lt;br /&gt;&lt;br /&gt;8. Run nmake again&lt;br /&gt;&lt;br /&gt;9. Go to your qt app and run qmake –t vcapp&lt;br /&gt;&lt;br /&gt;10. This should create a sln for the project&lt;br /&gt;&lt;br /&gt;You should now be able to build your Qt  project in visual studio &lt;br /&gt;&lt;br /&gt;&lt;/visualstudiodirectory&gt;&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;http://tom.paschenda.org/blog/?p=28&lt;br /&gt;http://www.qtforum.org/article/31561/error-when-building-libraries.html&lt;br /&gt;http://dcsoft.wordpress.com/2010/01/30/how-to-setup-qt-4-5-visual-studio-integration/&lt;br /&gt;http://docs.google.com/viewer?a=v&amp;q=cache:3e0M85Vdd3wJ:portfolio.delinkx.com/files/Qt.pdf+qt+visual+studio&amp;hl=en&amp;gl=us&amp;pid=bl&amp;srcid=ADGEEShHdqxYfPWGn-PCxWty0Z9ehLVLaPv-qlpDeaLAlcohpIxHFWMw-PqM4N5euTpmRrxOA5fSX8l6KJZmq-ttAfPgNqt8io-kjHQt5j3RWQgySF5MFnXGeXufW6jEipZCRVuZ8yqA&amp;sig=AHIEtbRYvPmPZUfMm1fb0SVKaSjfYX_BVg&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6928825219008249208?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6928825219008249208/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6928825219008249208' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6928825219008249208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6928825219008249208'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/08/visual-studio-and-qt.html' title='Visual Studio and Qt.'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_laFQZJU0vgA/TGXUZYAXarI/AAAAAAAAA9w/JXRjW4zr-Ls/s72-c/visualstudio.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-4333507622836279090</id><published>2010-08-13T14:24:00.007-06:00</published><updated>2010-08-13T16:33:01.240-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tutorial .mov file format player'/><category scheme='http://www.blogger.com/atom/ns#' term='how to play .mov files in qt'/><category scheme='http://www.blogger.com/atom/ns#' term='qt movie format for dummies'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='movie player'/><title type='text'>Watching some QT movies with a cute chic</title><content type='html'>Recientemente me vi con el problema de que queria hacer una aplicacion que tocara videos con extension .mov &lt;span style="color: rgb(102, 102, 102);"&gt;(Un archivo de tipo &lt;/span&gt;&lt;strong style="color: rgb(102, 102, 102);"&gt;MOV&lt;/strong&gt;&lt;span style="color: rgb(102, 102, 102);"&gt; representa  un formato especial de QuickTime para guardar audio y video )  &lt;span style="color: rgb(0, 0, 0);"&gt;dentro de una aplicacion hecha con Qt. &lt;span style="color: rgb(102, 102, 102);"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;b style="color: rgb(102, 102, 102);"&gt;Qt&lt;/b&gt;&lt;span style="color: rgb(102, 102, 102);"&gt;  es un framework para el desarrollo de aplicaciones para que corran  en multiples plataformas (Linux, windows, mac etc) y comunmente se suele usar hacer apliaciones graficas, esto es, aplicaciones que tienen ventanitas, menucitos etc.)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La documentacion para hacer programas que toquen videos de tipo .mov no es NADA amigable, por lo que decidi hacer este peque~o tutorial respecto a como se puede lograr esto.&lt;br /&gt;&lt;br /&gt;Qt posee una clase llamada QMovie,con la cual se pueden  mostar aniamciones sencillas que no cuentan con sonido ( lo cual estaba perfecto para lo que yo queria hacer) En resumen QMovie  permite  leer y cargar una aniamcion simple, como una animacion de tipo .GIF. Por lo cual si lograramos convertir nuestras aniamciones en formato .MOV a .GIF nuestro problema estaria resulto.  Y bien, gracias a Google, encontre esta peque~a  applicacion que justamente lleva esto acabo: http://www.geovid.com/VidGIF&lt;br /&gt;Y ya con nuestro video convertido en .GIF el codigo para hacer una ventanita que toque nuestro video es muy sencillo:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qtgui qapplication&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qwidget&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qhboxlayout&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qlabel&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qmovie&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qpushbutton&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;#include qslider&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;int main(int argc, char *argv[])&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QApplication a(argc, argv);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QWidget *win=new QWidget();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QHBoxLayout *lay=new QHBoxLayout();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QPushButton *play=new QPushButton("PLAY");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt; QPushButton *stop=new QPushButton("STOP");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QLabel *label=new QLabel;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QMovie *movie = new QMovie("Resources/musica.GIF");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt; movie-&gt;start();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  label-&gt;setMovie(movie);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QObject::connect(play,SIGNAL(clicked()),movie,SLOT(start()));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  QObject::connect(stop,SIGNAL(clicked()),movie,SLOT(stop()));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  lay-&gt;addWidget(label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  lay-&gt;addWidget(play);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  lay-&gt;addWidget(stop);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  win-&gt;setLayout(lay);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  win-&gt;show();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;  return a.exec();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-family:courier new;" &gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Basicamente estoy cargando la pelicula, la agrego a una etiqueta la cual despues es agregada al widget, tambien agrego dos botones, los cuales sirven para detenerla y tocarla y finalmente presento al usuario la ventanita.&lt;br /&gt;Esta es una manera sencilla de correr en QT peliculas de tipo .mov, aunque solo es valido si no nos interesa el audio que tiene la pelicula, para cosas mas complicadas que involucran audio es necesario checar otras clases que proporciona qt.&lt;br /&gt;Los dejo con la ventanita que se crea, asi como con una imagen de la pelicula que esta tocando:&lt;br /&gt;&lt;img src="http://i187.photobucket.com/albums/x89/edwardbayntun/gifs/ArnieRave.gif" alt="Arnie de California" &lt;br /&gt;vspace=10 width="400" height="135"&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/TGXBJ6JCxNI/AAAAAAAAA9g/J3bkPwg0Myc/s1600/qtImage.png"&gt;&lt;img style="float: right; margin: 0pt 0pt 10px 10px; cursor: pointer; width: 320px; height: 178px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/TGXBJ6JCxNI/AAAAAAAAA9g/J3bkPwg0Myc/s320/qtImage.png" alt="" id="BLOGGER_PHOTO_ID_5505018495500469458" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-4333507622836279090?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/4333507622836279090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=4333507622836279090' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4333507622836279090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4333507622836279090'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/08/watching-some-qt-movies-with-cute-chic.html' title='Watching some QT movies with a cute chic'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i187.photobucket.com/albums/x89/edwardbayntun/gifs/th_ArnieRave.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-667601599247582300</id><published>2010-07-06T23:46:00.006-06:00</published><updated>2010-07-07T00:47:04.396-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facultad de ingenieria'/><category scheme='http://www.blogger.com/atom/ns#' term='incubadora de negocios UNAM'/><category scheme='http://www.blogger.com/atom/ns#' term='tecnologia en la UNAM'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><category scheme='http://www.blogger.com/atom/ns#' term='Hector Zarate Rea'/><title type='text'>About a Kid who rocks his code...</title><content type='html'>En este blog somos grandes fans de la tecnologia, y mas cuando se trata de tecnologia proveniente de la Maxima casa de Estudios, ie La Universidad Nacional Autonoma de Mexico, like most tecnology coming from Latin America is. Y es por eso que hoy hablaremos de dos applicaciones para el iphone desarrolladas por un joven estudiante de la Facultad de ingenieria de la UNAM que atacan la usabilidad integrando el uso de diversos sensores que se encuentran sobre el celular.&lt;br /&gt;El post se desarrollara de la siguiente manera, primero expondre de que tratan los dos productos y despues tendremos una super entrevista especial con el autor de los mismos.&lt;br /&gt;Es la priemra entrevista conducida en este blog!!&lt;br /&gt;&lt;br /&gt;La primera aplicacion de la que hablaremos es Ubicate!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://a1.phobos.apple.com/us/r1000/009/Purple/ec/07/8c/mzl.zlxnyegi.320x480-75.jpg" alt="Pulpit rock" border="0" width="340" height="500" /&gt;&lt;br /&gt;Que mejor que dejarles la descripcion que viene en la pagina de itunes para el producto:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"...Ubicate! is the new software for iPhone and iPod touch you need when using Mexico City's Metro, MetroBús, Tren Ligero (Light Train) and Tren Suburbano.&lt;br /&gt;Don't know how to get from station A to station B?&lt;br /&gt;Don't worry! Ubicate! is the smartest guide telling you in which direction you should take the train or bus, where to get off and when to make a connection with other lines or systems. Every information is presented in color, so it's even easier to follow the instructions."&lt;/span&gt;&lt;br /&gt;Este programa hace uso de la localizacion del usuario via GPS, Google maps y tecnicas de inteligencia artificial para encontrarte la ruta de transporte publico mas conveniente dado donde te encuentras. Estas tecnicas antes habian sido usadas en robots moviles navegadores que intentaban encontrar el suministro de energia mas cercano, al joven Zarate se le ocurrio ir un paso adelante y sacar una util applicacion para cualquier chilango o para cuaLQUier visitante de la tierra Mexica. (Espero que todos ya tengan entre sus planes futuros ir al Mexico City baby! B-)&lt;br /&gt;&lt;br /&gt;La segunda aplicacion de la cual hablaremos es de Glucose Monsters!&lt;br /&gt;&lt;img src="http://mieldemaple.com/glucosemonsters/index_files/IMG_0097.jpg" alt="Pulpit rock" border="0" width="340" height="500" /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;br /&gt;Glucose Monsters is the new software for iPhone and iPod Touch that helps you keep track of your glucose levels, blood pressure and weight.&lt;br /&gt;&lt;br /&gt;- It's easy and fast to use.&lt;br /&gt;- Provides useful information: Monitors changes on weight, and displays minimum, average and maximum values of glucose for week, month and year.&lt;br /&gt;- Visual Information: Rotate your device in the statistics screen to see a graph of your glucose levels (available per week, month and year).&lt;br /&gt;- Logs: Every record is kept so you can review it or show it to your health care team.&lt;br /&gt;- Fun and rewarding: Unlike any other software of its genre, it's fun! Our Glucose Monsters will cheer you up and share a tip every time you add a new entry.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Glucose Monsters is more than just keeping records of glucose measures. It can keep track of weight and blood pressure measurements but it's also about doing it efficiently (move the slider, click 'add' and you're done) and doing it in a way that is rewarding. The graphs, the statistics, the slick interface and our monsters are there with the purpose of giving you positive feedback and ways to notice if you are taking enough care of the disease or not. We want you to shift from a "I'm doing it wrong" attitude to a "I've been doing it right" or "I can and I want to do it better" one.&lt;br /&gt;&lt;br /&gt;You haven't used anything like this before!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Mi aplicacion favorita es Glucose Monsters, porque me parece el mercado en salud es muy grande y no es algo que se ha abordado del todo bien. It's always so borning to look at charts! Pero aqui lo volvieron divertido! Muy buena idea!&lt;br /&gt;&lt;br /&gt;Y para hablarnos mas del producto, tenemos una entrevista especial privada y secreta con Hector Zarate! Las chicas pueden dejar en los comentarios sus correos, puede ser que el vea este post y les conteste, dejen su foto..jaja :P&lt;br /&gt;Hablando de fotos Aqui hay unas del autor:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs202.snc3/20966_236164756885_518336885_3694691_1942224_n.jpg"&gt;&lt;img style="float: left; margin: 0pt 10px 10px 0pt; cursor: pointer; width: 604px; height: 401px;" src="http://sphotos.ak.fbcdn.net/hphotos-ak-snc3/hs202.snc3/20966_236164756885_518336885_3694691_1942224_n.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;..pretty fly for a white guy huh?&lt;br /&gt;Y la entrevista va asi:&lt;br /&gt;&lt;span style="color: rgb(204, 102, 204);"&gt;&lt;span style="color: rgb(0, 51, 0);"&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; Por que decidiste empezar a hacer aplicaciones para smart phones? Por qué fue iphone y no por ejemplo para el n900&lt;/span&gt;?&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;&lt;span style="font-weight: bold;"&gt;Hector:&lt;/span&gt; Pasé las vacaciones de Verano pasadas en la ciudad y creo que tanto tiempo libre me hizo pensar: Bueno, podría hacer un proyecto de Verano. Casualmente usé mucho el Metro en esa temporada y ahí se me ocurrió Ubícate!, tal vez en algún viaje revisando el mapita me dije: estaría chido que tu iPhone te dijera para dónde ir o que tomar.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Entonces iPhone era una plataforma muy "sexy" por decirlo así. Era un dispositivo bastante novedoso (o al menos hype) junto con un SDK consistente que permitía jugar con todas esas novedades: sensores de movimiento, GPS, etc.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 153);"&gt;Encima existía el App Store, un servicio que me parece magnífico porque permite que desarrolladores de software pequeños exhiban, distribuyan y vendan sus aplicaciones en un mercado global y que te deja concentrar en el desarrollo de tus aplicaciones en lugar de otras cosas como: cómo cobrar, distribuir la aplicación, generar serials, etc.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; Como ves el futuro del smartphone en Mexico?&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Hector:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Hoy vi en la televisión un montón de anuncios de teléfonos. Todos tenían cámara y tocaban música; y a excepción de los "low-end" todos se conectaban a Facebook o Twitter y les podías instalar aplicaciones. Creo que todos los teléfonos están adquiriendo capacidades de smartphones, así que puede ser que la categoría de "smartphone" desaparezca.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Por otra parte, no se trata solo de los dispositivos porque son los servicios de telefonía e internet móvil lo que los hace interesantes. Lamentablemente el costo de estos servicios en México no han permitido la "democratización" de estas tecnologías sino que al contrario, la han convertido en una tecnología muy excluyente. Mientras esto no cambie, veo el potencial de los teléfonos mexicanos como limitado.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph: &lt;/span&gt;Glucose Monsters y Ubicate tienen alguna filosofia en comun?&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Hector:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Claro! Queremos hacer software que sea útil y que en verdad resuelva algún problema y al mismo tiempo intentamos darle un enfoque distinto, poner mucha atención al arte y a la usabilidad para que la experiencia del usuario sea única y que eso nos identifique. Glucose Monsters nos hizo sentir muy satisfechos en ese sentido. No es la primera aplicación en iPhone para que personas con diabetes lleven sus registros de glucosa, pero ninguna tiene un concepto parecido al nuestro. También fue importante porque con ese proyecto aprendimos como hacer converger todas estas ideas que tal vez sean más evidentes con los siguientes productos que vamos a publicar en el App Store. ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; Como piensas que el numero de sensores que ahora poseen los smart phones afecte la interacion entre el usuario y la maquina?&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Hector:Piensa en la interacción humana: tomar una cerveza con un amigo, preguntar por una calle cuando estás perdido, jugar algún deporte o bailar. Son experiencias que involucran todas las capacidades físicas del hombre: voz, contacto visual, gestos, lenguaje corporal o hasta una actividad física muy intensa. Ahora piensa en la interacción con las computadoras hasta hace unos años: no había voz, no había movimiento, en realidad la interacción estaba limitada a los dedos. Sin embargo, los nuevos sensores e inputs están extendiendo el dominio de esta interacción, están "naturalizándola" por decirlo así. El Wii es un buen ejemplo de esto y el iPhone va un poco en esa dirección también. Ese es el cambio mas importante que veo: el hacer una interacción mas natural entre el hombre y los dispositivos.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt;Desarrollaste algun plan de negocio cuando sacaste Ubicate y Glucose Monsters? Fue esto complicado? Para alguien que proviene de un contexto de ingenieria que problemas existen?&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Hector:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt; Al principio no, después la idea empezó a crecer un poco y ahora sí, estamos terminando de afinar el plan de negocio, esperando el registro de la marca y trabajando también en los nuevos proyectos. Las dificultades que veo para un ingeniero es que el desarrollo de un producto final y de una empresa implica muchas otras cosas además de hacer código, pero la solución que hemos encontrado está en la colaboración de personas de distintas áreas. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt;Crees que hay apoyo en Mexico para desarrollar tus propias ideas de aplicaciones?&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Hector:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;A diferencia de otros, un emprendimiento de software puede llevarse a cabo sin la necesidad de grandes espacios, máquinas-robots futuristas o capitales astronómicos. Para mi, depende más del capital humano. Me gusta pensar que el talento y los conocimientos son los factores clave en el desarrollo de software y que una buena idea puede empezar sobre la MacBook más barata o dentro de un edificio de millones de dólares. Ahora, la forma de invertir en el capital humano es a través de la educación y en mi experiencia, la UNAM esta haciendo un esfuerzo importante en este aspecto. Aunque no concuerdo en muchas cosas con mi institución, reconozco un esfuerzo constante por dar acceso a información de calidad a la comunidad: becas, recursos electrónicos, actividades, cursos... En la Facultad de Ingeniería hay muchos cursos de programación, tecnología y recientemente he visto algunos otros sobre emprendimiento, marketing, etc... Incluso acaban de inaugurar una incubadora de negocios. Así que no puedo decir que no exista apoyo para desarrollar todo esto. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0); font-weight: bold;"&gt; PREGUNTAS PERSONALES!!! &lt;3&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt;Que te gustaria que estuviera escrito en la lamina de tu tumba?&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="font-weight: bold;"&gt;Hector:&lt;/span&gt;Cómo sería difícil poder decir algo importante había pensado en algo más divertido como: "Ahí nos vidrios", "Mala Pata" o "Puto el que lea esto".&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; haha...&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt;Existe alguna cancion que te pone de buen humor cuando la escuchas?&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="font-weight: bold;"&gt;Hector:&lt;/span&gt;Muchísimas! Creo que un día voy a hacer un mixtape con todos ellas. Algunas son: Raúl Midon - State of Mind, Tiga - Far From Home, Mose Allison - I Don't Worry About A Thing, David Bowie - Let's Dance, Pharrel Williams - Angel, The Guillemots - Made-Up Lovesong #43... Sí, definitivamente voy a hacer un mixtape con eso.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; Tienes algun talento secreto? Cual es?&lt;br /&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;&lt;span style="font-weight: bold;"&gt;Hector:&lt;/span&gt;Dejaría de ser secreto si lo revelará aquí. ;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Saiph:&lt;/span&gt; Nombra alguna cosa unica a la cual le temes:&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 102);"&gt;Hector:&lt;/span&gt;&lt;span style="color: rgb(0, 0, 102);"&gt;Zombies?&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Muchas Gracias Hector!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-667601599247582300?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/667601599247582300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=667601599247582300' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/667601599247582300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/667601599247582300'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/07/about-kid-who-rocks-his-code.html' title='About a Kid who rocks his code...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-782001584236649820</id><published>2010-06-29T23:54:00.006-06:00</published><updated>2010-06-30T00:13:27.713-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lukas podolski lied'/><category scheme='http://www.blogger.com/atom/ns#' term='german songs in spanish'/><category scheme='http://www.blogger.com/atom/ns#' term='amo a giovani dos santos'/><category scheme='http://www.blogger.com/atom/ns#' term='la cancion de giovani dos santos'/><category scheme='http://www.blogger.com/atom/ns#' term='german music'/><category scheme='http://www.blogger.com/atom/ns#' term='nur ein wort translation'/><category scheme='http://www.blogger.com/atom/ns#' term='Mexico'/><category scheme='http://www.blogger.com/atom/ns#' term='spanisch'/><category scheme='http://www.blogger.com/atom/ns#' term='deutsche musik'/><title type='text'>Preparando la cancion  de Giovani Dos Santos</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dvag-magazin.de/wp-content/uploads/2010/02/deutschlandfans_menge.jpg"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 400px; height: 400px;" src="http://www.dvag-magazin.de/wp-content/uploads/2010/02/deutschlandfans_menge.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El partido del domingo donde jugo Mexico-Argentina (disculpen la falta de acentos estoy en una maquina anti latina :( Sufri una gran depresion. Aunque sigo creyendo en la actitud que tiene Giovani Dos Santos y Chicharito. Ellos realmente me inspiran a trabajar mejor. Digo si estos chiquillo se estan rompiendo su madre en su trabajo, como yo no voy a hacer lo mismo en el mio?&lt;br /&gt;&lt;br /&gt;Espero que se aprenda de errores de este mundial y el proximo mundial contemos con un mucho mejor tecnico. Me molesta esa situacion porque creo que se tenia talento pero no se supo aprovechar.&lt;br /&gt;&lt;br /&gt;En fin sigamos adelante...&lt;br /&gt;Cabe se~alar que estoy muy emocionada por el encuentro Argentina-Alemania. Quiero decir que admiro mucho toda la cultura de futbol que tiene alemania. Amo sus canciones futboleras. Me parecen motivantes.Alzan el espiritu!&lt;br /&gt;Voy a compartir una las canciones futboleras alemanas que mas me agrada, tal vez la letra no es tan espiritual ( Hay otras que si lo son) pero en lo personal me divierte y me pone de buen humor.&lt;br /&gt;&lt;span style="color: rgb(255, 0, 0);font-size:130%;" &gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Vamos Alemania acaben con esos Gauchos rasquachos!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="width: 300px; height: 1200px;" border="4" cellpadding="20" cellspacing="10"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed red; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:130%;"&gt;Das Lu Lu Lukas Podolski Lied&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Poldi Poldi Halleluja&lt;br /&gt;Poldi Poldi Halleluja&lt;br /&gt;Poldi Poldi Halleluja&lt;br /&gt;Es gibt einen Fußballgott&lt;br /&gt;&lt;br /&gt;Manche Spieler, die sind einfach schwach&lt;br /&gt;Du regierst den Ball und hälst ihn flach&lt;br /&gt;Manche, die sind faule Millionäre&lt;br /&gt;Doch dir geht es einfach um die Ehre&lt;br /&gt;&lt;br /&gt;Nach dem Spiel ist wieder vor dem Spiel&lt;br /&gt;Und läuft es auch mal nicht so, wie man will&lt;br /&gt;Wirst du trotzdem immer alles geben&lt;br /&gt;Denn für dich bedeutet Fußball Leben&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;&lt;br /&gt;Wichtig ist ganz einfach auf'm Platz&lt;br /&gt;Alles andere ist doch Ersatz&lt;br /&gt;Du bist jung und du bist wild&lt;br /&gt;Manchen Torwart hast du schon gekillt&lt;br /&gt;Die Fans, die singen "Lukas, WE LOVE YOU"&lt;br /&gt;Ja, du hast echt den Goldnen Schuh&lt;br /&gt;Komm und mach das Dingen endlich rein&lt;br /&gt;Denn dann singen alle im Verein:&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;Es gibt einen Fußballgott&lt;br /&gt;(Der Angriff läuft über rechts,&lt;br /&gt;geht über links,in die Mitte,&lt;br /&gt;in der Mitte steht wer?)&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;(Die 90. Spielminute läuft,&lt;br /&gt;der Ball kommt aus dem Mittelfeld,&lt;br /&gt;schießt zu Poldi,Poldi steht frei&lt;br /&gt;vor der Hütte -Tooor!!!)&lt;/span&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt; &lt;/span&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;/span&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed blue; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:130%;"&gt;La cancion de Lu Lu Lukas Podolski&lt;/span&gt;&lt;span style="font-weight: normal;font-size:78%;" &gt;&lt;span&gt;&lt;br /&gt;Poldi Poldi Halleluja&lt;br /&gt;Poldi Poldi Halleluja&lt;br /&gt;Poldi Poldi Halleluja&lt;br /&gt;Existe un dios futbolero.&lt;br /&gt;Muchos jugadores son simplemente muy chafas&lt;br /&gt;Tu dominas el balon y lo puedes sostener como una tabla. Muchos son unos millonarios huevones.&lt;br /&gt;Y si, la neta, la tierra gira simplemente alrededor tuyo.&lt;br /&gt;Despues del juego es antes del juego *&lt;br /&gt;Y a veces las cosas no pasan como uno quisiera, pero a pesar de ello, tu siempre daras tu maximo ya que para ti la vida es Futbol!&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lo importante es quedar en primer lugar, lo demas ciertamente es pura compensacion.&lt;br /&gt;Tu estas joven y estas bien loco.&lt;br /&gt;Ya te haz matado a muchos porteros&lt;br /&gt;Los Fans te cantan: "Lukas, WE LOVE YOU"&lt;br /&gt;Si, la neta tu tienes el zapato de oro.&lt;br /&gt;Ven y haz que las cosas queden por fin perfectas y asi despues toda la sociedad te cantara:&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;Goldi Poldi Halleluja&lt;br /&gt;hay un dios futbolero&lt;br /&gt;&lt;br /&gt;(la ofensiva corre hacia la derecha, se va a la izquierda y en medio, y en medio quien esta?!)&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;Lu-Lu-Lu-Lukas Podolski&lt;br /&gt;(Al minuto 90 la pelota llega a medio,se la lanzan a Poldi,Poldi queda enfrente de la porteria-Goool!!! )&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;Aquí está la rolita:&lt;/span&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/koFOz6gMgtU&amp;hl=en_US&amp;fs=1&amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/koFOz6gMgtU&amp;hl=en_US&amp;fs=1&amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="480" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Y aquí hay algunas notas acerca de algunas cosillas que menciona la canción:&lt;br /&gt;Nach dem Spielt ist vor dem Spielt==despues del juego es antes del juego, esta es una frase que surgio de un entrenador de futbol aleman. Que me parece llevo al equipo a la gloria en un mundial. Lo que significa la frase es que una vez que haz terminado de jugar un partido, ya estas pensando y preparandote para el siguiente partido que jugaras.&lt;br /&gt;Espero disfruten estas canciones alemanas, ojala alguien me pueda ayudar a hacer una cancion similar para Giovani Dos Santos. Aunque no se vale invitar a Belinda. Mejor libre solterito sin apuros ;) haha :P&lt;br /&gt;Pondre una foto de Giovani, mostrando su coraje y como tambien merece su cancion:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i520.photobucket.com/albums/w321/chocobanana1/giovani-dos-santos.png"&gt;&lt;img style="display: block; margin: 0px auto 10px; text-align: center; cursor: pointer; width: 500px; height: 429px;" src="http://i520.photobucket.com/albums/w321/chocobanana1/giovani-dos-santos.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;Otros Posts relacionados:&lt;br /&gt;&lt;a href="http://littlesaiph.blogspot.com/2010/01/hay-una-cancion-del-grupo-aleman-wir.html"&gt;Traducción: Wir Trafen uns in einem Garten-2raumwohnung &lt;/a&gt;&lt;br /&gt;&lt;a href="http://littlesaiph.blogspot.com/2009/03/una-cancion-para-cantar-cuando-ya-no-te.html"&gt;Traducción: Nur ein Wort-Wir sind Helden&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-782001584236649820?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/782001584236649820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=782001584236649820' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/782001584236649820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/782001584236649820'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/06/preparando-la-cancion-de-giovani-dos.html' title='Preparando la cancion  de Giovani Dos Santos'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-8663648388944740155</id><published>2010-05-18T22:57:00.008-06:00</published><updated>2010-05-19T00:41:54.510-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='opencv 2.1 version'/><category scheme='http://www.blogger.com/atom/ns#' term='c++ tutorial for opencv'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial machine learning library opencv'/><category scheme='http://www.blogger.com/atom/ns#' term='support vector machine'/><title type='text'>Support Vector Machine Tutorial with  OpenCV 2.1 for Dummies</title><content type='html'>Debido al enorme tiempo que me tomó poder hacer este pequeño código, decidí escribir el código en mi blog y ayudar así a futuras personas que de pronto se atoren con algo similar. "what comes around goes around".&lt;br /&gt;¿Que fue lo que me atormento desde el Domingo por la noche?&lt;br /&gt;&lt;br /&gt;Poder utilizar la librería  de aprendizaje de máquina que proporciona la nueva versión 2.1 de  OpenCV para tener un clasificador de tipo  "Support Vector Machine" . (  No tengo la menor idea de cómo se dice, Support Vector Machine en español , Lo podría buscar, pero no he dormido bien en los últimos días..., Entonces al lector que lo averigue y me lo haga saber, ganará un regalo especial de este blog =)&lt;br /&gt;&lt;br /&gt;Así que el propósito de este post, será tener el clasificador corriendo. Para ello, asumiremos que sólo tenemos dos clases, las cuales tienen las etiquetas de -1 y 1.&lt;br /&gt;Cada clase tiene elementos, estos elementos son puntos en 2D.&lt;br /&gt;La clase 1 asumiremos que tiene los siguientes elementos:&lt;br /&gt;3,2.5&lt;br /&gt;6,5.5,&lt;br /&gt;La clase 2 tiene:&lt;br /&gt;-5,5.5&lt;br /&gt;-7,6&lt;br /&gt;-8,-3&lt;br /&gt;Lo unico que probaremos es tener un clasificador que si le envió 3, 2.5 diga: Clase 1 B-)&lt;br /&gt;&lt;br /&gt;En C++ y usando la librería de opencv, esto se traduce a :&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "highgui.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "cv.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "ml.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "cxcore.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "cxtypes.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//#include "cell.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include "celda.h"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include &lt;iostream&gt;&lt;/iostream&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;//#include &lt;vector&gt;&lt;/vector&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;using namespace std;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;using namespace cv;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int main()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   &lt;span style="color: rgb(51, 204, 0);"&gt;/*Aqui creamos las posibles etiquetas que existirán, las etiquetas&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;correspondrán con el número de clases que existen, y el número de etiquetas corresponde con el número de ejemplos de aprnedizaje que existen*/&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;   float array_labels[]= {1.0,1.0,-1.0,-1.0,-1.0};&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;/*Aqui declararemos los datos que se usarán para entrenar, nótese que estoy diceindo que habrá 5 ejemplos de aprendizaje, cada uno con dos valores, la etiqueta del primer elemento corresponde con la primera etiqueta guardado en array_lables.&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;   float array_trainData[5][2] = { 3,2.5, 6,5.5, -5,5.5, -7,6, -8,-3};&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;/*Creamos matrices de opencv que guardarán estos datos&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    cv::Mat trainData(5,2,CV_32FC1,array_trainData);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   cv::Mat labels(5,1, CV_32FC1, array_labels);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*Creamos el support vector machine&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      CvSVM SVM;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*Lo entrenamos&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;       SVM.train(trainData,labels);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;/&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*Vamos a probarlo!, tomaremos cada uno de los datos del training set, y veremos si nos da la espuesta correcta&lt;/span&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;*/&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:100%;"&gt;   for(int i = 0; i &lt;5;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt; {  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;      double r;  &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;     r = SVM.predict( trainData.row(i) ); &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;     &lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=";font-family:courier new;font-size:100%;"  &gt;     cout&lt;&lt;"classified as "&lt;&lt;fixed&gt;&lt;fixed&gt;&lt;&lt;r;&gt;&lt;r;&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;     &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; }  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/r;&gt;&lt;/r;&gt;&lt;/fixed&gt;&lt;/fixed&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;Y eso es todo amigos =)&lt;br /&gt;Si ese pequeño código me hizo tardarme aaaños =(&lt;br /&gt;Para un tutorial de Support vector machines chequen: http://citeseer.ist.psu.ed/burges98tutorial.html&lt;br /&gt;y la libreria de machine learning de opencv puede ser consultada en:&lt;br /&gt;http://opencv.willowgarage.com/documentation/cpp/support_vector_machines.html#cvsvm-train&lt;br /&gt;&lt;br /&gt;Nota que este tutorial es de la Ultima version 2.1 de opencv! Creo que es de los pocos tutoriales disponibles en LINEA! and of course it is in spanish =)&lt;br /&gt;&lt;br /&gt;...Por cierto, acabo de encontrar esta CANCIÓN POR FIN Youtube, y por el nombre del blog, me parece adequado compartir:&lt;br /&gt;&lt;object width="445" height="364"&gt;&lt;param name="movie" value="http://www.youtube.com/v/uNsmF9JTpuI&amp;hl=en_US&amp;fs=1&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/uNsmF9JTpuI&amp;hl=en_US&amp;fs=1&amp;color1=0xe1600f&amp;color2=0xfebd01&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-8663648388944740155?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/8663648388944740155/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=8663648388944740155' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8663648388944740155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8663648388944740155'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/05/support-vector-machine-tutorial-with.html' title='Support Vector Machine Tutorial with  OpenCV 2.1 for Dummies'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6676303929905298487</id><published>2010-04-03T00:24:00.011-06:00</published><updated>2010-06-30T00:23:37.357-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lyrics'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion al español'/><category scheme='http://www.blogger.com/atom/ns#' term='sportfreunde stiller'/><category scheme='http://www.blogger.com/atom/ns#' term='spanish translation'/><category scheme='http://www.blogger.com/atom/ns#' term='songtext'/><category scheme='http://www.blogger.com/atom/ns#' term='los amigos del deporte son compadres'/><category scheme='http://www.blogger.com/atom/ns#' term='english'/><category scheme='http://www.blogger.com/atom/ns#' term='spanisch'/><title type='text'>Das All und dein Lächeln :)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://farm4.static.flickr.com/3216/2834306912_1efdbfbcc7.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 500px; height: 333px;" src="http://farm4.static.flickr.com/3216/2834306912_1efdbfbcc7.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Es viernes de traducción de música alemán. Hoy escuché una de esas canciones cursis en donde recuerdas al amorcino con el convives día a día y te trae tantas sonrisas. No tengo mucho que decir hoy, fue un buen día con muchas sonrisas. Anywho without further a due.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="width: 300px; height: 1200px;" border="4" cellpadding="20" cellspacing="10"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed red; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:130%;"&gt;Lass mich nie mehr loss...&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie New York ohne Sinatra&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie Wien ohne den Prater&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ein Herzschlag ohne Blut&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie Lindenberg ohne Hut&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ne Eiszeit ohne Schnee&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;England ohne Tee&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So als ob bei Steve McQueen die ganze Coolheit fehlt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Jeder Boxer braucht ne Linke,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Kiss braucht viermal Schminke&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Tonic braucht Gin.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie wär ein Leben ohne Sinn?&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ein leeres Paket&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ein Rad das sich nicht dreht&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So als ob anstatt nem Sturm nur ein leichter Wind weht&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Du hältst mich mir fehlt nichts&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie das All ohne Planeten&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Astronauten ohne Raketen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Paul Newman ohne Clou&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Old Shatterhand ohne Winnetou&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ein Dieb der nicht stiehlt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Wie ein Wort das nicht zählt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So als ob dem Alphabet ein Buchstabe fehlt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Du hältst mich mir fehlt nichts&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Ich lass dich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich (wie ein Herzschlag ohne Blut)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;So bin ich ohne dich (lass mich nie mehr los!)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal; font-style: italic;"&gt;Lass mich nie mehr los&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;/span&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed blue; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:130%;"&gt;Ya no me dejes ir&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: normal;font-size:78%;" &gt;&lt;span&gt;Como Nueva York sin Sinatra.&lt;br /&gt;Como Austria sin Prater&lt;br /&gt;Como un latido de corazón sin sangre.&lt;br /&gt;Como un Glaciar sin nieve.&lt;br /&gt;Inglaterra sin su Té.&lt;br /&gt;Como si SteveMcQueen perdiera toda su actitud cool.&lt;br /&gt;Todo boxeador requiere de un brazo izquierdo.&lt;br /&gt;Kiss  requiere de mucho maquillaje.&lt;br /&gt;La quina requiere de la Ginebra.&lt;br /&gt;¿Cómo sería una vida sin sentido?&lt;br /&gt;Como un paquete vacio.&lt;br /&gt;Como una rueda que no gira.&lt;br /&gt;Como si en vez de la tempestad se tuviera tan sólo un viento suave.&lt;br /&gt;&lt;br /&gt;Así soy yo sin ti&lt;br /&gt;Tu me abrazas y no me falta nada.&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir.&lt;br /&gt;Ya no me dejes ir.&lt;br /&gt;&lt;br /&gt;Como sería el universo sin planetas.&lt;br /&gt;Astronautas sin cohetes.&lt;br /&gt;el Viejo Shatterhand sin Winnetou&lt;br /&gt;Como un ratero que no roba,&lt;br /&gt;como una palabra que no cuenta,&lt;br /&gt;como si al alfabeto una letra le faltara.&lt;br /&gt;&lt;br /&gt;Así soy yo sin ti.&lt;br /&gt;Tu me abrazas y no me falta nada.&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Yo ya no te dejaré ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;Asi soy yo sin ti&lt;br /&gt;Asi soy yo sin ti&lt;br /&gt;Asi soy yo sin tu (Como un latido de corazon sin sangre) Asi soy yo sin ti&lt;br /&gt;(Ya no me dejes ir!)&lt;br /&gt;Ya no me dejes ir&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;Aquí está la rolita:&lt;/span&gt;&lt;br /&gt;&lt;object height="405" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Ws0Iuox6P1s&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Ws0Iuox6P1s&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xe1600f&amp;amp;color2=0xfebd01&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="405" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Y aquí hay algunas notas acerca de algunas cosillas que menciona la canción:&lt;br /&gt;Prater es un parquecito muy famoso y caracterísitico de Austria&lt;br /&gt;SteveMcQueen era un actor al que le llamaron el Rey del Cool-&gt;King of Cool&lt;br /&gt;El Viejo Shatterhand era un personaje ficticio de las novelas del viejo Oeste, era un alemán que tenía de mejor amigo a un indígena llamado Wnnentou&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;Otros Posts relacionados:&lt;br /&gt;&lt;a href="http://littlesaiph.blogspot.com/2010/01/hay-una-cancion-del-grupo-aleman-wir.html"&gt;Traducción: Wir Trafen uns in einem Garten-2raumwohnung &lt;/a&gt;&lt;br /&gt;&lt;a href="http://littlesaiph.blogspot.com/2009/03/una-cancion-para-cantar-cuando-ya-no-te.html"&gt;Traducción: Nur ein Wort-Wir sind Helden&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6676303929905298487?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6676303929905298487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6676303929905298487' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6676303929905298487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6676303929905298487'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/04/das-all-und-dein-lacheln_03.html' title='Das All und dein Lächeln :)'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm4.static.flickr.com/3216/2834306912_1efdbfbcc7_t.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7582870690473525210</id><published>2010-02-28T13:21:00.002-07:00</published><updated>2010-02-28T13:26:13.059-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='relaciones positivas en redes sociales'/><category scheme='http://www.blogger.com/atom/ns#' term='ich liebe facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='hate in social networks'/><category scheme='http://www.blogger.com/atom/ns#' term='relaciones de odio en redes socials'/><category scheme='http://www.blogger.com/atom/ns#' term='ich hasse Facebook'/><title type='text'>The hate and love relationships on social networks...</title><content type='html'>I had recently the "joy" of reading a very interesting articled by Jure Leskovec, Daniel Huttenlocher, and Jon Kleinberg. And since it's a lazy sunday afternoon,I thought I might take the time to comment on my readings. The paper is titled "Signed Networks in Social Media", and this paper  studies how the interaction between positive and negative relationships affects the structure of online social networks. They considered that the richness of a social network consists of a mixture of both positive and negative interactions that co-exist in one single structure.&lt;br /&gt;It might be difficult to understand at first what a negative or a positive relationship in a social network is, since the vast majority of social networks only allow for positive relationships. Facebook for example, only permits users to designate who their friends are  and  state that they  like the activity, status, picture etc of an individual. A user for example,  is not capable of showing his  dislike for  another person's  activity.&lt;br /&gt;The study they carried out was therefore focused on social networks that do allow for positive and negative relationships.They obtained  large-scale datasets from social applications where the sign of each link-positive or negative- could be reliably obtained.The social networks that were studied are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Epinions&lt;/span&gt;: an online rating site that lets people give both positive and negative ratings not only on items but also to other raters. It basically has Web of Trust per User:  A network of reviewers whose reviews and ratings the user  has consistently found to be valuable. It also has a Block List:  list of authors whose reviews the user  did not find valuable. &lt;span style="font-weight: bold;"&gt;“... If you encounter a member whose reviews are consistently offensive, inaccurate, or otherwise low quality, you can add that member to your Block List...”&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Slashdot:&lt;/span&gt; An online discussion site that allows users to tag other users as "friends" or "foes". The user can observe the different kind of relationships it holds with each different user. So  if a person were to add someone as a friend, he/she would  view them as a friend-&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;http://slashdot.org/my/friends&lt;/span&gt;. While if you add a user as a foe, you view them as a foe.&lt;span style="color: rgb(0, 153, 0);"&gt; http://slashdot.org/my/foe&lt;/span&gt;s&lt;br /&gt;If a user adds you as their friend, you would view them as a fan &lt;span style="color: rgb(51, 204, 0);"&gt;http://slashdot.org/my/fans&lt;/span&gt;&lt;br /&gt;If a user adds you as your foe, you would view them as a freak. &lt;span style="color: rgb(51, 204, 0);"&gt;http://slashdot.org/my/freaks&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;Votes for Wikipedia admin candidate&lt;/span&gt;:When a Wikipedia user is considered for a promotion to the status of an admin, the community is able to cast public votes in favor of or against the promotion of this admin candidate. A positive vote is taken as  a positive link from the voter to the candidate, and a negative vote as a negative link.&lt;br /&gt;&lt;br /&gt;This paper worked with the 3 datasets stated above and used these datasets along with 2 different   theories  of signed networks to reason about how different patterns of positive and negative links provide evidence of the different kind of relationships that exist across these networks. The 2 different theories of signed network that were used are:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Structural Balance Theory&lt;/span&gt;: This was a theory that was proposed by Heider (1958) . Balance theory deals with three kinds of entities. The person (P) whose subjective environment we are concerned with, another person (O); and the object (X), which may be a third person.&lt;/li&gt;&lt;/ul&gt;                                    &lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/S4qjoFhXfgI/AAAAAAAAA18/7NhYrmDRR9g/s1600-h/data1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/S4qjoFhXfgI/AAAAAAAAA18/7NhYrmDRR9g/s320/data1.png" alt="" id="BLOGGER_PHOTO_ID_5443343008702889474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Balance theory proposes that with three entities, person-another person-object (POX), three sets of relations exist i.e. between P and O; between P and X and; between O and X&lt;br /&gt;Each of the three relations, P-O, P-X and O-X, can have one of two values. You can either 'like' (+) or 'dislike' (-). With three sets of possible relationships, each taking on one of two values (+/-) eight possible states of affairs exist. This theory states that  balance state occurs when all sign multiplication of its sentiment relation charges positive.&lt;br /&gt;For example, take the following diagram:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S4qpXH1FAKI/AAAAAAAAA2E/CgU7x3LhXCE/s1600-h/dataMining.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S4qpXH1FAKI/AAAAAAAAA2E/CgU7x3LhXCE/s320/dataMining.png" alt="" id="BLOGGER_PHOTO_ID_5443349314334425250" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Here we have P, who we can name Pete that likes O, who we will call Olivia. Pete happens to  hate hot peppers and chocolate, X.  Balance Theory says, that for the relationship of these 3 individuals to be balanced, Olivia would also need to hate hot peppers and chocolate.&lt;br /&gt;Some of the basic guidlines that Balance Theory follows are:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;my friend’s friend is my friend&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;my friend’s enemy is my enemy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;my enemy’s friend is my enemy&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;my enemy’s enemy is my friend&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, for this paper they started analysis the social networks mentioned above, by comparing if these networks  effectively followed the theorems of Balance theory , in this first stage they only considered undirected relationships between individuals, ie they only considered that Pete likes Olivia, but they did not consider whether or not Olivia  likes or dislikes Pete.  To carry out the comparative,the frequencies of different types of signed triads were taken into account.&lt;br /&gt;They stated that a certain triad was &lt;span style="font-weight: bold;"&gt;overrepresented&lt;/span&gt; when the following occurred:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;p(Ti ) larger than  p0 (Ti )&lt;/span&gt;&lt;br /&gt;Where P(Ti) represents the fractions of triads Ti. (Ti represents the number of triads of type Ti, for example it could represent the number of 3 person relationships whose edges are all POSITIVE) And P0(Ti) is the apriori probability of Ti based on sign distribution.&lt;br /&gt;They also stated that a certain triad was &lt;span style="font-weight: bold;"&gt;underrepresented&lt;/span&gt;,&lt;br /&gt;if&lt;span style="font-weight: bold;"&gt; p(Ti )less than po(ti&lt;/span&gt;) .&lt;br /&gt;They saw that using status theory they were here able to explain much better these social interactions.&lt;br /&gt;Status theory, claims the following:&lt;br /&gt;Considering nodes A and B, a positive edge from A to B means: “I think B has higher status than I (A) do” A negative edge from A to B means: “I think B has lower status than I (A) do”&lt;br /&gt;Thus, the theory of status predicts that if A links positive to B, then “A regards B as having higher status and"  and if B links positive to C then " B regards C as having higher status – so C should regard A as having low status and hence be inclined to link negatively to A&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S4rO_xABmAI/AAAAAAAAA2s/Tji-TOQkaYw/s1600-h/3.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S4rO_xABmAI/AAAAAAAAA2s/Tji-TOQkaYw/s320/3.png" alt="" id="BLOGGER_PHOTO_ID_5443390694511187970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The following table  presents their findings:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_laFQZJU0vgA/S4rOsracyKI/AAAAAAAAA2k/xzKgAQ38D3Q/s1600-h/tri4.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 195px;" src="http://3.bp.blogspot.com/_laFQZJU0vgA/S4rOsracyKI/AAAAAAAAA2k/xzKgAQ38D3Q/s320/tri4.png" alt="" id="BLOGGER_PHOTO_ID_5443390366593894562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ti referes to the selected triad. count refers to the number of times that particular triad was encountered in the network. P (+): prob. that closing red edge is positive;SG: surprise of edge initiator giving a positive edge (This is, surprise that Pete would give a positive link to Olivia);Sr: surprise of edge destination receiving a positive edge (surprise that Olivia would get a positive link);Bg:consistency of balance theory  with generative surprise;&lt;br /&gt;Br: consistency of balance with receptive surprise;&lt;br /&gt;Sg: consistency of status with generative surprise; Sr: consistency of status with receptive surprise.&lt;br /&gt;&lt;br /&gt;They also analyzed, mutual back and forth interactions,they noticed here that the principles of balance are more pronounced than they are in the larger portions of the networks where signed linking (and hence evaluation of others) takes place asymmetrically. They noticed that balance-based effects seem to be at work in the portions of the networks where directed edges point in both directions, reinforcing mutual relationships.&lt;br /&gt;&lt;br /&gt;They also noticed that positive ties are more likely to be clumped together,while negative ties tend to act more like bridges between islands of positive ties.&lt;br /&gt;&lt;br /&gt;Another interesting observation that they made, was that in their real data, an edge that was more embedded tended  to be increasingly positive. These findings are consistent with the   social-capital theory that states that  embedded edges are  more “on display" and thus tend to be positive.&lt;br /&gt;The following picture shows these findings. Rnd denotes random signs created from the network, and real denotes the true signs that this network holds.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S4rHgRnQuxI/AAAAAAAAA2c/ZWyDxOXcFKI/s1600-h/better.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 242px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S4rHgRnQuxI/AAAAAAAAA2c/ZWyDxOXcFKI/s320/better.png" alt="" id="BLOGGER_PHOTO_ID_5443382456928484114" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Conclusion:&lt;/span&gt;&lt;br /&gt;This paper presents  a new perspective on how to reason social media sites by interpreting it as interactions between positive and negative relationships.&lt;br /&gt;They also provide good insight with valid results, on to what theory depending on the network, is more fitted on explaining  the nature of the network, i.e  whether the network is directed or undirected.&lt;br /&gt;I only have one doubt about the paper: They said that &lt;span style="font-weight: bold;"&gt;"...balance-based effects seems to be at work in the portions of the networks where directed edges point in both directions, reinforcing mutual relationship.."&lt;/span&gt;, we could take these portions of the network as the community. Other papers, have only been interested in studying the community aspect of social networks, and feel that when in large scale these communities  blend into the entire network, true human behavior is lost.  Therefore we could question, if their status theory is modeling human behavior accurately.&lt;br /&gt;&lt;br /&gt;None the less very interesting article, would highly  recommend :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7582870690473525210?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7582870690473525210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7582870690473525210' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7582870690473525210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7582870690473525210'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/02/hate-and-love-relationships-on-social.html' title='The hate and love relationships on social networks...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_laFQZJU0vgA/S4qjoFhXfgI/AAAAAAAAA18/7NhYrmDRR9g/s72-c/data1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-1003661035735753377</id><published>2010-01-27T22:46:00.025-07:00</published><updated>2010-03-28T12:05:49.724-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='traslation of german song'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion al español'/><category scheme='http://www.blogger.com/atom/ns#' term='german music'/><category scheme='http://www.blogger.com/atom/ns#' term='2raumwohnung'/><category scheme='http://www.blogger.com/atom/ns#' term='spanisch'/><category scheme='http://www.blogger.com/atom/ns#' term='deutsche musik'/><title type='text'>Das bekommt mir nicht! == Eso no me sienta muy bien...</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.kaleidoshop.de/produktkatalog/produktgrafiken/liebe-ist-flauschdecke-150x200-cm-60bw-40dralon.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 300px; height: 300px;" src="http://www.kaleidoshop.de/produktkatalog/produktgrafiken/liebe-ist-flauschdecke-150x200-cm-60bw-40dralon.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Tengo miles de pendientes, sin embargo quería hacerme un pequeño momento para poner una canción que acabo de conocer a traves de un servicio del cual me enamoré...y sí no es ningún "adult service". El servicio del cual hablo es blip.fm, es una combinación de twitter con youtube y te crea playlists, todo mundo es un DJ con sus comentarios graciosos a las rolas que les laten...&lt;br /&gt;En fin, atraves de ese servicio conocí esta canción, no sé exactamente por qué pero me fascinó. Es una canción alemana y le hago tributo traduciendola al español!&lt;br /&gt;Aquí esta la trAducción de la rola de 2raumwohnung -&gt; translation to spanish&lt;br /&gt;Translation to spanish!&lt;br /&gt;Por cierto, de nuevo doy gracias a mis clases del &lt;a href="http://www.cele.unam.mx/"&gt;cele&lt;/a&gt; que me permiten hacer esto.&lt;br /&gt;Comentarios de la traducción son bienvenidos, tuve algunas dudas en varias partes de la canción, tonz apreciaría cualquier comentario al respecto...&lt;br /&gt;Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="width: 300px; height: 1200px;" border="4" cellpadding="20" cellspacing="10"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed red; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;Wir Trafen uns in einem Garten&lt;/span&gt;&lt;br /&gt;Wir Trafen Uns In Einem Garten, Wahrscheinlich Unter Einem Baum.&lt;br /&gt;oder War´s In Einem Flugzeug, - Wohl Kaum - Wohl Kaum.&lt;br /&gt;&lt;br /&gt;es War Einfach Alles Anders, Viel Zu Gut Für Den Moment,&lt;br /&gt;wir Waren Ziemlich Durcheinander Und Haben Uns Dabei Getrennt.&lt;br /&gt;&lt;br /&gt;komm´ Doch Mal Auf Ein Stück Kucken, Später Geh´n Wir In Den Zoo.&lt;br /&gt;und Dann Lassen Wir Uns Suchen - Übers Radio.&lt;br /&gt;&lt;br /&gt;ich Weiß Nicht Ob Du Mich Verstehst Oder Ob Du Denkst Ich Spinn´,&lt;br /&gt;weil Ich Immer Wenn Du Nicht Da Bist Ganz Schrecklich Einsam Bin.&lt;br /&gt;&lt;br /&gt;dann Denk Ich Mal An Was Anderes Als Immer Nur An Dich&lt;br /&gt;denn Das Viele "an Dich Denken" Bekommt Mir Nicht.&lt;br /&gt;am Nächsten Tag Bin Ich So Müde, Ich Pass Gar Nicht Auf. und Meine Freunde Sagen Ich Seh Fertig Aus.&lt;br /&gt;&lt;br /&gt;es Hat Seit Tagen Nicht Geregnet, Es Hat Seit Wochen Nicht Geschneit.&lt;br /&gt;der Himmel Ist So Klar - Und Die Straßen Sind Breit. ist Das Leben Wie Ein Spielfilm Oder Geht´s Um Irgendwas?&lt;br /&gt;wir Haben Jede Menge Zeit Und Du Sagst :"na Ich Weiß Nicht - Stimmt Das?"&lt;br /&gt;&lt;br /&gt;fahr Doch Mit Mir Nach Italien, Wir Verstehen Zwar Kein Wort aber Lieber Mal Gar Nichts Verstehen Als Nur Bei Uns Im Ort&lt;br /&gt;&lt;br /&gt;dann Denk Ich Mal An Was Anderes ...&lt;br /&gt;(... Und Meine Freunde Sagen: "man Siehst Du Fertig Aus")&lt;br /&gt;&lt;br /&gt;alle Fenster Haben Gardinen, Ich Geh Alleine Durch Die Stadt.&lt;br /&gt;ich Frag Mich Ob Mich Jemand Liebt, Der Meine Telefonnummer Hat?&lt;br /&gt;warum Immer Alle Fernsehen? Das Macht Doch Dick!&lt;br /&gt;ich Stell Mit Vor Ich Wär´ Ein Fuchs In Einem Zeichentrick&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;th style="font-weight: bold;"&gt;&lt;div style="border: 2px dashed blue; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;Nos topamos en un jardín&lt;/span&gt;.&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;Nos encontramos en un jardín, talvez fue más bien  debajo de un árbol. O fue en un avión-no no&lt;br /&gt;&lt;br /&gt;Todo fue simplemente diferente, demasiado bueno para el momento, aunque estábamos  un poco  confundidos y desde allí  nos separamos.&lt;br /&gt;:(&lt;br /&gt;Andale  ven  a tomarte  un pedacito de pastel, después podemos ir al zológico, y dejamos que nos búsquen --por  el radio.&lt;br /&gt;Yo no sé si me entiendas, o pienses que estoy loca, Porque siempre que estás lejos, me siento  horriblemente sola.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;Entonces en vez de estar todo el tiempo pensando en tí, pienso en otra cosa, porque estar pensando mucho en ti, no me sienta muy bien.&lt;br /&gt;&lt;br /&gt;Al día siguiente estoy muy cansada, no puedo poner atención a casi nada. Y mis amigos me dicen que me veo acabada!&lt;br /&gt;&lt;br /&gt;Desde hace un par de días no ha llovido, desde hace un par de semanas no ha nevado, el cielo está tan frío y las calles están tan amplías, la vida es como una película, o acaso es para otra cosa?&lt;br /&gt;&lt;br /&gt;Tenemos  ambos un gran cacho de tiempo libre, y tu dices: ah neta? es cierto esto?.&lt;br /&gt;&lt;br /&gt;Andale viaja conmigo a Italia, no vamos a entener nadita, pero es mejor no entender nadita a estar en nuestra casa todo el tiempo.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt;Entonces en vez de estar todo el tiempo pensando en tí, pienso en otra cosa&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-style: italic;"&gt; ...(..Y mis   amigos me dicen que me veo acabada!)&lt;br /&gt;&lt;br /&gt;Todas las ventanas tienen cortinas, camino solitaria por la ciudad.&lt;br /&gt;Me preguntó a mi misma, si me ama ese individuo  que tiene mi número telefónico.&lt;br /&gt;Y por qué todos ven la Tele? Te hace verte gordo, no??!&lt;br /&gt;Me imagino como si yo fuera un zorro dentro de una animación.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/th&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aquí está la rolita:&lt;br /&gt;&lt;br /&gt;&lt;object height="364" width="445"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Syye93QTp30&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x402061&amp;amp;color2=0x9461ca&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/Syye93QTp30&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0x402061&amp;amp;color2=0x9461ca&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="364" width="445"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-1003661035735753377?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/1003661035735753377/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=1003661035735753377' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1003661035735753377'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1003661035735753377'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/01/hay-una-cancion-del-grupo-aleman-wir.html' title='Das bekommt mir nicht! == Eso no me sienta muy bien...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-8060511588664523639</id><published>2010-01-17T18:31:00.016-07:00</published><updated>2010-01-26T14:36:07.456-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Harris Corner detector'/><category scheme='http://www.blogger.com/atom/ns#' term='Plessy Punkt-Detektor'/><category scheme='http://www.blogger.com/atom/ns#' term='ecke detektor'/><category scheme='http://www.blogger.com/atom/ns#' term='matlab'/><category scheme='http://www.blogger.com/atom/ns#' term='detector de esquinas'/><title type='text'>Rose Mary, she likes berries, believes in Fairies  and is in love with Harry</title><content type='html'>We will explain here, how to carry out the Harris Corner Detector Algorithm in Matlab.&lt;br /&gt;We will divide the task in 2 parts, one part will calculate the corner points of the image, and the other part, will draw small squares around those corner points with the purpose of having a way of displying them to the user.&lt;br /&gt;The part of detecting the corner points of the image is the following:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%we create a function named harris that receives an rgb image&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%and the desired k value. We will return a matrix named A that&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%has information about whether or not a certain pixel represents&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%a corner.&lt;/span&gt;&lt;br /&gt;function [A] = harris(rgb, k)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%If we received an RGB image we convert it to Gray Scale.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%We do this, because if we were to work with an RGB image it&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%would be necessary to work with 3 channels, the red, green and blue channel, %instead of just one, which is  possible with the gray scale image .&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;if( size(rgb,3) &gt;= 3 )&lt;br /&gt;img = double( rgb2gray(rgb) );&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%Before , we continue , it is important to recall that in the Harris Corner Detector, %we obtained a weighted sum of squared differences between an area (uv) and %another area that was obtained by shifting the original area by  (x,y), and thus  we %had the following form:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 279px; height: 37px;" class="tex" alt="S(x,y) = \sum_u \sum_v w(u,v) \, \left( I(u,v) - I(u+x,v+y) \right)^2" src="http://upload.wikimedia.org/math/1/e/8/1e81c3906a7bc927cbffcca87f37c13d.png" /&gt;&lt;/dd&gt;&lt;dt&gt;%w(u,v) represented  a weighted sum. It is important to note that  I(u + x,v + y) %can be approximated by a Taylor expansion. &lt;/dt&gt;&lt;dd&gt;&lt;img style="width: 267px; height: 22px;" class="tex" alt="I(u+x,v+y) \approx I(u,v) + I_x(u,v)x+I_y(u,v)y" src="http://upload.wikimedia.org/math/0/c/e/0ce639f1d8bdcc0be39f5b96869ab981.png" /&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;%Where  Ix and Iy are  the partial derivatives of I.&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%Resulting in:&lt;/span&gt;&lt;br /&gt;&lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 253px; height: 37px;" class="tex" alt="S(x,y) \approx \sum_u \sum_v w(u,v) \, \left( I_x(u,v)x + I_y(u,v)y \right)^2," src="http://upload.wikimedia.org/math/7/9/4/79413b2872b84896d1d84028e3311ce4.png" /&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;%Since we will carry out an operation that involves partial derivatives we need to %carry out a smoothing, because computation of derivatives generally involves a %stage of scale-space smoothing. For this,we will  use the convolution of the gray %image with a Gaussian kernel.&lt;br /&gt;So the next steps that we will carry out are:&lt;br /&gt;a) Calculate the partial derivatives with respect to X and to respect to Y of the image. This will give us the gradients with respect to X and with respect to Y.&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;b) convolve these gradients with a Gaussian Kernel.&lt;/span&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;&lt;br /&gt;The following  is our Gaussian Kernel, which will give us blurring on both directions%&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;g = 1/16 * [1 2 1; 2 4 2; 1 2 1];&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%Here we define the Gradients Operators, we will use the Prewitt Gradient Kernel to obtain the gradients. If we pay more attention  to this matrix, we notice that this kernel considers that the  orthogonal and diagonal pixel differentials equally&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;dx = [-1 0 1; -1 0 1; -1 0 1]; %Prewitt Gradient Kernel in X&lt;br /&gt;dy = dx';&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;% We obtain all the partial derivatives in x and y of the image. These are the %Gradient values.&lt;/span&gt;&lt;br /&gt;Ix = conv2(img, dx, 'same');&lt;br /&gt;Iy = conv2(img, dy, 'same');&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;% We obtain a matrix, that will have the product of  Ix*Iy for all Ix and all Iy&lt;/span&gt;&lt;br /&gt;Ixy= Ix .* Iy;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;% We will  now obtain the square value of Ix and of Iy and we will obtain a blurring of Ix square,Iy square and of Ixy.The blurring will be  carried out by using the gaussian kernel.We need those  square values , since let's recall we had the following:&lt;/span&gt;&lt;br /&gt;&lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 291px; height: 22px;" class="tex" alt="I(u+x,v+y) \approx I(u,v) + I_x(u,v)x+I_y(u,v)y" src="http://upload.wikimedia.org/math/0/c/e/0ce639f1d8bdcc0be39f5b96869ab981.png" /&gt;&lt;/dd&gt;&lt;/dl&gt;  &lt;p style="color: rgb(0, 153, 0);"&gt;Which  produces the approximation&lt;/p&gt;&lt;br /&gt;&lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 285px; height: 37px;" class="tex" alt="S(x,y) \approx \sum_u \sum_v w(u,v) \, \left( I_x(u,v)x + I_y(u,v)y \right)^2," src="http://upload.wikimedia.org/math/7/9/4/79413b2872b84896d1d84028e3311ce4.png" /&gt;&lt;/dd&gt;&lt;dt&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;&lt;p style="color: rgb(0, 153, 0);"&gt;which can be written in matrix form:&lt;/p&gt;  &lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 94px; height: 48px;" class="tex" alt="S(x,y) \approx  \begin{pmatrix} x &amp;amp; y \end{pmatrix} A \begin{pmatrix} x \\ y \end{pmatrix}," src="http://upload.wikimedia.org/math/8/e/d/8ed548d0e88faa37d8104166d76303da.png" /&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;span style="color: rgb(0, 153, 0);"&gt;where A is:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;dl style="color: rgb(0, 153, 0);"&gt;&lt;dd&gt;&lt;img style="width: 281px; height: 52px;" class="tex" alt="A = \sum_u \sum_v w(u,v) \begin{bmatrix} I_x^2 &amp;amp; I_x I_y \\ I_x I_y &amp;amp; I_y^2  \end{bmatrix} = \begin{bmatrix} \langle I_x^2 \rangle &amp;amp; \langle I_x I_y \rangle\\ \langle I_x I_y \rangle &amp;amp; \langle I_y^2 \rangle \end{bmatrix}" src="http://upload.wikimedia.org/math/b/d/2/bd2cf04bb7c3e4f9e53a73b4a3ad6057.png" /&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%So we calculate the values that are inside this matrix.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ix2 = conv2(Ix .* Ix, g, 'same');&lt;br /&gt;Iy2 = conv2(Iy .* Iy, g, 'same');&lt;br /&gt;Ixy = conv2(Ixy, g, 'same');&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%We now have  3 matrices , Ix2 that hold the values of all the xs  in the image, but they are squared and have been convolved with a Gaussian, so all the xto the square  values are blurred a bit. It is important to note, that this operation  helps to reduce noise. It smooths the image. We have another matrix  Iy2 with the ys to the square value and also blurred as well as third matrix Ixy that holds the values of all the x's times their corresponding y. All 3 of these matrices will help us to calculate the Harris corner response that each pixel of the image has.&lt;br /&gt;The Harris Corner response for each pixel will come out of a matrix A, that as we had said before handwas conformed of:&lt;br /&gt;&lt;/span&gt; &lt;dl&gt;&lt;dd&gt;&lt;img class="tex" alt="A = \sum_u \sum_v w(u,v) \begin{bmatrix} I_x^2 &amp;amp; I_x I_y \\ I_x I_y &amp;amp; I_y^2  \end{bmatrix} = \begin{bmatrix} \langle I_x^2 \rangle &amp;amp; \langle I_x I_y \rangle\\ \langle I_x I_y \rangle &amp;amp; \langle I_y^2 \rangle \end{bmatrix}" src="http://upload.wikimedia.org/math/b/d/2/bd2cf04bb7c3e4f9e53a73b4a3ad6057.png" /&gt;&lt;/dd&gt;&lt;dt style="color: rgb(51, 204, 0);"&gt;%Where Ix represents the x value of the pixel, and Iy the y value of the pixel. The Harris Corner response %of a pixel will be Mc:&lt;/dt&gt;&lt;dd style="color: rgb(51, 204, 0);"&gt;&lt;img class="tex" alt="M_c = \lambda_1 \lambda_2 - \kappa \, (\lambda_1 + \lambda_2)^2 = \operatorname{det}(A) - \kappa \, \operatorname{trace}^2(A)" src="http://upload.wikimedia.org/math/a/d/a/ada6ae1a13e7fe1b44a6f747cd0f1a42.png" /&gt;&lt;/dd&gt;&lt;dt&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;%What our Harris Function will return will be a matrix that will hold  the harris corner response for each %one of the pixels that conform the image:&lt;/span&gt;&lt;br /&gt;&lt;/dt&gt;&lt;/dl&gt;&lt;br /&gt;&lt;span style="color: rgb(51, 204, 0);"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;A = (Ix2.*Iy2 - Ixy.^2) - k * (Ix2 + Iy2).^2;&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We will now write the function that draws a small red square around the detected corner points.&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%This function receives the image we wish to detect and draw the corner points of, %it also receives  the desired k value to use, and the desired threshold. It is %important to remember that in the Harris corner detector, we consider a corner %to be a corner when the measure of corner response  surpasses a certain %threshold. This measure is computed through the determinant and the trace of the % matrix. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;function img_h = project1(img, k, threshold)&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%We store the original image in img_h, we need to store it, since we will draw the %squares denoting the corners above it.&lt;/span&gt;&lt;br /&gt;img_h = img;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%We use the function we had defined above  and with it obtain a  matrix that holds %all the corner response measures for all the pixels of the image%&lt;/span&gt;&lt;br /&gt;M = my_harris(img, k);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%We iterate through the whole matrix&lt;/span&gt;&lt;br /&gt;for x = 2 : size( M, 1 )&lt;br /&gt;for y = 2 : size(M, 2)&lt;br /&gt;&lt;span style="color: rgb(0, 153, 0);"&gt;%If we find a point of the matrix, that has a value above the threshold, then that %point is a corner and we will draw a rectangle on that pixel.&lt;/span&gt;&lt;br /&gt;if M(x,y) &gt; threshold&lt;br /&gt;for xpos = x - 1:x+1&lt;br /&gt;   img_h(xpos,y-1,1) = 255;&lt;br /&gt;   img_h(xpos,y+1,1) = 255;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;for ypos = y - 1:y+1&lt;br /&gt;   img_h(x-1,ypos,1) = 255;&lt;br /&gt;   img_h(x+1,ypos,1) = 255;&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;We now present a image that was used for this purpose.&lt;br /&gt;The original image is:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S1p09H1lYvI/AAAAAAAAA1s/PYjtD400DnE/s1600-h/empire.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 227px; height: 320px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S1p09H1lYvI/AAAAAAAAA1s/PYjtD400DnE/s320/empire.jpg" alt="" id="BLOGGER_PHOTO_ID_5429780894173192946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And the image with the corners detected is:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/S1p5xk4NPvI/AAAAAAAAA10/7cgnKii130M/s1600-h/empire-corners.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 283px; height: 320px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/S1p5xk4NPvI/AAAAAAAAA10/7cgnKii130M/s320/empire-corners.jpg" alt="" id="BLOGGER_PHOTO_ID_5429786193368530674" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-8060511588664523639?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/8060511588664523639/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=8060511588664523639' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8060511588664523639'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8060511588664523639'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/01/rose-mary-she-likes-berries-believes-in.html' title='Rose Mary, she likes berries, believes in Fairies  and is in love with Harry'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_laFQZJU0vgA/S1p09H1lYvI/AAAAAAAAA1s/PYjtD400DnE/s72-c/empire.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7411107409358768313</id><published>2010-01-16T10:51:00.015-07:00</published><updated>2010-01-16T18:16:31.084-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='vision por computadora'/><category scheme='http://www.blogger.com/atom/ns#' term='Harris Corner detector'/><category scheme='http://www.blogger.com/atom/ns#' term='Harris Corner Detector for dummies'/><title type='text'>The Harris Marris whose not Ferris post...</title><content type='html'>In many robotic problems it is necessary for the machine to be able to detect the depth  and distance of certain objects sometimes to avoid obstacles and other times to retrieve  with precision a certain object from the scene.&lt;br /&gt;To accomplish this, the robot is usually equipped with 2 cameras that take pictures of the environment they are in. These 2 cameras commonly  hold a distance from each other, a distance similar to the one we present  with our eyes, due to it, the pictures from one camera are slightly shifted with respect to the ones taken by the other camera. This shift is usually denominated disparity and is what the computer uses to know whether an object is close by or far away.&lt;br /&gt;One major problem that the machine encounters while carrying out this task, is how does it   detect that the red cup  in picture 1 is moved , let's say, 4 cm with respect to where the red cup is in picture 2?&lt;br /&gt;These vision tasks require finding corresponding features across 2 or more views.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/S1Igjzmcr2I/AAAAAAAAAz8/liywFjYk1cQ/s1600-h/img1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 206px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/S1Igjzmcr2I/AAAAAAAAAz8/liywFjYk1cQ/s320/img1.png" alt="" id="BLOGGER_PHOTO_ID_5427436300453850978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Therefore the first necessary step is to find the features of a scene. But how do we do this?&lt;br /&gt;&lt;br /&gt;What we can start doing is making image patches.Elements to be matched are image patches of a fixed size..The task is therefore to find the best (most similar) patch in the second image, it is clear that the chosen patch should be very distinctive (there should  only be one patch in the second picture  that looks similar). One good patch is one that presents large variation in the neighborhood of a point in all directions.&lt;br /&gt;For example Take the following 2 images:&lt;br /&gt;&lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S1IsS5M2bQI/AAAAAAAAA0U/D95MQrjJRwo/s1600-h/original.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S1IsS5M2bQI/AAAAAAAAA0U/D95MQrjJRwo/s320/original.png" alt="" id="BLOGGER_PHOTO_ID_5427449204038855938" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1ItWJbEFiI/AAAAAAAAA0c/SkiMuOGpyAY/s1600-h/original2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1ItWJbEFiI/AAAAAAAAA0c/SkiMuOGpyAY/s320/original2.png" alt="" id="BLOGGER_PHOTO_ID_5427450359444674082" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;A good patch image patch could be:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1It81UpVzI/AAAAAAAAA0k/OkKahQvHhU8/s1600-h/n1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 120px; height: 115px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1It81UpVzI/AAAAAAAAA0k/OkKahQvHhU8/s320/n1.png" alt="" id="BLOGGER_PHOTO_ID_5427451024063944498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;while a bad one, because it has many matchings is:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1IuKZI_szI/AAAAAAAAA0s/T0ActpIkLo0/s1600-h/n4.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 115px; height: 64px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1IuKZI_szI/AAAAAAAAA0s/T0ActpIkLo0/s320/n4.png" alt="" id="BLOGGER_PHOTO_ID_5427451257017054002" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We are looking for stable features over changes of view points. One type of features that maintain this type of characteristic are Corners.&lt;br /&gt;The Harris Corner detector provides a mathematical tool for finding them.&lt;br /&gt;With an image patch, we can have the following cases:&lt;br /&gt;a) The patch represents a 'flat' zone.&lt;br /&gt;b)The patch represents an edge .&lt;br /&gt;c) The patch represents a corner .&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S1Iw7plfFxI/AAAAAAAAA00/E__091x9sZE/s1600-h/meow.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 84px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S1Iw7plfFxI/AAAAAAAAA00/E__091x9sZE/s320/meow.png" alt="" id="BLOGGER_PHOTO_ID_5427454302268364562" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A Flat region as we can see from the above image, presents no change in all directions, an edge presents no change along the edge direction, and a corner presents significant change in all directions. This means that if we shift the window of where we are gathering the  patch image, we should perceive a large change in appearance.&lt;br /&gt;The Harris Corner Detector gives us a way to determine which of the above cases hold.&lt;br /&gt;But how does it do it exactly???!&lt;br /&gt;&lt;br /&gt;The Harris Corner Detector utilizes the following expression:&lt;br /&gt;E (u,v)=∑ W(Xi,Yi)[I1(Xi+U,Yi+V)-I0(Xi,Yi)]^2&lt;br /&gt;W(Xi,Yi) is a window function. Which sets:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1JYEhIyJII/AAAAAAAAA1M/Fy4EezCSrlQ/s1600-h/window.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 97px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1JYEhIyJII/AAAAAAAAA1M/Fy4EezCSrlQ/s320/window.png" alt="" id="BLOGGER_PHOTO_ID_5427497335572800642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I0(Xi,Yi) is the intensity that is present in the pixel located in (Xi,Yi) and I1(Xi+U,Yi+V) is the intensity located in the pixel Xi+U,Yi+V it is called the shifted or displaced Intensity.&lt;br /&gt;It is easy to see that to detect corners, we want points where E(u,v) is very large.&lt;br /&gt;Using Taylor's first order approximation and matrix algebra the above expression can be rewritten as:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1JeIA4sGRI/AAAAAAAAA1U/MPiMZGwgO2I/s1600-h/E%28u%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 294px; height: 91px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1JeIA4sGRI/AAAAAAAAA1U/MPiMZGwgO2I/s320/E%28u%29.png" alt="" id="BLOGGER_PHOTO_ID_5427503992704604434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Where M is a 2x2 matrix computed from image derivatives.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/S1Jew6mlxeI/AAAAAAAAA1c/nvfBvyxxW-s/s1600-h/E%28u%29.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 91px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/S1Jew6mlxeI/AAAAAAAAA1c/nvfBvyxxW-s/s320/E%28u%29.png" alt="" id="BLOGGER_PHOTO_ID_5427504695392716258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The classification can be carried out by analyzing the eigenvalues of the M matrix.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/S1JguM_BkFI/AAAAAAAAA1k/FKvFn9mWSbc/s1600-h/eigenvalues.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 183px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/S1JguM_BkFI/AAAAAAAAA1k/FKvFn9mWSbc/s320/eigenvalues.png" alt="" id="BLOGGER_PHOTO_ID_5427506847810687058" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The measure of the corner response is actually set by:&lt;br /&gt;R=(determinant of M)+k(trace of M)^2&lt;br /&gt;Determinant of M=λ1λ2&lt;br /&gt;Trace of M=λ1+λ2&lt;br /&gt;K is an empirical constant that varies from .04-.06&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;For corners R tends to be very large.&lt;br /&gt;For edges, R tends to be a very large negative number.&lt;br /&gt;For flat areas R tends to zero.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7411107409358768313?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7411107409358768313/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7411107409358768313' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7411107409358768313'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7411107409358768313'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2010/01/harris-marris-whose-not-ferris-post.html' title='The Harris Marris whose not Ferris post...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_laFQZJU0vgA/S1Igjzmcr2I/AAAAAAAAAz8/liywFjYk1cQ/s72-c/img1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-2571367335013586514</id><published>2009-12-13T21:37:00.010-07:00</published><updated>2009-12-14T20:21:25.377-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reality Mining'/><category scheme='http://www.blogger.com/atom/ns#' term='my cellphone knows what I&apos;m doing'/><category scheme='http://www.blogger.com/atom/ns#' term='using my cellphone to spy'/><category scheme='http://www.blogger.com/atom/ns#' term='captura de informacion personal con el celular'/><category scheme='http://www.blogger.com/atom/ns#' term='espiando con el celular'/><title type='text'>Your cellphone can tell me what you did last summer</title><content type='html'>Our cellphones are nowadays an item, which  we are very much accustomed to bringing  along to every single place we go to. They  are also devices that are very similar to  little computers with  multiple sensors and interaction modalities, they are equipped with GPS, Bluetooth, accelerometers, cameras, microphones,magnetometers,keyboards, and touch-sensitive displays,they also have   great  computation power and memory,graphics capabilities, and various communications capabilities.&lt;br /&gt;All of these elements aside from providing a novel multi modal user interface experience  give the means through which cellphones are a  perfect device for tracing human activity.  With all of the cellphone's sensors, one can obtain a collection of data, that is related with what a person did through out the day, then by using data-mining algorithms one can infer human relationships and behaviors, this is often refereed to as&lt;span style="font-weight: bold;"&gt; Reality Mining&lt;/span&gt;. The MIT Media Lab gives a far more formal definition of what  Reality Mining is: &lt;span style="font-weight: bold;"&gt;"...R.M defines the collection of machine-sensed environmental data pertaining to human social behavior..."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://newworldodor.files.wordpress.com/2009/04/cell-phone-etiquette.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 501px; height: 333px;" src="http://newworldodor.files.wordpress.com/2009/04/cell-phone-etiquette.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The problem that is currently being faced  is to understand exactly how the joint use of multiple modalities,like for example  location and proximity to others, help understand a person’s routines. It is important to point out that many  issues actually   arise when one wishes  to understand patterns in the life of an individual. It is  not simple to automatically infer a person's activities as well as  eﬃciently represent them . For example, having a stay home alone Thursday  and  a Thursday of Beer Hotness with friends at your place define entirely different social situations, yet they could be considered identical from the sole perspective of location. It is thus very important to have detailed descriptions of  the activities done by a person for characterizing the  users and their habits.&lt;br /&gt;&lt;br /&gt;The big impact that reality mining has  on us, is that it is able to create models of individual as well as group behavior from the recollected data, this  could enable smart personal assistants, as well as  monitoring of personal and community health.&lt;br /&gt;&lt;br /&gt;References:&lt;br /&gt;http://reality.media.mit.edu/&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B4gV5GYvQzR1NjA2YmVkODMtZGMwYi00MjBjLTg0NDgtNDYzYzU5YjI0N2Zm&amp;amp;hl=en"&gt;http://docs.google.com/fileview?id=0B4gV5GYvQzR1NjA2YmVkODMtZGMwYi00MjBjLTg0NDgtNDYzYzU5YjI0N2Zm&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B4gV5GYvQzR1YjVkZmM0N2QtYzM3ZC00NGYzLTg0OTMtYTA2ZTFjNGZhOWIz&amp;amp;hl=en"&gt;http://docs.google.com/fileview?id=0B4gV5GYvQzR1YjVkZmM0N2QtYzM3ZC00NGYzLTg0OTMtYTA2ZTFjNGZhOWIz&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B4gV5GYvQzR1NTliNmYxM2MtNzM0Mi00NTViLWE2OGEtYzgzNjEzNzc3NWY1&amp;amp;hl=en"&gt;http://docs.google.com/fileview?id=0B4gV5GYvQzR1NTliNmYxM2MtNzM0Mi00NTViLWE2OGEtYzgzNjEzNzc3NWY1&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://docs.google.com/fileview?id=0B4gV5GYvQzR1Y2I1MjA1ZjAtMjNhYy00MmFhLWFlZjQtMDBkMGM2YTk3NWMy&amp;amp;hl=en"&gt;http://docs.google.com/fileview?id=0B4gV5GYvQzR1Y2I1MjA1ZjAtMjNhYy00MmFhLWFlZjQtMDBkMGM2YTk3NWMy&amp;amp;hl=en&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2571367335013586514?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2571367335013586514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2571367335013586514' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2571367335013586514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2571367335013586514'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/12/your-cellphone-can-tell-me-what-you-did.html' title='Your cellphone can tell me what you did last summer'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3471531660135001783</id><published>2009-11-11T11:45:00.019-07:00</published><updated>2009-11-13T11:22:40.379-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scratchbox'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia n900'/><category scheme='http://www.blogger.com/atom/ns#' term='Gstreamer tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='hola mundo en gstremear'/><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer'/><category scheme='http://www.blogger.com/atom/ns#' term='gstreamer for dummies'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='ARMEL'/><category scheme='http://www.blogger.com/atom/ns#' term='hello world in gstreamer'/><title type='text'>Creando tus propios programas de multimedia en la tablet del n900</title><content type='html'>Ya tengo por fin mi nuevo telefono!!&lt;br /&gt;Muchas gracias a mi querida universidad, la cual para una de las materias que estoy llevando consiguió una donación de nokia y nos regalaron a  todos los alumnos un n900!&lt;br /&gt;Las cosas sí que han sido ahora  divertidas =)&lt;br /&gt;&lt;br /&gt;Anyway,hoy hablaremos acerca de como utilizar gstreamer dentro del celular para poder hacer lindos programitas que puedan involucrar musica o incluso video! =)&lt;br /&gt;Para empezar es importante entender lo que es Gstreamer y como es que nos ayuda a hacer applicaciones multimedia.&lt;br /&gt;Gstreamer es un framework de multimedia que te ayuda a crear, editar y tocar multimedia al construir  unos "pipelines" (como líneas de ensamblaje)  que poseen elementos de multimedia. Simplemente se crea un pipeline, la cual posee muchos elementos que entre sí permiten que la musica se pueda tocar o que un video se pueda ver.  Funciona de un modo muy similar a como son las líneas de ensamblaje en Linux/BSD/UNIX.&lt;br /&gt;&lt;br /&gt;Con Gstreamer se atan a los elementos entre sí, y cada elemento lleva acabo algo en particular. Para demostrar esto, en una terminal escribe lo siguiente:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;foo@bar:~$ gst-launch-0.10 filesrc location=jeans-ilusion_primer_amor.mp3 ! decodebin ! audioconvert ! alsasink&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cuando la línea anterior se corre, se escucha de pronto la grandiosa melodía de &lt;span style="font-weight: bold;"&gt;"...ni lo amigos saben que es lo que me paaasa,(...)con la ilusión del primer amor desesperado te amoooo..."&lt;/span&gt; ...ah good times ñ_ñ.&lt;br /&gt;El comando  gst-launch-0.10 se puede utilizar para correr pipelines de GStreamer y cada elemento esta ligado entre sí mediante el símbolo !. Puedes pensar que el ! es similar al pipe | que usas en la línea de comandos normalmente.&lt;br /&gt;Ahora bien, como se pueden dar cuenta tenemos una serie de diversos elementos dentro de la línea de ensamblaje, estos son:&lt;br /&gt;* filesrc – Este elemento permite cargar archivos que esten dentro del disco duro. Al ladito de este elemento se debe poner la dirección y el archivo que se quiere cargar&lt;br /&gt;* decodebin – Necesitamos algo para poder descifrar al archivo que se acaba de cargar. Este elemento detecta el tipo de archivo con el cual deseamos trabajar y construye un elemento que lo decifrará.&lt;br /&gt;* audioconvert – El tipo de información que posee u archivo de sonido y el tipo de información que necesitamos salga de las bocinas son diferentes, así que usamos a este elemento para hacer un buen mapeo entre lo que se tiene en el archivo de sonido y lo que se escuchará.&lt;br /&gt;* alsasink – Este elemento escupe todo el audio a tu tarjeta de sonido usando ALSA.&lt;br /&gt;&lt;br /&gt;Me parece que ya es claro que Gstreamer trabaja como un línea de ensamblaje, cada elemento le da como entrada al siguiente elemento su salida.&lt;br /&gt;Ya que nos es claro que pex con Gstreamer, haremos ahora un pequeño código en C para probarlo.&lt;br /&gt;Haremos un pequeño hola_mundo.c para Gstreamer. Desde la línea de comandos diremos que queremos que se toque y deberíamos posteriormente escuchar la cancioncita =)&lt;br /&gt;El código, que usaremos es el siguiente:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;#include gst/gst.h&lt;br /&gt;#include stdbool.h&lt;br /&gt;&lt;br /&gt;static GMainLoop *loop;&lt;br /&gt;&lt;br /&gt;static gboolean bus_call (GstBus *bus,GstMessage *msg, gpointer user_data)&lt;br /&gt;{&lt;br /&gt;switch (GST_MESSAGE_TYPE (msg))&lt;br /&gt;{&lt;br /&gt;     case GST_MESSAGE_EOS:&lt;br /&gt;         {&lt;br /&gt;                     g_message ("End-of-stream");&lt;br /&gt; g_main_loop_quit (loop);&lt;br /&gt;          break;&lt;br /&gt;          }&lt;br /&gt;     case GST_MESSAGE_ERROR:&lt;br /&gt;       {&lt;br /&gt;                 gchar *debug;&lt;br /&gt;GError *err;&lt;br /&gt;      gst_message_parse_error (msg, &amp;amp;err, &amp;amp;debug);&lt;br /&gt;      g_free (debug);&lt;br /&gt;      g_error ("%s", err-&gt;message);&lt;br /&gt;      g_error_free (err);&lt;br /&gt;      g_main_loop_quit (loop);&lt;br /&gt;                 break;&lt;br /&gt;         }&lt;br /&gt;      default:&lt;br /&gt;          break;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;return true;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void play_uri (gchar *uri)&lt;br /&gt;{&lt;br /&gt;GstElement *pipeline;&lt;br /&gt;loop = g_main_loop_new (NULL, FALSE);&lt;br /&gt;pipeline = gst_element_factory_make ("playbin", "player");&lt;br /&gt;if (uri)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    g_object_set (G_OBJECT (pipeline), "uri", uri, NULL);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;     GstBus *bus;&lt;br /&gt;&lt;br /&gt;     bus = gst_pipeline_get_bus (GST_PIPELINE (pipeline));&lt;br /&gt;     gst_bus_add_watch (bus, bus_call, NULL);&lt;br /&gt;     gst_object_unref (bus);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_PLAYING);&lt;br /&gt;&lt;br /&gt; g_main_loop_run (loop);&lt;br /&gt;&lt;br /&gt;gst_element_set_state (GST_ELEMENT (pipeline), GST_STATE_NULL);&lt;br /&gt;gst_object_unref (GST_OBJECT (pipeline));&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;int main (int argc,char *argv[])&lt;br /&gt;{&lt;br /&gt;gst_init (&amp;amp;argc, &amp;amp;argv);&lt;br /&gt;&lt;br /&gt;play_uri (argv[1]);&lt;br /&gt;&lt;br /&gt; return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;hmmm...creo que no tengo mucho tiempo de explicar el código...&lt;br /&gt;Pero para compilarlo y probarlo, en la consola escriban:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;gcc -Wall -g gstreame.c   `pkg-config --cflags gtk+-2.0 gstreamer-0.10 gmodule-2.0` -o  gstreame   `pkg-config --libs gtk+-2.0 gstreamer-0.10` `pkg-config --libs gmodule-2.0`&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Ahora bien, si lo quieren probar en su tablet de n900, lo que deben hacer es abrir su scratchbox, utilizar el target u objetivo de ARMEL, ( se pueden cambiar a ese objetivo escribiendo desde scratchbox: &lt;span style="font-weight: bold;"&gt;sb-conf se FREMANTLE_X86&lt;/span&gt;) y desde allí compilar el archivo, una vez que se tenga compilado, mediante scp pasaremos el binario a nuestro celular y ese binario será lo que correremos.&lt;br /&gt;Para pasarlo a nuestra tableta de n900, es necesario primero saber el ip de nuestro celular, para hacerlo nos vamos al menu de applicaciones y hay un ícono que dice: More, ó Más, ó Mehr, dependiendo del idioma en que lo tengan configurado, dentro de ese ícono existe una ventanita negra, llamada X terminal, lo abrimos y tendremos la consola del celular! Allí simplemente escribimos ifconfig y apuntamos la dirección ip que se nos muestra.&lt;br /&gt;Ahora,desde nuestra PC en scratchbox en el target de ARMEL  escribimos:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;scp gstreame user@192.168.0.12:&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;en donde gstreame es el binario que queremos pasar a nuestra tableta y 192.168.0.12 es la dirección IP de nuestro celular.&lt;br /&gt;Para correrlo en la tableta n900, desde la consola X escribimos:&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;./gstreame "file://$PWD/test.wav"&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;En donde test.wav es el archivo que se escuchará. Es necesario escribirlo de esta forma debido a que el programa recibe una URL.&lt;br /&gt;Y con esto, ya hemos ehcho un pequeño programa que toca musica desde nuestro n900!&lt;br /&gt;&lt;br /&gt;Los dejo con un videito casero malo que hice,(non-ameteur porn) que muestra mi nuevo smart phone tocando una estación alemana, oh sí! el programa como recibe URI puede tocar estaciones de radio!! =)&lt;br /&gt;Felices Hackeos!&lt;br /&gt;&lt;object height="340" width="300"&gt;&lt;param name="movie" value="http://www.youtube.com/v/g8wH9XdcFfA&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/g8wH9XdcFfA&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="340" width="300"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;Otros Posts relacionados:&lt;br /&gt;&lt;a href="http://normasavage.blogspot.com/2009/10/quiero-ver-las-fotos-de-mi-amorcino.html"&gt;Programa para cargar Fotos a tu celular&lt;/a&gt;&lt;br /&gt;&lt;a href=" http://normasavage.blogspot.com/2009/09/como-hacer-un-holamundo-para-celulares.html"&gt;Hola mundo en celular&lt;/a&gt;&lt;br /&gt; &lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Refrencias:&lt;br /&gt;http://wiki.forum.nokia.com/index.php/GStreamer#&lt;br /&gt;http://bluwiki.com/go/GStreamer/C_Hello_World&lt;br /&gt;http://www.jonobacon.org/2006/08/28/getting-started-with-gstreamer-with-python/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3471531660135001783?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3471531660135001783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3471531660135001783' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3471531660135001783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3471531660135001783'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/11/ya-tengo-por-fin-mi-nuevo-telefono.html' title='Creando tus propios programas de multimedia en la tablet del n900'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3751233666145664868</id><published>2009-10-18T17:12:00.020-06:00</published><updated>2009-11-13T11:33:25.005-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nokia n900'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='como programar un celular'/><category scheme='http://www.blogger.com/atom/ns#' term='smart phone applications'/><category scheme='http://www.blogger.com/atom/ns#' term='GTK for dummies'/><category scheme='http://www.blogger.com/atom/ns#' term='UNAM'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>¡¡¡Quiero ver las fotos de mi amorcino desde mi celular!!!</title><content type='html'>Siendo que recibí muchas peticiones al respecto, he decido que expondré como hacer otra pequeña aplicación para el nokia n900.&lt;br /&gt;Hoy expondré cómo hacer un programa para visualizar imágnes.&lt;br /&gt;La dinámica es muy sencilla, el usuario en un textbox escribirá la dirección de la imágen que se desea visualizar y la aplicación buscará la imágen y la desplegará.&lt;br /&gt;&lt;br /&gt;En el &lt;a href="http://normasavage.blogspot.com/2009/09/como-hacer-un-holamundo-para-celulares.html"&gt;post anterior&lt;/a&gt; habia explicado como se podía hacer un pequeño hola_mundo.c para nuestro celular nokia n900, usaremos este mismo principio para hacer esta aplicación.&lt;br /&gt;Para hacer la parte gráfica usaremos GTK. Quien necesite más ayuda en entender que demónios es GTK, recomiendo esta &lt;a href="http://library.gnome.org/devel/gtk-tutorial/2.17/c39.html"&gt;lectura.&lt;/a&gt;&lt;br /&gt;Lo primero que haremos es el programa en C. Antes de emepzar el código, sería importante explicar como se manejan los eventos con GTK. Cuando digo eventos, me refiero al hecho de que el usuario oprima un botón por ejemplo. Cuando sucede algo así, debemos tener alguna manera de poder detectar que eso sucedió, y de decir, hmm el usuario oprimió el botón de enviar, entonces quiero,  por ejemplo, leer lo que el usuario escribió en el textbox, y procesar después esa información.&lt;br /&gt;Con GTK para poder hacer esto, lo que debemos hacer es conectar las señales que envía el botón (señales de que ya fue oprimido) con alguna función que hará lo que deseamos que suceda cuando se oprima ese botón. La función g_signal_connect, logra esto.&lt;br /&gt;La funcion recibe los siguientes parámetros:&lt;br /&gt;g_signal_connect(Objeto_Que_Emite_Las_Señales,tipo_de_señal_a_detectar,funcion_que_procesará_la_info,variable_a_procesar_en_la_funcion).&lt;br /&gt;En este caso, esa función, nos quedaría de la siguiente manera:&lt;br /&gt;&lt;span style="font-style: italic;"&gt;g_signal_connect (G_OBJECT(button), "clicked",G_CALLBACK (on_button_clicked),&amp;amp;valorcitos);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En donde on_button_clicked, es la función que procesará que se hará cuando se oprima el botón.Y valorcitos, es de hecho una estructura que guardará todos los valores que queremos modificar en la función cuando se oprima el botón. En este caso, se escojió una estructura, porque en sí, sólo se puede enviar una variable a la función de on_button_clicked. Pero en este caso, necesitamos minímo enviar dos: la variable de tipo imagen, y la variable de tipo textbox, pues necesitamos leer lo que el usuario escribió, y dependiendo de eso, desplegar la imagen adecuada.&lt;br /&gt;&lt;br /&gt;Resumiendo...Nuestro código nos quedaría de la siguiente forma:(Disculpen que los comentarios esten en inglés,no sé que me está sucediendo que programo ya con comentarios en inglés..:-(&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed rgb(21, 137, 255);"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Program that displays a desired image&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;specified by the user.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;by:saiph*/&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include  &lt;/span&gt;&lt;stdlib.h&gt;&lt;span style="font-family:courier new;"&gt; stdlib.h/* EXIT_* */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include stdio.h&lt;/span&gt;&lt;stdio.h&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* Introduce types and prototypes of GTK+ for the compiler. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include gtk/gtk.h&lt;/span&gt;&lt;gtk h=""&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*This struct will store some of the variables&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; that will be modified when the user clicks the button&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; */&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;struct values&lt;br /&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  GtkWidget *image;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *entry;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *vbox;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *table;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *label;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;};&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*The function that will say what will happen&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; when the user clicks the button, user_data stores&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; the variables  that we need to retrive from the main&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;function to play around with.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;G_MODULE_EXPORT void on_button_clicked(GtkButton *object, gpointer user_data)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gchar  *  name_file; /*gchar will store the name of the image that we wish to display*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;struct values *valorcitos;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valorcitos=user_data;/*we obtain a struct that stores the needed variables.*/&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;// we read the name of the image that the //user wants to display&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;name_file=(gchar*)gtk_entry_get_text(GTK_ENTRY&lt;br /&gt;(valorcitos-&gt;entry));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* we check to see if the image exists.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;If it does, we will display it!=)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;If not, we will print a label that says it doesn't&lt;/span&gt;&lt;span style="font-family:courier new;"&gt; */&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;if(g_file_test(name_file,&lt;br /&gt;G_FILE_TEST_EXISTS))&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*The image exists, we will first remove the previous image we had*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_container_remove(GTK_CONTAINER&lt;br /&gt;(valorcitos-&gt;vbox),valorcitos-&gt;image);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;g_print ("File found it is %s. \n",name_file);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*We read and assign the desired image to our variable image*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valorcitos-&gt;image=&lt;br /&gt;gtk_image_new_from_file((gchar*)&lt;br /&gt;name_file);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*We remove the pervious label we had, since it would say that&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;the image was not found. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_container_remove(GTK_CONTAINER&lt;br /&gt;(valorcitos-&gt;table),valorcitos-&gt;label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*We set the adequete value for our lable*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valorcitos-&gt;label = g_object_new(GTK_TYPE_LABEL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"label", "Ex:pumas.jpg or pics/1.jpg",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we place our lable adequetely where it belonged*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_table_attach_defaults((GtkTable * )valorcitos-&gt;table,valorcitos-&gt;&lt;br /&gt;label,0,1,2,3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we show our lable*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_widget_show(valorcitos-&gt;label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we place the image where it belongs*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_box_pack_start(GTK_BOX(&lt;br /&gt;valorcitos-&gt;vbox),(valorcitos-&gt;image),FALSE, FALSE,0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we show our image*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_widget_show(valorcitos-&gt;image);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*the image that the user wanted to see was&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;not found*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;g_print ("File not found. \n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we remove the lable we had, since we wnat to tell the user that the image was not found*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_container_remove(GTK_CONTAINER(&lt;br /&gt;valorcitos-&gt;table),valorcitos-&gt;label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* we prepare the lable to say that the image was not found*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valorcitos-&gt;label = g_object_new(GTK_TYPE_LABEL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"label", "That image was not found!",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we place the lable adequetly*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_table_attach_defaults((GtkTable * )valorcitos-&gt;table,valorcitos-&gt;&lt;br /&gt;label,0,1,2,3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_widget_show(valorcitos-&gt;label);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* we remove the previous image that we were displaying.*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;gtk_container_remove(GTK_CONTAINER(&lt;br /&gt;valorcitos-&gt;vbox),valorcitos-&gt;image);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int main(int argc, char** argv)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* we create a struct that will store the variables that we will use when the button is clicked.*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; struct values valorcitos;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* We create the other  GTK+ widgets which we will use */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWindow* window;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *label;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; GtkWidget *button;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  /* Initialize the GTK+ library. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  gtk_init(&amp;amp;argc, &amp;amp;argv);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* Create a window with window border width of 12 pixels and a&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; title text. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; window = g_object_new(GTK_TYPE_WINDOW,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; "border-width", 12,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; "title", "Image Viewer",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; NULL);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* Create the label widget. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; label = g_object_new(GTK_TYPE_LABEL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; "label", "Type in the address of the image:",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*Prepare the lable we will modify when the user clicks the button*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; valorcitos.label = g_object_new(GTK_TYPE_LABEL,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"label", "Ex:pumas.jpg or pics/1.jpg",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;NULL);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /*prepare the textbox*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;valorcitos.entry=gtk_entry_new();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; int  text_width =5;           // Width of field in characters&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_entry_set_width_chars(&lt;br /&gt;GTK_ENTRY(valorcitos.entry), text_width);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*prepare the image*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    valorcitos.image=gtk_image_new();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /*prepare the button*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    button=gtk_button_new_with_label("OK");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* connect the signals to the button, when clicked we will&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    call the on_button_clicked function and send in the struct valorcitos&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    that stores the variables we need to manipulate* */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    g_signal_connect (G_OBJECT(button), "clicked",&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;           G_CALLBACK (on_button_clicked),&amp;amp;valorcitos);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   /*We prepare a virtical box that will store a table and the image*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    valorcitos.vbox=gtk_vbox_new(FALSE,0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/*we prepare a table that will store the textbox,lables and button*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    valorcitos.table= gtk_table_new(1,1,TRUE);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   /*We pack the table with the variables */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  gtk_table_attach_defaults ((GtkTable * )valorcitos.table,label,0,1,0,1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_table_attach_defaults ((GtkTable * )valorcitos.table,valorcitos.entry,0,1,1,2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_table_attach_defaults((GtkTable * )valorcitos.table,valorcitos.label,0,1,2,3);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_table_attach_defaults((GtkTable * )valorcitos.table,button,1,2,1,2);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  /*we add the table to the vbox*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   gtk_box_pack_start(GTK_BOX(&lt;br /&gt;valorcitos.vbox),valorcitos.table, FALSE, FALSE, 0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   /*we add the image to the vbox*/&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   gtk_box_pack_start(GTK_BOX(&lt;br /&gt;valorcitos.vbox),valorcitos.image,FALSE, FALSE, 0);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* Pack the vbox into the window layout. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_container_add(GTK_CONTAINER(&lt;br /&gt;window), GTK_WIDGET(valorcitos.vbox));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* Show all widgets that are contained by the window. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_widget_show_all(GTK_WIDGET(&lt;br /&gt;window));&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* Start the main event loop. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; g_print("main: calling gtk_main\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; gtk_main();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;/* Display a message to the standard output and exit. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; g_print("main: returned from gtk_main and exiting with success\n");&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; /* The C standard defines this condition as EXIT_SUCCESS, and this&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; symbolic macro is defined in stdlib.h (which GTK+ will pull in&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; in-directly). There is also a counter-part for failures:&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; EXIT_FAILURE. */&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; return EXIT_SUCCESS;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/gtk&gt;&lt;/stdio.h&gt;&lt;/stdlib.h&gt;&lt;/div&gt;&lt;br /&gt;Con esto tenemos ya listo el codigo, y ahora sólo falta compilar y correrlo.&lt;br /&gt;Para ellos, llevaremos acabo los siguientes pasos.&lt;br /&gt;1)Correr Xephyr, para ello desde una terminal escribimos simplemente:&lt;br /&gt; Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac&lt;br /&gt;Y se nos deberá abrir una ventanita negra.&lt;br /&gt;2)Preparamos todo en scratchbox&lt;br /&gt;    -En otra terminal, escribimos /scratchbox/login&lt;br /&gt;    -Creamos el programa que ejutaremos: nano imagencitas.c&lt;br /&gt;     y alli pegaremos el código que acabamos de escribir.&lt;br /&gt;    - Compilamos el programa:&lt;br /&gt;      gcc -Wall -g imagencitas.c   `pkg-config --cflags gtk+-2.0 gmodule-2.0` -o  imagencitas   `pkg-config --libs gtk+-2.0` `pkg-config --libs gmodule-2.0`&lt;br /&gt;     -Preparamos el ambiente para dibujar en el Xephyr :&lt;br /&gt;      En una consola escribimos: export DISPLAY=:2 &lt;br /&gt;      af-sb-init.sh start&lt;br /&gt;&lt;br /&gt;     Y ahora simplemente con el siguiente comando correremos nuestro programa:&lt;br /&gt;run-standalone.sh ./imagencitas&lt;br /&gt;&lt;br /&gt;Y con esto deberíamos tener los siguiente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/Stu_0Fucc7I/AAAAAAAAATs/edDyjWQBT-Q/s1600-h/imagen1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/Stu_0Fucc7I/AAAAAAAAATs/edDyjWQBT-Q/s320/imagen1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5394115880317383602" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Allí el usuario ha escrito que quiere ver la Imágen Pumas, pero aun no aprieta el botón.&lt;br /&gt;Una vez que lo haya apretado tendríamos lo siguiente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/StvANQ2LljI/AAAAAAAAAT0/Z8t2_Uyc8zg/s1600-h/imagen2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/StvANQ2LljI/AAAAAAAAAT0/Z8t2_Uyc8zg/s320/imagen2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5394116312799352370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y si el usuario escribiera el nombre de una imágen que no existe dentro del sistema, recibiría lo siguiente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/StvAgUZdoTI/AAAAAAAAAT8/QAZLbnoug5s/s1600-h/imagen7.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/StvAgUZdoTI/AAAAAAAAAT8/QAZLbnoug5s/s320/imagen7.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5394116640170156338" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y así es como, se podría crear una aplicación para ver imágenes en el n900.&lt;br /&gt;Supongo que el código está medio sucio, pero es mi primera vez usando GTK y tengo además muchas otras responsabilidades...=(&lt;br /&gt;Espero seguir jugando con esto, y mejorando.&lt;br /&gt;Los dejo con la imágen de un comic, que me dió mucha risa:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/StvBRNeEa1I/AAAAAAAAAUM/Gg66nPlggRc/s1600-h/imagen3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/StvBRNeEa1I/AAAAAAAAAUM/Gg66nPlggRc/s320/imagen3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5394117480124017490" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;Otros Posts relacionados:&lt;br /&gt;&lt;a href="http://normasavage.blogspot.com/2009/10/quiero-ver-las-fotos-de-mi-amorcino.html"&gt;Programa para cargar Fotos a tu celular&lt;/a&gt;&lt;br /&gt;&lt;a href=" http://normasavage.blogspot.com/2009/09/como-hacer-un-holamundo-para-celulares.html"&gt;Hola mundo en celular&lt;/a&gt;&lt;br /&gt;&lt;a href="http://normasavage.blogspot.com/2009/11/ya-tengo-por-fin-mi-nuevo-telefono.html"&gt;Progama para tocar musica desde tu celular&lt;/a&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3751233666145664868?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3751233666145664868/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3751233666145664868' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3751233666145664868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3751233666145664868'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/10/quiero-ver-las-fotos-de-mi-amorcino.html' title='¡¡¡Quiero ver las fotos de mi amorcino desde mi celular!!!'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_laFQZJU0vgA/Stu_0Fucc7I/AAAAAAAAATs/edDyjWQBT-Q/s72-c/imagen1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-8011195169292643817</id><published>2009-09-24T21:58:00.022-06:00</published><updated>2009-11-13T11:31:35.365-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xephyr'/><category scheme='http://www.blogger.com/atom/ns#' term='celulares'/><category scheme='http://www.blogger.com/atom/ns#' term='scratchbox'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia n900'/><category scheme='http://www.blogger.com/atom/ns#' term='nokia'/><category scheme='http://www.blogger.com/atom/ns#' term='como programar un celular'/><category scheme='http://www.blogger.com/atom/ns#' term='CHINOOK_X86'/><category scheme='http://www.blogger.com/atom/ns#' term='UNAM'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>¿Cómo hacer un HolaMundo para celulares nokia n900?</title><content type='html'>Hoy desperté con un humor muy peculiar, sentí de pronto unas INMENSAS ganas de tener un celular nuevo, y cuando digo un celular nuevo, realmente me refiero a lo más más  nuevo. I'm talking about the NEW Nokia phone!&lt;br /&gt;Sí el neuvo celular de nokia, que aún no sale al mercado. (Yo ya tengo mi pre-order listissimo.)&lt;br /&gt;El nokia &lt;a href="http://maemo.nokia.com/n900/"&gt;n900.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="315" width="500"&gt;&lt;param name="movie" value="http://www.youtube.com/v/gHUwvaTmXWQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/gHUwvaTmXWQ&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0x006699&amp;amp;color2=0x54abd6&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="315" width="500"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;¿Que cosas tiene el n900?&lt;br /&gt;En su página algunas de las especificaciones son:&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div style="text-align: left;"&gt;&lt;span style="font-size:130%;"&gt;  *&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:100%;"&gt;Procesador de tipo ARM CortexTM-A8 corriendo a 600 MHz&lt;/span&gt;.&lt;/span&gt; El cual es el primer procesador de aplicaciones basado en la arquitectura ARMv7 y es actualmente el procesador con mejor rendimiento y más efficiente con respecto al consumo de energía que ARM ofrece.&lt;br /&gt;La arquitectura  ARMv7  también incluye la tecnología &lt;a class="inlinelink" href="http://www.arm.com/products/multimedia/neon/index.html"&gt;NEON&lt;/a&gt;™ para incrementar el procesamiento digital de señales que se tiene en un 400% !&lt;br /&gt;También  ofrece  una mejora en punto flotante, para poderse adaptar a las necesidades que existen con la siguiente generación de gráficos 3D, las leyes de física que se aplican a los   juegos, así como aplicaciones de control embebidas.( Un controlador embebido, término que de hecho NO conocía ja!, es un dispositivo que lleva acabo control embebdio...Y control embebido es  un subconjunto  de la adquisición de datos, esto es, el sistema de entrada/salida que se tiene no está conectado con una PC externa, sino que la PC o el procesador que está corriendo está realmente incorporado fisicamente con el dispositivo de entrada y salida.)&lt;br /&gt;&lt;/div&gt; &lt;span style="font-weight: bold;"&gt;*Hasta 1 GB de memoria para las aplicaciones&lt;/span&gt; (256 MB RAM, 768 MB memoria virtual)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Un sistema operativo de tipo Linux&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;* Un acelerador de gráficos 3D  con soporte para OpenGL ES 2.0 &lt;/span&gt;(Si son medios neewbies, como yo a esto, (which is totally cool too, en algun lado se empieza!) Un acelerador de gráficos es una especie de adaptador de video que contiene su propio procesador para mejor los niveles de rendimiento. Estos procesadores están especializados en las transformaciones de computo gráfico, así que alcanan mejores resultados que la  CPU de uso general type que usa la computadora. Además liberan el resto del CPU, para que pueda hacer otras operaciones, mientras que el acelerador de gráficos se encarga del trabajo sucio i.e. las computaciones gráficas.)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*32 GB en almacenamiento interno&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;*Pantalla de tipo Touch Screen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;...Y muchas muchas más cosas, que en la página oficial pueden checar...&lt;br /&gt;&lt;br /&gt;Entremos ahora a lo interesante.&lt;br /&gt;¿Cómo podría yo, una chica solitaria de ingeniería en la UNAM jugar a gusto con este dispositivo?&lt;br /&gt;&lt;br /&gt;-Hmmm, pensemos un rato...Thinking thinking thinking hard...Podría usarlo! Es lo suficientemente lindo para divertirte mucho si lo pudiera usar, además está lindo para presumirse en todos lados!...Peeero eres una estudiante de ingeniería de la UNAM... y en computación, así que a eso AUN le falta!!....mmmm...oh I know!...Programemosle una aplicación hecha por nosotros!!!&lt;br /&gt;&lt;br /&gt;Lo primero es que entendamos lo que queremos hacer:&lt;br /&gt;Queremos crear un ambiente  en el cual podamos probar y compilar aplicaciones que bajaremos al celular.Es entonces muy importante crear un ambiente que pueda compilar y correr programas tanto en plataformas ARM (la plataforma del celular)) como x86 (Plataforma de la PC). Debido a que el N800 corre en un procesador ARM, no podemos tomar los bianrios que se generen en nuestra máquina e insertarlos así nomás al celular y esperar que funcionen. No funcionará debido a que cada procesador tiene su PROPIO set de instruciones, así que el bianrio creado por un compilador en un procesador x86 no significará nada en un procesador ARM, es por esto que debemos agregar una capa de abstración:&lt;br /&gt;La solución es INSTALAR Scratchbox.&lt;br /&gt;Scratchbox  es un compilador cruzado (Un compilador cruzado según Wikipedia es un compilador capaz de crear código ejecutable para otra plataforma distinta a aquélla en la que él se ejecuta.)&lt;br /&gt;el cual hace el desarrollo de aplicaciones embebidas en Linux mucho más fácil, además de eso brinda una serie de herramientas para compilar cruzado e integrar toda una distribución de Linux.&lt;br /&gt;Con los siguientes 3 comando, se instalará scratchbox, se volverá ejecutable y después se correrá:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;wget http://repository.maemo.org/unstable/5.0beta2/maemo-scratchbox-install_5.0beta2.sh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;chmod +x maemo-scratchbox-install_5.0beta.sh&lt;/span&gt;&lt;br /&gt;(Entre este paso y el siguiente, recomiendo mucho salirse de su sesión actual que tienen en su máquina, en mi caso no cobró efecto imediatamente.)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;./maemo-scratchbox-install_5.0beta2.sh –u USER -F&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con estos pasos se debió haber instalado scratchbox  y haber recibido un mensaje como el siguiente:&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Installation was successful!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;----------------------------&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;You now have Scratchbox 1.1.4 'apophis' release installed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Scratchbox cannot be run as user root. Instead, use your normal login&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;user account. Add additional scratchbox users and sandboxes with the&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;following command (outside scratchbox with root permissions):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        # /scratchbox/sbin/sbox_adduser USER yes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Running this command will create sandbox environment for that user and&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;add user to the 'sbox' scratchbox user group.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;You will need to start a new login terminal after being added to the&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;'sbox' group for group membership to be effective.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Login to scratchbox session using the following command (as user):&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        $ /scratchbox/login&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Refer to scratchbox.org documentation for more information re scratchbox:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;http://scratchbox.org/documentation/user/scratchbox-1.0/&lt;/span&gt;&lt;br /&gt;saiph@ubunt:~$&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una vez que ya se corrió eso, en una terminal se debe escribir:&lt;br /&gt;~$ /scratchbox/login&lt;br /&gt;(Entre este paso y el anterior, recomiendo mucho salirse de la sesión actual que tienen en su máquina, en mi caso no cobró efecto imediatamente, y me dijo unas cosas acerca de que NO tenía los permisos para hacer esa operación)&lt;br /&gt;Con ese comando debe salir lo siguiente:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;You dont have active target in scratchbox chroot.&lt;br /&gt;Please create one by running "sb-menu" before continuing&lt;br /&gt;Welcome to Scratchbox, the cross-compilation toolkit!&lt;br /&gt;&lt;br /&gt;Use 'sb-menu' to change your compilation target.&lt;br /&gt;&lt;br /&gt;See /scratchbox/doc/ for documentation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;sb-conf: No current target&lt;br /&gt;&lt;br /&gt;[sbox-: ~] &gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Si ya se tiene el prompt de sbox es que se instaló scratchbox adecuadamente, ahora lo que se debe hacer es instalar el sdk de maemo dentro de nuestro entorno. (El sdk de maemo  nos permitirá desarrollar aplicaciones para el celular,recordemos que el n900 corre sobre el sistema operativo de maemo.)&lt;br /&gt;Para instalar se debe escribir:&lt;br /&gt;wget http://repository.maemo.org/unstable/5.0beta2/maemo-sdk-install_5.0beta2.sh&lt;br /&gt;chmod +x maemo-sdk-install_5.0beta2.sh&lt;br /&gt;./maemo-sdk-install_5.0beta2.sh&lt;br /&gt;&lt;br /&gt;Dentro de esta instalación, yo selecioné los valores que venían por default.&lt;br /&gt;Una vez que se termina la instalación se nos presenta en la consola un mensaje que dice lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nokia EUSA binaries&lt;br /&gt;&lt;br /&gt;-------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The package maemo-explicit is a metapackage of Nokia EUSA licensed&lt;br /&gt;&lt;br /&gt;binaries which can be installed to scratchbox targets. It is highly&lt;br /&gt;&lt;br /&gt;recommended to install this package on both targets to ensure a fully&lt;br /&gt;&lt;br /&gt;working system.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to install these, login to scratchbox (see commands above)&lt;br /&gt;&lt;br /&gt;and run the command 'fakeroot apt-get install maemo-explicit' for both&lt;br /&gt;&lt;br /&gt;armel (CHINOOK_ARMEL) and i386 (CHINOOK_X86) targets.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Happy hacking!&lt;br /&gt;&lt;br /&gt;Lo que este mensaje basicamente nos está diciendo es que el paquete que acabamos de instalar contiene binarios que se pueden instalar como objetivos o "targets" dentro de scratchbox.Un target u Objetivo dentro de Scratchbox es una "caja de arena" configurada.(y una "caja de arena" dentro de Scratchbox es simplemente un área definida para cada usuario.)&lt;br /&gt;Así que precisamente hagamos esto que nos dice el mensajito:&lt;br /&gt;Nos volvemos a meter a scratchbox:&lt;br /&gt;&lt;br /&gt;pete@ubunt:~$ /scratchbox/login&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Welcome to Scratchbox, the cross-compilation toolkit!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Use 'sb-menu' to change your compilation target.&lt;br /&gt;&lt;br /&gt;See /scratchbox/doc/ for documentation.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[sbox-CHINOOK_ARMEL: ~] &gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Instalaremos el paquete explicito de maemo, al correr lo siguiente:&lt;br /&gt;&lt;br /&gt;fakeroot apt-get install maemo-explicit&lt;br /&gt;&lt;br /&gt;Una vez que la actualización sucedió. nos debemos cambiar al otro obejtivo que está ya "build" al invocar el comando en el menu sb.Esto hara que salga un sistema de menu, y usanado las flechitas selecione la opcion de &lt;span style="font-weight: bold;"&gt;Activate a target&lt;/span&gt;, y escoje el ambiente que aun no se ha actualizado, en este caso es &lt;span style="font-style: italic;"&gt;   CHINOOK_X86&lt;/span&gt;. Se debe correr el mismo comando  de la vez pasada y ya deberíamos tener ambos ambientes listos calistos!&lt;br /&gt;&lt;br /&gt;Ahora lo probaremos graficamente:&lt;br /&gt;Abriremos otra terminal para probar graficamente que el sistema maemo está ya corriendo, también compilaremos un programa de prueba y lo correremos sobre el objetivo ARMEL .&lt;br /&gt;En la nueva terminal, correremos primero los siguientes comandos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sudo apt-get install xserver-xephyr&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Con este comando se instala el X server embebido, el cual se requiere para probar correr la emulación gráfica del N900.&lt;br /&gt;Posteriormente se deberá correr el siguiente comando:&lt;br /&gt;&lt;br /&gt;$ Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb &amp;amp;&lt;br /&gt;&lt;br /&gt;Con esto se prende el servidor  Xephyr .( el servidor Xephyr es un servidor basado en KDrive, KDrive es una pequeña implementación del server que hay en el sistema X Window.Xephyr tiene como objetivo o "target" de framebuffer  una  ventana localizada dentro de un host X Server.-&gt;Un framebuffer representa cada uno de los píxeles de la pantalla como localidades de memoria en RAM)&lt;br /&gt;Con esto lo que se verá es que se abrió  una nueva ventana:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/Sr0WRm-4LTI/AAAAAAAAAS0/1DL7XzMU8Dc/s1600-h/xephyr.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/Sr0WRm-4LTI/AAAAAAAAAS0/1DL7XzMU8Dc/s320/xephyr.png" alt="" id="BLOGGER_PHOTO_ID_5385485221182844210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;* Ahora entremos a Scratchbox y al objetivo de   X86.&lt;br /&gt;&lt;br /&gt;$ /scratchbox/login&lt;br /&gt;[sbox-&gt;:~]&gt; sb-conf se FREMANTLE_X86&lt;br /&gt;&lt;br /&gt;* Hacemos que la variable  DISPLAY corresponda a la configuración dada para el display que hay en el servidor   Xephyr.&lt;br /&gt;&lt;br /&gt;[sbox-FREMANTLE_X86: ~] &gt; export DISPLAY=:2&lt;br /&gt;&lt;br /&gt;* Prendemos el framework de la   IU (Interfaz de Usuario)  .&lt;br /&gt;&lt;br /&gt;[sbox-FREMANTLE_X86: ~] &gt; af-sb-init.sh start&lt;br /&gt;&lt;br /&gt;Con esto se verá el framework de la  UI lista y corriendo en la ventana Xephyr&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/Sr0gx5vibfI/AAAAAAAAAS8/dAk9pPwpxLE/s1600-h/maemo1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 180px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/Sr0gx5vibfI/AAAAAAAAAS8/dAk9pPwpxLE/s320/maemo1.png" alt="" id="BLOGGER_PHOTO_ID_5385496771090869746" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;El framework UI realmente es suuuper lindo. Después jugaremos más con él.&lt;br /&gt;Por ahora sólo quería que todos lo tuvieran trabajando. Regresemos a lo que queríamos hacer...&lt;br /&gt;Un aplicación "HolaMundo" para el n900:&lt;br /&gt;Abra otra terminal y vayas a su directorio de home y allí debes crear un nuevo archivo en el cual pegaremos lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;#include stdlib.h /* EXIT_* */&lt;br /&gt;#include stdio.h&lt;br /&gt;/* Introduce types and prototypes of GTK+ for the compiler. */&lt;br /&gt;#include &lt;gtk/gtk.h&gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char** argv) &lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;  /* We'll have two references to two GTK+ widgets. */&lt;br /&gt;  GtkWindow* window;&lt;br /&gt;  GtkLabel* label;&lt;br /&gt;  GtkWidget *image;&lt;br /&gt;&lt;br /&gt; /* Initialize the GTK+ library. */&lt;br /&gt;  gtk_init(&amp;argc, &amp;argv);&lt;br /&gt;&lt;br /&gt;  /* Create a window with window border width of 12 pixels and a&lt;br /&gt;     title text. */&lt;br /&gt;  window = g_object_new(GTK_TYPE_WINDOW,&lt;br /&gt;    "border-width", 12,&lt;br /&gt;    "title", "Hello GTK+",&lt;br /&gt;    NULL);&lt;br /&gt;&lt;br /&gt;  /* Create the label widget. */&lt;br /&gt;  label = g_object_new(GTK_TYPE_LABEL,&lt;br /&gt;    "label", "Hello World!",&lt;br /&gt;    NULL);&lt;br /&gt;&lt;br /&gt;  /* Pack the label into the window layout. */&lt;br /&gt;  gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(label));&lt;br /&gt;&lt;br /&gt;  /* Show all widgets that are contained by the window. */&lt;br /&gt;  gtk_widget_show_all(GTK_WIDGET(window));&lt;br /&gt;&lt;br /&gt;  /* Start the main event loop. */&lt;br /&gt;  g_print("main: calling gtk_main\n");&lt;br /&gt;  gtk_main();&lt;br /&gt;&lt;br /&gt;  /* Display a message to the standard output and exit. */&lt;br /&gt;  g_print("main: returned from gtk_main and exiting with success\n");&lt;br /&gt;&lt;br /&gt;  /* The C standard defines this condition as EXIT_SUCCESS, and this&lt;br /&gt;     symbolic macro is defined in stdlib.h (which GTK+ will pull in&lt;br /&gt;     in-directly). There is also a counter-part for failures:&lt;br /&gt;     EXIT_FAILURE. */&lt;br /&gt;  return EXIT_SUCCESS;&lt;br /&gt;}&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Guarda el archivo como maemo_hello.c. y copialo como se demuestra a continuación:(Se ha dejado mientras prendido el scratchbox, asi como se dejó corriendo la ventana Xephyr )&lt;br /&gt;&lt;br /&gt;cp maemo_hello.c /scratchbox/users/saiph/home/saiph/&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Observese donde esá su directorio de home dentro de scratchbox, ahora si en la ventana que tiene corriendo scratchbox escribes ls, deberás de ver un archivo maemo_hello.c dentro de tu directorio de home:&lt;br /&gt;[sbox-FREMANTLE_X86: ~] &gt; ls&lt;br /&gt;:~]     maemo-sdk-rootstrap_5.0beta2_armel.tgz  maemo_hello    sb-conf&lt;br /&gt;MyDocs  maemo-sdk-rootstrap_5.0beta2_i386.tgz   maemo_hello.c&lt;br /&gt;&lt;br /&gt;Y ahora usando el mismo comando de  sb-menu que habiamos usado antes,verificamos que estemos sobre el objetivo de ARMEL. (Esto hace que los binarios que compilemos sean hechos especificamente para el N800) .&lt;br /&gt;Ahora simplemente compilamos:&lt;br /&gt;gcc -o maemo_hello maemo_hello.c `pkg-config --cflags gtk+-2.0 hildon-1` -ansi -Wall `pkg-config --libs gtk+-2.0 hildon-1`&lt;br /&gt;&lt;br /&gt;El archivo bianrio  generado puede ser copiado a cualquier celular n900 y corrido sin ningun problema. Ahora lo unico que debemos hacer, es probarlo sobre nuestro ambiente de scratchbox (Que justamente está emulando el celular, tonz aunque no tengamos aun el celular, nos permitirá ver la aplicación como si se hubiese corrrido sobre el n900)&lt;br /&gt;Para probarlo, sobre la terminal que tiene el scratchbox, ponemos a la variable de display=2, lo cual como ya se explicó antes, provoca que se apunte al  Xephyr server, posteriormente corremos el script para prender el ambiente  de prueba de maemo:n&lt;br /&gt;export DISPLAY=:2&lt;br /&gt;&lt;br /&gt;af-sb-init.sh start&lt;br /&gt;&lt;br /&gt;Saldrán muchas letritas aqui, espera a que termine, y una vez listo aprieta enter, verás el prompt de scratchbox de regreso, y ahora ponremos:&lt;br /&gt;./maemo_hello&lt;br /&gt;Y finalmente deberás tener una ventanita similar a lo siguiente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_laFQZJU0vgA/Sr0qYy2jMBI/AAAAAAAAATE/_xvnFOCZ1PA/s1600-h/hello.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 180px;" src="http://2.bp.blogspot.com/_laFQZJU0vgA/Sr0qYy2jMBI/AAAAAAAAATE/_xvnFOCZ1PA/s320/hello.png" alt="" id="BLOGGER_PHOTO_ID_5385507334860779538" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Y así hemos hecho nuestro propio HolaMundo para celulares n900!! ñ_ñ&lt;br /&gt;OJO:Los pasos puestos en el blog, son para maquinas de 64 bits!!&lt;br /&gt;Refrencias:&lt;br /&gt;http://maemo.org/development/sdks/maemo_5_beta_2_sdk_installation/#close=1&lt;br /&gt;http://www.reviewlinux.com/forums/news/12492-pete-savage-howto-scratchbox-maemo-4-0-ubuntu-gutsy-nokia-n800-dev-environment.html&lt;br /&gt;&lt;/gtk&gt;&lt;/gtk&gt;&lt;/hildon&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 3px solid coral;"&gt;&lt;br /&gt;Otros Posts relacionados:&lt;br /&gt;&lt;a href="http://normasavage.blogspot.com/2009/10/quiero-ver-las-fotos-de-mi-amorcino.html"&gt;Programa para cargar Fotos a tu celular&lt;/a&gt;&lt;br /&gt;&lt;a href=" http://normasavage.blogspot.com/2009/09/como-hacer-un-holamundo-para-celulares.html"&gt;Hola mundo en celular&lt;/a&gt;&lt;br /&gt;&lt;a href="http://normasavage.blogspot.com/2009/11/ya-tengo-por-fin-mi-nuevo-telefono.html"&gt;Progama para tocar musica desde tu celular&lt;/a&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-8011195169292643817?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/8011195169292643817/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=8011195169292643817' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8011195169292643817'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8011195169292643817'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/09/como-hacer-un-holamundo-para-celulares.html' title='¿Cómo hacer un HolaMundo para celulares nokia n900?'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_laFQZJU0vgA/Sr0WRm-4LTI/AAAAAAAAAS0/1DL7XzMU8Dc/s72-c/xephyr.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-4586610543771102371</id><published>2009-06-27T00:20:00.008-06:00</published><updated>2009-08-25T11:52:11.946-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='beca anita borg para chicas'/><category scheme='http://www.blogger.com/atom/ns#' term='conferencias de Google'/><category scheme='http://www.blogger.com/atom/ns#' term='un tour por google'/><category scheme='http://www.blogger.com/atom/ns#' term='quiero visitr mountain view'/><title type='text'>BING== But It's Not Google</title><content type='html'>Ha sido una gran semana. A pretty amazing week.&lt;br /&gt;Me parece que lo mejor, fue tener un cierre tan agradable de la carrera. El fin de semana, específicamente de Jueves a Domingo, estuve en San Francisco y tuve la grandiosa oportunidad de visitar Google en Mountain View, y recibir charlas de muchos de sus proyectos actuales. La oportunidad de tener un viaje todo pagado, i.e. avion de México City-San Francisco, hospedaje en Hilton de SF, todas las comidas y transporte pagado, me fue brindado gracias a una de las becas que brinda esta compañía, más espicífico, es la beca de Google en memoria de Anita Borg. Anita Borg fue una revolucionaria en el campo de la computación. Ella buscó traer más mujeres a está área, ya que las mujeres siempre eran y hasta cierto punto, siguen siendo, una minoría. Anita murió de cancer en 2003, pero en su honor Google apoya a las mujeres en la tecnolgía. Google busca promover que estas chicas sobre salgan en la computación-tecnología y sean dentro de esta área  modelos a seguir...&lt;br /&gt;&lt;br /&gt;Mmmm...to make a long story short, creo que quiero ahora contar lo que viví en mi visita en Google.&lt;br /&gt;Un camión pasó, por todos los becari@s de Google, incluyendo  no sólo a las lindas  becarias de Anita Borg sino también  a todos los becaRI@s de los  demás grupos, (which you can check out &lt;a href="http://sites.google.com/site/scholarsretreat2009/finalist-facebook"&gt; here&lt;/a&gt; ) Llegamos a las 10 am y a las 10:15 el vice presidente nos dió una charla de bienvenida.&lt;br /&gt;Dentro de esta charla, se habló acerca de lo importante que era para Google tener diversidad. Dijo que contratando  los mejores talentos, diversidad en perspectivas, ideas y culturas llevaba a la creación de mejores productos y servicios brindados a los usuarios.&lt;br /&gt;También nos contó, que la compañía  estaba trabajando en un algoritmo para detectar cuando ciertos "cerebros"  se dejaban de sentir agusto en la compañía y querían por ende dejarla, renunciar a su empleo.  La compañía empezó a analizar en una fórmula matemática, información relacionada con los comentarios y promociones de los empleados así como de su historial de pago,para identificar cual  de sus 20,000 empleados tiene más probablidad de querer renunciar.&lt;br /&gt;Este algoritmo de retención, es una de las últimas medidas que ha adaptado Google para prevenir que sus mejores ingenieros, diseñadores, y ejecutivos de ventas se vayan.&lt;br /&gt;...I guess, other things were touched here, but I DO not remember them..:S&lt;br /&gt;Después de esta plática, llegó un &lt;a href="http://www.google.com/corporate/execs.html#laszlo"&gt;hindú guiad&lt;/a&gt;o por un labrador, pues era ciego este presentador,  y nos habló acerca del proyecto de "Eyes Free Android" El proyecto de Eyes-Free ( Ojos libres)  analiza lo siguiente: normalmente para usar tu celular es necesario que utilices dos de tus sentidos, el tacto y la visión. Sin embargo, existen muchas ocasiones en los cuales podrías tener tus ojos ocupados,  y por ende cualquier operación con el celular se dificulta, tal es el caso de cuando nos encontramos manejando. Se busca que el proyecto de Eyes Free se use cuando las personas NO pueden ver el display de su celular.&lt;br /&gt;Las aplicaciones que tiene Eyes Free son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Talking Dialer== Marcador Oral: una inovación que se tiene es que permite la marcación de números con una mano, sin ver, utilizando el touch screen. Funciona de la siguiente manera: El usuario presiona alguna parte de la pantalla, apartir de aquí se crea la matriz de numeros, se toma el lugar donde presionó el usuario como centro, y se localiza allí el 5, alrededor se situán los demás números del mismo modo en el cual suelen acomodarse. You know, 6 after 5, 2 above 5 etc. Además,  Cuando el usuario pasa sobre uno de los números, se escucha una voz que dice sobre que número se está pasando. De este modo, el usuario puede marcar un número telefónico sin necesidad de tener que ver la pantalla de su cel.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;/span&gt;Knowing Your Location==Conoce tu localización: Esta aplicación te dice tu localización actual, usando información adquirida mediante el GPS y la red del celular. Usando un compás magnético presente en la mayoría de los celulares, te dice también  si vas hacia el norte, sur, etc, y usando Google Maps te dice que edificios o localizaciones están cerca y que calles hay.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Aquí les presentó un pequeño video acerca de este proyetco:&lt;br /&gt;&lt;object height="364" width="445"&gt;&lt;param name="movie" value="http://www.youtube.com/v/dozYBEp8Ays&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/dozYBEp8Ays&amp;amp;hl=en&amp;amp;fs=1&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" height="364" width="445"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Después de esta charla, nos dividimos en diversas sesiones, cada sesión hablaba de algún producto en particular de Google. Podíamos escojer entre una charla acerca de android, otra acerca de chrome o la que yo elegí que fue Street view. La persona que dió la charla fue un &lt;a href="http://www.vincent-net.com/luc"&gt;Francés&lt;/a&gt;, que está actualemtne a cargo de este proyecto. Es una persona que tiene mucha experriencia y ha hecho mucha investigación en Visión y en Procesamiento digital de imágnes. Me parece que la mayoría de las personas, sabe de que se trata el proyecto de street view, sin embargo, no está demás dar un pequeño resumén de él. Con Street View, es posible ver fotografías a nivel calle,hacer paseos virtuales en diversas ciudades del mundo,encontrar tiendas, parques, hoteles etc.&lt;br /&gt;Google Street View surgió apartir de una idea  que tuvo Larry Page, el cual  equipado con su cámara, recorría las calles Standford filmando las calles y edificios. Esta idea crecio con la creacion de Google Maps.&lt;br /&gt;Ahora bien, a simple vista el proyecto de Street View, podria parecer un proyectp 2/3 sencillon, no es acaso un simple video en line de las calles que hay en el mundo?&lt;br /&gt;Sin embargo, existen realmente muchas cosas que se deben considerar y trabajar con ellas, dentro de este proyecto. Por ejemplo, cuando se esta decidiendo  como capturar la imagen de una calle, mientras se esta manejando,se puede  considerar lo siguiente:&lt;div&gt;El plano de una imagen normal proveniente de una camara produce un dibujo rectangular:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.csd.uoc.gr/%7Ecgarcia/JANUS/pinhole.gif"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 385px; height: 454px;" src="http://www.csd.uoc.gr/%7Ecgarcia/JANUS/pinhole.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Esto, no esta mal, sin embargo,cuando se tiene una camara que se encuentra en movimiento, este metodo no se puede usar, ya que cuando se rota la camara, cambian con este metodo las perspectivas que se tienen de los objetos, de un modo drastico,se cambian las percepeciones de los objetos. Es por esto, que es necesario utilizar otra tecnica. Una bastante util para estas situaciones es una  llamada Pushbroom. En esta tecnica lo que se hace es tomar un cacho vertical de la perspectiva rectagular, ubicada justo en frente de la camara y se recorta este cacho de la demas imagen. Asi mientras se mueve la camara, se tienen peque~os cachitos, los cuales se pueden unir, para producir asi una imagen cotinua, mientras la camara se mueve.&lt;br /&gt;Sin embargo, existen aqui algunos problemas con la profundidad, ya que cada cahito se ve como si uno estuviera viendo directamente a el. Y si cada cachito se une, no se observa por ende  la profundidad. La siguiente imagen muestra esto claramente:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mpi-inf.mpg.de/%7Elensch/proj/Autoperspective/thumb-teaser-pushbroom.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 1024px; height: 74px;" src="http://www.mpi-inf.mpg.de/%7Elensch/proj/Autoperspective/thumb-teaser-pushbroom.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;En esta imagen, los coches se amontonan y los callejones no tienen nada de profundidad. Google resolvio este problem, combinando la perspectiva de pinhole con la de pushbroom. La perspectiva en 'y' se mantiene, se optimizo la perspectiva obtenida en x en cda una de las imagenes segmentadas, con el fin de minimizar la distorcion.La siguiente imagen, muestra el uso de este metodo:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mpi-inf.mpg.de/%7Elensch/proj/Autoperspective/thumb-teaser-mpi.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 1024px; height: 74px;" src="http://www.mpi-inf.mpg.de/%7Elensch/proj/Autoperspective/thumb-teaser-mpi.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Observese que en esta imagen, la cual es una con multiples perspectivas, existe un punto de fuja en el callejon y un punto de fuja diferente en la interseccion.&lt;br /&gt;&lt;br /&gt;Bien, de este modo tenemos ya un flujo de imagene que realmente se ven en 3D, con profundidad y todo.Sin embargo en calles que no son lisas, como las que se tienen en San Francisco, este metodo hara que la imagen NO se vea real. Lo que hace Google para tomar calles empinadas es usar un jiroscopio para orientar a la camara, de modo que estos caminos mantienen el mismo angulo, a como si uno viniera caminando por una de esas lindas calles San fransicanas.=)&lt;br /&gt;&lt;iframe marginheight="0" marginwidth="0" src="http://maps.google.com/maps/sv?cbp=12,236.12,,0,-10.05&amp;amp;cbll=37.803421,-122.419916&amp;amp;panoid=&amp;amp;v=1&amp;amp;hl=en&amp;amp;gl=" frameborder="0" height="240" scrolling="no" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;small&gt;&lt;a href="http://maps.google.com/maps?cbp=12,236.12,,0,-10.05&amp;amp;cbll=37.803421,-122.419916&amp;amp;layer=c&amp;amp;ie=UTF8&amp;amp;ll=37.803486,-122.419914&amp;amp;spn=0,359.993734&amp;amp;z=17&amp;amp;panoid=dqY4BInVP0ngSxFBuQV9xg&amp;amp;source=embed" style="color: rgb(0, 0, 255); text-align: left;"&gt;View Larger Map&lt;/a&gt;&lt;/small&gt;&lt;br /&gt;&lt;br /&gt;Ahora bien, otra cosa interesante que esta aplicando Google a Street View, son numerosos filtros para que las imagenes que toma el auto de Google, se puedan ver con claridad independientemente de la hora del dia, en la que se hayan tomado. Entendi, que en numerosas ocasiones, toman varias veces una calle, y hacen una especie de promedio entre las fotos tomadas y la imagen resultante es la que se muestra. Se tambien, que analizan los caminos por los cuales, pasara el carro filmador de Google, para encontrar rutas mas cortas, y hacer todo del modo mas eficiente posible.&lt;br /&gt;En la conferencia, se hablo tambien de varios problemas tecnicos que se han presentado, como son los ajustes a  la camara, momentos en los cuales la camara apunta al sol e incluso brindar la suficiente energia para todas las actividades del auto. (El auto es alimentado, con muchas baterias!)&lt;br /&gt;&lt;br /&gt;Ahora bien, una de las cosas que mas me llamo la atencion del proyecto de Street View, fue el reciente trabajo que se ha puesto, para borrar las caras de las personas que salen en las calles y respetar asi cuestiones de seguridad. A pesar de que muchas camaras ya traen integrados aplicacones de deteccion de caras, hay que tomar en cuenta, que estas aplicaciones siempre llevan acabo la detecion cuando las personas, estan puestas de frente a la camara. Es decir, si las personas estan volteando, en alguna posicion en la cual el rostro no esta de frente a la camara,  la deteccion de rostro se vuelve bastante complicado. Lo peor de todo, es que estos casos, son los que mas se presentan en estas fotografias, las personas evidentemente NO estan posando para la foto. Muchas universidades han contribuido a solucionar este problema, Google tomo algoritmos elaborado por otras universidades, y elaboro un "out of the box detector" bastante robusto.Me habria agradado que hablara el frances mas acerca de este algoritmo, creo que tiene una publicacion del tema. But for now, ando en mi casa, y todos los articulos de la IEEE estan fuera de mi alcance :(&lt;br /&gt;Ire ma~ana a la UNAM, y lo intentare, chance commento mas acerca de esto. (Ma~ana es mi graduacion, para any stalker que quiera felicitarme ! n_n&lt;br /&gt;&lt;br /&gt;Hubo otra muy buena platica, que en otra ocasion hablare de ella, que trato acerca de las traducciones que hace Google, y como han encontrado que es mas eficiente, hacerlas basandose en mucha informacion de mapeo de frases. (Tu sabes, de documentos que vienen en dos idiomas&gt; Welcome to the XXX strip joint&gt; Bienvenido al table dance XXX....)que mejorando el algoritmo e traduccion tal cual. Basicamente lo que hacen, es que les llega una oracion, digamos: "Rainy days and sun days always get me down"&lt;br /&gt;Y la quieren traducir al espa~ol, lo que suelen hacer, es ir  calcuando, la probabilidad que una cierta traduccion sea equivalente  otra. Calculan la probablidad de ser de cada palabra en la oracion traducida. Se escojen siempre las palabras con la mayor probabilidad, la probabilidad de ser de cada palabra selecionada se selecciona basandose en el numero de veces que ese mapeo de palabras se dio, esto es, hacen una busqueda en la red, y buscaran el numero de veces que Rainy por ejemplo, haya tenido un mapeo con lluvioso. Se observan todos los mapeos encontrados en la red con la palabra, y a cada mapeo encontrado se asigna una probabilidad, basandose n el numero de veces que fue encontrado.Ahora bien, aun no se ha terminado, se calcula tambien la probabilidad que dicha palabra selecionaa, observada en el mapeo, en este caso lluvioso, sea adecuada segun la gramatica de la lengua a la cual se esta traduciendo. De hecho, a esta probabilidad le asignan un mayor peso.(lo elevan a 1.5, on lo que se pierde la propiedad que la probabilidad de uno, pero asi es como ha resultado ser mas eficiente.)&lt;br /&gt;Asi es como funciona la traduccion que brinda Google, se basan en datos encotnrados en la red =)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-4586610543771102371?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/4586610543771102371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=4586610543771102371' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4586610543771102371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4586610543771102371'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/06/bing-but-its-not-google.html' title='BING== But It&apos;s Not Google'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-1174844277795603934</id><published>2009-05-29T10:40:00.019-06:00</published><updated>2010-02-20T09:45:49.686-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dolly server'/><category scheme='http://www.blogger.com/atom/ns#' term='cloning with dolly'/><title type='text'>Servidor Dolly</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i41.photobucket.com/albums/e290/walski69/myAsylum%20Overflow/Larson-FarSide-WolfinSheepclothing.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 450px; height: 578px;" src="http://i41.photobucket.com/albums/e290/walski69/myAsylum%20Overflow/Larson-FarSide-WolfinSheepclothing.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Quien labora dentro de algún laboratorio donde se manejan numerosas máquinas, o quien trabaja en un Ciber-Cafe, se puede encontrar con la necesidad de querer configurar todas las máquinas del laboratorio o del ciber-café de la misma forma. Es decir que todas las máquinas tengan instalados los mismos programas y tengan asignados el  mismo tipo de  permisos.&lt;br /&gt;Claro esta que uno, podría ir máquina por máquina instalando todos los paquetes y poniendo en cada máquina todos los permisos necesarios. Sin embargo, esto se podría  convertir en un proceso muy tardado, además de que podría tener errores ya que la persona que está instalando los programas, podría de pronto olvidar instalar X programa o olvidar asignar Y permiso.&lt;br /&gt;&lt;br /&gt;Una solución mucho más cómoda a este problema es usar métodos de clonación de disco. Y así lo único que se hace es configurar una computadora con todas las aplicaciones necesarias y posteriormente clonar el disco ó partición de esta máquina a todas las demás que se desea que tengan esta configuración.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Pero, cómo se puede clonar un disco?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Bien, un método bastante amigable y directo de usar es &lt;span style="font-weight: bold;"&gt;Dolly&lt;/span&gt;. (Llamado como la famosa primera  oveja clonada)  Dolly se usa para clonar la instalación de una máquina a "n" máquinas que se desea.  Puede distribuir imágenes de archivos (isos) , particiones ó  discos duros enteros a otras particiones o discos duros. Debido a que para distribuir los datos forma un "anillo virtual TCP", funciona mejor dentro de redes  con un switch .&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;¿Cómo funciona?&lt;/span&gt;&lt;br /&gt;Existen  diversas maneras para distribuir la configuración de un "máquina principal" a todas las demás máquinas localizadas dentro del cluster. Una  modo sencillo y rápido es Dolly. Se envía la información alrededor de un anillo TCP virtual del server a todos los clientes que guardan y reciben los datos en sus discos duros.&lt;br /&gt;&lt;br /&gt;Una máquina es la principal y distribuye los datos a todos los demás. La máquina principal puede estar dentro del cluster o no. La máquina principal guarda la imagen del disco que se desea clonar  y debe estar dentro de la red que cuenta con un switch. ( Las demás máquinas también deben estar dentro de esta red.)Todas las demás máquinas son los clientes,  reciben los datos que circulan en el anillo, lo guardan dentro de su disco local y se lo pasan a la siguiente máquina en el anillo. El proceso de clonación se muestra en las siguientes dos figuras. Usualmente hay más de dos clientes, pero se puede sobre entender cómo funciona:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt; +--------+  +----------+ +----------+&lt;br /&gt;| Maestra|  | Cliente1 | | Cliente2 |&lt;br /&gt;+----+---+  +---|------+ +----+-----+&lt;br /&gt;\         |            /&lt;br /&gt;\    +---+----+      /&lt;br /&gt;+---+ Switch |-----+&lt;br /&gt;+--------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Aquí se muestra  como debe estar puesto físicamente la red para que se lleve acabo la clonación.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;+--------+  Datos   +----------+  Datos  +----------+&lt;br /&gt;| Maestra |--------&gt;| Cliente1 |-------&gt;| Cliente2 |&lt;br /&gt;+--------+         +----------+        +----------+&lt;br /&gt;^                   |                   |&lt;br /&gt;| Datos             | Datos              | Datos&lt;br /&gt;|                   V                   V&lt;br /&gt;+------+            +------+            +------+&lt;br /&gt;|Disco |            |Disco |            | Disco |&lt;br /&gt;+------+            +------+            +------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Aquí se muestra la red virtual que se forma durante la clonación. La máquina maestra envía los datos al cliente 1, este los guarda en su disco duro y después los deja circulando en el anillo, donde el cliente 2 los toma y los guarda en su disco duro.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Pasos para llevar acabo la clonación con Dolly:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Debemos tener una red en la cual estén todos nuestros clientes, así como nuestra computadora maestra. Es MUY  importante que la arquitectura de todas las computadoras   sea la misma. Todas las computadoras deberán tener comunicación entre si.&lt;br /&gt;2) Posteriormente   en cada una de las máquinas se deberá hacer lo siguiente: Bajar la última versión de Dolly, o la versión de Dolly  que más nos agrade. En este caso, se bajó de : &lt;span style="font-weight: bold;"&gt;http://www.cs.inf.ethz.ch/CoPs/patagonia/&lt;/span&gt;&lt;br /&gt;Lo que se baja de esta página, es un archivo .tar el cual deberá ser descomprimido. Una vez que se ha descomprimido se tienen una carpeta con  3 archivo, uno de tipo C , un makefile y un readme. El archivo .C se deberá compilar.¡ Y así ya se tiene listo el programa de Dolly!&lt;br /&gt;Lo siguiente que se deberá hacer es crear un archivo de configuración el cual será leído por el Dolly de la máquina maestra.  El archivo de configuración básicamente definirá que máquina será la maestra ó el servidor, quienes serán los clientes, qué es lo que se enviará, en qué parte del disco duro de los clientes se guardará lo que se recibe del anillo. Se recomienda que tenga la terminación de&lt;span class="Apple-style-span" style="font-weight: bold;"&gt; .cfg&lt;/span&gt;&lt;br /&gt;Nuestro archivo de configuración, por ejemplo  luce de la siguiente manera:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;infile /dev/sd2 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;outfile /dev/sd1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;server saiph&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;firstclient master-laptop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;lastclient ana-laptop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;clients 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;master-laptop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ana-laptop&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;endconfig&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;En la línea de infile se especifica el archivo/partición que se desea clonar,este archivo ó partición necesita estar sólo disponible para la máquina maestra.&lt;span style="font-weight: bold;"&gt;ES MUY IMPORTANTE RECORDAR,  QUE NO SE PUEDE CLONAR LA PARTICIÓN QUE ESTA EN USO Ó ESCRIBIR SOBRE UNA PARTICIÓN QUE ESTA EN USO.&lt;br /&gt;&lt;/span&gt;Es por esto, que es necesario poner un Live CD sobre la máquina que se clonará, (si es que se usa ella como la máquina maestra)  así como un Live CD en cada uno de los clientes.  Recordemos que mediante Dolly, se cambia todo el contenido de una máquina, y se le pone todo el contenido del disco duro que tenía la máquina maestra. No es posible, tener una máquina en uso y borrarle todo su contenido en la partición, el Live CD se monta y debido a que es el que está corriendo por encima, el Live CD es quien escribe  sobre la partición, la partición NO está en uso y se puede borrar. En este caso usamos el Live CD de la última version de  Ubuntu.&lt;br /&gt;&lt;br /&gt;Por otro lado en la línea donde aparece outfile, se  especifica en el cliente en dónde se escribirá los datos que se obtengan del anillo virtual.En este caso se optó por escribirlo en la partición 1 del disco del cliente.&lt;br /&gt;&lt;br /&gt;En la parte donde dice server, se pone el nombre que tiene la máquina maestra, para obtener el nombre de la máquina basta con usar el comando &lt;span style="font-weight: bold;"&gt;hostnam&lt;/span&gt;e en consola.&lt;br /&gt;Posteriormente se pone el nombre del primer cliente, (su nombre se obtiene también con el comando de hostname) así como el nombre del último cliente en el anillo. Se anota cuantos clientes estarán participando ,se  enlistan todos. Ahora bien, en este punto nos encontramos con un problema, en todas las máquinas teníamos montado el Live CD de Ubuntu, por ende el hostname de todas las máquinas era Ubuntu. Sin embargo, debido a que el algoritmo de Dolly utiliza la función de getHostname(), para empezar a transmitir los datos, es necesario que cada uno de los clientes tenga diferente "nombre", ya que existen  sino confusiones. Para cambiar el hostname se usan los siguientes comandos:&lt;br /&gt;hostname nuevoNombreAUsar&lt;br /&gt;source /etc/profile&lt;br /&gt;&lt;br /&gt;Con lo cual, el sistema ya tiene el nuevo nombre del cliente. Nos percatamos que en este caso, era necesario también avisarle a la máquina maestra de este cambio de nombre, porque en ocasiones no lograba encontrar al cliente.&lt;br /&gt;Para ello, es necesario configurar el archivo de /etc/hosts&lt;br /&gt;&lt;br /&gt;y agregar la siguinte linea&lt;br /&gt;direccionIPCliente nombreCliente&lt;br /&gt;lo cual se podría ver como:&lt;br /&gt;192.168.71.39 clientcito&lt;br /&gt;&lt;br /&gt;Después de que se han puesto todos los clientes que formarán parte del anillo, se escribe finalmente se usa "&lt;span class="Apple-style-span"  style="font-family:'courier new';"&gt;endconfig"&lt;/span&gt; para denotar el fin del archivo de configuración.&lt;br /&gt;&lt;div&gt;Este archivo de configuración se deberá tener en cada una de las máquinas que forma parte del anillo virtual.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;Finalmente  se deberá  empezar Dolly en cada uno de los clientes, no lleva parametros esa ejecución. Basta con escribir   "./dolly" en la consola. Dolly se inicia en el servidor o máquina maestra de la siguiente forma:&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"  style="font-family:'times new roman';"&gt;&lt;pre&gt;  dolly -v -s -f archivoConfiguracion.cfg&lt;/pre&gt;&lt;/span&gt;Y eso es todo =)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_laFQZJU0vgA/SindUIxMS0I/AAAAAAAAAQs/NYOPrSWWdi4/s1600-h/dolly1.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 320px; height: 180px;" src="http://4.bp.blogspot.com/_laFQZJU0vgA/SindUIxMS0I/AAAAAAAAAQs/NYOPrSWWdi4/s320/dolly1.png" alt="" id="BLOGGER_PHOTO_ID_5344045770872736578" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-1174844277795603934?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/1174844277795603934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=1174844277795603934' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1174844277795603934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/1174844277795603934'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/05/quien-labora-dentro-de-algun.html' title='Servidor Dolly'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i41.photobucket.com/albums/e290/walski69/myAsylum%20Overflow/th_Larson-FarSide-WolfinSheepclothing.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-134695663916484761</id><published>2009-05-26T22:00:00.005-06:00</published><updated>2009-05-26T22:14:18.871-06:00</updated><title type='text'>Well it's a marvelous night for a moondance..</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_0DWKgy7lShQ/SLxOu-s42XI/AAAAAAAAACY/_Uf3-UV_s7g/s320/moon_kiss.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 260px;" src="http://2.bp.blogspot.com/_0DWKgy7lShQ/SLxOu-s42XI/AAAAAAAAACY/_Uf3-UV_s7g/s320/moon_kiss.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Así que muchos de ustedes visitan mi blog, y no saben por qué se llama Marvelous night for a moondance. Well it comes from one of my favorite songs from all times.&lt;br /&gt;I guess I'll share it.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Moondance&lt;br /&gt;By Van Morrison&lt;/h2&gt;Well it's a marvelous night for a moondance&lt;br /&gt;With the stars up above in your eyes&lt;br /&gt;A fantabulous night to make romance&lt;br /&gt;'Neath the cover of October skies&lt;br /&gt;And all the leaves on the trees are falling&lt;br /&gt;To the sound of the breezes that blow&lt;br /&gt;And I'm trying to please to the calling&lt;br /&gt;Of your heart-strings that play soft and low&lt;br /&gt;You know the night's magic&lt;br /&gt;Seems to whisper and hush&lt;br /&gt;And all the soft moonlight&lt;br /&gt;Seems to shine in your blush...&lt;br /&gt;&lt;br /&gt;Can I just have one a' more moondance with you, my love?&lt;br /&gt;Can I just make some more romance with a' you, my love?&lt;br /&gt;&lt;br /&gt;Well I wanna make love to you tonight&lt;br /&gt;I can't wait till the morning has come&lt;br /&gt;And I know now the time is just right&lt;br /&gt;And straight into my arms you will run&lt;br /&gt;And when you come my heart will be waiting&lt;br /&gt;To make sure that you're never alone&lt;br /&gt;There and then all my dreams will come true dear&lt;br /&gt;There and then I will make you my own&lt;br /&gt;And every time I touch you, you just tremble inside&lt;br /&gt;And I know how much you want me that, you can't hide...&lt;br /&gt;&lt;br /&gt;Can I just have one  more moondance with you, my love?&lt;br /&gt;Can I just make some more romance with  you, my love?&lt;br /&gt;&lt;br /&gt;Well it's a marvelous night for a moondance&lt;br /&gt;With the stars up above in your eyes&lt;br /&gt;A fantabulous night to make romance&lt;br /&gt;'Neath the cover of October skies&lt;br /&gt;And all the leaves on the trees are falling&lt;br /&gt;To the sound of the breezes that blow&lt;br /&gt;And I'm trying to please to the calling&lt;br /&gt;Of your heart-strings that play soft and low&lt;br /&gt;You know the night's magic&lt;br /&gt;Seems to whisper and hush&lt;br /&gt;And all the soft moonlight&lt;br /&gt;Seems to shine in your blush...&lt;br /&gt;&lt;br /&gt;One more moondance with you&lt;br /&gt;In the moonlight&lt;br /&gt;On a magic night&lt;br /&gt;la, la, la, la, there's a moonlight&lt;br /&gt;On a magic night&lt;br /&gt;Can't I just have one more dance&lt;br /&gt;With you my love?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-134695663916484761?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/134695663916484761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=134695663916484761' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/134695663916484761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/134695663916484761'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/05/well-its-marvelous-night-for-moondance.html' title='Well it&apos;s a marvelous night for a moondance..'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_0DWKgy7lShQ/SLxOu-s42XI/AAAAAAAAACY/_Uf3-UV_s7g/s72-c/moon_kiss.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3459684748789391721</id><published>2009-05-17T23:34:00.005-06:00</published><updated>2009-05-21T19:37:57.502-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mitos urbanos de las WLAN'/><title type='text'>Los top 3 métodos más estúpidos para brindar seguridad a una WLAN</title><content type='html'>&lt;ol&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Filtrado por MAC:&lt;/span&gt; Este método es similar  a  darle a un guardia de seguridad una hojita con una lista de nombres. Posteriomente cuando alguien llega a la puerta y busca entrar, el guardia de seguridad ve el gafete con nombre que la persona trae y comparará este con su lista de nombres. El problema aquí es claro. Lo único que un extraño necesita hacer para entrar es robarse el gafete de alguien que SÍ este autoriado para entrar. La comparación con una red WLAN es que el gafete con el nombre de la persona es la dirección MAC.  La dirección MAC es tan sólo un numero HEX de 12 dígitos que se puede obtener de una máquina externa mediante el uso de  un sniffer. Una vez que la dirección MAC  de una máquina en la red se tiene, en  menos de 10 segundos se puede cortar y pegar la dirección MAC obtenida, en la configuración del adaptador de ethernet inalámbrico y así penetrarse  en la red.  Filtrar mediante MAC es inutil, ya que es uno de los esquemas  que más facilmente se pueden atacar, gracias al hecho de que es posible clonar direcciones MAC. ( Es interesnate notar, que la clonación de direcciones MAC  es permitido debido a que en ocasiones es necesario debido a cuestiones de configuración de ISP)&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Esconder SSID :&lt;/strong&gt;Dentro de la  configuración web de muchos routers, existe una pestaña titulada: Wireless y entro de esta pestaña, existen varias sub-pestañas que brindan más elementos a configurar. Uno de ellos es el   permitir o no, el broadcast  del SSID. Es interesante aquí  notar que uno podría pensar que escondiendo el SSID  se podría estar “ a salvo”  y  se tendría  un buena técnica  para resguardar a la  red inalámbrica. Sin embargo realmente no existe ninguna manera de esconder el SSID.Existen otros 4 mecanismos que transmiten el SSID sobre el espectro de 2.4 o  5 GHz:  probe requests, probe responses, association requests, y re-association requests. Así que en escencia se está escondiendo 1 de los 5 mecanismos para trasmitir el SSID.  Nada realmente se esconde y lo único que se ha ganado es causar problemas en el roaminf de Wi-Fi cuando u cliente pasa de un AP a otro.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Localización de la antena:&lt;/strong&gt; Hay personas que dicen, que para detener a los hackers se debe poner  el  Punto de Acceso o AP en el centro del edificio donde tienen su WLAN y ponerlo a trabajar a su potencia mínima. Esto, definitivamente NO detenrá a los hackers ya que ellos siempre contarpan con una antena mayor  que nosotros, y podrán captar nuestra señal desde sus casas situadas a 1km de distancia. Hacer más débil la WLAN tan sólo sirve para hacer la WLAN inservible. La localización y potencia de la antena se debe seleccionar para que cubra lo máximo y presenta la menor interferencia posible. Nunca se debería utilizar como un mecanism de seguridad!&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Aclaraciones:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Es importante comentar que no se consideró a  la seguridad WEP dentro de "Los top 3 métodos más estúpidos para brindar seguridad a una WLAN"  ya que a pesar de que tan sólo toma un par de minutos romper en una red que utiliza seguridad WEP, romper una WEP  requiere de mucha más técnica, no es tan sencillo  lanzar los ataques por inyección de paquetes y además toma un poco más de tiempo que ingresar  a una red que utiliza el filtrado por MAC.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3459684748789391721?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3459684748789391721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3459684748789391721' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3459684748789391721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3459684748789391721'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/05/los-top-3-metodos-mas-estupidos-para.html' title='Los top 3 métodos más estúpidos para brindar seguridad a una WLAN'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7890028531884765959</id><published>2009-05-09T11:30:00.014-06:00</published><updated>2009-05-09T17:29:00.819-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='favorite poems'/><category scheme='http://www.blogger.com/atom/ns#' term='favorite love poems'/><category scheme='http://www.blogger.com/atom/ns#' term='poemas de amor en ingles'/><category scheme='http://www.blogger.com/atom/ns#' term='poems in your life'/><title type='text'>Top 5 favorite love poems</title><content type='html'>It's been a while since I've had a chance to read poetry. I used to be a big fan of it, and also enjoyed writing some of my own. Unfortunately I don't really know why I haven't given Poetry much time or thought anymore. All my "artistic and cultural time" is spent in learning German and some Philosophy books, Poetry has long been forgotten.&lt;br /&gt;&lt;br /&gt;So, I wanted to give a moment to remember some of my favorite English poems. I like them because they are simple and express many of the feelings that I have gone through.&lt;br /&gt;I will list them in a time period, listing the year in which I identified with what the poem said. They are not showed in a Likeness order, they are showed in reference to the chronology of my Life.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;5)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed rgb(21, 137, 255); width: 345px; height: 400px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;"After the Lunch" by Wendy Cope-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Late May 2005&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;On Waterloo Bridge, where we said our goodbyes,&lt;br /&gt;the weather conditions bring tears to my eyes.&lt;br /&gt;I wipe them away with a black woolly glove&lt;br /&gt;And try not to notice I've fallen in love.&lt;br /&gt;&lt;br /&gt;On Waterloo Bridge I am trying to think:&lt;br /&gt;This is nothing. you're high on the charm and the drink.&lt;br /&gt;But the juke-box inside me is playing a song&lt;br /&gt;That says something different. And when was it wrong?&lt;br /&gt;&lt;br /&gt;On Waterloo Bridge with the wind in my hair&lt;br /&gt;I am tempted to skip. You're a fool. I don't care.&lt;br /&gt;the head does its best but the heart is the boss-&lt;br /&gt;I admit it before I am halfway across.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;4)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 2px dashed rgb(167, 74, 199); width: 345px; height: 550px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Lover of Friend? by Liz Loxley-&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;March 2006&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Whether I came&lt;br /&gt;As lover or friend&lt;br /&gt;I lacked the certainty&lt;br /&gt;of a relationship.&lt;br /&gt;&lt;br /&gt;I know we kissed&lt;br /&gt;and we held hands&lt;br /&gt;but lover and friends&lt;br /&gt;make both demands.&lt;br /&gt;&lt;br /&gt;We shared some wine&lt;br /&gt;We shared some bread&lt;br /&gt;and later on&lt;br /&gt;we shared your bed.&lt;br /&gt;&lt;br /&gt;But we shared no knowledge.&lt;br /&gt;of who we were&lt;br /&gt;In the social terms of&lt;br /&gt;"Are he and her?"&lt;br /&gt;&lt;br /&gt;We shared the darkness&lt;br /&gt;The sounds from the street&lt;br /&gt;And sometime in the night&lt;br /&gt;A hand crossed the sheet.&lt;br /&gt;&lt;br /&gt;"Halt who goes there?&lt;br /&gt;Lover or friend?"&lt;br /&gt;In the darkness I recognize you&lt;br /&gt;As one and the same.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;3)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;table style="background-color: rgb(255, 102, 102);" frame="box"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;We'll go no more a-roving&lt;br /&gt;Lord Byron- late June 2006&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;br /&gt;So, we’ll go no more a roving&lt;br /&gt;So late into the night,&lt;br /&gt;Though the heart be still as loving,&lt;br /&gt;And the moon be still as bright.&lt;br /&gt;&lt;br /&gt;For the sword outwears its sheath,&lt;br /&gt;And the soul wears out the breast&lt;br /&gt;And the hearth must pause to breathe,&lt;br /&gt;And love itself have rest.&lt;br /&gt;&lt;br /&gt;Though the night was made for loving,&lt;br /&gt;And the days return too soon,&lt;br /&gt;Yet we’ll go no more a roving&lt;br /&gt;By the light of the moon.&lt;br /&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;2)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px dashed rgb(56, 124, 68); width: 345px; height: 550px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Being Boring -Wendy Cope&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;March 2007&lt;/span&gt;&lt;br /&gt;"may you live in interesting times" - Chinese curse&lt;br /&gt;If you ask me "What's new?" - I have nothing to say&lt;br /&gt;Except that the garden is growing.&lt;br /&gt;I had a slight cold but it's better today.&lt;br /&gt;I'm content with the way things are going.&lt;br /&gt;Yes, he is the same as he usually is,&lt;br /&gt;Still eating and sleeping and snoring.&lt;br /&gt;I get on with my work, he gets on with his. I&lt;br /&gt;know this is all very boring.&lt;br /&gt;&lt;br /&gt;There was drama enough in my turbulent past:&lt;br /&gt;Tears and passion - I've used up a tankful.&lt;br /&gt;No news is good news, and long may it last.&lt;br /&gt;If nothing much happens, I'm thankful.&lt;br /&gt;A happier cabbage you never did see,&lt;br /&gt;my vegetable spirits are soaring.&lt;br /&gt;If you're after excitement, steer well clear of me.&lt;br /&gt;I want to go on being boring.&lt;br /&gt;&lt;br /&gt;I don't go to parties. Well, what are they for,&lt;br /&gt;if you don't need to find a new lover?&lt;br /&gt;You drink and you listen and drink a bit more&lt;br /&gt;And you take the next day to recover.&lt;br /&gt;Someone to stay home with was all my desire&lt;br /&gt;And, now that I've found a safe mooring,&lt;br /&gt;I've just one ambition in life, I aspire&lt;br /&gt;To go on and on being boring.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;1)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="border: 2px dashed rgb(247, 93, 89); width: 345px; height: 350px;"&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Please Please Me - James Kelly&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;April-2009&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Promise never to leave me&lt;br /&gt;lie, cheat or otherwise deceive me&lt;br /&gt;And don't run around with my best friend&lt;br /&gt;it would drive me daft - clean round the bend.&lt;br /&gt;&lt;br /&gt;If I'm bad in bed please fake it&lt;br /&gt;Never tell the truth, I couldn't take it.&lt;br /&gt;Don't ignore me when I greet you&lt;br /&gt;and please turn up when I'm waiting to meet you.&lt;br /&gt;&lt;br /&gt;Don't break my heart and steal my pride.&lt;br /&gt;Tear me apart and kill me inside.&lt;br /&gt;Because that's the day I'll turn and flee&lt;br /&gt;The day you turn round and behave like me.&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7890028531884765959?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7890028531884765959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7890028531884765959' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7890028531884765959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7890028531884765959'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/05/top-5-favorite-love-poems.html' title='Top 5 favorite love poems'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6479223728591913741</id><published>2009-05-04T10:55:00.004-06:00</published><updated>2009-05-04T11:00:23.638-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='diferencia entre TCP y UDP'/><category scheme='http://www.blogger.com/atom/ns#' term='ducking sockets'/><title type='text'>¿Cuál es la diferencia entre TCP y UDP????</title><content type='html'>Existen 2 protocolos muy populare para transferir datos por internet. Estos son el protocolo TCP y el protocolo UDP.&lt;br /&gt;¿Cual es la diferencia entre estos dos protocolos??&lt;br /&gt;&lt;br /&gt;1)El protocolo UDP, a diferencia de lo mucho que hace el protocolo tcp, es de lo más simple. Aparte de la función de multiplexeo/demultiplexing y alguna revisión mínimo de errores, no adiciona nada nuevo al IP. De hecho si el programador selecciona usar UDP en vez de TCP, entonces la aplicación tendrá interación casi directa con IP. UDP toma mensajes de applicaciones, para los servicios de multiplexeo/demultiplexing adiciona los campos de puerto fuente y puerto destino,agrega también 2 otros campos que no poseen mucha importancia y entrega el segmento resultante a la capa de red.&lt;br /&gt;La capa de red encapsula al segmento en un datagrama de IP, y después hace su máximo esfuerzo por entregar el segmento al host correspondinete. Si el segmento llega de forma satisfactoria con el host, UDP entrega los números de puerto,la direcciónn de IP de la fuente, y la dirección de IP del destino a la aplicación de proceso correspondiente.&lt;br /&gt;Es importante notar, que con UDP antes de enviar los datos, no existe ningún tipo de handshaking entre las entidades que envían y reciben datos. Es por esto que se dice que UDP trabaja sin conxión.&lt;br /&gt;TCP a diferencia de UDP utiliza 3 modos distintos de handshake antes de empezar a transferir datos. UDP sólo empieza a transferir sin dar preliminares formales. Por lo anterior es claro que UDP no introduce ningún tipo de retraso cuando envia información. UDP es por ende más rápido que TCP.&lt;br /&gt;&lt;br /&gt;Por otro lado, TCP mantiene el estado de conexión de todas sus terminales. Este estado de conexión incluye buffers enviados,bufers recibidos, control de parametros de congestión, parametros de acknowledgment, o reconocimiento. ( Esta información es muy útil para TCP, lo utiliza para tener un transfernecia de datos muy confiable, además le brinda control en momentos de congestión.)&lt;br /&gt;UDP no mantiene ningún estado de conexión y no guarda ninguno de estos parametros. Por ende, un servidor devoto a una aplicación en partícular puede tener más clientes activos cuando la aplicación corra sobre UDP que cuando corra sobre TCP.&lt;br /&gt;&lt;br /&gt;El segmento de TCP posee un segmento de cabecera de 20 bytes, mientras que el segmento UDP sólo posee una cabecera de 8 bytes.&lt;br /&gt;&lt;br /&gt;TCP cuenta con un mecanismo de control de congestión , que acelera al transmisor cuando 2 ó más links ó ligas entre el transmisior o receptor se tornan excesivamente congestionadas. Esta aceleración puede tener un impacto severo en aplicaciones a tiempo real que pueden tolerar perdidas en sus paquetes, pero requieren usar una cierta tasa de transferencia.&lt;br /&gt;Con respecto a UDP, para enviar datos la única restricción que presenta en la velocidad de envió, es el ciclo de reloj que posee la CPU desde la cual se están enviando los datos, así como el ancho de banda de acceso a Internet. Aunque debemos tomar en cuenta, que el host receptor no necesariamente recibirá todos los datos que se envían, cuando la red está congestiondada. Una fracción significante de los datos transmitidos se podrían perder debido a un sobreflujo del buffer del router. Por ende, la tasa de recpeción, está limitada por la congestión de la red, aun cuandp la tasa de envió no este restringida.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.skullbox.net/udp.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 300px;" src="http://www.skullbox.net/udp.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.skullbox.net/tcp.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 400px; height: 300px;" src="http://www.skullbox.net/tcp.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6479223728591913741?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6479223728591913741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6479223728591913741' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6479223728591913741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6479223728591913741'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/05/cual-es-la-diferencia-entre-tcp-y-udp.html' title='¿Cuál es la diferencia entre TCP y UDP????'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7120395874135381413</id><published>2009-04-17T17:38:00.003-06:00</published><updated>2009-04-18T07:16:45.216-06:00</updated><title type='text'>Como monitoreo un dispositivo con MRTG?</title><content type='html'>En el post anterior explicamos como monitorear el wireless asi como el ethernet de nuestra maquina. Sin embargo, puede suceder que por alguna loca razon queramos monitorear nuestra impresora , o nuestro switch, o nuestro router.&lt;br /&gt;&lt;br /&gt;Para hacerlo, hay que llevar acabo algunos pasos un poco diferentes a los que ya antes hicimos.&lt;br /&gt;Partiremos ahora, que ya se tiene instalado MRTG,SNMP y APACHE2.&lt;br /&gt;Dentro del archivo de snmpd.conf  se debe agregar lo siguiente:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rocommunity public 192.168.3.0/24&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;rwcommunity private 192.168.3.100&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;donde 192.168.3.0/24 es el rango de IP que su maquina puede tener, y  192.168.3.100 es la IP que tiene el dispositivo que quieren monitorear.&lt;br /&gt;&lt;br /&gt;Dentro de Ubuntu, MRTG  automaticamente crea  /var/www/mrtg. En otras distribuciones, se crea en una area diferente, asi que se debe cambiar la variable  'WorkDir:'  al escenario en donde MRTG este instalado.&lt;br /&gt;&lt;br /&gt;En este caso, para evitar confusiones, creare un directorio /etc/mrtg en vez de mover el archivo mrtg.cfg a /etc/.&lt;br /&gt;&lt;p style="font-family: courier new;"&gt;mkdir /etc/mrtg&lt;/p&gt; &lt;p style="font-family: courier new;"&gt;mv /etc/mrtg.cfg /etc/mrtg/&lt;/p&gt;&lt;p&gt;Ahora corremos el comando de cfgmaker para tener las cosas listas y corriendo:&lt;/p&gt; &lt;p&gt;cfgmaker --global 'WorkDir:/var/www/mrtg' --global 'Options[_]: bits,growright' --output /etc/mrtg/mrtg.cfg public@&lt;elipdetudispositivo&gt;&lt;/elipdetudispositivo&gt;&lt;/p&gt; &lt;p&gt;Tenemos tambien que ver que las siguientes  lineas se hayan agregado correctamente al archivo de  /etc/mrtg/mrtg.cfg Si no estan alli, entocnes se deben agregar:&lt;/p&gt; &lt;p style="font-family: courier new;"&gt;EnableIPv6: no&lt;br /&gt;RunAsDaemon: Yes&lt;br /&gt;Interval: 5&lt;br /&gt;Logdir: /var/log/mrtg&lt;/p&gt;&lt;p&gt;Ahora corre:&lt;br /&gt;&lt;/p&gt; &lt;p&gt;indexmaker --output=/var/www/mrtg/index.html /etc/mrtg/mrtg.cfg&lt;/p&gt; &lt;p&gt;Lo cual creara un index.html , para que se pueda ver la salida.&lt;/p&gt; &lt;p&gt;Despues corro este comando, para preparar una variable de entorno. (similar al comando mrtg que corriamos el post pasado.)&lt;/p&gt; &lt;p style="font-family: courier new;"&gt;env LANG=C /usr/bin/mrtg /etc/mrtg/mrtg.cfg&lt;/p&gt; &lt;p&gt;Finalmente abra :  &lt;a href="http://localhost/mrtg/index.html" title="http://localhost/mrtg/index.html"&gt;http://localhost/mrtg/index.html&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Deberias de poder ver una grafiquita. Espera un rato para verla en accion!&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/SenQtCgpQtI/AAAAAAAAAQU/TD0mxwLW-_E/s1600-h/screen"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/SenQtCgpQtI/AAAAAAAAAQU/TD0mxwLW-_E/s320/screen" alt="" id="BLOGGER_PHOTO_ID_5326017506528805586" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7120395874135381413?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7120395874135381413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7120395874135381413' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7120395874135381413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7120395874135381413'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/04/como-monitoreo-un-dispositivo-con-mrtg.html' title='Como monitoreo un dispositivo con MRTG?'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_laFQZJU0vgA/SenQtCgpQtI/AAAAAAAAAQU/TD0mxwLW-_E/s72-c/screen' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6968295338616399360</id><published>2009-04-12T20:00:00.003-06:00</published><updated>2009-04-12T23:48:57.093-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='snmp'/><category scheme='http://www.blogger.com/atom/ns#' term='mrtg'/><title type='text'>Un rápidin para tener SNMP y MRTG</title><content type='html'>&lt;p&gt;El objetivo de este post, es que el lector logre tener gráficas del tráfico de la interfaz principal que tenga su servidor, su estación de trabajo ó inclusive su firewall de un modo eficiente y rápido.&lt;br /&gt;Se explicará aquí, cómo se puede monitorear el tráfico de una interfaz y con ello examinar  el uso de la red que la computadora tiene.&lt;/p&gt;&lt;p&gt;El sistema es bastante sencillo y consiste de las siguientes partes:&lt;/p&gt;&lt;p&gt;1. &lt;span style="font-weight: bold;"&gt;El servidor SNMP: &lt;/span&gt; el servidor SNMP permite que mediante el protocolo SNMP se tenga acceso a las estadísticas de la interfaz de red así como otros datos.&lt;br /&gt;&lt;/p&gt;2. &lt;span style="font-weight: bold;"&gt;El MRTG&lt;/span&gt;: Es un script escrito en Perl, el cual jala información del servidor SNMP y acumula información acerca del uso de la red. Corre periodicamente y genera gráficas en intervalos definidos.  Al parecer es Cron quien lo corre.&lt;br /&gt;( Cron según Wikipedía,se podría definir como el "equivalente" a Tareas Programadas de Windows.)&lt;br /&gt;&lt;br /&gt;Es importante notar, que se puede colecionar y graficar lo que se desee con estas herramientas- No están limitadas a estadísticas de red. Además se pueden manejar muchos aspectos del servidor que se tenga gracias a  SNMP.&lt;br /&gt;&lt;br /&gt;Ahora bien, debido a que MRTG está escrito en Perl, para poderlo usar es necesario tener instalado Apache con soporte para Perl.&lt;br /&gt;Para instalar Apache en Debian, desde consola se puede poner el siguiente comando:&lt;br /&gt;#apt-get install apache2&lt;br /&gt;&lt;br /&gt;Después de instalar se deberá reiniciar Apache con el siguiente comando:&lt;br /&gt;&lt;p&gt;#/etc/init.d/apache2 restart&lt;/p&gt;&lt;p&gt;Se puede probar que todo haya salido bien, al escribir en un navegador:&lt;/p&gt;&lt;p&gt;http://localhost/&lt;/p&gt;&lt;p&gt;Y obtener un letrerito que diciendo :&lt;/p&gt;&lt;h1&gt;It works!&lt;/h1&gt;Una vez que ya se tiene apache instalado, se verá como llevar acabo:&lt;br /&gt;&lt;b&gt;&lt;br /&gt;La configuración del servidor SNMP&lt;br /&gt;&lt;/b&gt;  &lt;p&gt;Lo primero que se debe hacer, es obtener  un servidor SNMP que brinde cuando se le pida las estadísticas de la interfaz de red:&lt;/p&gt;  &lt;pre&gt;# apt-get install snmpd&lt;/pre&gt;  &lt;p&gt;Posteriormente se deberá editar la configuración, ya que por default no permite que se tenga ninguna conexión. Para editarlo ejecute el siguiente comando:&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;sudo nano /etc/snmp/snmpd.conf&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Se deberá comentar lo siguiente con el prefijo de #:&lt;/p&gt;  com2sec paranoid default public  &lt;p&gt;Y se deberá insertar lo siguiente justo abajo de lo que se acaba de comentar:&lt;/p&gt;  com2sec readonly default public  &lt;p&gt;Eso hace que cualquiera que tenga acceso al servidor SNMP tenga acceso de sólo lectura a la comunidad pública. Esta comunidad  es la que contiene las estadísticas de la  interfaz.&lt;/p&gt;  &lt;p&gt;Para aplicar los cambios, resetee snmpd:&lt;/p&gt;&lt;pre&gt;/etc/init.d/snmpd restart&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;&lt;b&gt;Instalación  de MRTG&lt;/b&gt;&lt;/p&gt;  &lt;p&gt;Para instalar MRTG, se debe ejecutar el siguiente comando:&lt;/p&gt;  # apt-get install mrtg  &lt;p&gt;Se puede generar manualmente ó automáticamente el archivo de configuración para mrtg. Yo recomiendo hacerlo automátcamente ya que es mucho más fácil. Escríbase el siguiente comando:&lt;/p&gt;  # cfgmaker --global 'WorkDir: /var/www/mrtg' \     --output /etc/mrtg.cfg public@127.0.0.1&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Esto generará el archivo de congiguración. Después se debe hacer un archivo índice que contenga todas las interfaces:&lt;/p&gt;  &lt;pre&gt;# indexmaker /etc/mrtg.cfg --columns=1 \&lt;br /&gt;  --output /var/www/mrtg/index.html&lt;/pre&gt;  &lt;p&gt;Posteriormente se deberá ejecutar mrtg:&lt;/p&gt;  &lt;pre&gt;# mrtg&lt;/pre&gt;Esto es ejecutado cada 5 minutos por cron, ese trabajito de cron fue adicionado por dpkg (&lt;em&gt;dpkg&lt;/em&gt; es la base del sistema de gestión de paquetes de Debian GNU) así que no se tiene que configurar.&lt;br /&gt;&lt;br /&gt;Finalmente es tiempo de inspeccionar sus resultados!&lt;br /&gt;Al principio no verá gráficas rasonablemente buenas, pero dele tiempo. Relax Baby!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_laFQZJU0vgA/SeLQAk7YHOI/AAAAAAAAAQM/BRnTC1I2eVY/s1600-h/Screenshot-1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 200px;" src="http://3.bp.blogspot.com/_laFQZJU0vgA/SeLQAk7YHOI/AAAAAAAAAQM/BRnTC1I2eVY/s320/Screenshot-1.png" alt="" id="BLOGGER_PHOTO_ID_5324046417836645602" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6968295338616399360?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6968295338616399360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6968295338616399360' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6968295338616399360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6968295338616399360'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/04/un-rapidin-para-tener-snmp-y-mrtg.html' title='Un rápidin para tener SNMP y MRTG'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_laFQZJU0vgA/SeLQAk7YHOI/AAAAAAAAAQM/BRnTC1I2eVY/s72-c/Screenshot-1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6355588502358919943</id><published>2009-03-26T11:28:00.001-06:00</published><updated>2009-03-26T11:28:44.071-06:00</updated><title type='text'></title><content type='html'>j&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6355588502358919943?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6355588502358919943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6355588502358919943' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6355588502358919943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6355588502358919943'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/03/j.html' title=''/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6052132431190154267</id><published>2009-03-25T20:53:00.002-06:00</published><updated>2009-04-06T09:30:36.531-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Nur ein Wort'/><category scheme='http://www.blogger.com/atom/ns#' term='german songs in spanish'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion al español'/><category scheme='http://www.blogger.com/atom/ns#' term='wir sind helden in spanish'/><category scheme='http://www.blogger.com/atom/ns#' term='nur ein wort translation'/><category scheme='http://www.blogger.com/atom/ns#' term='letra'/><category scheme='http://www.blogger.com/atom/ns#' term='wir sind helden'/><category scheme='http://www.blogger.com/atom/ns#' term='spanisch'/><title type='text'>La rola para cuando todavía no te dice esa cosita &lt;3</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;Hay una canción del grupo alemán, Wir sind Helden (Nosotros somos los hereos), que no sé por qué razón, me encanta y me fascina escucharla una y otra y otra vez.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Debido a que me parece que NO hay traducción al español de esta canción en la red, decidí escribirla aquí, para que alguna chica o chico de latina america que le agrade también la canción, pueda entender que moños se está diciendo en ella.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Así que aprovechemos mis clases en el Cele!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;Here goes, Wir sind Helden-Nur ein Wort in Spanish!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;table style="width: 300px; height: 1200px;" border="4" cellpadding="20" cellspacing="10"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;&lt;div style="border: 2px dashed red; width: 150px; height: 1200px;"&gt;&lt;br /&gt;&lt;h1&gt;&lt;span style="font-size:130%;"&gt;Nur ein Wort&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;&lt;/span&gt;&lt;/h1&gt;&lt;span style="font-weight: normal;font-size:85%;" &gt;Ich sehe, dass du denkst&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-weight: normal;"&gt;I&lt;/span&gt;&lt;span style="font-weight: normal;"&gt;ch denke dass du fühlst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Ich fühle dass du willst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;aber ich hör dich nicht&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ich&lt;/span&gt;&lt;span style="font-weight: normal;"&gt; hab mir ein Wörterbuch geliehen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;dir A bis Z ins Ohr geschrieen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Ich stapel tausend wirre Worte auf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;die dich am Ärmel ziehen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Und wo du hingehen willst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Ich häng an deinen Beinen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Wenn du schon auf den Mund fallen musst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Warum dann nicht auf meinen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Oh bitte gib mir nur ein Wort&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Bitte gib mir nur ein Oh&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Bitte gib mir nur ein&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Bitte bitte gib mir nur ein Wort&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Es ist verrückt wie schön du schweigst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Wie du dein hübsches Köpfchen neigst&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Und so der ganzen lauten Welt und mir&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;die kalte Schulter zeigst&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Dein Schweigen ist dein Zelt&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Du stellst es mitten in die Welt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Spannst die Schnüre und staunst stumm wenn&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Nachts ein Mädchen drüber fällt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Zu deinen Füssen red ich mich&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;um Kopf und Kragen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Ich will in deine tiefen Wasser&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Große Wellen schlagen&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Oh bitte gib mir nur ein Wort&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;In meinem Blut werfen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;die Endorphine Blasen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Wenn hinter deinen stillen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;"&gt;Hasenaugen die Gedanken rasen&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;/th&gt;&lt;br /&gt;&lt;th style="font-weight: normal;"&gt;&lt;div style="border: 2px dashed yellow; width: 150px; height: 1200px;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:180%;" &gt;Sólo una palabra&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:130%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;span style="font-weight: normal;font-size:85%;" &gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Yo veo, que tu piensas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Yo pienso que tu sientes&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;yo siento que tu quieres...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;pero yo no escucho nada de ti.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; Tome prestado un diccionario&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;y en tu oreja las palabras de la A a la Z grité&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;He hecho montoncitos  de miles de palabras&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;los cuales jalan de tus mangas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Y hacia donde tu te dirigas,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;me cuelgo  de tus piernas&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; Tu ya deberías de tener el don de hablar elocuentemente,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;pero entonces por qué no lo tienes conmigo?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ay por favor dime sólo una palabra&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Por favor dime sólo una Ay&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Porfis dime sólo una &lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Porfis Porfis  dime sólo una palabra&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;  Está muy loco como te mantienes callado&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;como bajas tu cabecita linda&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;y entonces le  muestras al ruidoso mundo y  a mi,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;tus frios   hombros.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Tu silencio es tu casa de campaña.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Y la pones en medio del mundo&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="postbody"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Preparas los hilos de tu casa de campaña, y te quedas sin parpadear cuando una chica en la noche con ellos se enreda y cae&lt;/span&gt;&lt;span style="font-style: italic;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;A tus pies arriesgo mi cabeza al hablar&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;de tonterias.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Quiero en tus aguas profundas crear grandes ondas.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ay porfis dime tan sólo una palabra&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;En mi sangre las endorfinas burbujean,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;cuando atrás de tus quietos  ojos,&lt;/span&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt; los pensamientos corren.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="font-size:85%;"&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/th&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tr&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:100%;"&gt;Uff esa es mi traducción de Nur ein Wort. Si alguien sabe alemán, estaría padre que contribuyeran y comentaran lo que opinan, fue más dificil de lo que creía hacerlo, ya que cambia mucho el significado de las palabras dependiendo del contexto. Por ejemplo, werfen es aventar, y blasen es soplar, pero werfen Blasen es burbujear!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;En fin, ojala lo disfruten.Los dejo con la canción para que canten, um zu mitsingen! Y para que sepan que moños andan cantando :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Por cierto que quería comentar, gran parte de la canción, decidí traducirla en un modo literal, sin embargo creo que hay muchas metaforas que sería interesante analizar. En general creo que el significado de la canción es que, ella le pide que le diga una palabra, la palabra que creo que ella busca es amor, ella quiere que él, se abra que quite su casa de campaña, y le diga que también la ama, como ella cree que la ama.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ESta es la versión que más me gusta: =)&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/rMZOW86-Sl8&amp;hl=de&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/rMZOW86-Sl8&amp;hl=de&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;ENJOY!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6052132431190154267?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6052132431190154267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6052132431190154267' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6052132431190154267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6052132431190154267'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/03/una-cancion-para-cantar-cuando-ya-no-te.html' title='La rola para cuando todavía no te dice esa cosita &lt;3'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-2081360836005812889</id><published>2009-03-15T16:18:00.000-06:00</published><updated>2009-03-15T20:27:42.856-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='interacion humano computadora'/><category scheme='http://www.blogger.com/atom/ns#' term='ciencia cognitiva'/><title type='text'>Más allá de WIMP, y una cierta explicación de por qué la ciencia cognitiva trabaja hoy día con la computación</title><content type='html'>Cuando en computación se habla de WIMP, no se refieren al chico torpe cobarde al que los gringos se s&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.dusa.dundee.ac.uk/scottishdance/wimp.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 220px; height: 229px;" src="http://www.dusa.dundee.ac.uk/scottishdance/wimp.gif" alt="" border="0" /&gt;&lt;/a&gt;uelen referir. Sino que se refiere a interfaces gráficas para usuarios, que tienen ventanas (Windows),iconos (ICONS), menús,(Menu)y dispositivos en los que se  apunta  y se  hace click ( point-and-click devices)&lt;br /&gt;&lt;br /&gt;Sin embargo este tipo de interfaz gráfica para usuarios,&lt;span style="font-weight: bold;"&gt;GUI,  &lt;/span&gt;por sus siglas en inglés de graphical user interface  , no es una interfaz ideal.Ya que por ejemplo, los usuarios expertos, los que llevan usando mucho tiempo alguna aplicación, encuentran muchas veces a este tipo de interfaces sumamente lentas y por ende terminan usando los hotkeys ó los atajos del teclado.&lt;br /&gt;&lt;br /&gt;Aunque esa no es la limitación más seria que tiene WIMP, la limitación más fuerte es que es una interfaz que fue diseñada para ser usada en un escritorio con teclado-mouse.Por ende con WIMP se crean interfaces que sólamente toman ventaja de la visión y de una interacción primitiva de tacto.&lt;br /&gt;&lt;br /&gt;Por ende, un nuevo objetivo que la humanidad tiene, es diseñar interfaces que sean compatibles con la percepción humana,con la actividad cognitiva y manipulativa  humana, así como tomar en consideración las habilidades sociales.  Se busca poder  interactuar de una  forma  natural con las computadoras y dispositivos inteligentes, interactuar del mismo modo en el que se hace con otros humanos, o del mismo modo en el cual manipulamos nuestros ambientes físicos.&lt;br /&gt;&lt;br /&gt;Recordemos que las computadoras   han facilitado la comunicación humana, la colaboración, así como la interación social, es por esto que  la humanidad se tiene que concentrar en la interación humano a humano, no sólo en la interación de humano-computadora.  Este cambio en el enfoque no sólo se  verá refleja en  el cambio en el uso de la computadora, sino que también en el hecho de que las computadoras se volverán poco a poco (si no es que ya está sucediendo) en algo que está presente en nuestro medio ambiente, mas  invisible a  nosotros. (Cuando digo, que está presente en nuesto medio ambiente, mas invisible a nosotros, me refiero al hecho de por ejemplo tener una computadora en nuestro refirgerador que podría darnos la comida requerida para nuestra dieta y esconder la que no DEBEMOS comer, si es que queremos usar ese sensual bikini para semana santa. La computadora en el refrigerador evidentemente está presente, sin embargo se convertiría en algo del entorno, por ende el usuario no se daría cuenta de su existencia.) Por cierto que este tipo de tecnología se conoce, como &lt;span style="font-weight: bold;"&gt;Computación Ubicua&lt;/span&gt;,en donde el procesamiento de información, se ha integrado por completo en las actividades y objetos cotidianos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Por otro lado, el posible uso de interfaces futuras para personas con discapacidad es fenomenal!&lt;br /&gt;Por ende, a pesar de los retos que pudiesen existir en cuanto a la tecnología, el reto principal es entender  las capacidades humanas para poder analizar como se debería integrar ese entendimiento con nuevas tecnologías de diseño, con nuevas interfaces de usuario.&lt;br /&gt;Aquí hay un video de un librillo que usa la realidad aumentada y muestra otro tipo de interación entre las máquinas y los humanos&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/HZlK3d9Knt0&amp;hl=de&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/HZlK3d9Knt0&amp;hl=de&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2081360836005812889?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2081360836005812889/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2081360836005812889' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2081360836005812889'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2081360836005812889'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/03/mas-alla-de-wimp-y-una-cierta.html' title='Más allá de WIMP, y una cierta explicación de por qué la ciencia cognitiva trabaja hoy día con la computación'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6803240257861687708</id><published>2009-02-14T13:36:00.000-07:00</published><updated>2009-02-26T09:23:33.874-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='los k vecinos mas cercanos'/><category scheme='http://www.blogger.com/atom/ns#' term='k nearest neighbor tutorial'/><title type='text'>Algunas comentarios en el Algoritmo del Vecino K más cercano</title><content type='html'>El&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://normasavage.blogspot.com/2009/02/next-nearest-killer-neighbor-that-i.html"&gt;algoritmo del vecino K más cercano&lt;/a&gt;&lt;/span&gt; es un algoritmo muy eficaz que es usado en muchos problemas prácticos.&lt;br /&gt;Aun cuando existan  ejemplos de entrenamiento que tengan ruido,este algoritmo resulta ser  bastante robusto . Además puede ser bastante effectivo si se le da un conjutno de entrenamiento lo suficientemente grande. Esto tiene sentido, si recordamos que este algoritmo clasifica a un elemento X dependiendo de como es la clasificación que poseen  la mayoría de los vecinos cercanos, por ende  se puede suavizar  el impacto de un ejemplo de entrenamiento que tenga ruido.&lt;br /&gt;&lt;br /&gt;Una cierto "prejuicio" que se tiene en este algoritmo, es que se asume que la clasificación de  un elemento x, será muy similar a la clasificación elegida para otros elementos que están cercanos a x.&lt;br /&gt;&lt;br /&gt;Ahora bien, otra cosa interesante que hay que considerar de este algoritmo, es que la distancia entre elementos se calcula con base en todos los atributos que poseen. Aunque puede surgir aquí un pequeño inconveniente, ya que, ¿Qué sucedería, si de los 20 atributos solamente 2 son relevantes para la clasificación?&lt;br /&gt;En este caso, es claro que se podrían tener  dos elementos cuyos  2 relevantes atributos sean iguales, mas por los demás atributos que poseen,podrían  estos elementos estar muy separados entre si. Lo cual haría que este algoritmo fuera bastante "engañoso". Lo que determinaría la distancia entre vecinos, serían los numerosos atributos irrelevantes que los elementos poseen.  A esto, se le suele llamar, &lt;span style="font-weight: bold;"&gt;La maldición de la dimensionalidad!&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Un modo para solucionar esto es:&lt;br /&gt;Cuando  se  está calculando la distancia en la que están dos objetos, se deberá  dar un peso differente a cada atributo,  esto es, darle prioridad a los atributos de interés, la multiplicación de una constante grande  por los atributos de interés, y la multiplicación de una constante pequeña por los atributos menos relevantes, hace esto posible.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6803240257861687708?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6803240257861687708/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6803240257861687708' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6803240257861687708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6803240257861687708'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/02/algunas-comentarios-en-el-algoritmo-del.html' title='Algunas comentarios en el Algoritmo del Vecino K más cercano'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-2579291110831569565</id><published>2009-02-06T13:55:00.000-07:00</published><updated>2009-03-02T18:02:03.508-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Das Höhlengleichnis in Zeiten des Fernsehen'/><title type='text'>Das Höhlengleichnis in Zeiten des Fernsehen</title><content type='html'>Wegen der Entwircklung können die Leute sich über die Berichte informieren.&lt;br /&gt;Egal ob es Abend oder Mittag ist, die Leute können wissen, was passiert in der Welt, in der sie leben. Sie wissen, wenn der Mann von Britney Spears gemein zu ihr war, sie wissen, was der Hund von Obama essen will. Sie wissen alles, das sie gerne wüssten.&lt;br /&gt;Aber das Problem ist nicht, dass sie zu wenig Information bekommen können. Das Problem ist, dass sie mehr über was passiert im Irak wissen, als darüber was in ihrem Haus passiert. Sie haben keine zeit, um zu wissen, und manchmal interessieren sie sich nicht für die Beziehung, die in ihrem Leben sind.&lt;div&gt;Es ist leichter ein anderes Leben zu sehen, und zu sagen, was die Leute, die dort leben machen sollten. Es gibt zum beispiel viele " Wer, WeiBe, Was" Web Seite auf den die Leute sagen, was Britney Spears machen soll.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Diese Leute sind die Gefangenen, sie leben in Finsternis. Sie leben nicht ihrer Realität, sondern auch in einem schönen Bild, in dem sie das Leben der Andern sehen.&lt;br /&gt;Aber ich bedauerne diese Leute nicht,ich denke, dass sie sich nicht entfesseln möchten. sie sind fröhlich in dieser Realität. Vielleicht ist diese Realität besser als die Realität, die sie hätten, wenn sie nicht das Leben der Andern anschauen können.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Ich weiB nicht, ob es nicht richtig ist, in einer "Virtuellen" Welt zu leben. Ich arbeite jetzt in der Schule,um bessere Virtuelle Welten zu machen. &lt;/div&gt;&lt;div&gt;Für die Leute, die Krank sind, ist die Virtuele Welt, die Welt, wo sie wircklich gut leben können.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.mythicjourneys.org/images/platos_cave.jpg"&gt;&lt;img style="cursor: pointer; width: 360px; height: 262px;" src="http://www.mythicjourneys.org/images/platos_cave.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2579291110831569565?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2579291110831569565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2579291110831569565' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2579291110831569565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2579291110831569565'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/02/das-hohlengleichnis-in-zeiten-des.html' title='Das Höhlengleichnis in Zeiten des Fernsehen'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6258839629895050661</id><published>2009-02-05T23:04:00.002-07:00</published><updated>2009-10-25T21:19:27.285-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='knn'/><category scheme='http://www.blogger.com/atom/ns#' term='los k vecinos mas cercanos'/><category scheme='http://www.blogger.com/atom/ns#' term='k nearest neighbor tutorial'/><title type='text'>Los vecinos K más cercanos</title><content type='html'>&lt;div style="border: 2px dashed rgb(21, 137, 255);"&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Resumen Del Algoritmo de los k vecinos&lt;/span&gt;: (Por si no quieres leer toooda la explicación)&lt;br /&gt;El algoritmo es simple, supongamos que se tiene  un objeto X que se quiere  clasificar,y se tiene además un conjunto de entrenamiento, el cual consiste de una serie de  objetos cada uno con su etiqueta correspondiente. El algoritmo lo que hará para clasificar al objeto  X, es tomar del conjunto de entrenamiento K elementos, estos K elementos son los K elementos del conjunto de entrenamiento que más se parecen a  X. Se analizará cual etiqueta de los K elementos es la que se presenta con más frequencia, y esta etiqueta será la que se le pondrá a X. Tengo un objeto nuevo que quiero clasificar, pues le pondré el nombre del objeto que más se paresca a él que ya conosco con anterioridad. Así de simple =)&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;El algoritmo de los K vecinos más cercanos es uno de los algoritmos más simples que existen que muestran la escencia del aprendizaje basado en instancias.&lt;br /&gt;Este algorimo asume que todas las instancias corresponden a puntos que se encuentran en un espacio de dimensión n. El vecino más cercano de una instancia es definido en términos de la distancia Euclidiana estándar.&lt;br /&gt;Para aclarar esto, imagínese una instancia arbitraria x descrita por el vector:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;( a1(x), a2(x) , . . .,an(x)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Donde a r(x) corresponde al valor del r"eavo" atributo de la instancia x. Entonces la distancia entre las instancias xi  y xj se define por d(xi,xj), donde&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;:&lt;br /&gt;&lt;br /&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;d(x&lt;/span&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;i&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;,x&lt;/span&gt;&lt;span style="font-weight: bold;font-size:78%;" &gt;j&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;)&lt;/span&gt;=&lt;/span&gt;&lt;/span&gt;&lt;img src="http://www.mathsisfun.com/images/square-root-symbol.gif" alt="radical symbol" height="56" width="31" /&gt; &lt;span style="font-size:180%;"&gt;&lt;b&gt;Σ (&lt;span style="font-weight: bold;"&gt;a&lt;span style="font-size:78%;"&gt;r&lt;/span&gt;(x&lt;span style="font-size:78%;"&gt;i&lt;/span&gt;)- a&lt;span style="font-size:78%;"&gt;r&lt;/span&gt;(x&lt;span style="font-size:78%;"&gt;j&lt;/span&gt;))&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;b&gt;^2 &lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span&gt;En este algoritmo, la función objetivo puede contener valores discretos o valores continuos.&lt;br /&gt;Por ahora  consideraremos  que queremos aprender una función objetivo que es discreta.&lt;br /&gt;El algoritmo para aproximar una funcion objetivo que es discreta es:&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;Algoritmo de entrenamiento:&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;ul&gt;&lt;li&gt;Para cada uno de los ejemplos de entrenamiento (x,f(x)) agrega el ejemplo a la lista de ejemplos de entrenamiento.&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Algoritmo de clasificacion:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;ul&gt;&lt;li style="font-weight: normal;"&gt;Dada una instancia X&lt;span style="font-size:78%;"&gt;q&lt;/span&gt; que quiere ser clasificada,&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li style="font-weight: normal;"&gt;Sean x&lt;span style="font-size:78%;"&gt;1&lt;/span&gt; . . .x&lt;span style="font-size:78%;"&gt;k&lt;/span&gt; las k instancias de los ejemplos de entrenamiento que están más cercanas a X&lt;span style="font-size:78%;"&gt;q&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: normal;"&gt;Regresa&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;               &lt;/span&gt;&lt;span&gt;un vector&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; f(xq)=argmax &lt;span style="font-size:180%;"&gt;&lt;b&gt;Σ &lt;span style="font-style: italic;"&gt;D&lt;/span&gt;&lt;span style="font-size:100%;"&gt;(v,f(xi))&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt;donde D (a,b)=1 si a=b y D(a,b)=0 en cualquier otro caso.&lt;br /&gt;v pertenece al conjunto finito V:(v1,...v2).  Este es el conjunto finito al cual es mapeada la función objetivo.&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;En resumen:&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:100%;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;Este algoritmo funciona siguiendo un modelo basado en la memoria. La memoria guarda un conjunto de objetos ó instancias  que forman parte del entrenamiento. Para cada uno de estos objetos, se sabe cual es su salida, esto es, los objetos están etiquetados. Cada ejemplo contiene un conjunto de valores independientes que producen un conjunto de salida dependiente de ellos.&lt;br /&gt;&lt;br /&gt;Cuando las variables dependientes son continuas,se dice que  la tarea a tratar es regresión. De lo contrario se trata de clasificación. Por ende este algoritmo puede manejar tanto tareas de regresión y de clasificación.&lt;br /&gt;&lt;br /&gt;Dado un conjunto nuevo de  valores  independientes se busca estimar medinate  los  k vecinos más cercanos,  la salida de este. Esto se logra   encontrando k ejemplos de entrenamiento,  que en distancia estén más cercanos al objeto a clasificar, de allí el nombre  k vecinos más cercanos.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para la regresión, las prediciones de los K vecinos más cercanos se basan en los promedios de las salidas de los k vecinos más cercanos; Para la clasificación, se utiliza una votación mayoritaria.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;En el método de los vécinos K más cercanos, aprender significa Memorizar!&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Ahora dare un pequeño ejemplo, para aclarar las cosas&lt;br /&gt;Observese el siguiente dibujo, se tienen dos tipos de instancias, las estrellas y los pentagonos. La tarea del clasificador, será decir  si una instancia X es un trapecio ó una estrella. Los ejemplos de entrenamiento son lo que que se muestran, en conjunto con un elemento "?" que se quiere clasificar. Si se tomará el primer vecino más cercano, esto es K=1, entonces se clasificaría al elemento ?, como estrella.  Pero, si se tomarán los 5 vecinos más cercanos, se clasificaría  al elemento ? como trapecio.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/de/thumb/8/8b/KNNClass.svg/800px-KNNClass.svg.png"&gt;&lt;img style="cursor: pointer; width: 367px; height: 360px;" src="http://upload.wikimedia.org/wikipedia/de/thumb/8/8b/KNNClass.svg/800px-KNNClass.svg.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6258839629895050661?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6258839629895050661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6258839629895050661' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6258839629895050661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6258839629895050661'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/02/next-nearest-killer-neighbor-that-i.html' title='Los vecinos K más cercanos'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6486566102773677032</id><published>2009-02-02T11:51:00.003-07:00</published><updated>2010-04-03T15:59:57.989-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje'/><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje de conceptos'/><category scheme='http://www.blogger.com/atom/ns#' term='concept learning'/><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje de maquina'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion machine learning'/><title type='text'>¿Cómo aprendería una máquina un concepto?</title><content type='html'>Cuando hablamos de aprendizaje, nos referimos al hecho de mejorar alguna tarea usando la experiencia .&lt;br /&gt;Esto es:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mejorar en la tarea T&lt;/li&gt;&lt;li&gt;Con respecto a la medida de rendimiento P&lt;/li&gt;&lt;li&gt;basándose en la experiencia E.&lt;br /&gt;&lt;br /&gt;Por ejemplo, aprender a jugar ajedrez:&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;*T:Jugar ajedrez&lt;/li&gt;&lt;li&gt;*P: % de juegos ganados en torneos.&lt;/li&gt;&lt;li&gt;*E:Opportunidad de jugar contra uno mismo.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Es fácil de entender esto, ya que en la vida cotidiana cuando un individuo aprenda un concepto nuevo, es muy común que utilice una serie de ejemplos específicos que le sirven de entrenamiento. Si el individuo está aprendiendo lo que es una vaca, los ejemplos de entrenamiento que podría tener son fotos diversas de vacas, donde se le indique  que esas fotos son efectivamente de vacas, también se podría tener como entrenamiento fotos de otros animales, y se le podría indicar  que esas fotos NO representan una vaca.&lt;br /&gt;Con esto podemos observar,  que se puede definir que &lt;span style="font-weight: bold;"&gt;un  concepto&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;es una función booleana valuada sobre un conjunto mayor.&lt;/span&gt; Es decir, es  una función definida sobre TODOS los animales, cuyo valor será verdadero para las vacas y falso para cualquier otro tipo de animal.&lt;br /&gt;Un problema interesante que existe, es obtener un método mediante el cual se pueda inferir de manera automática la definición general  de un concepto, dados unos ejemplos que muestran miembros o no-miembros del concepto. Este tipo de tarea se suele llamar Aprendizaje de conceptos o Concept Learning.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Aprendizaje de Conceptos&lt;/span&gt;&lt;br /&gt;El Aprendizaje de Conceptos se refiere al hecho de inferir una función booleana apartir de ejemplos que muestran sus  entradas y salidas .&lt;br /&gt;Para entender  mejor, todo esto, empezaré por definir unas cosas:&lt;br /&gt;El conjunto de elementos o instancias sobre el cual un concepto es definido se llama el conjunto de instancias, el cual será denotado por la letra X.&lt;br /&gt;El concepto ó función a ser aprendido se llama el concepto meta,el cual será denotado por una c.&lt;br /&gt;En general, la c puede ser cualquier función booleana  definida sobre las instancias X.&lt;br /&gt;Esto es c: X &lt;span style="font-weight: bold;"&gt;-&gt;&lt;/span&gt;{0,1}&lt;br /&gt;Ahora bien, como se mencionó antes usualmente cuando una persona  aprende un concepto  se le presentan una serie de ejemplos que facilitan el aprendizaje. Cada ejemplo consiste en una instancia de x que pertenece a X, así como su concepto objetivo valuado,c(x) Ya que se presentaron estos ejemplos, el individuo debe tratar de estimar cual es el concepto meta. Se usará el símbolo H para denotar todas las posibles hipótesis ó estimaciones   de c que el aprendiz genere en su búsqueda por definirla.&lt;br /&gt;Con esto, es claro que  la tarea del aprendiz, es encontrar una hipótesis h, que sea idéntica al concepto c.&lt;br /&gt;Para aterrizar más esto, considerese el ejemplo de aprender el concepto objetivo de “Días en los que mi amado disfruta besarme bajo la luna”.&lt;br /&gt;La siguiente tabla muestra un conjunto de ejemplos de días, cada uno representado por un conjunto de atributos.&lt;br /&gt;&lt;br /&gt;	&lt;meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"&gt;&lt;title&gt;&lt;/title&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 2.2  (Unix)"&gt;&lt;meta name="CREATED" content="20090122;23060300"&gt;&lt;meta name="CHANGED" content="20090201;23412800"&gt; 	 	 	 	 	&lt;style type="text/css"&gt; 	&lt;!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		TD P { margin-bottom: 0cm } 		P { margin-bottom: 0.21cm } 	--&gt; 	&lt;/style&gt;   &lt;table style="color: rgb(0, 0, 0);" border="1" cellpadding="4" cellspacing="0" width="100%"&gt; 	&lt;col width="52*"&gt; 	&lt;col width="52*"&gt; 	&lt;col width="52*"&gt; 	&lt;col width="52*"&gt; 	&lt;col width="47*"&gt; 	&lt;tbody&gt;&lt;tr valign="top"&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Ejemplo&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Cielo&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Temperatura&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Viento&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="19%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;GustaBesarme&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr valign="top"&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;1&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Estrellado&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Caliente&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Fuerte&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="19%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Sí&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr valign="top"&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;2&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Estrellado&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Caliente&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Fuerte&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="19%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Sí&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr valign="top"&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;3&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Nublado&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Frío&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Fuerte&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="19%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;No&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 	&lt;/tr&gt; 	&lt;tr valign="top"&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;4&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Estrellado&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Caliente&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="20%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Fuerte&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 		&lt;td width="19%"&gt; 			&lt;p&gt;&lt;span style="font-size:85%;"&gt;Sí&lt;/span&gt;&lt;/p&gt; 		&lt;/td&gt; 	&lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt; &lt;p style="margin-bottom: 0.5cm;"&gt;&lt;br /&gt;El atributo de GustaBesarme indica si a mi amante le gusta besarme bajo la luna en ese día. La tarea es aprender a predecir el valor de GustaBesarme para un día arbitrario, basándose en los valores de los otros atributos.&lt;br /&gt;&lt;/p&gt;Lo primero que se deberá hacer, es definir como  se quiere representar a las hipótesis.&lt;br /&gt;En este caso, podemos definir a h, como una conjuncion de restricciones sobre los atributos.&lt;br /&gt;Cada una de las restricciones puede ser:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un valor especifico. Esto es: Cielo=Estellado&lt;/li&gt;&lt;li&gt;Sin importancia . Cualquier valor es aceptado para este atributo. Esto es Cielo=?&lt;/li&gt;&lt;li&gt;Un valor no aceptado. Esto es Cielo=0&lt;/li&gt;&lt;/ul&gt;Por ejemplo, se podría tener:&lt;br /&gt;	&lt;meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"&gt;&lt;title&gt;&lt;/title&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 2.2  (Unix)"&gt;&lt;meta name="CREATED" content="20090122;23060300"&gt;&lt;meta name="CHANGED" content="20090201;23412800"&gt; 	 	 	 	 	&lt;style type="text/css"&gt; 	&lt;!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } 	--&gt;&lt;/style&gt; &lt;span style="font-weight: bold;"&gt;         Cielo                                                  Temp                          Viento&lt;/span&gt;&lt;br /&gt;&lt;estrellado&gt;&lt;span style="font-weight: bold;"&gt;Estrelallado          ?                    Alto&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si una instancia   x satisface todas las restricciones de la hipótesis h, entonces la hipótesis h clasifica a x como un ejemplo positivo (h(x)=1)&lt;br /&gt;Por ejemplo, la hipótesis que dice que a mi amante le gusta besarme bajo la luna en días con temperatura alta y cielo estrellado, independientemente de como esté el viento, se representa por  la expresión:&lt;br /&gt;(estrellado,alta,?)&lt;br /&gt;En resumen, en la tarea de aprender el concepto de GustaBesarme, se requiere aprender el conjunto de días para los cuales GustaBesarme=sí, este conjunto de días se puede describir mediante una conjunción de restricciones sobre las instancias de atributos. Como por ejemplo, el cielo deberá estar estrellado, y la temperatura deberá ser alta, para que a mi amante le guste besarme bajo la luna.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;La hipótesis de aprendizaje inductiva&lt;/span&gt;&lt;br /&gt;Es importante notar que aunque la tarea en el aprendizaje es encontrar  la hipótesis h  que es igual al concepto objetivo c sobre un conjunto de instancias  X, la única información disponible sobre c, es el valor que posee dentro de los ejemplos de entrenamiento. Dicho más fácilmente, la única información que se tiene con respecto a los días  en que a mi amante no le gusta besarme bajo la luna, está en los ejemplos de entrenamiento.&lt;br /&gt;Ahora bien, debido a que no poseemos más información, se asume que la mejor hipótesis para  instancias no vistas, es la hipótesis que mejor le queda a nuestros ejemplos.&lt;br /&gt;Si encontramos con los ejemplos de entrenamiento, que la mejor  hipotesis que explica en que días a mi amante  le gusta besarme bajo la luna, es  cuando la temperatura es alta,  ,entonces usaremos esta hipótesis para clasificar instancias de días no vistas en los entrenamientos. Si tuvieramos un día, que fuera estrellado con temperatura baja y viento fuerte , diríamos que en este día a mi amante no le gusta besarme bajo la luna, ya que temperatura=baja.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;La hipótesis del aprendizaje inductivo : &lt;/span&gt;&lt;span style="font-style: italic;"&gt;Cualquier hipótesis que se encuentre que aproxima bien la función ó el concepto objetivo sobre un conjunto suficientemente grande de ejemplos de entrenamiento, también se aproximará bien a la función ó concepto  objetivo en ejemplos no vistos durante el entrenamiento.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;El Aprendizaje de un  concepto como una búsqueda&lt;/span&gt;&lt;br /&gt;El aprendizaje de conceptos se puede ver como la tarea de buscar, a través de un  espacio grande de  hipótesis,  a la que  mejor representa a los ejemplos de aprendizaje.&lt;br /&gt;Es importante notar que las   hipótesis que se encunetran en el espacio, están  definidas bajo una cierta  representación, que está a manos del diseñador, debido a esto, el diseñador está implicitamente declarando el espacio de todas las hipótesis que el program puede represnetar, y por ende aprender.&lt;br /&gt;&lt;/estrellado&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6486566102773677032?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6486566102773677032/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6486566102773677032' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6486566102773677032'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6486566102773677032'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/02/como-aprenderia-una-maquina-un-concepto.html' title='¿Cómo aprendería una máquina un concepto?'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-471334983074065865</id><published>2009-01-31T21:53:00.001-07:00</published><updated>2009-01-31T22:36:04.845-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dass ich dort studieren kann...'/><category scheme='http://www.blogger.com/atom/ns#' term='crisis'/><category scheme='http://www.blogger.com/atom/ns#' term='ich bitte dich Gott'/><category scheme='http://www.blogger.com/atom/ns#' term='universidad'/><category scheme='http://www.blogger.com/atom/ns#' term='maestria'/><category scheme='http://www.blogger.com/atom/ns#' term='crisis economica y las admisiones a la universidad'/><title type='text'>¿La baja en la economía puede hacer un alza en el número de personas que aplican a  la universidad???</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.phdcomics.com/comics/archive/phd100108s.gif"&gt;&lt;img style="cursor: pointer; width: 372px; height: 361px;" src="http://www.phdcomics.com/comics/archive/phd100108s.gif" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Me siento realmente fatal, al parecer &lt;span&gt;el número de alumnos que están aplicando para  las Universidades Gringas ha dado un aumento gigantesco este año. Será al parecer,"the  largest&lt;br /&gt;enrollment to date".&lt;br /&gt;Hay noticias que dicen que :La universidad de Darthmouth obtuve un número récord de aplicantes, o &lt;/span&gt;&lt;span&gt;Enrollment numbers are expected to increase across Oregon's public&lt;br /&gt;universities ó &lt;/span&gt;&lt;span&gt;UCLA faces over-enrollment....&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;br /&gt;Aunque honestamente, creo que aún no se puede poner un panorama general de la situación. Lei en otra parte que el número de personas que hicieron el GRE se decrementó este año. El GRE es un examen, que la mayoría de las Universidades Estadunidenses pide como requisito para que puedas aplicar a la universidad, por lo que si el número se decrementó, ¿Cómo sería posible que se aumentara el número de personas que aplican a la universidad, si éstas no están haciendo el examen GRE? Yo creo, o quiero creeer que  tal vez veamos los efectos de la crisis en las aplicaciones a la universidad hasta el próximo año, ya que probablemente muchos no lograron preparar sus papeles a tiempos para las deadlines.&lt;br /&gt;Por otro lado, hay que recordar que las unviersdades Estadunidenses, son execsivamente caras, y es probable que no sea ya tan fácil sacar un préstamo de estudiante, para pagar la universidad. ¿Esto no decrementaría el número de personas que aplicarán a las unis???&lt;br /&gt;Honestamente no sé. Usted querido lector, qué opina? El desempleo hará que en vez de trabajar las personas entren a estudiar???&lt;br /&gt;&lt;br /&gt;Only time will tell...&lt;br /&gt;&lt;br /&gt;Ah y por si quieren leer cosas que asustan, y de donde saque parte de la informción que manejo aquí, &lt;a href="http://www.tmcnet.com/usubmit/2009/01/29/3951024.htm"&gt;chequen esto.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;Que pasará que misterio habrá...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-471334983074065865?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/471334983074065865/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=471334983074065865' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/471334983074065865'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/471334983074065865'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/01/la-baja-en-la-economia-puede-hacer-un.html' title='¿La baja en la economía puede hacer un alza en el número de personas que aplican a  la universidad???'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-5918634013975907181</id><published>2009-01-03T20:23:00.000-07:00</published><updated>2009-01-04T10:39:17.013-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='conjunto de entrenamiento'/><category scheme='http://www.blogger.com/atom/ns#' term='aprendizaje'/><category scheme='http://www.blogger.com/atom/ns#' term='boosting en español'/><category scheme='http://www.blogger.com/atom/ns#' term='conjunto de hipotesis'/><category scheme='http://www.blogger.com/atom/ns#' term='hipótesis'/><category scheme='http://www.blogger.com/atom/ns#' term='inteligencia artificial'/><category scheme='http://www.blogger.com/atom/ns#' term='que es boosting'/><title type='text'>Una breve introducción al Boosting</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;NOTA:recomiendo que para entender varios de los conceptos que uso en este post, se debe tener un antescedente en la materia de Aprendizaje. En lo personal, yo aprendí con el libro de Machine Learning de Tom Mitchel, Quien no tenga el libro puede utilizar estos &lt;a href="http://www.stanford.edu/class/cs229/materials.html"&gt;apuntes&lt;/a&gt; que encontré en línea de la Universidad de Standford, los apuntes están en la parte donde dice Lecture Notes, están en inglés, pero ni pexsi, están padres.&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Un tema que ha llamado recientemente mi atención en el área de Aprendizaje, es el tema de Boosting. Decidí hacer esta entrada, debido a que NO he encontrada nada de información sobre el tema, en español. Y siempre es agradable poder leer los temas que nos interesan en nuestra lengua madre.&lt;br /&gt;Así que aqui va : &lt;span style="font-weight: bold;"&gt;Boosting explicado en Español!&lt;/span&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 204, 204);font-size:85%;" &gt;&lt;span style="color: rgb(153, 153, 153);font-size:100%;" &gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Es importante primero entender a que se refiere la palabra  &lt;a href="http://www.wordreference.com/es/translation.asp?tranword=boost"&gt;Boost&lt;/a&gt; en inglés. To boost es  empujar hacia arriba, fomentar, aumentar, mejorar algo. Cuando se utiliza la palabra Boosting en el área de Aprendizaje se refiere a un método para mejorar  la  precisión que tiene un algoritmo de aprendizaje  X.&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Historia&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Este método surgió, cuando se hizo la pregunta sobre si era o no posible mejorar un algoritmo de aprendizaje, el cual  tenía  un rendimiento ligeramente mejor  al  de  una proceso en el cual se llevaba acabo una adivinanza  aleatoria para llegar a la solución. Se cuestionó si era posible convertir a este algorimto inicialmente debil en uno arbitrariamente  fuerte y exacto.&lt;br /&gt;En 1989 Schapire fue el primero en encontrar un algoritmo que cumplía con esto, un año más tarde Freund de la Universidad de San Diego, desarrolló un algoritmo de Boosting mucho más eficiente, aunque sufría de ciertos inconvenientes.&lt;br /&gt;En 1995, Freund y Schapire presentaron un nuevo algoritmo de boosting llamado &lt;span style="font-weight: bold;"&gt;AdaBoost&lt;/span&gt;, el cual resolvía muchos de los problemas prácticos que se habían presentado anteriormente.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;Algoritmo de AdaBoost&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;El algoritmo toma coma entrada una serie de ejemplos de entrenamiento (&lt;span style="font-style: italic;"&gt;x&lt;span style="font-size:85%;"&gt;1&lt;/span&gt;,y&lt;span style="font-size:85%;"&gt;1&lt;/span&gt;&lt;/span&gt;),...,(&lt;span style="font-style: italic;"&gt;x&lt;span style="font-size:85%;"&gt;m&lt;/span&gt;,y&lt;span style="font-size:85%;"&gt;m&lt;/span&gt;&lt;/span&gt;) donde x&lt;span style="font-size:85%;"&gt;i&lt;/span&gt; corresponde a un cierto dominio ó espacio X, y cada etiqueta y&lt;span style="font-size:85%;"&gt;i&lt;/span&gt; está dentro de  un conjunto de etiquetas Y. AdaBoost llama  reptidamente a un algoritmo de aprendizaje debil, lo llama en ciclos repetidos de t=1, . . .,T.&lt;br /&gt;Dados: &lt;span style="font-style: italic;"&gt;(x&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;1&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,y&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;1&lt;/span&gt;), . . ., (&lt;span style="font-style: italic;"&gt;x&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;m&lt;/span&gt;&lt;span style="font-style: italic;"&gt;,y&lt;/span&gt;&lt;span style="font-style: italic;font-size:85%;" &gt;m&lt;/span&gt;)&lt;br /&gt;donde &lt;span style="font-style: italic;"&gt;x&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-style: italic;"&gt;i&lt;/span&gt; &lt;/span&gt;pertence a X, &lt;span style="font-style: italic;"&gt;y&lt;span style="font-size:85%;"&gt;i&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt; &lt;/span&gt;pertence a Y={-1,+1}&lt;br /&gt;Inicializa D&lt;span style="font-size:85%;"&gt;1&lt;/span&gt;(i)=1/m&lt;br /&gt;para t=1, . . .,T:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Entrena al débil aprendiz usando la distribución D&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;. &lt;/li&gt;&lt;li&gt;Obtén la hipótesis débi  ht:X-&gt;{-1,+1} con error&lt;br /&gt;Et=Pr&lt;span style="font-size:78%;"&gt;i&lt;/span&gt;[h&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;(x&lt;span style="font-size:85%;"&gt;i&lt;/span&gt;)!=y&lt;span style="font-size:85%;"&gt;i&lt;/span&gt;]&lt;/li&gt;&lt;li&gt; Escoja a&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;=1/2 ln(1-E&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;/E&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;) &lt;/li&gt;&lt;li&gt;Actualice:&lt;/li&gt;&lt;/ul&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_laFQZJU0vgA/SWA6hOn0IpI/AAAAAAAAAN0/DO5GyUKg6JA/s1600-h/formula1.jpg"&gt;&lt;img style="cursor: pointer; width: 320px; height: 129px;" src="http://3.bp.blogspot.com/_laFQZJU0vgA/SWA6hOn0IpI/AAAAAAAAAN0/DO5GyUKg6JA/s320/formula1.jpg" alt="" id="BLOGGER_PHOTO_ID_5287290305068147346" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;donde  Z&lt;span style="font-size:85%;"&gt;t&lt;/span&gt; es un factor de normalización.( Escojido para que D&lt;span style="font-size:85%;"&gt;t+1&lt;/span&gt; sea una distribución)&lt;br /&gt;La salida de la hipótesis final es:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_laFQZJU0vgA/SWA7wDv4lzI/AAAAAAAAAN8/mToD5A15dTE/s1600-h/formula2.jpg"&gt;&lt;img style="cursor: pointer; width: 228px; height: 37px;" src="http://3.bp.blogspot.com/_laFQZJU0vgA/SWA7wDv4lzI/AAAAAAAAAN8/mToD5A15dTE/s320/formula2.jpg" alt="" id="BLOGGER_PHOTO_ID_5287291659358869298" border="0" /&gt;&lt;/a&gt;Cuya sumatoria va de t=1 a T.&lt;br /&gt;&lt;br /&gt;                             &lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;                                    Idea principal del algoritmo&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;Una de las ideas principales del algoritmo es mantener una conjunto de  pesos sobre el conjunto de entrenamiento. El peso que tiene el ejemplo de entrenamiento i en el momento t se denota por: D&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;(i)&lt;br /&gt;	&lt;meta equiv="CONTENT-TYPE" content="text/html; charset=utf-8"&gt;&lt;title&gt;&lt;/title&gt;&lt;meta name="GENERATOR" content="OpenOffice.org 2.2  (Unix)"&gt;&lt;meta name="CREATED" content="20090103;14362000"&gt;&lt;meta name="CHANGED" content="20090103;20181900"&gt; 	 	 	 	 	&lt;style type="text/css"&gt; 	&lt;!-- 		@page { size: 21cm 29.7cm; margin: 2cm } 		P { margin-bottom: 0.21cm } 	--&gt; 	&lt;/style&gt;  &lt;p&gt;&lt;span style="font-size:100%;"&gt;En primera instancia se ponen a todos los pesos con los mismos valores, pero en cada vuelta, los pesos  de ejemplos que se hayan clasificado errónemente se incrementan, de este modo se forza al aprendiz débil a tenerse que concentrar en los ejemplos que  se le dificultan que pertencen al   conjunto de entrenamiento .&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-size:100%;"&gt;El trabajo del aprendiz débil radica en encontrar una hipótesis débil h&lt;span style="font-size:85%;"&gt;t&lt;/span&gt; apropiada para el peso D&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;.&lt;br /&gt;La fuerza ó  que tan correcta es  una hipótesis débil se mide mediante su error:&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_laFQZJU0vgA/SWA85Z9hM3I/AAAAAAAAAOE/08QvhbSAWn4/s1600-h/formula3.jpg"&gt;&lt;img style="cursor: pointer; width: 212px; height: 62px;" src="http://1.bp.blogspot.com/_laFQZJU0vgA/SWA85Z9hM3I/AAAAAAAAAOE/08QvhbSAWn4/s320/formula3.jpg" alt="" id="BLOGGER_PHOTO_ID_5287292919452087154" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;Es importante notar que el error se mide con base al conjunto de pesos Dt, conjunto en el cual el aprendiz débil fue entrenado.&lt;br /&gt;Una vez que se tiene una hipótesis débil h&lt;span style="font-size:85%;"&gt;t&lt;/span&gt;, el siguiente paso es calcular el parámetro a&lt;span style="font-size:78%;"&gt;t&lt;/span&gt;, como se explicó  arriba. a&lt;span style="font-size:78%;"&gt;t&lt;/span&gt; mide la importancia que se le asignará a la hipotesis h&lt;span style="font-size:78%;"&gt;t&lt;/span&gt;.&lt;br /&gt;Nótese que a&lt;span style="font-size:78%;"&gt;t&lt;/span&gt; &gt;=0 cuando E&lt;span style="font-size:78%;"&gt;t&lt;/span&gt;&lt;= ½, asimismo a&lt;span style="font-size:78%;"&gt;t&lt;/span&gt; se hace más grande al hacerse el error más pequeño.&lt;br /&gt;Una vez que se ha llevado esto acabo,  se actualiza la distribución D&lt;span style="font-size:78%;"&gt;t&lt;/span&gt;, usando la regla que se mostró anteriormente.  El effecto de esta actualización es incrementar los pesos que poseen  los ejemplos que fueron clasificados erroneamente por la hipótesis h&lt;span style="font-size:78%;"&gt;t&lt;/span&gt;, y decrementar los pesos de los ejemplos que fueron clasificados correctamente .&lt;br /&gt;Con esto  el aprendiz se concentrará  en los ejemplos difíciles, en los ejemplos que se le dificultó clasificar.&lt;br /&gt;&lt;br /&gt;La hipótesis final H, la hipótesis triunfadora, es una hipótesis que posee el mayor valor de  a&lt;span style="font-size:78%;"&gt;t&lt;/span&gt; dentro   del conjunto de hipótesis débiles T.&lt;br /&gt;&lt;br /&gt;Así que eso fue una breve introducción al Boosting en Español!&lt;br /&gt;&lt;br /&gt;A quien le interse leer más del tema,   &lt;a href="http://www.cs.princeton.edu/%7Eschapire/boost.html"&gt;aquí&lt;/a&gt; puede encontrar muchos más artículos interesantes, es de hecho  una recopilación que hizo la Universidad de Princeton sobre el tema,  están en  inglés, pero viene todo explicado bastante padre =)&lt;br /&gt;&lt;p&gt;&lt;img style="width: 309px; height: 344px;" src="http://www.cartoonstock.com/lowres/hsc1271l.jpg" alt="boosting" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-5918634013975907181?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/5918634013975907181/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=5918634013975907181' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5918634013975907181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5918634013975907181'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2009/01/una-breve-introduccin-al-boosting.html' title='Una breve introducción al Boosting'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_laFQZJU0vgA/SWA6hOn0IpI/AAAAAAAAAN0/DO5GyUKg6JA/s72-c/formula1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-2348918169403298717</id><published>2008-12-21T10:01:00.000-07:00</published><updated>2009-01-17T16:45:02.371-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='what is passion'/><category scheme='http://www.blogger.com/atom/ns#' term='christian love'/><category scheme='http://www.blogger.com/atom/ns#' term='where does passion come from'/><category scheme='http://www.blogger.com/atom/ns#' term='how can be faithful'/><category scheme='http://www.blogger.com/atom/ns#' term='christianity and faithfulness'/><category scheme='http://www.blogger.com/atom/ns#' term='eros'/><title type='text'>Love and Marriage</title><content type='html'>&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Nota: Puede leer este escrito en español &lt;a href="http://www.estepais.com/inicio/index.php?link=articulo_si.php?art=214-si-69"&gt;aqui&lt;/a&gt;!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; Gracias a mi  viejo &lt;a href="http://meatacounperrito.blogspot.com/"&gt;amigo&lt;/a&gt;  que lo tradució y  publicó en la revista virtual de este pais.  &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;I was away in a little Mexican town, and had no electricity what so ever, this provoked that I started writing  a bit, the following text is the result of the writings that  I did in this lovely little Mexican town.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="width: 511px; height: 258px;" src="http://www.summitview.com/library/files/isetta20marriage.jpg" alt="Tanzmaus" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;The phrase home sweet home is usually one of many  fallacies that exist related to a married household, Tolstoi described it as &lt;span style="font-weight: bold;"&gt;hell&lt;/span&gt;&lt;hell&gt;&lt;span style="font-weight: bold;"&gt;&lt;hell&gt;&lt;/hell&gt;&lt;/span&gt;, and I give him credit for this. Considering that both humans that decided to conform this marriage are normally   not all that benevolent and are  inclined to be a bit neurotic, why should they suddenly turn  into angles after they were wed?&lt;br /&gt;If we ears dropped on any married household we are certain to hear a number of nasty fights.&lt;br /&gt;&lt;br /&gt;Furthermore if we started to ponder on what it means to select  &lt;span style="font-weight: bold;"&gt;A Partner&lt;/span&gt;  for the rest of  our lives, we reach the following conclusion: When we  are selecting a partner, we are placing a bet. Since it is impossible to know  what  the future evolution of the  relationship will be, or what the  future evolution of my partner will be.&lt;br /&gt;Although I don’t think that the problem lays on the bet itself, I believe the problem rests in the fact that this selection of the person one will wed is usually not taken as a true decision.&lt;br /&gt;Usually the newly wed have never really thought about what  their chances of success with their current partner are . Their attention is usually diverted from the ethical problem, that they have, the bet like characteristic of an election of this kind  is diminished by making the newly weds believe that they are together due to destiny, or because they just KNEW that they had to be together. In this way the decision part is completely lost and forgotten.&lt;br /&gt;Since this KNOWLEDGE that they were meant to be, is likely to be imperfect and time limited, it should  be placed with a guarantee The only guarantee that could be valid  for  this situation is the strength of our decision, in which we say that we will be with that person for the rest of our life, no matter what.&lt;br /&gt;&lt;/hell&gt;&lt;br /&gt;&lt;br /&gt;The important thing is to be aware  that  when making a decision of this kind, our decision is tied to a series of unfair situations that might arise and whose consequences we are  engaged to assume, we might live happily ever after or we might not.&lt;br /&gt;When choosing to marry someone, we are NOT telling that person, that they are the man or woman from our dreams who fills up all of our desires. That would be a lie we are keeping a mere illusion of that person, I am  sure that  after a few weeks of living with that individual and seeing them day in and day out the whole fantasy would be lost.&lt;br /&gt;When choosing someone to marry what we are really saying is:&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I want to live with you, just the way you are. &lt;/span&gt;&lt;/span&gt;And what that means is : &lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;I have chosen you to share my life with, and that proves that I love you.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img src="http://www.avilahotel.com/romance/images/romance4.gif" alt="amor no pasional" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;A life that is united with mine for a life time. That is the miracle of marriage. A life that wants my well being because it is related to it’s own well being.&lt;br /&gt;So the happiness in a marriage  seeks for the well being of the loved one, and when one acts searching for the well being of others, one is following the word of Christ, Jesus Christ said we should love each other.  Marriage is the image of love that Christ had. It is a love that is truly reciprocal, We love our partner just the way our partner is, we don’t love love, we don’t love the idea of love, we love our partner without idealization, just like God loves us with  the form and limitations we have.&lt;br /&gt;&lt;br /&gt;The main conflict  that  I believe arises in  the married couple is that we live in a society, where the kind of love the Jesus Christ  invoked and the kind of love in which marriage was established, is currently not  a love that is valued.&lt;br /&gt;The kind of love that our society values the most is passionate love.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;But what is exactly passionate love?&lt;/span&gt;&lt;br /&gt;Passion means suffering ,where destiny  has complete power over that person, the person is no longer free or responsible. Passion means loving love  more than the object of love, loving passion by itself, it is to love and to seek suffering. Passion-Love: desire  for what hurts us and&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; kills &lt;/span&gt;&lt;/span&gt;us in its triumph .&lt;br /&gt;Love and death, mortal love is what the great majority of our poetry is about, or at least the kind that  is the most popular, we see this theme  in prose as well; we see it in our best movies, as well as our best songs. A happy love has no story, only mortal love is worth  a tale.&lt;br /&gt;We glorify passion, we have great enthusiasms for it, we no longer think of &lt;span style="font-weight: bold;"&gt;passion&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;passion&gt;&lt;/passion&gt;&lt;/span&gt; as what  will &lt;hurt&gt;&lt;span style="font-weight: bold;"&gt;hurt&lt;/span&gt;, we see  it as a  more lively life promise, it has a power that transfigures, we see it as something that is beyond happiness and suffering ,a sizzling  beatification.&lt;br /&gt;Why do we wish to feel this passion that hurts us even when  our reason also  condemns it?  Why do we long for this love whose bloom  can only be  suicidal?&lt;br /&gt;Wagner says it is due to our attraction for&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt; death&lt;/span&gt;&lt;/span&gt;, that  attraction  to know that we are in the limit.&lt;br /&gt;This attraction for death that our society has, might have been influenced by  a dualist world  conception, this dualist conception sees in life  a true tragedy, a disgrace ;but sees in death the ultimate victory , in which the being will be reintegrated to the unit, &lt;span style="font-weight: bold;"&gt;through death man is ascended to its god&lt;/span&gt;. In order to bring our sacrifice, a magnification  of our desires is needed.&lt;br /&gt;The kind of love  that this dualism conception harvest is a kind of love that denies  any kind of earthly love, it also denies any kind of earthly happiness.&lt;br /&gt;&lt;/hurt&gt;&lt;p&gt;&lt;img src="http://blogs.psychologytoday.com/files/u8/skeletons.jpg" alt="passionate love" /&gt;&lt;/p&gt;Having obstacles is what  makes passion grow, having a preference for obstacles is saying YES to death , it is a progress toward  a voluntary   death. No earthy love can exist because its goal is the search for passion and passion means suffering, it is not about reciprocal love, it is  about having a love that is not reciprocal or that agonizes from a series of conflicts.&lt;br /&gt;This kind of conception is completely different to the kind of conception Christianity has, and the kind of conception in which marriage is settled in.&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;Christian’s God &lt;/span&gt;turned himself into a man, a true man. The salvation of man kind is no longer through death, the Christian’s God, my God,  said it was not necessary to distance oneself  from this world in order to unite with him, he turned himself into a man and came close to us, he opened up a new door to his Kingdom, in which through sanctification   one can enter. Sanctification is completely different  to sublimation, which is an elusive getaway from life.&lt;br /&gt;Love is no longer seen as something that one must run away from, or in which obstacles should be found. This kind of love turns  and smiles at life. Love is turned into a positive action, a transforming action  that is set to the present. It is transforming because through love we will be allowed to enter God’s Kingdome . It is on earth where  our destiny is decided. &lt;span style="font-weight: bold;"&gt;Our salvation is no longer in the other realm, it is no longer in the desire that consumes life, it is here on earth by obeying God’s word.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Marriage is all about loving your partner day in and day out, giving love in the present, loving them just the way they are, I think that the problems marriage has been having  are due to that fact that we are influenced by 2 different love perceptions, the Christian love and the dualism love conception. There might be a couple that gets married, but because of the dualism ideas that they may be predisposed to having, they could be seeking ,without knowing it, for obstacles.  One of the obstacles in which married couples usually fall for, is infidelity.&lt;br /&gt;I truly believe that faithfulness in our society, is seen as the least natural  of all virtues and the one that brings the less happiness. They think that the success  of a  marriage is the result of an inhuman effort. They consider that faithfulness is an imposed discipline by an absurd or cruel ideal.  We have the habit of exploring each situation to its maximum, without having any mechanisms that judge the situation. The acquired respect to the social system is what keeps the idea of faithfulness. Even when the obstacle is not that difficult to overcome, we find excuses to surrender to it.&lt;br /&gt;&lt;p&gt;&lt;img src="http://farm1.static.flickr.com/119/300709246_d1864882bd_m.jpg" alt="infidelidad" /&gt;&lt;/p&gt;I believe that to overcome this problem, or any kind of problem that might arise in a marriage, we should first of all follow Jesus words with all of our  heart, and second of all we should have the will to carry out a project.  This project is to have a constant need to act for the loved one,  wishing  to govern the real world and not escape it.  This project allows us to build a true master piece and it gives us the opportunity of having glory  through it.&lt;br /&gt;&lt;br /&gt;I hope that understanding the context of where different kinds of love originated from, can help us be more aware of how we act, and allow us to take  a true decision in our love lives of what kind of love we wish to pursue.&lt;br /&gt;&lt;p&gt;&lt;img src="http://4.bp.blogspot.com/_CuXthrEEL4k/R1Ze44902RI/AAAAAAAAA9U/FVSZYmHrnQA/s1600/old_people_love.jpg" alt="Tanzmaus" /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2348918169403298717?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2348918169403298717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2348918169403298717' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2348918169403298717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2348918169403298717'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/12/love-and-marriage.html' title='Love and Marriage'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://farm1.static.flickr.com/119/300709246_d1864882bd_t.jpg' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-872106268233888043</id><published>2008-12-08T10:35:00.000-07:00</published><updated>2008-12-08T14:04:20.315-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='como compartir archivos entre linux y windows'/><category scheme='http://www.blogger.com/atom/ns#' term='como instalar samba'/><category scheme='http://www.blogger.com/atom/ns#' term='samba'/><category scheme='http://www.blogger.com/atom/ns#' term='que es samba'/><title type='text'>¿Qué es Samba y cómo instalo  Samba ?</title><content type='html'>Al leer el título de ¿ cómo se instala?, se le debió haber ido al lector la loca idea, que hablaremos acerca de una danza brasileña.&lt;br /&gt;Lamentable para varios, interesante para muchos otros, en esta ocasión tocaremos el tema de qué es el software de Samba, y cómo se  puede instalar en una máquina, para tenerlo listo para usar.&lt;br /&gt;En primera instancia es importante entender, ¿para qué usaríamos Samba?&lt;br /&gt;Es claro que Linux es genial, y lo amamos, sin embargo no vivimos en un mundo aislado, esto es podemos tener nuestro sistema Linux, mas es muy comùn que queramos acceder a archivos en otros sistemas operativos--el más típico es uno que esté corriendo Microsoft Windows. El paquete de Samba se puede instalar en la distribución Linux que se tenga,para hacer posible que se puedan compartir archivos.&lt;br /&gt;En si Samba es una herramienta para los sistemas UNIX que permite compartir archivos sobre una red que tenga Microsoft Windows o cualquier otro sistema operativo que soporte el modo de compartimiento de  archivos que utiliza Microsoft Windows,  Microsoft Windows file sharing, este protocolo se suele llamar SMB, el cual mantiene las siglas de Server Message Block,ie. Bloque de Mensaje de Servidor.&lt;br /&gt;&lt;br /&gt;Para instalar Samba, simplemente se escribe en la consola:&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 300px; height: 34px; text-align: left;"&gt;sudo apt-get install samba&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;¡No se debe cerrar la terminal al concluir la instalaciòn, ya que la usaremos aún para otras tareas!&lt;br /&gt;&lt;br /&gt;Ahora veremos cómo se debe configurar Samba.&lt;br /&gt;Para ello primero detengamos a Samba&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 300px; height: 34px; text-align: left;"&gt;sudo /etc/init.d/samba stop&lt;/pre&gt;&lt;br /&gt;Debido a que lo que se acaba de instalar de Samba, mete un archivo predefinido, que no hace mucho, lo vamos a renombrar, (siempre es bueno mantenerlo, por si ocurre cualquier cosa incómoda) para trabajar con el archivo original, y meterle las cosas que requerimos.&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 470px; height: 34px; text-align: left;"&gt;sudo mv /etc/samba/smb.conf /etc/samba/smb.conf.template&lt;/pre&gt; &lt;/div&gt;Después crearemos un archivo nuevo  vacío.&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;    &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 34px; text-align: left;"&gt;sudo touch /etc/samba/smb.conf&lt;/pre&gt; &lt;/div&gt;finalmente necesitamos abrir el archivo dentro de algún editor.&lt;br /&gt;&lt;br /&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 34px; text-align: left;"&gt;sudo nano /etc/samba/smb.conf&lt;/pre&gt;&lt;br /&gt;Se deberá copiar/pegar el contenido de la sección que se muestra a continuación en el editor y continuar ...&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;&lt;br /&gt;&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 498px; text-align: left;"&gt;[global]&lt;br /&gt;; General server settings&lt;br /&gt;netbios name = TU_NOMBRE_DE_HOST&lt;br /&gt;server string =&lt;br /&gt;workgroup = TU_GRUPO_DE_TRABAJO&lt;br /&gt;announce version = 5.0&lt;br /&gt;socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192&lt;br /&gt;&lt;br /&gt;passdb backend = tdbsam&lt;br /&gt;security = user&lt;br /&gt;null passwords = true&lt;br /&gt;username map = /etc/samba/smbusers&lt;br /&gt;name resolve order = hosts wins bcast&lt;br /&gt;&lt;br /&gt;wins support = yes&lt;br /&gt;&lt;br /&gt;printing = CUPS&lt;br /&gt;printcap name = CUPS&lt;br /&gt;&lt;br /&gt;syslog = 1&lt;br /&gt;syslog only = yes&lt;br /&gt;&lt;br /&gt;; NOTE: If you need access to the user home directories uncomment the&lt;br /&gt;; lines below and adjust the settings to your hearts content.&lt;br /&gt;;[homes]&lt;br /&gt;;valid users = %S&lt;br /&gt;;create mode = 0600&lt;br /&gt;;directory mode = 0755&lt;br /&gt;;browseable = no&lt;br /&gt;;read only = no&lt;br /&gt;;veto files = /*.{*}/.*/mail/bin/&lt;br /&gt;&lt;br /&gt;; NOTE: Only needed if you run samba as a primary domain controller.&lt;br /&gt;; Not needed as this config doesn't cover that matter.&lt;br /&gt;;[netlogon]&lt;br /&gt;;path = /var/lib/samba/netlogon&lt;br /&gt;;admin users = Administrator&lt;br /&gt;;valid users = %U&lt;br /&gt;;read only = no&lt;br /&gt;&lt;br /&gt;; NOTE: Again - only needed if you're running a primary domain controller.&lt;br /&gt;;[Profiles]&lt;br /&gt;;path = /var/lib/samba/profiles&lt;br /&gt;;valid users = %U&lt;br /&gt;;create mode = 0600&lt;br /&gt;;directory mode = 0700&lt;br /&gt;;writeable = yes&lt;br /&gt;;browseable = no&lt;br /&gt;&lt;br /&gt;; NOTE: Inside this place you may build a printer driver repository for&lt;br /&gt;; Windows - I'll cover this topic in another HOWTO.&lt;br /&gt;[print$]&lt;br /&gt;path = /var/lib/samba/printers&lt;br /&gt;browseable = yes&lt;br /&gt;guest ok = yes&lt;br /&gt;read only = yes&lt;br /&gt;write list = root&lt;br /&gt;create mask = 0664&lt;br /&gt;directory mask = 0775&lt;br /&gt;&lt;br /&gt;[printers]&lt;br /&gt;path = /tmp&lt;br /&gt;printable = yes&lt;br /&gt;guest ok = yes&lt;br /&gt;browseable = no&lt;br /&gt;&lt;br /&gt;; Uncomment if you need to share your CD-/DVD-ROM Drive&lt;br /&gt;;[DVD-ROM Drive]&lt;br /&gt;;path = /media/cdrom&lt;br /&gt;;browseable = yes&lt;br /&gt;;read only = yes&lt;br /&gt;;guest ok = yes&lt;br /&gt;&lt;br /&gt;[MyFiles]&lt;br /&gt;path = /media/samba/&lt;br /&gt;browseable = yes&lt;br /&gt;read only = no&lt;br /&gt;guest ok = no&lt;br /&gt;create mask = 0644&lt;br /&gt;directory mask = 0755&lt;br /&gt;force user = TU_NOMBRE_DE_USUARIO&lt;br /&gt;force group = TU_NOMBRE_DE_FRUPO&lt;/pre&gt; &lt;/div&gt;Ahora bien, para que funcione en su red esto, deberá hacer sólo algunos cambios al archivo, estos son:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;-&gt; netbios name = TU_NOMBRE_DE_HOST&lt;br /&gt;&lt;br /&gt;en donde dice "TU_NOMBRE_DE_HOST", ponga su nombre de  hostname ó de cliente.(Es importante, que NO SE USEN ESPACIOS!!) Lo mejor es poner el mismo nombre que se uso cuando se configuró la instalación.&lt;br /&gt;Ejemplo:&lt;br /&gt;netbios name = DAPPER&lt;br /&gt;&lt;br /&gt;Otra cosa, que se deberá cambiar es el grupo de trabajo:&lt;br /&gt;-&gt; workgroup = TU_GRUPO_DE_TRABAJO&lt;br /&gt;&lt;br /&gt;donde dice "TU_GRUPO_DE_TRABAJO" ponga el nombre de su  grupo de trabajo, pero deberá ser el mismo que se tiene configurado en Windows.&lt;br /&gt;&lt;br /&gt;Para encontrar el grupo de trabajo que se tiene en Windows, se deben seguir los siguientes pasos:&lt;br /&gt;&lt;br /&gt;- De click en Inicio&lt;br /&gt;- de Click en Panel de Control&lt;br /&gt;- Click en sistema&lt;br /&gt;- De click en la segunda pestaña que dice el nombre de la computadora, y encuentre el grupo de trabajo que se tiene alli.&lt;br /&gt;&lt;br /&gt;ejemplo:&lt;br /&gt;workgroup = MSHOME&lt;br /&gt;&lt;br /&gt;Donde dice&lt;br /&gt;-&gt; wins support = yes&lt;br /&gt;&lt;br /&gt;Póngalo en no  si su máquina no cuenta con una dirección ip estática.&lt;br /&gt;En este caso no se tendrán los beneficios que tiene WINS :(&lt;br /&gt;&lt;br /&gt;Donde dice&lt;br /&gt;-&gt; [MyFiles]&lt;br /&gt;Este es el nombre de la carpeta que se mostrará para compartir, se puede dejar con ese nombre, o se puede poner otro nombre, sólo que no se deben usar más de 31 caracteres y evite los  ESPACIOS!&lt;br /&gt;&lt;br /&gt;Lo siguiente:&lt;br /&gt;-&gt; path = /media/samba/&lt;br /&gt;&lt;br /&gt;sugiere que se ha montado una dispositivo, o que se ha hecho una partición. Aquí es donde todos los archivos compartidos se guardarán.&lt;br /&gt;&lt;br /&gt;En linux podemos poner especificar también donde estará la carpeta que tendrá los archivos compartidos. Asumiendo que se desea poner dentro de la carpeta de home, haríamos lo siguiente, dentro de una nueva terminal:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;&lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 34px; text-align: left;"&gt;sudo mkdir /home/samba&lt;/pre&gt; &lt;/div&gt;y en la  otra consola que se tenía abierta, la que estaba con  el edito, busque donde dice  "path =" y ponga alli la dirección anterior.&lt;br /&gt;ejemplo:&lt;br /&gt;path = /home/samba/&lt;br /&gt;&lt;br /&gt;También se debe editar lo siguiente:&lt;br /&gt;&lt;br /&gt;-&gt; force user = SU_NOMBRE_DE_USUARIO&lt;br /&gt;-&gt; force group =SU_NOMBRE_DE_USUARIO&lt;br /&gt;&lt;br /&gt;Remplace "SU_NOMBRE_DE_USUARIO" con el nombre que use para el login, o para iniciar sesión a su máqina.(sin ESPACIOS!)&lt;br /&gt;&lt;br /&gt;Ejemplo:&lt;br /&gt;&lt;br /&gt;force user = stormbringer&lt;br /&gt;force group = stormbringer&lt;br /&gt;&lt;br /&gt;Hemos ya completado la parte de editar smb.conf&lt;br /&gt;Guarde el archivo y salga del editor&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Debido a que vamos estar compartiendo el archivo con otros usuarios, debemos poner los permisos adecuados.&lt;br /&gt;Escriba:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;  &lt;div class="smallfont" style="margin-bottom: 2px;"&gt;&lt;br /&gt;&lt;/div&gt;  &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 34px; text-align: left;"&gt;sudo chmod 0777 /media/samba&lt;/pre&gt; &lt;/div&gt;&lt;i&gt;NOTA: PONGA LA DIRECCIÓN ADECUADA A LA QUE HAYA ESCOGIDO EN WINDOWS ANTERIORMENTE!&lt;br /&gt;&lt;br /&gt;&lt;/i&gt;Eso es todo. :)&lt;br /&gt;Ahora se deberá prender samba.&lt;br /&gt;&lt;br /&gt;Para prender samba por primera vez, escriba:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;    &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 34px; text-align: left;"&gt;sudo /etc/init.d/samba start&lt;/pre&gt; &lt;/div&gt;No debió haberse sucitado ningún error- si se obtuvieron errores, se deberá checar que todas las rutas estén bien, ó busque por errores de ortografía etc.&lt;br /&gt;Ahora se deberá agregar a si mismo, como usuario samba.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;NOTA:  SE LE PEDIRÁ UNA CONTRASEÑA-ASEGURESE QUE ES LA MISMA QUE PUSO PARA SU LOGIN!&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin: 5px 20px 20px;"&gt;    &lt;pre class="alt2" dir="ltr" style="border: 1px inset ; margin: 0px; padding: 6px; overflow: auto; width: 340px; height: 50px; text-align: left;"&gt;sudo smbpasswd -L -a your_username&lt;br /&gt;sudo smbpasswd -L -e your_username&lt;/pre&gt; &lt;/div&gt;Ya que se ha configurado samba y creado las cuentas de los usuarios, hemos terminado  con la parte de Linux, sin embargo hay algo que se deberá poner en Windows.&lt;br /&gt;&lt;br /&gt;Si escogió que no tenía IP estática, En la máquina con Windows:With WINS disabled:&lt;br /&gt;- De click en INICIO&lt;br /&gt;- botón derecho a mi PC&lt;br /&gt;- Seleccione el mapa de drivers de la red&lt;br /&gt;- Seleccione la letra del driver&lt;br /&gt;- Escriba \\&lt;ip-address&gt;\MyFiles&lt;br /&gt;&lt;i&gt;NOTA: PARA ENCONTRAR LA DIRECCIÓN ip  QUE TIENE SU MÁQUINA CON LINUX, DENTRO DE UNA TERMINAL ESCRIBA ifconfig, Y ENCUENTRE LA ip CORRESPONDIENTE A LA INTERFAZ CORRECTA (i.e. eth0).  NO OLVIDE AJUSTAR EL  sharename  AL NOMBRE QUE SE ESCOGIÓ ANTES.&lt;br /&gt;&lt;br /&gt;&lt;/i&gt; - Dé click en Terminar&lt;br /&gt;&lt;br /&gt;Eso es todo samba está arriba y corriendo! Pruebelo, jale una imagen ó un archivo X, a la carpeta que tiene compartida, este archivo deberá aparecer después de unos instantes en ambas carpetas para compartir.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/ip-address&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-872106268233888043?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.tuxmagazine.com/system/files/Samba_for_Windows_File_Sharing.pdf' title='¿Qué es Samba y cómo instalo  Samba ?'/><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/872106268233888043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=872106268233888043' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/872106268233888043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/872106268233888043'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/12/qu-es-samba-y-cmo-instalo-samba.html' title='¿Qué es Samba y cómo instalo  Samba ?'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-5803200131119540974</id><published>2008-11-26T16:09:00.000-07:00</published><updated>2008-11-26T16:50:38.514-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IPV2'/><category scheme='http://www.blogger.com/atom/ns#' term='differencia entre  RFC 1918 y rfc 791'/><category scheme='http://www.blogger.com/atom/ns#' term='diferencia entre IPV4 e IPV2'/><category scheme='http://www.blogger.com/atom/ns#' term='IPV4'/><title type='text'>Deine Indifferenz ist mir scheißegal!</title><content type='html'>Bien, la versión 4 del protocolo IP (Internet Protocol). Es el estándar actual de Internet para identificar dispositivos conectados a esta red. &lt;br /&gt;Sin embargo, IPV4 no fue la primera versión del protocolo IP que existió, (esto es claro, debido a que es la versión 4!) Veremos ahora unas diferencias que existen entre la versiòn 4 y la versiòn 2, esto es IPV2.&lt;br /&gt;&lt;br /&gt;En RFC 791,ó en IPV2, el mismo espacio de dirección así como los mismos campos de la cabecera IP (Las direcciones de destinatario y fuente) son usados para identificar y localizar, usualmente el identificador de un host es idéntico a su localizador, &lt;br /&gt;este identificador es ùnico tanto en tiempo como en espacio.&lt;br /&gt;En IPV4, es un hecho que las direcciones YA NO son globalmente únicas y no tienen un nivel de vida indefinido.&lt;br /&gt;&lt;br /&gt;Tambièn han existido mucha evoluciòn en el modo de hacer routing desde que IP se especificò por primera vez [RFC 791]. Muchos de los principios de Routing han pasado a ña historia, algunos principios sí se han perservado, mientras que nuevas principios han sido introducidos.&lt;br /&gt;Más información, se puede leer aqui-&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.isi.edu/in-notes/rfc2780.txt"&gt;Click hier,um etwas schön zu sehen!&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-5803200131119540974?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/5803200131119540974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=5803200131119540974' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5803200131119540974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5803200131119540974'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/11/deine-indifferenz-ist-mir-scheiegal.html' title='Deine Indifferenz ist mir scheißegal!'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-2759464992100849542</id><published>2008-11-19T19:36:00.000-07:00</published><updated>2008-11-19T20:30:01.162-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='windows xp y el puerto paralelo'/><category scheme='http://www.blogger.com/atom/ns#' term='no tengo permiso de escribir al puerto paralelo'/><category scheme='http://www.blogger.com/atom/ns#' term='programa en C del puerto paralelo'/><category scheme='http://www.blogger.com/atom/ns#' term='_outp'/><category scheme='http://www.blogger.com/atom/ns#' term='puerto paralelo'/><title type='text'>Von zeit zur zeit denke ich an dich und mich...</title><content type='html'>No es sencillo en Windows, (a partir de Windows XP), sacar datos por el puerto paralelo.&lt;br /&gt;El sistema operativo simplemente no  da permisos para  hacerlo, los sistemas operativos Windows 2000 y XP no permiten que los programas tengan acceso directo a este puerto!&lt;br /&gt;Es mucho más fácil hacerlo en Linux Gnu, pero si uno está obsesionado con hacerlo en Windows XP, aquí están los pasos que deberá seguir para tener acceso a la escritura en este puerto:&lt;br /&gt;&lt;br /&gt;                &lt;p style="font-weight: bold;"&gt;           1. Baja y descomprime el archivo &lt;a href="http://personales.ya.com/gsmlandia/software/UserPort.rar"&gt;UserPort&lt;/a&gt;         &lt;/p&gt;         &lt;p style="font-weight: bold;"&gt;           2. Copia el archivo userport.sys al directorio C:\WINDOWS\SYSTEM32\DRIVERS         &lt;/p&gt;         &lt;p style="font-weight: bold;"&gt; 3. Ejecuta el programa userport.exe, y sin tocar nada mas, presiona el botón "Start", luego cierra el userport.Esto tendrás que hacerlo cada vez que reinicies el ordenador. &lt;/p&gt;         &lt;p&gt;&lt;span style="font-weight: bold;"&gt; 4. Finalmente ejecuta el programa que daba problemas en modo de compatibilidad para “Windows 98”.&lt;/span&gt; ¿como se hace esto? Muy sencillo: &lt;/p&gt;         &lt;p&gt;           Para establecer las propiedades de compatibilidad de un programa:         &lt;/p&gt;         &lt;p&gt;           * Haga clic en el botón derecho del ejecutable o en el acceso directo al mismo, y haga clic en Propiedades.&lt;br /&gt;        * Seleccione la casilla de Ejecutar este programa en modo compatibilidad.&lt;br /&gt;        * Seleccione de la lista el sistema operativo Windows 98.&lt;br /&gt;        * Ejecute el programa de nuevo cuando haya terminado de cambiar la configuración.&lt;br /&gt;&lt;/p&gt;Ahora bien, se "supone" que con esto debemos poder tener acceso al puerto paralelo, claro está que es necesario probarlo, para hacerlo se puede hacer un sencillo programa en C++, y usar la siguiente función:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;      _outp(a,b);&lt;/span&gt;&lt;br /&gt;Esta función, localizada en la librería de Conio.h, (uuuh Conio...gag me with a spoon!)  recibe 2 parámetros, " a" es el puerto al cual se desea escribir, en este caso es el puerto paralelo y por ende se pondría aquí  0x378, que es el número asigando a este puerto, y "b", que es el valor que se desea enviar a esta puerto. b es un valor entero, y el valor máximo que puede tomar es 255,esto se debe a la configuración del puerto paralelo que usé&lt;strong&gt;&lt;/strong&gt;, contaba con 8 bits de salida, y los demás representaban tierra y uno extra la señal de storbe.&lt;br /&gt;Recordemos que el bianrio 11111111 equivale a 255, y por ende es el mayor valor que  se puede representar con esta salida, ahora bien  el menor valor es cero, y es cuando tenemos 00000000.&lt;br /&gt;&lt;br /&gt;Un programa simple, para verificar que nuestro puerto paralelo está funcionado adecuadamente  se presenta a continuación: (Este programa lo corrí en Visual Studio 2003)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include &lt;stdio.h&gt;&lt;/stdio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include &lt;conio.h&gt;&lt;/conio.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;#include &lt;ctype.h&gt;&lt;/ctype.h&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;int main()&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    char c='s';&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         int orden, alphacommand = 1, betacommand = 2;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         while (tolower(c)=='s')&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;         {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        printf("\n1 = alphacommand\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  printf("2 = betacommand\n");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        printf("Elija el comando (1/2): ");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        scanf("%i",&amp;amp;orden);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  if (orden==alphacommand)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                                   _outp(0x378, 0x1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  else if (orden==betacommand)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                               _outp(0x378, 0x0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;        printf("\nComando Realizado.\n\nDesea Continuar?:(S/N)");&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;                  c = getch();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    }&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    return 0;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El programa anterior cuando se escoje el alfacomando, prenderá un bit del puerto paralelo, con un multimetro se puede verificar que esto se lleve acabo realmente.&lt;br /&gt;Esperemos que este post ahorre el  tiempo de las personas...und sie können mit dieser Zeit eine gute Liebe finden&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-2759464992100849542?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/2759464992100849542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=2759464992100849542' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2759464992100849542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/2759464992100849542'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/11/von-zeit-zur-zeit-denke-ich-dich-und.html' title='Von zeit zur zeit denke ich an dich und mich...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-8133310956064676949</id><published>2008-11-18T08:43:00.000-07:00</published><updated>2008-11-18T10:44:32.174-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sigo odiando redes'/><category scheme='http://www.blogger.com/atom/ns#' term='me quiero suicidar porque odio redes'/><category scheme='http://www.blogger.com/atom/ns#' term='mensajes de error del router'/><category scheme='http://www.blogger.com/atom/ns#' term='ICMP'/><title type='text'>Un mensajito no de amor, sino de ICMP...:(</title><content type='html'>Los errores de mensajes ICMP, se usan por los routers y los hosts ó clientes, para decirle a un dispositivo enviador de datagramas, que se tuvieron problemas recibiéndolo.&lt;br /&gt;En la versión original de ICMP, 5 diferentes mensajes de error son definidos. Estos mensajes se describen en el estándar ICMP, RFC 792.&lt;br /&gt;Veamos ahora los mensajes de error que presenta ICMPv4:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mensaje de "Destino Inalcanzable" :&lt;/span&gt; Los cuales se envían cuando existen fallos en el envió del datagrama.&lt;br /&gt;Seamos reales, el protocolo de internet es uno que no es muy confiable, no existe garantía que un datagrama que es enviado por dispositivo hacia otro vaya  realmente a llegar.  Toda la red de clientes y routers hará su mayor esfuerzo para entregar un datagrama, pero es posible que no llegue a su destino por un sin fin de razones.  Claro está, que los dispositivos que se encuentran  en una red IP entienden esto, y se diseñan adecuadamente.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Ahora bien, a pesar de que IP está diseñado para fallar, no se deben tomar estas fallas a la ligera.  &lt;span style="font-family:Arial;"&gt;Se necesita un mecanismo que le diga al dispositivo fuente, que algo "malo" está sucediendo, además se le deberá decir la razón de ello.&lt;br /&gt;En IPV4 este servicio se brinda através de la transmisión del mensaje "Destino Inalcanzable". Estos mensajes, incluyen  la  porción de los datagramas que no se pudieron entregar, esto ayuda a que  emisor entienda en dónde se tuvo el error.&lt;br /&gt;&lt;br /&gt;Se muestra a continuación el formato que tiene el mensaje de Destino Incalcanzable&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.tcpipguide.com/free/diagrams/icmpdestinationunreachable.png" alt="Grafik" height="200" width="400" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;Se muestran a continuación códigos de los subtipos de errores (Error Subtype)  que presenta este  tipo de mensajes:&lt;/span&gt;&lt;/p&gt;&lt;table border="3" cellpadding="4" cellspacing="2"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Valor de código&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Subtipo de mensaje&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="left"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Descripción&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Red inalcanzable&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;El datagrama no pudo ser entregado a la red que se especificó en  el campo de ID de red  en la porción de la dirección IP. Se peude deber a un problema en el routing, aunque también puede ser causado por tener una  mala dirección&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Cliente inalcanzable&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;El datagrama logró llegar a la red que se especificó, mas no pudo ser entregado al host que se indicó en la dirección. Esto suele ser de nuevo un problema relacionado con el ruteo.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Protocolo inalcanzable&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;El protocolo que se especifico en el campo del protocolo  fue inválido para el cliente al cual el datagrama fue entregado.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;3&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Puerto inalcanzable&lt;br /&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;El puerto destino, especificado en la cabecera UDP ó TCP fue inválido.&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-weight: bold;"&gt;Mensajes de Fuente sofocada:&lt;/span&gt; Se utiliza para decirle al dispositivo  que deberá enviar los datagramas a una menor tasa.&lt;br /&gt;Si un destinatario, está recibiendo datagramas  a una tasa relativamente lenta, es posible que procese cada uno de los datagramas al vuelo, en el momento en el que los recibe. Sin embargo, la recepción de datagramas en una red tienede a ser disparejo, debido a las tasas altas y bajas de tráfico existente. Para esos momentos en los cuales se reciben datagramas  a una frecuencia mayor que en la que se pudiesen estos procesar, todos los dispositivos cuentan con un buffer en donde pueden temporalmente guardar a los datagramas que reciben, se guardarán allí hasta que ya tengan tiempo para procesarlos.&lt;br /&gt;&lt;/span&gt;Sin embargo el buffer es en si de un tamaño limitado, y pueden existir casos en los que el tráfico se recibe tan rápido que el buffer se llena.  Cuando esto sucede, el dispositivo se ve obligado a desahacerse, descartar todos los nuevos datagramas que le lleguen. El receptor deberá por ende enviar un mensaje de retroalimentación a la fuente y explicarle su problema.&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;En IPv4,un dispositivo que es obligado a "tirar" datagramas debido a una congestion, le envía al receptor retroalimentación a la fuente, mediante los mensajes de Sofocamiento de la fuente. Es una manera cortés de decirle a la fuente: " ¡¡No tan rápido!!" . Cuando un dispositivo recibe este tipo de mensajes, sabe que debe  disminuir la frecuencia a la cual envía los datagramas al receptor en cuestión.&lt;br /&gt;Se muestra continuación el formato de este tipo de mensaje:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;table border="3" cellpadding="4" cellspacing="2"&gt;&lt;caption align="top"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/caption&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Nombre del Campo&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Tamaño (bytes)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="left"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Descripción&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Tipo&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Tipo: &lt;/i&gt;&lt;/b&gt; Identifica el tipo de mensaje ICMP. Para mensajes de Sofocamiento de fuente, este valor se pone en 4.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Código&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(0, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Code:&lt;/i&gt;&lt;/b&gt;  Identifica el subtipo de error siendo comunciado, en este caso no se usa y se deja en 0.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Checksum&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;2&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Checksum:&lt;/i&gt;&lt;/b&gt; Campo de 16 bits usado en la cabecera del ICMP&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;SinUso&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;/td&gt; &lt;td style="color: rgb(0, 0, 0);" bg="" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;4&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(0, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;SinUSO:&lt;/i&gt;&lt;/b&gt;  4 bytes que se dejan en blanco y no se usan&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Porción original del Datagrama&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;Variable&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Porción original del Datagrama&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;:&lt;/i&gt;&lt;/b&gt; Incluye toda La cabecera así como los primero 8 bytes del datagrama que fueron descartados debido a congetionamiento.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a name="Figure_140"&gt;&lt;/a&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;table border="0" cellpadding="4" cellspacing="2"&gt;&lt;caption align="bottom"&gt;&lt;br /&gt;&lt;/caption&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td align="center" valign="top"&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;p align="left"&gt;&lt;span style="font-weight: bold;"&gt;Mensaje de tiempo excedido:&lt;/span&gt; Se envía cuando un datagrama ha estado viajando por la red demasiado tiempo, ó cuando se está tardando mucho  en unir los distintos fragmentos del datagrama, para re esamblarlo.&lt;br /&gt;&lt;/p&gt;&lt;span style="font-family:Arial;"&gt;&lt;/span&gt; &lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;span style="font-weight: bold;"&gt;Mensaje de Redirección:&lt;/span&gt; Este mensaje permite que el router   dé retro alimentación respecto a mejores rutas que existen para llegar a un  cliente.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Mensaje de Problema con los Parámetros:&lt;/span&gt;  Este es un mensaje genérico, usado para todos los demás problemas que pudiesen existir que no están cubiertos en los otros mensajes de error de ICMP.&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;Si un dispositivo encuentra problemas  serios con cualquiera de los parametros dentro de la cabecera de un datagrama IP, deberá descartar o deshacerse del datagrama. AHora bien, debido a que se trata de una situación crítica,  deberá comunciarse con el emisor del datagrama y reportr su problema. Esto se logra através del uso del mensaje "Problema de Parametro" que ICMPv4 brinda.&lt;br /&gt;Este es un tipo de mensaje que peude ser usado, para indicar cualquier tipo de error que exista en la cabecera de un datagramaIP.sage had the problem.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;br /&gt;&lt;/p&gt;&lt;table style="width: 500px; height: 416px;" border="3" cellpadding="4" cellspacing="2"&gt;&lt;caption align="top"&gt;&lt;br /&gt;&lt;/caption&gt; &lt;tbody&gt;&lt;tr&gt;&lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Nombre del Campo&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Tamaño (bytes)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td bg="" style="color: rgb(255, 0, 0);" align="left"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Descripción&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Tipo&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Tipo: &lt;/i&gt;&lt;/b&gt; Identifica el tipo de mensaje ICMP, este valor se pone en 12.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Código&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td bg="" style="color: rgb(0, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Code:&lt;/i&gt;&lt;/b&gt;  Identifica el subtipo de error siendo comunciado, se muestra una tabla abajo de esta que indica el tipo de suberrores que pueden existir.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Checksum&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;2&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Checksum:&lt;/i&gt;&lt;/b&gt; Campo de 16 bits usado en la cabecera del ICMP&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-weight: bold;"&gt;Apuntador&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;1&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Apuntador: &lt;/i&gt;&lt;/b&gt; Apunta a la localización del datagrama donde se ocasionó el problema.&lt;br /&gt;Se utiliza este campo, sólo cuando el valor del código es 0.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt;&lt;td bg="" style="color: rgb(0, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;SinUso&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt; &lt;/td&gt;&lt;td style="color: rgb(0, 0, 0);" bg="" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;4&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td bg="" style="color: rgb(0, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;SinUSO:&lt;/i&gt;&lt;/b&gt;  4 bytes que se dejan en blanco y no se usan&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Porción original del Datagrama&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;Variable&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;Porción original del Datagrama&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;:&lt;/i&gt;&lt;/b&gt; Incluye toda La cabecera así como los primero 8 bytes del datagrama que fueron descartados debido a congetionamiento.&lt;/span&gt;&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ahora se muestran los parámetros para interpretar los códigos de error&lt;br /&gt;&lt;br /&gt;&lt;table border="3" cellpadding="2" cellspacing="2"&gt;&lt;caption align="top"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;&lt;i&gt;&lt;br /&gt;&lt;/i&gt; &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;&lt;/caption&gt; &lt;tbody&gt;&lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Valor del Códig&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt; Tipo de Submensaje&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="left"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;Descripción&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;0&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;i&gt;El apuntador indica el error&lt;br /&gt;&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;El apuntador indica donde se localiza el error.&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;1&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);" align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;i&gt;Falta un campo requerido&lt;/i&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td bg="" style="color: rgb(255, 0, 0);"&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;Debido a que el apuntador no puede señalar donde existió este tipo de error, debido a que el campo NO existe, es necesario manejarlo de este modo.&lt;/span&gt;&lt;span style="font-family:Wingdings;"&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td align="center"&gt;&lt;p align="center"&gt;&lt;span style="font-family:Arial;"&gt;&lt;b&gt;2&lt;/b&gt;&lt;/span&gt;&lt;/p&gt; &lt;/td&gt; &lt;td align="center"&gt;&lt;span style="font-style: italic;"&gt;Longitud incorrecta&lt;/span&gt;&lt;br /&gt;&lt;/td&gt; &lt;td&gt;&lt;p align="left"&gt;&lt;span style="font-family:Arial;"&gt;La longitud total de datagrama fue incorrecta, lo cual indica un problema general con todo el datagrama. De nuevo el apuntador no es de mucha ayuda.&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-8133310956064676949?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/8133310956064676949/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=8133310956064676949' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8133310956064676949'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/8133310956064676949'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/11/un-mensajito-no-de-amor-sino-de-icmp.html' title='Un mensajito no de amor, sino de ICMP...:('/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3598578222360608236</id><published>2008-10-06T22:43:00.000-06:00</published><updated>2008-10-06T23:26:40.765-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='reconocimiento de texto'/><category scheme='http://www.blogger.com/atom/ns#' term='markov en español'/><category scheme='http://www.blogger.com/atom/ns#' term='likelihood probabilities'/><category scheme='http://www.blogger.com/atom/ns#' term='analisis inteligente de palabras'/><category scheme='http://www.blogger.com/atom/ns#' term='viterbi'/><category scheme='http://www.blogger.com/atom/ns#' term='código de viterbi'/><title type='text'>Why I no longer  hate networking, as much as before</title><content type='html'>Creo, que los algoritmos de deodificación, me agradan bastante. ¿Ya conocían el de Viterbi?&lt;br /&gt;Está bastante interesante como funciona, usa likelihood probabilities, en Aprendizaje o Machine Learning, se usa mucho para diversos métodos de aprendizaje.&lt;br /&gt;No conocía en lo personal yo el de Marko&lt;span style="font-style: italic;"&gt;v&lt;/span&gt;, y de hecho Viterbi se basa en este método para su funcionamiento ,Belive it or no, es bastante straight foward.&lt;br /&gt;Je, veamos sí es tan cierto,intentaré explicarlo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;span style="font-weight: bold;"&gt;Viterbi:&lt;/span&gt;&lt;/span&gt; Es un algoritmo de decodificación, desarrollado a finales de 1960 por Andrew Viterbi. Los decodificadores Viterbi, han sido la manera más efectiva de decodificar comunciaciones de voz inalámbricas en transmisiones satelitales y de celular. Viterbi saca ya sea 0 o 1, dependiendo de lo que estima, que es el bit de entrada.El  algoritmo de Viterbi, brinda una manera eficiente de encontrar la secuencia de caracetres con mayor probablidad a posteriori, (MAP)&lt;br /&gt;&lt;br /&gt;Para ilustrar como funciona el algorimto de Viterbi, daré un pequeño ejemplo:&lt;br /&gt;Assúmase, que se tiene un alfabeto de 4 letras, A={T,A,C,O}, y que se tiene un Optical Character Readers , un lector de caracteres, el cual intentará leer palabras que sean válidas del inglés. Supónase, que la cadena observada por la maquina OCR es:   Z= -CAT-, donde el  "-"  denota espacios en blanco. Los vectores característicos  z1, z2, and z3  son obtenidos cuando el extractor de característica detecta a C,A,T. (GATO en español, y es una palabra válida del idioma inglés.)&lt;br /&gt;La información disponible obtained y relevante que el algoritmo Viterbi utliza para tomar una decisión, se expresa en término de la gráfica direccionada, que se muestra a continuación. Todos los nodos, excpetos los que están en blanco "-", poseen una probablidad ascosciada a ellos.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.cim.mcgill.ca/%7Elatorres/Viterbi/Images/va_fig7.gif" alt="Denker" width="350" align="top" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Vemos, de la figura ,  que cualquier camino , de un nodo principio, hasta un nodo final, represneta una secuencia de letras, mas no necesariamente una palabra válida. Se trata de hallar  la sequencia de letras que maximizen el producto de probabilidades en su camino. Esto se puede lograr, al porcesar los nodos verticales, paso por paso de izqueirda a derecha. De este modo, si se agregan los logaritmos de las orillas, y las probabildiades de nodo, del camino, obtenemos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;gGAT&lt;/span&gt;(z1,Z2,Z3)=&lt;span style="font-weight: bold;"&gt;log&lt;/span&gt;p(z1|C)+&lt;span style="font-weight: bold;"&gt;log&lt;/span&gt;p(z2|A)+ &lt;span style="font-weight: bold;"&gt;log&lt;/span&gt;p(Z3|T)+&lt;span style="font-weight: bold;"&gt;log&lt;/span&gt;[P(C|-)P(A|C)P(T|A)P(-|T)]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Con este modelo, las letras del idioma inglés se visualizan como salidas, de un proceso de M estados de Markov, donde M es el número de caracteres distinguibles, si se trata de letras, el número será de 26, ya que el alfabeto del idioma inglés, pose 26 letras. En cada etapa de la secuencia (palabra), las 26 más probables secuencias se procesarán, la secuencia más probable que terminé en A, la secuencia más probable que termine en B, etc. En la etapa final, la secuencia más probable es seleccionada.&lt;br /&gt;&lt;img src="http://www.cim.mcgill.ca/%7Elatorres/Viterbi/Images/va_fig6.gif" alt="Denker" align="top" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3598578222360608236?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3598578222360608236/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3598578222360608236' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3598578222360608236'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3598578222360608236'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/10/why-i-dont-hate-networking-so-much-now.html' title='Why I no longer  hate networking, as much as before'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6466586959803354803</id><published>2008-09-27T20:46:00.000-06:00</published><updated>2008-09-27T20:53:55.559-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stay home saturday'/><category scheme='http://www.blogger.com/atom/ns#' term='eating pizza in bed'/><category scheme='http://www.blogger.com/atom/ns#' term='why oh why did I swallow that fly'/><title type='text'>Stay home saturday...</title><content type='html'>Sometimes I just can't be bothered with the Bingo or going down the local strip joint and just want a quiet night in and sometimes I don't get a choice.&lt;br /&gt;&lt;br /&gt;I sometimes have to make up an excuse to friends if I want to stay in as they would not accept the truth. They think I'm sad if I forsake the chance of fun and frolics (and maybe prizes) or having some jigglies thrust in my face for a night in at Casa Ham&amp;amp;Onion.&lt;br /&gt;&lt;br /&gt;Do you agree with my friends and think it is sad to stay in on a Saturday night? Or do you think it is fine enjoy one's own company and the telly with a plate of chips and some neopolitan icecream?&lt;br /&gt;&lt;br /&gt;I don't tell them about the Babyliss Foot Spa I have.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6466586959803354803?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6466586959803354803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6466586959803354803' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6466586959803354803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6466586959803354803'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/stay-home-saturday.html' title='Stay home saturday...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-3857922627262397862</id><published>2008-09-20T19:58:00.000-06:00</published><updated>2008-09-21T20:54:17.114-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Schöner Fremder Mann'/><category scheme='http://www.blogger.com/atom/ns#' term='flash plugin'/><category scheme='http://www.blogger.com/atom/ns#' term='Connie Francis'/><category scheme='http://www.blogger.com/atom/ns#' term='kubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='linux 64 bit'/><title type='text'>Cantando con Radio Felicidad...</title><content type='html'>My 64 bit Kubuntu, finally has the freaking flash plug in!!&lt;br /&gt;This webpage is really good :&lt;br /&gt;&lt;a href="https://help.ubuntu.com/community/AMD64/FirefoxAndPlugins?action=show&amp;amp;redirect=Firefox2AMD64Flash9Java"&gt;https://help.ubuntu.com/community/AMD64/FirefoxAndPlugins?action=show&amp;amp;redirect=Firefox2AMD64Flash9Java&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It explains everything soooo clearly! step by step, for dummies like mua.&lt;br /&gt;To celebrate, let's sing an old fashion love song:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;object height="349" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/c_yG9V428_A&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;embed src="http://www.youtube.com/v/c_yG9V428_A&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;color1=0xcc2550&amp;amp;color2=0xe87a9f&amp;amp;border=1" type="application/x-shockwave-flash" allowfullscreen="true" height="349" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-3857922627262397862?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/3857922627262397862/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=3857922627262397862' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3857922627262397862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/3857922627262397862'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/cantando-con-radio-felicidad.html' title='Cantando con Radio Felicidad...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7902765362677729421</id><published>2008-09-17T14:03:00.000-06:00</published><updated>2008-09-17T14:24:23.869-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pila'/><category scheme='http://www.blogger.com/atom/ns#' term='leyendo el nivel de la pila'/><category scheme='http://www.blogger.com/atom/ns#' term='nivel de materia'/><category scheme='http://www.blogger.com/atom/ns#' term='ACELEROMETRO Y EL WIIMOTE'/><category scheme='http://www.blogger.com/atom/ns#' term='la pila del wiimote'/><title type='text'>Battery Mattery...</title><content type='html'>Pilas: Se puede leer el nivel de las pilas, con el reporte 0x20.  Se recibe este reporte, cuando se conecta algo estern al Wiimte. O se peude solicitar, al enviar un reporte 0x15, con el payload puesto en cualqueir valor , aunque el bit 1 debe estar encendido. (a1) 20 00 00 02 00 00 C0&lt;br /&gt;el 0xC0, al final indica el nivel de pila. Depende mucho, de la marca, ya que algunas pueden rgistrar valores de 0xC8, al estar totalmente cargadas.&lt;br /&gt;Es importante notar, que se puede obtener este mensaj sin solicitud, cuando esto suceda, se tendrá que enviar un reporte 0x12 con el numero de reporte deseado, para poder recibir información nueva y de otro tipo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7902765362677729421?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7902765362677729421/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7902765362677729421' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7902765362677729421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7902765362677729421'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/battery-mattery.html' title='Battery Mattery...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-4048833171167687814</id><published>2008-09-17T13:43:00.000-06:00</published><updated>2008-09-17T14:02:36.024-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='leer y escribir en wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='memoria wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='memoria flash del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='eeprom del wiimote'/><title type='text'>Memoria que tiene abordo el wiimote</title><content type='html'>Memoria Flash: En un Wiimote que está en blanco, es decir uno que se haya comprado por separado del Wii, y que nunca se haya conectado a el. La memoria, estará estructurada de la siguiente manera:&lt;br /&gt;Direcciones 0x0000 a la  0x003F:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; A1 AA 8B 99 AE 9E 78 30 A7 74 D3 1 AA 8B 99 AE&lt;br /&gt;9E 78 30 A7 74 D3 82 82 82 15 9C 9C 9E 38 40 3E&lt;br /&gt;82 82 82 15 9C 9C 9E 38 40 3E 00 00 00 00 00 00&lt;br /&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00&lt;br /&gt;&lt;br /&gt;Estas son basicamente dos secuencias, cada una repetida dos veces:&lt;br /&gt;A1 AA 8B 99 AE 9E 78 30 A7 74 D3&lt;br /&gt;A1 AA 8B 99 AE 9E 78 30 A7 74 D3&lt;br /&gt;82 82 82 15 9C 9C 9E 38 40 3E&lt;br /&gt;82 82 82 15 9C 9C 9E 38 40 3E&lt;br /&gt;Los tres bytes empezando en 0x16 y 0x20 (Los tres primeros bytes de la tercera y cuarta linea ) guardan la los offsets de los zeros calibrados del accelerometro.&lt;br /&gt;Se cree que el 9C 9C 9E guardan la fuerza de gravedad que hay en esos ejes.&lt;br /&gt;Direcciones 0x0040 a 0x0FC9: Todos estan en ceros en un Wiimote recien comprado  Direcciones  0x0FCA a 0x12B9: Es el  bloque 1  Mii Data , esta todo en ceros en un Wiimote recien comprado.&lt;br /&gt;Direcciones  0x12BA a 0x15A9: Mii Data bloque 2 , esta todo en ceros en un Wiimote recien comprado.&lt;br /&gt;Direcciones  0x15AA a 0x15FF: esta todo en ceros en un Wiimote recien comprado.&lt;br /&gt;Direcciones  0x1600 a 0xFFFF: No existen, se regresa un error, si uno trata de leer de ellas. Aunque no se obtendrá el error, si uno empeiza a leer antes o en la dirección límite 0x15FF. En ese caso, Sólo se obtendrán ceros , para los bytes invalidos&lt;br /&gt;&lt;br /&gt;Para la memoria Flash, la dirección está hecha de sólo 2 bytes. Entonces, la dirección 0x010000 se trata de la misma manera que la dirección   0x0000. Esto se cumple hasta la dirección  0xFF0000.  Ese Byte  (0x00FF0000)  siempre se ignora, a menos que el byte mas significativo (0xFF000000) tenga un 2 (0x04) puesto&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Con respecto a la memoria EEPROM, que posee también el dispositivo, parece ser, que la porción leible por el Bluetooth, empieza en la dirección 0x0070.&lt;br /&gt;&lt;br /&gt;Leer y Escribir: Se pueden leer datos con el siguiente comando: (52) 17 FF FF FF FF SS SS&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-4048833171167687814?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/4048833171167687814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=4048833171167687814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4048833171167687814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4048833171167687814'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/memoria-que-tiene-abordo-el-wiimote.html' title='Memoria que tiene abordo el wiimote'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-6135336405346005285</id><published>2008-09-17T12:39:00.000-06:00</published><updated>2008-09-17T13:34:18.440-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interfaz HID'/><category scheme='http://www.blogger.com/atom/ns#' term='como funciona el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='reportes en el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='Interfaz HID y el wiimote'/><title type='text'>HID my ass...</title><content type='html'>Interfaz HID&lt;br /&gt;El estándar HID, permite que los dispositivos se puedan describir a si mismos, utilizando un bloque descriptor de HID. Este bloque incluye una enumeración de reportes que el dispositivo entiende.Un reporte, puede ser visto como un puerto de una red, que está asigando con algún servicio en particular. La única diferencia, es que los reportes son unidireccionales, y el descriptor HID lista para cada puerto la dirección, ya sea de salida o de entrada, también dice cual sera el tamaño payload para cada uno de los puertos. Como todos los dispositivos HID, el Wiimote reporta su bloque descriptor HID, cuando se le pide información usando el protocolo SDP. Su descriptor, se ve de la siguiente forma:&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr valign="top"&gt;&lt;br /&gt;&lt;td&gt;&lt;strong&gt;Salidas&lt;/strong&gt; &lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;ID del Reporte &lt;/th&gt;&lt;th&gt;Tamaño&lt;br /&gt;Payload &lt;/th&gt;&lt;th&gt;Función&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x11 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;&lt;a title="" href="http://www.blogger.com/post-edit.g?blogID=30573458&amp;amp;postID=6135336405346005285#Player_LEDs"&gt;Player LEDs&lt;/a&gt;, &lt;a title="" href="http://www.blogger.com/post-edit.g?blogID=30573458&amp;amp;postID=6135336405346005285#Rumble"&gt;Rumble&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x12 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;Tipo de reporte/ID&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x13 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;Habilita el sensor infrarojo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x14 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;Habilita bocina&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x15 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;Controla el estátus&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x16 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Escribe datos&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x17 &lt;/td&gt;&lt;td&gt;6 &lt;/td&gt;&lt;td&gt;Lee datos&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x18 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Le da datos a la bocina&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x19 &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;Pone a la bocina en silencio&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;Salidas: &lt;td&gt;0x1a &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;Habilita el sensor infrarojo 2&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;td&gt;&lt;strong&gt;Entradas&lt;/strong&gt; &lt;table border="1"&gt;&lt;br /&gt;&lt;tbody&gt;&lt;tr&gt;&lt;br /&gt;&lt;th&gt;Reporte ID &lt;/th&gt;&lt;th&gt;Tamaño&lt;br /&gt;Payload &lt;/th&gt;&lt;th&gt;Función&lt;br /&gt;&lt;/th&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x20 &lt;/td&gt;&lt;td&gt;6 &lt;/td&gt;&lt;td&gt;Puerto de expansión&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x21 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Lee datos&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x22 &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;Escribe datos&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x30 &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;Es sólo para los botones&lt;a title="" href="http://www.blogger.com/post-edit.g?blogID=30573458&amp;amp;postID=6135336405346005285#Buttons"&gt;Buttons only&lt;/a&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x31 &lt;/td&gt;&lt;td&gt;5 &lt;/td&gt;&lt;td&gt;Da un reporte de sensado de los botones.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x32 &lt;/td&gt;&lt;td&gt;16 &lt;/td&gt;&lt;td&gt;Es puerto de expansión para los botones&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x33 &lt;/td&gt;&lt;td&gt;17 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x34 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Puerto de expansión del infrarojo&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x35 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x36 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x37 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x38 &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x3d &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;0x3e &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;/td&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;Entradas: &lt;td&gt;0x3f &lt;/td&gt;&lt;td&gt;21 &lt;/td&gt;&lt;td&gt;Da un reporte del sensado del movimiento , así como de los botones.&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;p&gt;Nótese que "salida" se refiere a paquetes, que son enviados del host al wiimote, y "entrada" se refiere a paquetes que van del Wiimote al host.&lt;/p&gt;&lt;p&gt;La notación de escritura, que se llevará acabo, es:&lt;/p&gt;&lt;p&gt;Incluir la cabecera del Bluetooth en paréntesis, el ID del reporte, y finalmente el payload. Cada byte se escribe en hexadecimal, sin tomar el prefijo 0x y separado por espacios.&lt;br /&gt;Por ejemplo:&lt;br /&gt;(a1) 30 00 00&lt;/p&gt;&lt;p&gt;Es un paquete de datos de entrada (0xa1), en el canal 0x30, con 2 bytes de payload 0x00, 0x00.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-6135336405346005285?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/6135336405346005285/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=6135336405346005285' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6135336405346005285'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/6135336405346005285'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/interfaz-hidhid-interface-el-estndar.html' title='HID my ass...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-5236160523167864091</id><published>2008-09-17T11:55:00.000-06:00</published><updated>2008-09-17T12:39:08.594-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='como funciona el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='Broadcom 2042'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth'/><category scheme='http://www.blogger.com/atom/ns#' term='bluetooth y el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='comunicacion en el wiimote'/><title type='text'>You got an incomming call from Mr. Wiimote</title><content type='html'>&lt;p&gt;Comunicaciones.&lt;br /&gt;El Wiimote se puede comunicar a la computadora, vía Bluetooth. El controlador Bluetooth que se utiliza es el chip Broadcom 2042. El cual es diseñado para ser utilizado con dispositivos, que siguen el estándar Bluetooth de dispositivos de Interfaces Humanas, (HID por sus siglas en inglés) como pueden ser teclados o mice. El Bluetooth HID se basa directamente en el estándar USB, y mucha de la misma documentación es aplicable.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;La computadora, le puede pedir información al Wiimote, mediante el protocolo de descubrimiento de servicios, (SDP, por sus siglas en inglés). En este caso,  el Wiimote reportará  y regresará una gran cantidad de información.&lt;br /&gt;En particular reporta:&lt;br /&gt;Nombre :Nintendo RVL-CNT-01&lt;br /&gt; ID Vendedor0:x057e&lt;br /&gt;ID del Producto :0x0306 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;El Wiimote envía reportes al host, con una frecuencia máxima de 100 reportes por segundo. Del estándar Bluetooth, El Wiimote no utiliza  ninguna de sus  validaciónes o codificaciónes.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;Ahora bien, para que la computadora tenga conexión con él, uno debe poner al control en modo de descubrimiento de servicios, esto se logra al apretar los botones 1 y 2 al mismo tiempo, o al apretar el botón rojo de sincronización, que se encuentra en la parte de atrás, cerca de la batería. Una vez que se encuentra en este modo, el HID driver del host, puede empezar a pedirle información al Wiimote.&lt;br /&gt;Pero, si el driver HID del host no logra conectarse con el Wiimote, en menos de 20 segundos, el Wiimote se apagará . Apretando los botones 1 y 2 continuamente, hará que el Wiimote, se tenga que mantener en modo de descubrimiento, por lo que no se apagará. Esto, no funciona cuando se utiliza el botón de sincronizar.&lt;br /&gt;Cuando se encuentra en modo de descubrimiento, los LEDS del Wiimote parpadearán. El número de parpadeos es directamente proporcional con lo que le queda de vida a la pila. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-5236160523167864091?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/5236160523167864091/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=5236160523167864091' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5236160523167864091'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/5236160523167864091'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/you-got-incomming-call-from-mr-wiimote.html' title='You got an incomming call from Mr. Wiimote'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-4027346177885902972</id><published>2008-09-16T23:16:00.000-06:00</published><updated>2008-09-17T00:10:34.686-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='como funciona el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='rumble del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='leds del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='bocinas del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='salidas del wiimote'/><title type='text'>What wiitle Wiimote gives out...</title><content type='html'>El Wiimote (Control Remoto Wii ) es el control principal de la consola Wii de Nintendo. Sus características más destacables son la capacidad de detección de movimiento en el espacio y la habilidad de apuntar hacia objetos en la pantalla. Este control, se está usando mucho ya, en video juegos, que pueden ser corridos en una PC, sin necesidad de la consola Wii. El Wiimote mantiene comunciación con la computadora, mediate Bluetooth.&lt;br /&gt;&lt;br /&gt;Analicemos ahora, la salidas que posee este control&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Salidas:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;LEDS:&lt;/strong&gt;Se encuentran en  la punta del control, son 4 LEDS azules. Mientras se está jugando, estos LEDS se usan para indicar que el wiimote se encuentra en modo descubrible de Bluetooth (cuando parpadea, indica el nivel de batería) también sirven estos LEDS, para indicar el número de jugador al que corresponde ese control. (si es el número de jugador es  2, se prenderían dos LEDS) Los LEDS se pueden controlar de manera independiente.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rumble:&lt;/strong&gt;&lt;br /&gt;El rumble se da via un motor, que posee un peso desbalanceado, este motor puede ser activado para hacer así que el control vibre. El motor puede ser activado, al enviar un paquete de salida&lt;br /&gt;[SET_REPORT] a los canales 0x11, 0x13, 0x14, 0x15, 0x19 o 0x1a con el bit menos significativo puesto en: (52) 13 01&lt;br /&gt;La vibración, se puede eliminar al poner ese bit en cero: (52) 13 00&lt;br /&gt;Se puede utilizar cualquiera de los canales anteriores, aunque el canal 0x11 no es muy recomendable, ya que también  se usa para controlar a los LEDS .&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bocina:&lt;br /&gt;&lt;/strong&gt;El Wiimote, posee una pequeña bocina de baja calidad, la cual se utiliza para dar durante el juego efectos de sonidos cortos. El flujo de sonido que se debe tocar, se obtiene del host directamente.&lt;br /&gt;La bocina, es controlada mediante 3 reportes de salida, el reporte 0x14 se utiliza para habilitar o deshabilitar la bocina. Al poner en alto el segundo bit, se habilita la bocina, y al ponerlo en bajo, se deshabilita. Por ejmplo, para habiliar la bocina, se enviaría: (52) 14 04&lt;br /&gt;El reporte 0x19, se usa para silenciar o des-silenciar la bocina, funciona de la misma manera, que el reporte 0x14. 0x04 callaría a la bocina, y 0x00 haría que nuevamente sonará. (Una especie de mute y de unmute!)&lt;br /&gt;El reporte 0x18, se usa para enviar datos de sonido a la bocina. 1-20 bytes se pueden enviar en un sólo paquete.&lt;br /&gt;Ejemplo de un paquete  que se podría enviar a la bocina:&lt;br /&gt;(52) 18 LL DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD DD&lt;br /&gt;&lt;br /&gt;LL especifica el tamaño del dato que se enviará. Los bytes DD son el dato de sonido. Cuando el dato, posee un tamaño que es menor al de 20 bytes, se deben rellenar los lugares restantes. Los datos de sonido, por otro lado, se deben enviar a una frecuencia adeucada, se puede escojer la freucncia de muestreo durante la inicialización.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Secuencia de Inicialización de la bocina&lt;/strong&gt;.&lt;br /&gt;Las siguientes secuencias, inicializarían a la bocina:&lt;br /&gt;&lt;br /&gt;*Habilita la bocina (Envia 0x04 la salida del reporte 0x14)&lt;br /&gt;*Pon en silencio a la bocina (Envia 0x04 a la salida del reporte 0x19)&lt;br /&gt;*Escribe 0x01 al registro 0x04a20009&lt;br /&gt;*Escribe 0x08 al registro 0x04a20001&lt;br /&gt;*Escribe una configuración de 7 byte a los registros 0x04a20001-0x04a20008&lt;br /&gt;*Escribe 0x01al registro 0x04a20008 (La configuraión de 7 byte de la bocin, controlan justo la configuarión de la bocina, como es su frecuencia de muestreo. )&lt;br /&gt;*Regresa el sonido a la bocina (Envía 0x00 al reporte de salida 0x19)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Formato del dato de sonido&lt;/strong&gt;: Parece ser un sonido ADPCM de 4 bits. ADPCM (Adaptive Differential Pulse Code Modulation) utiliza una modulación, de modo que en vez de cuantificar la señal directamente, como el PCM, cuantifican la diferencia entre la señal y una predicción hecha a partir de la señal, por lo que se trata de una codificación diferencial&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-4027346177885902972?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/4027346177885902972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=4027346177885902972' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4027346177885902972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/4027346177885902972'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/el-wiimote-control-remoto-wii-es-el.html' title='What wiitle Wiimote gives out...'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7933149059446475915</id><published>2008-09-15T19:27:00.000-06:00</published><updated>2008-09-16T00:28:24.359-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='BCM2042'/><category scheme='http://www.blogger.com/atom/ns#' term='partes wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='ADXL330'/><category scheme='http://www.blogger.com/atom/ns#' term='ST 4128 BWP'/><category scheme='http://www.blogger.com/atom/ns#' term='H7824HE'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='U7849 6Q63'/><category scheme='http://www.blogger.com/atom/ns#' term='componentes wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='eeprom del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='ACELEROMETRO Y EL WIIMOTE'/><title type='text'>Undressing the Wiimote on a mexican night</title><content type='html'>&lt;p&gt;Veremos más de cerca al Wiimote.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Empezaremos analizando su origen: Es manufacturado por  Mitsumi (FCC ID POO-WC45) y Foxconn (FCC ID UMB-WCF7).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Los componentes que conforman al  Wiimote son:  &lt;/p&gt; &lt;table border="1"&gt; &lt;tbody&gt;&lt;tr&gt; &lt;th&gt; Parte &lt;/th&gt;&lt;th&gt; Functiones &lt;/th&gt;&lt;th&gt; Localizacion&lt;br /&gt;&lt;/th&gt;&lt;th&gt; Documentacion &lt;/th&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ADXL330 &lt;/td&gt;&lt;td&gt; Acelerómetro &lt;/td&gt;&lt;td&gt;  Se encuentra en la parte de arriba, a la izquierda del botón A &lt;/td&gt;&lt;td&gt; &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=692" class="external text" title="http://www.sparkfun.com/commerce/product_info.php?products_id=692" rel="nofollow"&gt;Data Sheet, Schematic&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; H7824HE &lt;/td&gt;&lt;td&gt;Driver del la bocina &lt;/td&gt;&lt;td&gt;Arriba, entre la bocina y el botón 1 &lt;/td&gt;&lt;td&gt; &lt;a href="http://www.rohm.com/products/databook/digicamera/pdf/bh7824fvm-e.pdf" class="external text" title="http://www.rohm.com/products/databook/digicamera/pdf/bh7824fvm-e.pdf" rel="nofollow"&gt;Data sheet&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; ST 4128 BWP &lt;/td&gt;&lt;td&gt; EEPROM &lt;/td&gt;&lt;td&gt;Arriba entre home y botón A &lt;/td&gt;&lt;td&gt; &lt;a href="http://www.st.com/stonline/products/literature/ds/4578/m24128-bw.pdf" class="external text" title="http://www.st.com/stonline/products/literature/ds/4578/m24128-bw.pdf" rel="nofollow"&gt;Data Sheet(?)&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; BCM2042 &lt;/td&gt;&lt;td&gt; Bluetooth, 8051 core, RAM/ROM &lt;/td&gt;&lt;td&gt;Hasta abajo, localizado un poco arriba de las baterías. &lt;/td&gt;&lt;td&gt; &lt;a href="http://www.broadcom.com/products/Bluetooth/Bluetooth-RF-Silicon-and-Software-Solutions/BCM2042" class="external text" title="http://www.broadcom.com/products/Bluetooth/Bluetooth-RF-Silicon-and-Software-Solutions/BCM2042" rel="nofollow"&gt;Product Info&lt;/a&gt; &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; M 626 3322 &lt;/td&gt;&lt;td&gt; ? &lt;/td&gt;&lt;td&gt;Arriba, a la derecha del boton 1&lt;br /&gt;&lt;/td&gt;&lt;td&gt; ? &lt;/td&gt;&lt;/tr&gt; &lt;tr&gt; &lt;td&gt; U7849 6Q63 &lt;/td&gt;&lt;td&gt; Audio DAC?&lt;br /&gt;Convertidor digital analogico&lt;br /&gt;&lt;/td&gt;&lt;td&gt;Abajo, junto al boton naranja para sincronizar, cerca de la batería &lt;/td&gt;&lt;td&gt; ? &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt;&lt;p&gt;&lt;img src="file:///C:/Users/geektor/AppData/Local/Temp/moz-screenshot.jpg" alt="" /&gt;&lt;/p&gt;&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/tutorials/WiiRemote/Wii-Remote-0.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Sí, es una  foto de un Wiimote,  que se compró por separado.  Viendo su linda   envoltura, uno se pregunta que secretos oscuros guarda este artefacto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Abriéndolo, empezamos a descubrir todos sus "dirty little secrets":&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/tutorials/WiiRemote/Wii-Remote-4.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Adentro, vemos algunas de las cosas que brinda Nintendo. La bocina, es  el disco negro con las dos pestañas.  El acelerómetro, ADXL330, está localizado justo  donde se encuentra la cabeza  del desarmador de la imagen anterior.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/tutorials/WiiRemote/Wii-Remote-5.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;En esta vista, que está un poco  de lado vemos muchos otros componentes. En la parte de abajo, encontramos  un pequeño  motor vibrador, que sirve para dar el efecto de "rumbling". Asimismo, tenemos al final el senor  infrarojo. Pegado al sensor infrarojo, se encuentra  un capacitor de 4V 3300uF .  Pero, ¿Para qué serviría un capacitor tan grande?  Se cree que se utiliza, para limpiar el circuito DC,es decir  para mantener  estable el voltaje de entrada.&lt;br /&gt;Otra teoría, es que el capacitor funciona como una pequeña fuente de energia.&lt;br /&gt;Lo que sucede, es que si un jugador, se encuentra  jugando muy efusivamente, las baterias AA, pueden comprimir los resortes lo suficiente, para desconectarlas temporalemente, al menos medio segundo. El gran capacitor, por ello, serviría para brindar energía al sistema momentaneamente.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En la siguiente imagen,  tenemos el botón  scan push, y los muy elegantes clips para la batería AA.&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/tutorials/WiiRemote/Wii-Remote-6.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;Todas las "cositas redondas" (330,100,4R7) son inductores   33uH, 10uH, and 4.7uH. Son usados principlamente para corriente directa a corriente directa con entradas altas o entradas bajas. Se pueden usar, para hacer filtreo. El filtreo es muy importante para tener una señal  de radio frecuencia proveniente del circuito integrado Broadcom del  Bluethooth  limpia.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.broadcom.com/products/Bluetooth/Bluetooth-RF-Silicon-and-Software-Solutions/BCM2042" target="_blank"&gt;BCM2042&lt;/a&gt; es un circuito integrado  de Broadband, de bajo costo para mouse/teclado inalambrico  de Bluetooth. Utiliza un 8051 core,  y una memoria RAM/ROM que guarda el perfil HID  (HID, por sus siglas en inglés, &lt;b&gt;human interface device&lt;/b&gt; , que significa dispositivo de interfaz con humanos, esto es  un dispositvo  de computadora que interacciona directamente con  usuarios, toma entradas de humanos, y puede tener también una salida para entregar directo a humanos.)  del bluetooth y la pila.&lt;br /&gt;&lt;br /&gt;El wiimote, tiene además un pequeño cristal de 24MHz.&lt;br /&gt;&lt;br /&gt;La imagen inferior, muestra el acelerometro y el EEPROM:&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.sparkfun.com/commerce/images/tutorials/WiiRemote/Wii-Remote-10.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Finalmente tenemos al  &lt;a href="http://www.sparkfun.com/commerce/product_info.php?products_id=692" target="_blank"&gt; ADXL330,&lt;/a&gt; o acelerómetro, con código  0614 (Lo cul significa que este chip  fue construido en la primera semana de Abril del 2006!)  asi como las muy esperadas  tapas de los 3 ejes y la capa de sumistro de energía.&lt;br /&gt;&lt;br /&gt;La parte  ST 4128 BWP , parece ser una EEPROM serial. Su hoja de especificaciones se encuentra : &lt;a href="http://www.st.com/stonline/products/literature/ds/4578/m24128-bw.pdf" target="_blank"&gt; Aquí&lt;/a&gt;.&lt;br /&gt;Los pines 1 al 4, se encuentran conectados a tierra. Vcc es el pin 8, el pin 7 tiene el control de la escritura, y está atado con la resistencia R38. Los pines 6 y 5 son las lineas  de los datos seriales y reloj serial. La EEPROM, guarda información acerca del identificador Bluetooth, asi como algunos valores, que sirven para hacer cortes en las grandes cantidades de  valores que arroja el acelerómetro ó el sensor infrarojo. Contiene muchas constantes como el ID del Bluetooth, revision de firmware etc.&lt;br /&gt;&lt;br /&gt;Una gran parte de la funcionalidad del   Wiimote  se quema dentro del circuito integrado  &lt;a href="http://www.broadcom.com/products/Bluetooth/Bluetooth-RF-Silicon-and-Software-Solutions/BCM2042" target="_blank"&gt;BCM2042&lt;/a&gt; ,el cual es  producido por Broadcom Corportation (Es importante saber, que &lt;b&gt;Broadcom Corporation &lt;/b&gt; es una compañia norteamericana que construye circuitos integrados para comunciaciones de banda ancha) Allí,  se guarda la pila HID del Bluetooth así como su protocolo.&lt;br /&gt;Uno, se podría preguntar, ¿Dónde hace su entrada aquí la EEPROM?&lt;br /&gt;La EEPROM aparece, debido a que durante el booting, se hace un ping a ella, para que devuelva el  firmware del controlador del Wii. Por otro lado, se ha visto que la EEPROM, también  guarda  'Miis'.  Un Mii es un personaje personalizado, creado por el usuario, que participa en los juegos del Wii.  La EEPROM guarda la información de este personaje.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/en/c/ce/Wiifitbmi.jpg" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/30573458-7933149059446475915?l=littlesaiph.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://littlesaiph.blogspot.com/feeds/7933149059446475915/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=30573458&amp;postID=7933149059446475915' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7933149059446475915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/30573458/posts/default/7933149059446475915'/><link rel='alternate' type='text/html' href='http://littlesaiph.blogspot.com/2008/09/hardware-del-wiimote.html' title='Undressing the Wiimote on a mexican night'/><author><name>Little Saiph</name><uri>http://www.blogger.com/profile/11964246294373530295</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='24' height='32' src='http://1.bp.blogspot.com/-Vg9nNqhC0Aw/Tn6wZ0uhu7I/AAAAAAAABWs/F8Velc1JjRY/s1600/11%25252B-%25252B1'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-30573458.post-7938783447681238888</id><published>2008-09-08T23:17:00.000-06:00</published><updated>2008-09-17T13:43:01.182-06:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='entradas del wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='como funciona el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='how the wiimote works'/><category scheme='http://www.blogger.com/atom/ns#' term='sensores en el wiimote'/><category scheme='http://www.blogger.com/atom/ns#' term='acelerometros'/><category scheme='http://www.blogger.com/atom/ns#' term='el wiimote desde abajo'/><category scheme='http://www.blogger.com/atom/ns#' term='botones del wiimote'/><title type='text'>Las entradas del Wiimote</title><content type='html'>Aquí un poco de información, acerca de las entradas que tiene nuestro querido Wiimote:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Botones &lt;/h3&gt;&lt;p&gt;Existen 12 botones, en el wiimote, 4 de ellos están en la cruzecita que sirve para dar dirección, y los demás están exparcidos a lo largo de todo el control.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Cuando algún botón, se presiona o se suelta, un paquete es enviado a la comptadora via un reporte de entrada HID (Un reporte &lt;i&gt;HID se usa para transimitir datos de tipo HID control de y hacia dispositivos &lt;/i&gt;HIDClass, es importante aclarar de una vez, que &lt;i&gt;un HD control, es una fuente de información ascoiada a un &lt;/i&gt;HIDClass device&lt;i&gt;report&lt;/i&gt;) 30H, este paquete contiene una máscara de bit, con el estado actual de todos los botones. El estado de los botones, parece siempre incluirse en todos los reportes que brinda el Wimote a la computadora, esta información suele estar en los primeros dos bits.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Por ejemplo, cuando se presiona el boton A, el paquete de entrada HID DATA que recibe la computadora es:&lt;/p&gt;&lt;pre&gt; (a1) 30 00 08&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;y cuando se suelta, el paquete que se recibe es:&lt;br /&gt;&lt;/p&gt;&lt;p&gt;(a1) 30 00 00&lt;/p&gt;&lt;p&gt;La asignación de bit para los botones es: &lt;/p&gt;&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;th&gt;Botón &lt;/th&gt;&lt;th&gt;Numero (dec) &lt;/th&gt;&lt;th&gt;Valor (hex) &lt;/th&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Two &lt;/td&gt;&lt;td&gt;1 &lt;/td&gt;&lt;td&gt;0x0001 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;One &lt;/td&gt;&lt;td&gt;2 &lt;/td&gt;&lt;td&gt;0x0002 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;B &lt;/td&gt;&lt;td&gt;3 &lt;/td&gt;&lt;td&gt;0x0004 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;A &lt;/td&gt;&lt;td&gt;4 &lt;/td&gt;&lt;td&gt;0x0008 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Minus &lt;/td&gt;&lt;td&gt;5 &lt;/td&gt;&lt;td&gt;0x0010 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;? motion ? &lt;/td&gt;&lt;td&gt;6 &lt;/td&gt;&lt;td&gt;0x0020 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;? motion ? &lt;/td&gt;&lt;td&gt;7 &lt;/td&gt;&lt;td&gt;0x0040 &lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Home &lt;/td&gt;&lt;td&gt;8 &lt;/td&gt;&lt;td&gt;0x0080 &lt;/td&gt;&lt;/tr&gt;&
