<?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-34133079</id><updated>2011-12-29T04:03:20.392-08:00</updated><category term='sci_gateway'/><category term='toolbox'/><category term='scilab'/><category term='hdf5'/><category term='diseño web'/><category term='medellin'/><category term='Sia ingenieros'/><category term='colombia'/><category term='compile'/><category term='Soluciones en ingenieria'/><title type='text'>Un Blog</title><subtitle type='html'>Mi obligacion "Personal".</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>62</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-34133079.post-5353107387131394304</id><published>2011-04-18T08:24:00.000-07:00</published><updated>2011-04-18T08:25:33.772-07:00</updated><title type='text'>La Lengua Española</title><content type='html'>"Que buen idioma el mío, qué buena lengua heredamos de los conquistadores torvos..Éstos andaban a zancadas por las tremendas cordilleras, por las Américas encrespadas buscando patatas, butifarras, frijolitos, tabaco negro, oro, maíz, huevos fritos, con aquel apetito voraz que nunca más se ha visto en el mundo...Todo se lo tragaban, con religiones, pirámides, tribus, idolatrías iguales a las que ellos traían en sus grandes bolsas...Por donde pasaban quedaba arrasada la tierra...Pero a los bárbaros se les caían de las botas, de las barbas, de los yelmos, de las herraduras, como piedrecitas las palabras luminosas que se quedaron aquí resplandecientes...el idioma. Salimos perdiendo...Salimos ganando...Se llevaron el oro y nos dejaron el oro...Se lo llevaron todo y nos dejaron todo...Nos dejaron las palabras.” &lt;br /&gt;&lt;br /&gt;Pablo Neruda&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-5353107387131394304?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/5353107387131394304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=5353107387131394304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5353107387131394304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5353107387131394304'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2011/04/la-lengua-espanola.html' title='La Lengua Española'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-1675839079114978397</id><published>2010-11-26T22:15:00.000-08:00</published><updated>2010-11-26T22:17:22.970-08:00</updated><title type='text'>Cambios</title><content type='html'>Veran señores este es mi blog, y yo hago con él lo que me da la gana, no sera mas una obligación con la humanidad sera una obligación personal, por tanto algunos post tendran un toque mas personal. Si a alguno le molesta bien puede irse a ver la pagina de google y buscar un tema interesante (www.google.com).&lt;br /&gt;&lt;br /&gt;Gracias.&lt;br /&gt;&lt;br /&gt;La Admon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-1675839079114978397?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/1675839079114978397/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=1675839079114978397' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1675839079114978397'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1675839079114978397'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/11/cambios.html' title='Cambios'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6254173437529285001</id><published>2010-09-27T21:59:00.000-07:00</published><updated>2010-09-27T22:12:20.371-07:00</updated><title type='text'>Introducción al psicoanalisis.</title><content type='html'>Ultimamente me he estado leyendo "Introducción al psicoanalisis", intentare plasmar aqui un poco lo que he aprendido y tambien las dudas que me ha traido esta lectura.&lt;br /&gt;&lt;br /&gt;Primero que todo el Psicoanalisis según Freud es un tratramiento para tratar neurosis, es decir enfermedades psiquicas. Se basa en el lenguaje entre el paciente y el psicoanalista. Es método cientifico, y como tal debe pararse en los pilares de este (aunque en ocasiones me parece que cojea).&lt;br /&gt;&lt;br /&gt;El primer tema a tratar son los actos fallidos. Los actos fallidos son una serie de equivocaciones que son normalmente pasables, como olvidar un nombre, cambiar una palabra por otra, mezclarlas, perder objetos. Son separadas ppalmente en: Equivocaciones orales, equivocaciones escritas, de aprehension, olvidos de compromisos o nombres, olvido de objetos.&lt;br /&gt;&lt;br /&gt;La mas tratada es la equivocacion oral. En esta el psicoanalisis propone una explicacion en la cual intervienen dos tendencias, una perturbada y otra perturbadora. La perturbada es la tendencia natural de construccion del discurso, en la cual el sujeto pone su energia, la tendencia perturbadora es aquella que modifica el discurso sin ser advertida por el sujeto. Una cita buena al filosofo Wundt es que en estas ocasiones el poder del discurso es vencido por el poder de la asociacion. Para esta explicacion Freud trae una serie de ejemplos, uno que me causo mucho interes es el de un personaje que tiene por encargo abrir una sesión, pero en el acto dice "Se levanta la sesión", cuando deberia decir: "Se abre la sesión". En el cerebro del sujeto ocurrio algo que le hace modificar el discurso, y cambiar la palabra abrir, por levantar. Inicialmente la explicacion de Freud es que "claramente" la unica interpretacion posible es que el personaje no queria abrir la sesión, y que "cualquier otra explicacion resulta ser superflua" (condenar al fracaso un argumento en contra no parece ser muy acorde al metodo cientifico). Otro caso, es el de un amigo de Freud que tenia un perro enfermo, en este caso el amigo le comenta que "drurara asi un mes mas", a lo cual Freud lo corrige y el amigo responde diciendo que pensaba decir "tristemente durara así un mes", pero combino las palabras.&lt;br /&gt;&lt;br /&gt;En esencia todas estas equivocaciones tienen una tendencia original y otra que tiende a perturbarla, la cual suele ser una tendencia escondida y toca analisar al sujeto para encontrar y explicar el porque de la equivocacion.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6254173437529285001?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6254173437529285001/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6254173437529285001' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6254173437529285001'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6254173437529285001'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/09/introduccion-al-psicoanalisis.html' title='Introducción al psicoanalisis.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8220880611496862568</id><published>2010-09-27T21:30:00.000-07:00</published><updated>2010-09-27T21:55:17.089-07:00</updated><title type='text'>Django nonrel + MongoDB.</title><content type='html'>I want to setup a basic virtualenv environment with a working version of django-nonrel with MongoDB.&lt;br /&gt;&lt;br /&gt;From http://www.allbuttonspressed.com/projects/django-nonrel we can read a blog entry that explains everything about the integration: http://www.allbuttonspressed.com/blog/django/2010/05/MongoDB-backend-for-Django-nonrel-released&lt;br /&gt;&lt;br /&gt;With requirements.txt:&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;pymongo&lt;br /&gt;-e git+http://github.com/aparo/django-mongodb-engine.git#egg=django_mongodb_engine&lt;br /&gt;-e hg+http://bitbucket.org/wkornewald/django-nonrel#egg=Django&lt;br /&gt;-e hg+http://bitbucket.org/wkornewald/djangotoolbox#egg=djangotoolbox&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Type:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;aptitude install python-pip&lt;br /&gt;pip install virtualenv&lt;br /&gt;virtualenv --no-site-packages --distribute nonrel&lt;br /&gt;cd norel&lt;br /&gt;. bin/activate&lt;br /&gt;pip -r ../requirements.txt&lt;br /&gt;bin/django-admin.py startproject myproject&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Define your database as:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;DATABASES = {&lt;br /&gt;    'default': {&lt;br /&gt;        'ENGINE': 'django_mongodb_engine.mongodb',&lt;br /&gt;        'NAME': 'test',&lt;br /&gt;        'USER': 'test',&lt;br /&gt;        'PASSWORD': 'test',&lt;br /&gt;        'HOST': 'flame.mongohq.com',&lt;br /&gt;        'PORT': 99999,&lt;br /&gt;        'SUPPORTS_TRANSACTIONS': False,&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Pretty easy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8220880611496862568?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8220880611496862568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8220880611496862568' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8220880611496862568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8220880611496862568'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/09/django-nonrel-mongodb.html' title='Django nonrel + MongoDB.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-1145884460007144016</id><published>2010-07-02T13:17:00.000-07:00</published><updated>2010-07-02T13:39:29.794-07:00</updated><title type='text'>Identity, Authentication, Authorization and Multitenancy</title><content type='html'>There it should somewhere in the web an application to correctly build a Django site with those concepts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-1145884460007144016?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/1145884460007144016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=1145884460007144016' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1145884460007144016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1145884460007144016'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/07/identity-authentication-authorization.html' title='Identity, Authentication, Authorization and Multitenancy'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-1877409568040502157</id><published>2010-06-05T21:30:00.000-07:00</published><updated>2010-06-05T22:00:01.322-07:00</updated><title type='text'>Un poco de genealogia.</title><content type='html'>Ayer en un bar un personaje dijo, hablando de Juan Manuel Santos: "No solo nos roban la plata sino tambien la opinion", me surgio la duda de conocer bien las relaciones familiares de los Santos.&lt;br /&gt;&lt;br /&gt;Eduardo Santos Montejo (Presidente de Colombia 1938-1942) hermano de Enrique Santos Montejo, este ultimo padre de Enrique Santos Castillo y Hernando Santos Castillos. Tambien es hijo Enrique Santos Molano, con una tal Blanca Molano, de la cual poco encuentro.&lt;br /&gt;&lt;br /&gt;Ahora, Enrique Santos Castillo y Hernando Santos Castillo se casaron con dos hermanas de apellido Calderon, y fueron traidas al mundo cuatro criaturas: Juan Manuel Santos Calderon(ex-ministro de Defensa) y Enrique Santos Calderon (director de El Tiempo hasta el 2009) son hijos de Enrique Santos Calderon. Francisco Santos Calderon (Vicepresidente) y Rafael Santos Castillo (director de El Tiempo hasta el 2009) hijos de Hernando Santos Castillo.&lt;br /&gt;&lt;br /&gt;Encontre un documento en: http://www.interconexioncolombia.com/documentos/genealogia/que%20esta%20pasando%20en%20colombia/Los%20Santos%20y%20los%20Lopez%20nos%20gobiernan%20desde%201930.pdf&lt;br /&gt;En donde se pueden ver diagramas de Genealogias, es interesante ver en un solo diagrama nombres como: Alvaro Uribe Velez, Jose Obdulio Gaviria, Pablo Escobar Gaviria, Fabio Ochoa, Noemi Sanin.&lt;br /&gt;&lt;br /&gt;Basicamente el documento relaciona a todos los actores de este gran teatro llamado Colombia.&lt;br /&gt;&lt;br /&gt;Como dicen por ahi: Todo queda en Familia.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-1877409568040502157?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/1877409568040502157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=1877409568040502157' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1877409568040502157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1877409568040502157'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/06/un-poco-de-genealogia.html' title='Un poco de genealogia.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8516981898799640875</id><published>2010-04-11T23:06:00.000-07:00</published><updated>2010-04-11T23:07:02.527-07:00</updated><title type='text'>Mockus!!!</title><content type='html'>&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/jr74PjfEryk&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/jr74PjfEryk&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8516981898799640875?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8516981898799640875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8516981898799640875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8516981898799640875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8516981898799640875'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/04/mockus.html' title='Mockus!!!'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-1028064073449961901</id><published>2010-03-25T20:57:00.000-07:00</published><updated>2010-03-25T21:18:13.690-07:00</updated><title type='text'>Antanas Mockus Presidente de Colombia 2010 - 2014</title><content type='html'>En este pequeño espacio posiblemente con pocas visitas intentare ayudar a una justa causa por mi país.&lt;br /&gt;&lt;br /&gt;Partido Verde.&lt;br /&gt;&lt;br /&gt;&lt;object width="640" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/STIEHh6PsUc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=es_ES&amp;feature=player_embedded&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/STIEHh6PsUc&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;hl=es_ES&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" allowScriptAccess="always" width="640" height="385"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;object width="480" height="385"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TYl5si4iE6g&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/TYl5si4iE6g&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;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-1028064073449961901?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/1028064073449961901/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=1028064073449961901' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1028064073449961901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1028064073449961901'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/03/antanas-mockus-presidente-de-colombia.html' title='Antanas Mockus Presidente de Colombia 2010 - 2014'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-557967324290655715</id><published>2010-01-31T11:40:00.000-08:00</published><updated>2010-01-31T13:15:42.784-08:00</updated><title type='text'>Latex + Inline spell check</title><content type='html'>Well, after 3 days of trying to activate a good inline spell check on Kile, which is impossible right now, and after trying to compile the hello world plugin for Kate to create a plugin that highlight that misspelled words, which is almost impossible too because of some mistakes on the example, and trying to use emacs for latex + flyspell (it works, but is not very nice), I found that Gedit with its plugin for latex is now really great and has inline spell check!!!, also it list all the structure of the document in a side panel, and has more features, and the best is that is a Gnome app.&lt;br /&gt;&lt;br /&gt;http://projects.gnome.org/gedit/&lt;br /&gt;http://live.gnome.org/Gedit/LaTeXPlugin&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-557967324290655715?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/557967324290655715/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=557967324290655715' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/557967324290655715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/557967324290655715'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/01/latex-inline-spell-check.html' title='Latex + Inline spell check'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4250093358775939608</id><published>2010-01-04T20:42:00.000-08:00</published><updated>2010-01-04T22:23:50.558-08:00</updated><title type='text'>I love my Linux Kernel.</title><content type='html'>Well, I just love it. &lt;br /&gt;&lt;br /&gt;Right now I'm working in a driver for a couple of circuits with a DAC, ADC and a encoder to connect my old Gumstix Connex to a PLC Unitronics, and two Variable speed driver Altivar ATV31.&lt;br /&gt;&lt;br /&gt;The driver basically read through SPI the data that the ADC get from a current loop. And through SPI the resulting data is send to the drivers. The encoder work with three GPIO interrupt.&lt;br /&gt;&lt;br /&gt;I'll try to write later on this. For now, a couple of pages that are really helpful:&lt;br /&gt;&lt;br /&gt;http://www.linuxjournal.com/article/5833&lt;br /&gt;http://tomoyo.sourceforge.jp/cgi-bin/lxr/source/&lt;br /&gt;http://www.linuxgrill.com/anonymous/fire/netfilter/kernel-hacking-HOWTO-5.html&lt;br /&gt;http://people.nl.linux.org/ftp/pub/anoncvs/kernelnewbies/documents/kdoc/kernel-api/adt.html#AEN475&lt;br /&gt;http://docs.huihoo.com/linux/kernel/2.6.26/kernel-api/ch25.html&lt;br /&gt;http://docwiki.gumstix.org/index.php/Robostix_spi.c&lt;br /&gt;http://www.makelinux.net/ldd3/ (The chapters with locking techniques, procfs, and deferred work are great!!!)&lt;br /&gt;http://tldp.org/LDP/lkmpg/2.6/html/x1256.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4250093358775939608?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4250093358775939608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4250093358775939608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4250093358775939608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4250093358775939608'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2010/01/i-love-my-linux-kernel.html' title='I love my Linux Kernel.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8657149901530816272</id><published>2009-12-28T15:07:00.001-08:00</published><updated>2009-12-28T18:56:54.320-08:00</updated><title type='text'>Corrupted Git</title><content type='html'>Well, I have a directory with all my undergraduate project and I use git to ease my work, but recently I was not able to create a backup in a external disk because a error:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;remote: Counting objects: 313, done.&lt;br /&gt;remote: Compressing objects: 100% (116/116), done.&lt;br /&gt;fatal: pack has bad object at offset 11893474: inflate returned 1&lt;br /&gt;fatal: index-pack failed&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I have files of almost 500MB on this repo, I suppose  that the problem. I try to repack but it was useless, I also can check the hash of the object (with fsck), but I can't find where is that file, or what commit it belongs to. &lt;br /&gt;&lt;br /&gt;This code will help in this case:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;git checkout master&lt;br /&gt;git branch new_master&lt;br /&gt;git checkout new_master&lt;br /&gt;for i in $!$(seq 1 100); do git checkout new_master~$!$i || break; done&lt;br /&gt;for j in $!$(seq $!$i 100); do git checkout new_master~$!$j &amp;&amp; break; done&lt;br /&gt;# The error is between new_master~$!$j and new_master~($!$i-2)&lt;br /&gt;git checkout master&lt;br /&gt;git branch -D new_master&lt;br /&gt;git branch new_master&lt;br /&gt;git checkout new_master&lt;br /&gt;git rebase --onto new_master~$!$j new_master~$!$((i-2)) new_master&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;It works (al least for my problem!!!), and now i want to rebase master:&lt;br /&gt;&lt;pre class="brush:bash"&gt;&lt;br /&gt;git checkout master&lt;br /&gt;git rebase new_master&lt;br /&gt;git branch -d new_master&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;That's all.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8657149901530816272?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8657149901530816272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8657149901530816272' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8657149901530816272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8657149901530816272'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/12/corrupted-git.html' title='Corrupted Git'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6050505955453982136</id><published>2009-12-03T21:19:00.001-08:00</published><updated>2010-03-22T11:07:55.102-07:00</updated><title type='text'>Compute the normal vector of a hyperplane in $R^n$</title><content type='html'>Well, basically any vector $N$ that holds $N \dot (p_i - p_j) = 0$ for for any vector $p_i, p_j \in H$ $H$ is the hyperplane.&lt;br /&gt;&lt;br /&gt;Only $n$ different points are needed, call $P$ the set of $n$ points in $H$, and define $P^* = \{ p^*_i = p_i - p_{i+1} : p_i,p_{i+1} \in H , i \in [1,n-1]\}$.&lt;br /&gt;&lt;br /&gt;$P^*$ is the set of vectors on $H$.&lt;br /&gt;&lt;br /&gt;Any normal vector $N$ that holds that $N \dot p^*_i , i \in [1,n-1]$ is a normal vector.&lt;br /&gt;&lt;br /&gt;$N$ has $n$ components, so we got here $n$ unknowns. And with the $n_1$ $p^*_i$ vectors we got $n-1$ equations.&lt;br /&gt;&lt;br /&gt;An extra equation could be defined if we want a normalized vector, but this add a quadratic term in the systems, as the vector with all zero components can't be a normal vector of any hyperplane at least one of its components has a non-zero value, suppose that the $j$ component of $N$ has value $1$. and we have then a Ax = B, with n-1 equations and unknowns. we just have to try which j makes the systm non singular and solve it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The system of equations:&lt;br /&gt;$\begin{pmatrix}&lt;br /&gt;p^*_{1,1} &amp; p^*_{1,2} &amp; \cdots &amp; p^*_{1,j-1} &amp; p^*_{1,j+1} &amp; \cdots &amp; p^*_{1,n} \\ p^*_{2,1} &amp; p^*_{2,2} &amp; \cdots &amp; p^*_{2,j-1} &amp; p^*_{2,j+1} &amp; \cdots &amp; p^*_{2,n} \\ \vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \vdots &amp; \vdots \\&lt;br /&gt;p^*_{n,1} &amp; p^*_{n,2} &amp; \cdots &amp; p^*_{n,j-1} &amp; p^*_{n,j+1} &amp; \cdots &amp; p^*_{n,n} \\ &lt;br /&gt;\end{pmatrix} \begin{pmatrix} N_1 \\ N_2 \\ \vdots \\ N_{j-1} \\ N_{j+1} \\ \vdots \\ N_n \end{pmatrix} = - \begin{pmatrix} p^*_{1,j} \\ p^*_{2,j} \\ \vdots \\ p^*_{(j-1),j} \\ p^*_{(j-1),j} \\ \vdots \\ p^*_{n,j} \end{pmatrix}&lt;br /&gt;$&lt;br /&gt;&lt;br /&gt;Start checking for $j \in [1,n]$ and you will get at much $n$ and at least 1 normal vector.&lt;br /&gt;&lt;br /&gt;Python:&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: python" &gt;&lt;br /&gt;from numpy import array, dot&lt;br /&gt;from numpy.linalg import solve, norm&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def normal(P):&lt;br /&gt;    n = len(P)&lt;br /&gt;&lt;br /&gt;    if n &lt; 1:&lt;br /&gt;        raise Exception, "O-size list."&lt;br /&gt;&lt;br /&gt;    m = len(P[0])&lt;br /&gt;&lt;br /&gt;    if array([len(p) != m for p in P]).any():&lt;br /&gt;        raise Exception, "Inconsistent set of points."&lt;br /&gt;&lt;br /&gt;    if n != m:&lt;br /&gt;        raise Exception&lt;br /&gt;&lt;br /&gt;    P_ = [p-q for p,q in zip(P[:-1],P[1:])]&lt;br /&gt;&lt;br /&gt;    N = []&lt;br /&gt;&lt;br /&gt;    for i in range(n):&lt;br /&gt;        try:&lt;br /&gt;            x = solve(&lt;br /&gt;                array([list(p)[:i] + list(p)[i+1:] for p in P_]),&lt;br /&gt;                array([-p[i] for p in P_])&lt;br /&gt;                )&lt;br /&gt;&lt;br /&gt;            x = array(list(x)[:i] + [1] + list(x)[i:])&lt;br /&gt;            N.append(x)&lt;br /&gt;&lt;br /&gt;        except:&lt;br /&gt;            pass&lt;br /&gt;&lt;br /&gt;    n = N[array([(dot(n,n)-1)**2 for n in N]).argmin()]&lt;br /&gt;&lt;br /&gt;    return n / norm(n)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;    print normal([array([1,0,0]), array([0,1,0]), array([1,1,0])])&lt;br /&gt;    print normal([array([1,123,0123]), array([0345,1,034]), array([132,134,034])])&lt;br /&gt;    print normal([array([1,0,0]), array([0,1,0]), array([1,123,1123])])&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6050505955453982136?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6050505955453982136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6050505955453982136' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6050505955453982136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6050505955453982136'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/12/found-normal-vector-of-hyperplane-in-rn.html' title='Compute the normal vector of a hyperplane in $R^n$'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6591254946800150507</id><published>2009-12-03T05:51:00.000-08:00</published><updated>2009-12-03T13:32:32.141-08:00</updated><title type='text'></title><content type='html'>I'm gonna create a image with Debian and Django to upload it to AWS.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="brush: bash"&gt;&lt;br /&gt;dd if=/dev/zero of=debian-ami count=1000 bs=1m&lt;br /&gt;sudo mkfs.ext3 -F debian-ami&lt;br /&gt;mkdir /tmp/chroot&lt;br /&gt;sudo mount -o loop debian-ami /tmp/chroot&lt;br /&gt;sudo debootstrap --arch i386 lenny /tmp/chroot/ http://ftp.debian.org&lt;br /&gt;sudo chroot /tmp/chroot/&lt;br /&gt;# Inside the chroot&lt;br /&gt;mount -t proc none /proc&lt;br /&gt;cd /dev&lt;br /&gt;MAKEDEV console&lt;br /&gt;MAKEDEV std&lt;br /&gt;echo -e 'auto lo\niface lo inet loopback\nauto eth0\niface eth0 inet dhcp' &gt;&gt; /etc/network/interfaces&lt;br /&gt;echo -e 'proc /proc proc defaults 0 0\n/dev/sda1 / reiserfs defaults 0 1\n/dev/sda2 swap swap defaults 0 0' &gt; /etc/fstab&lt;br /&gt;aptitude update&lt;br /&gt;aptitude install locales-all&lt;br /&gt;aptitude install ssh&lt;br /&gt;exit&lt;br /&gt;&lt;br /&gt;# In your machine&lt;br /&gt;sudo umount  -l /tmp/chroot &lt;br /&gt;export EC2_PRIVATE_KEY=xxxxxxx.pem&lt;br /&gt;export EC2_CERT=xxxxxxxxxxxxxxxxxx.pem&lt;br /&gt;export EC2_ACCNO=xxxxxxxxxx&lt;br /&gt;export ACCESS_KEY=xxxxxxxxxxxxxxxx&lt;br /&gt;export SECRET_KEY=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&lt;br /&gt;ec2-bundle-image -i debian-ami --cert EC2_CERT --privatekey EC2_PRIVATE_KEY -u EC2_ACCNO&lt;br /&gt;ec2-upload-bundle -b 20091203-linux-debian-lenny -m /tmp/debian-ami.manifest.xml -a ACCESS_KEY -s SECRET_KEY&lt;br /&gt;ec2-register -n 20091203-linux-debian-lenny 20091203-linux-debian-lenny/debian-ami.manifest.xml&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6591254946800150507?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6591254946800150507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6591254946800150507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6591254946800150507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6591254946800150507'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/12/im-gonna-create-image-with-debian-and.html' title=''/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4821089233925505726</id><published>2009-08-23T13:20:00.000-07:00</published><updated>2009-08-24T00:31:56.470-07:00</updated><title type='text'>Algebra</title><content type='html'>I'm studying algebra with some friends, and i will try to write here what subjects are we studying right now.&lt;br /&gt;&lt;br /&gt;We start with Abstract Algebra using Hungerford book, but i want to follow the MITOpenCourseWare about Algebra I (http://ocw.mit.edu/OcwWeb/Mathematics/18-701Fall-2007/Readings/index.htm).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Composition Law:&lt;/span&gt;&lt;br /&gt;A composition law $f$ select a pair of elements on a set $S$ and return an element of $S$, ie:&lt;br /&gt;$f : S \times S \rightarrow S$, I will write $f(a,b)$ as $a*b$ for seek of simplicity.&lt;br /&gt;&lt;br /&gt;If $*$ holds that $(a*b)*c = a*(b*c) \quad \forall a,b,c \in S$ then we say that is an associative law.&lt;br /&gt;&lt;br /&gt;If $*$ holds that $a*b=b*a  \quad \forall a,b \in S$ we say that is a commutative law.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Semigroups&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $S$ be a set and $*$ be a composition law on $S$, if $*$ is associative then $(S,*)$ is a semigroup.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Monoids&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(S,*)$ be a semigroup if $S$ has an identity element $e$ such that:&lt;br /&gt;&lt;br /&gt;$\forall x \in S$ $x*e = x = e*x$,&lt;br /&gt;&lt;br /&gt;then $(S,*)$ is a Monoid.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Groups&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(S,*)$ be a Monoid if:&lt;br /&gt;&lt;br /&gt;$\forall x \in S$ $\exists x^{-1} \in S$  s.t. $x*x^{-1} = e = x^{-1}*x$,&lt;br /&gt;&lt;br /&gt;then $(S,*)$ is a Group.&lt;br /&gt;&lt;br /&gt;if $*$ is commutative then $(S,*)$ is a commutative or Abelian group.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Subgroups&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a group, if a proper subset $H$ of $G$ is also a group with $*$ then $H$ is a subgroup of $G$&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Theorem&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;If $(G,*)$ is a group and $H$ is a nonempty subset of $G$:&lt;br /&gt;&lt;br /&gt;$(H,*)$ is a subgroup of $(G,*)$ if and only if $a*b^{-1} \in H \quad \forall a,b \in H$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Relation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $A$ and $B$ be sets and $R$ a map from $A$ to $B$ s.t.:&lt;br /&gt;&lt;br /&gt;$R : A \rightarrow B$&lt;br /&gt;with $a\in A$ and $b=R(a) \in B$ and&lt;br /&gt;$(a,b) = (a,R(a)) \in A \times B$&lt;br /&gt;for seek of simplicity we write $(a,R(a)) \in A \times B$ as $aRb$.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Equivalence Relations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $S$ be a set and $R$ a relation in $S \times S$, if:&lt;br /&gt;&lt;br /&gt;i) $aRa \quad \forall a \in S$ (Reflexive)&lt;br /&gt;&lt;br /&gt;ii) $aRb \implies bRa$ (Symmetric)&lt;br /&gt;&lt;br /&gt;iii) $aRb \wedge bRc \implies aRc$ (Transitive)&lt;br /&gt;&lt;br /&gt;then $R$ is an Equivalence Relation on $S$. (When we speak of an equivalence relation we'll use the symbol $=$)&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Partial Order Relations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A partial order relation is a relation $R$ in a set $S$ with a equivalence relation $=$ if $R$ is reflexive and transitive and:&lt;br /&gt;&lt;br /&gt;$aRb \wedge bRa \implies a=b$ (antisymmetric)&lt;br /&gt;&lt;br /&gt;We write a partial order relation as $\leq$. The above oreder is a non-strict relation.&lt;br /&gt;&lt;br /&gt;A strict partial relation order $R$ in $S$ is:&lt;br /&gt;&lt;br /&gt;i) $a\not R a \quad \forall a \in S$ (irreflexive)&lt;br /&gt;&lt;br /&gt;ii) $aRb \wedge bRa \implies a=b$ (antisymmetric)&lt;br /&gt;&lt;br /&gt;iii) $aRb \wedge bRc \implies aRc$ (Transitive)&lt;br /&gt;&lt;br /&gt;We write a strict partial order relation as $&amp;lt;$.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Complete Order Relations&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The above partial relations don't hold $\forall a,b \in S$, if they do then the order is a complete order.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Congruence Relation&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a Monoid, if a equivalence relation $=$ on $G$ also holds that:&lt;br /&gt;&lt;br /&gt;$a_1=a_2 \wedge b_1 = b_2 \implies a_1*b_1 = a_2*b_2$,&lt;br /&gt;&lt;br /&gt;then $=$ is also congruence relation.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Equivalence Classes&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $S$ be a set with an equivalence relations $=$, the equivalence class $\bar{a}$ (or $[a]$) of an element $a \in S$ is:&lt;br /&gt;&lt;br /&gt;$\bar{a} = \{ x \in S | x = a \}$&lt;br /&gt;&lt;br /&gt;The class of all the equivalence classes on $S$ is denoted as $(S/=)$, and is called the quotient class of $S$ by $=$.&lt;br /&gt;&lt;br /&gt;The union of all the equivalence classes is $S$, i.e. &lt;br /&gt;&lt;br /&gt;$\bigcup_{a \in S} \bar{a} = A = \bigcup_{\bar{a} \in (S/=)} \bar{a}$ or $\bar{a} = \bar{b}$&lt;br /&gt;&lt;br /&gt;If $a,b \in S$ either $\bar{a} \cap \bar{b} = \emptyset$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem:&lt;/span&gt;&lt;br /&gt;Let $(G,*)$ be a Monoid and $=$ a congruence relation on $G$, then:&lt;br /&gt;&lt;br /&gt;$((G/=),  *)$ is a Monoid with&lt;br /&gt;&lt;br /&gt;$* : (G/=) \times (G/=) \rightarrow (G/=)$ and $[a]*[b] = [a*b] \quad [a],[b] \in G/=$ (sorry for the change on notation but the bar don't expand enough in the a*b)&lt;br /&gt;&lt;br /&gt;If $(G,*)$ is Abelian then $(G/=,*)$ is Abelian too.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Group Homomorphism&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,\circ)$ and $(H,\diamond)$ be two groups and a function $f : G \rightarrow H$ such that:&lt;br /&gt;&lt;br /&gt;$f(x \circ y ) = f(x) \diamond f(y) \quad \forall x,y \in G$,&lt;br /&gt;&lt;br /&gt;then $f$ is a Group homomorphism.&lt;br /&gt;&lt;br /&gt;If $f$ is injective then $f$ is a Group Monomorphism.&lt;br /&gt;&lt;br /&gt;If $f$ is surjective then $f$ is a Group Epimorphism.&lt;br /&gt;&lt;br /&gt;If $f$ is bijective then $f$ is a Group Isomorphism.&lt;br /&gt;&lt;br /&gt;If a Group Homomorphism is $f: G \rightarrow G$ then $f$ is a Group Endomorphism of $G$.&lt;br /&gt;&lt;br /&gt;If a Group Isomorphism is $f: G \rightarrow G$ then $f$ is a Group Automorphism of $G$.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Kernel&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,\circ)$ and $(H,\diamond)$ be two groups and a homomorphism $f : G \rightarrow H$. $e_G$ and $e_H$ are the ideintity element of each group, then, the kernel of $f$ is:&lt;br /&gt;&lt;br /&gt;$Ker f = \{a \in G | f(a) = e_H\}$,&lt;br /&gt;&lt;br /&gt;The kernel is a subset of $G$ that maps to the identity element on $H$ with the homomorphism $f$.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem:&lt;/span&gt;&lt;br /&gt;If $f : G \rightarrow H$ is a monomorphism $\Longleftrightarrow$ $Ker f = \{e_G\}$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem:&lt;/span&gt;&lt;br /&gt;If $f : G \rightarrow H$ is a isomorphism $\Longleftrightarrow$ $f^{-1} : H \rightarrow G$ is a homomorphism and $f(f^{-1}(a)) = a \quad \forall a \in H$ and $f^{-1}(f(a)) = a \quad \forall a \in G$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cyclic groups&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a group and $X$ a subset of $G$.&lt;br /&gt;&lt;br /&gt;Let $\{ H_i | i \in I \}$ be the family of all the subgroups ($H_i$) of $G$ that contains $X$ i.e. $X \subset H_i \forall i \in I$&lt;br /&gt;&lt;br /&gt;$\bigcap_{i \in  I} H_i$ is a subgroup of $G$ generated by $X$ and denoted $\langle X\rangle$&lt;br /&gt;&lt;br /&gt;The elements of $X$ are the generators of $\langle X\rangle$.&lt;br /&gt;&lt;br /&gt;Several different subsets on $G$ can generate the same $\langle X\rangle$, so, in general $\langle X\rangle = \langle Y \rangle$ with $X \neq Y$.&lt;br /&gt;&lt;br /&gt;If $X$ is a finite set such that $X = \{a_1, a_2, \cdots , a_n \}$, we write $\langle a_1, a_2, \cdots, a_n \rangle$ instead of $\langle X\rangle$.&lt;br /&gt;&lt;br /&gt;If $G = \langle a_1,a_2, \cdots, a_n \rangle$ with $a_i \in G$, then $G$ is said to be  finitely generated.&lt;br /&gt;&lt;br /&gt;If $a \in G$, then the subgroup $\langle a\rangle$ is the Cyclic Group or Cyclic Subgroup  generaterd by a.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a group and $X$ a nonempty subset of $G$, then the subgroup $\langle X \rangle$ generated by $X$ consists of all finite products $a_1^{n_1}a_2^{n_2}\cdots a_1t^{n_t} \quad a_i \in X; \quad n_i \in \mathbb{Z}$.&lt;br /&gt;&lt;br /&gt;And $\forall a \in G, \langle a \rangle = \{ a^n | n \in \mathbb{Z}\}$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $H$ be a cycli subgroup of $(\mathbb{Z},+)$, either $H=\langle 0 \rangle$ or $H=\langle m \rangle$, with $m$ the least positive integer in $H$, then if $H \neq \langle 0 \rangle$, then $H$ is infinite.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Every infinite cyclic group is isomorphic to $(\mathbb{Z},+)$ and every finite cyclic group of order $m$ is isomorphic to $(\mathbb{Z}_m,+)$ (¿¿¿$\langle m \rangle$???).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Cosets&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;First we define that $a \equiv b (mod m) \Longleftrightarrow m | a - b \Longleftrightarrow a-b \in \langle m \rangle$.&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a group, and $(H,*)$ a subgroup of $(G,*)$ and $a,b \in G$.&lt;br /&gt;&lt;br /&gt;a is &lt;i&gt;right congruent&lt;/i&gt; to $b$ modulo $H$, denoted as $a \equiv_r b (mod H)$ if $a*b^{-1} \in H$.&lt;br /&gt;&lt;br /&gt;a is &lt;i&gt;left congruent&lt;/i&gt; to $b$ modulo $H$, denoted as $a \equiv_l b (mod H)$ if $a^{-1}*b \in H$.&lt;br /&gt;&lt;br /&gt;If $G$ is abelian then if one of the congruencies hold then the other does:&lt;br /&gt;&lt;br /&gt;$a*b^{-1} \in H \Longleftrightarrow (a*b^{-1})^{-1} \in H$&lt;br /&gt;&lt;br /&gt;$(a*b^{-1})^{-1} = b*a^{-1} = a^{-1}*b$&lt;br /&gt;&lt;br /&gt; and&lt;br /&gt;&lt;br /&gt;$a^{-1}*b \in H \Longleftrightarrow (a^{-1}*b)^{-1} \in H$&lt;br /&gt;&lt;br /&gt;$(a^{-1}*b)^{-1} = b^{-1}*a = a*b^{-1}$&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Theorem&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(H,*)$ be a subgroup of $(G,*)$, then&lt;br /&gt;&lt;br /&gt;i) Right(Left) congruence modulo $H$ is an equivalence relation on $G$.&lt;br /&gt;&lt;br /&gt;ii) The equivalence class of $a \in G$ with the right (left) congruence is the set $Ha = \{h*a | h \in H\} ($aH = \{a*h | h \in H\})&lt;br /&gt;&lt;br /&gt;iii) $|Ha| = |H| = |aH| \quad \forall a \in G$&lt;br /&gt;&lt;br /&gt;$Ha$ is called a right coset of $H$ in $G$.&lt;br /&gt;$aH$ is called a left coset of $H$ in $G$.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Corollary&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;i) $G$ is the union of the right(left) cosets of $H$ on $G$.&lt;br /&gt;&lt;br /&gt;ii) Two right(left) cosets of $H$ on $G$ are either disjoint or equal.&lt;br /&gt;&lt;br /&gt;iii) $\forall a,b \in G, \quad Ha = Hb \Longleftrightarrow a*b^{-1} \in H$ and $aH = bH \Longleftrightarrow a^{-1}*b \in H$&lt;br /&gt;&lt;br /&gt;iv) If $R$ is the set of distinct right(left) cosets of $H$ in $G$, and $L$ is the set of distinct left cosets of $H$ in $G$, then &lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Definition&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let $(G,*)$ be a group, and $(H,*)$ a subgroup of $(G,*)$ the index of $H$ in $G$, denoted as $[G : H]$ is the cardinal number of the set of distinct right(left) cosets. of $H$ in $G$.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4821089233925505726?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4821089233925505726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4821089233925505726' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4821089233925505726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4821089233925505726'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/08/algebra-i.html' title='Algebra'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4009264603839872645</id><published>2009-08-22T18:56:00.001-07:00</published><updated>2009-08-22T19:02:34.994-07:00</updated><title type='text'>Runge Kutta in Haskell</title><content type='html'>Well, Runge-Kutta is a better solver that Euler so:&lt;br /&gt;&lt;br /&gt;&lt;pre class="hl"&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;-- Runge-Kutta method (t_o, t_f,h, x_o, function(t,x))&lt;/span&gt;&lt;br /&gt;runge t_o t_f h x_o f &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwd"&gt;case&lt;/span&gt; t_o &lt;span class="hl sym"&gt;&amp;lt;&lt;/span&gt; t_f &lt;span class="hl kwd"&gt;of&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl kwa"&gt;True&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl kwd"&gt;do&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; k_1 &lt;span class="hl sym"&gt;=&lt;/span&gt; f t_o x_o&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; k_2 &lt;span class="hl sym"&gt;=&lt;/span&gt; f &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h&lt;span class="hl sym"&gt;/&lt;/span&gt;&lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;) (&lt;/span&gt;x_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h &lt;span class="hl sym"&gt;*&lt;/span&gt; k_1 &lt;span class="hl sym"&gt;/&lt;/span&gt; &lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; k_3 &lt;span class="hl sym"&gt;=&lt;/span&gt; f &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h&lt;span class="hl sym"&gt;/&lt;/span&gt;&lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;) (&lt;/span&gt;x_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h &lt;span class="hl sym"&gt;*&lt;/span&gt; k_2 &lt;span class="hl sym"&gt;/&lt;/span&gt; &lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; k_4 &lt;span class="hl sym"&gt;=&lt;/span&gt; f &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h&lt;span class="hl sym"&gt;) (&lt;/span&gt;x_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h &lt;span class="hl sym"&gt;*&lt;/span&gt; k_3&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl sym"&gt;[(&lt;/span&gt;t_o&lt;span class="hl sym"&gt;,&lt;/span&gt;x_o&lt;span class="hl sym"&gt;)] ++ (&lt;/span&gt; runge &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h&lt;span class="hl sym"&gt;)&lt;/span&gt; t_f h &lt;span class="hl sym"&gt;(&lt;/span&gt;x_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h &lt;span class="hl sym"&gt;* (&lt;/span&gt;k_1 &lt;span class="hl sym"&gt;+&lt;/span&gt; &lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;*&lt;/span&gt;k_2 &lt;span class="hl sym"&gt;+&lt;/span&gt; &lt;span class="hl num"&gt;2&lt;/span&gt;&lt;span class="hl sym"&gt;*&lt;/span&gt;k_3 &lt;span class="hl sym"&gt;+&lt;/span&gt; k_4&lt;span class="hl sym"&gt;) /&lt;/span&gt; &lt;span class="hl num"&gt;6&lt;/span&gt;&lt;span class="hl sym"&gt;)&lt;/span&gt; f&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl kwa"&gt;False&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl sym"&gt;[]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;-- Function&lt;/span&gt;&lt;br /&gt;f &lt;span class="hl sym"&gt;::&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;br /&gt;f t x &lt;span class="hl sym"&gt;= -&lt;/span&gt; x&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;-- Print in column&lt;/span&gt;&lt;br /&gt;show_col &lt;span class="hl sym"&gt;:: [(&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;,&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;)] -&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;String&lt;/span&gt;&lt;br /&gt;show_col x &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwd"&gt;case&lt;/span&gt; x &lt;span class="hl kwd"&gt;of&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl sym"&gt;(&lt;/span&gt;a&lt;span class="hl sym"&gt;:&lt;/span&gt;b&lt;span class="hl sym"&gt;) -&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl kwd"&gt;do&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; &lt;span class="hl sym"&gt;(&lt;/span&gt;t&lt;span class="hl sym"&gt;,&lt;/span&gt; v&lt;span class="hl sym"&gt;) =&lt;/span&gt; a&lt;br /&gt;            &lt;span class="hl sym"&gt;(&lt;/span&gt;&lt;span class="hl kwc"&gt;show&lt;/span&gt; t&lt;span class="hl sym"&gt;) ++&lt;/span&gt; &lt;span class="hl str"&gt;&amp;quot; , &amp;quot;&lt;/span&gt; &lt;span class="hl sym"&gt;++ (&lt;/span&gt;&lt;span class="hl kwc"&gt;show&lt;/span&gt; v&lt;span class="hl sym"&gt;) ++&lt;/span&gt; &lt;span class="hl str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt; &lt;span class="hl sym"&gt;++ (&lt;/span&gt;show_col b&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl sym"&gt;[] -&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;main &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwc"&gt;putStrLn&lt;/span&gt;&lt;span class="hl sym"&gt;(&lt;/span&gt;show_col&lt;span class="hl sym"&gt;(&lt;/span&gt;runge &lt;span class="hl num"&gt;0 5 0.01 10&lt;/span&gt; f&lt;span class="hl sym"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4009264603839872645?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4009264603839872645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4009264603839872645' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4009264603839872645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4009264603839872645'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/08/runge-kutta-in-haskell.html' title='Runge Kutta in Haskell'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2873094429597358169</id><published>2009-08-21T16:02:00.001-07:00</published><updated>2009-08-22T17:54:36.511-07:00</updated><title type='text'>Euler Method in Haskell</title><content type='html'>I decide today to learn haskell, but i can't get out of my head how could it be used in simulation, so, i will try with several basic solvers, starting with Euler Method to solve: y'(t) = f(t, y(t))&lt;br /&gt;&lt;br /&gt;&lt;pre class="hl"&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;--Euler method (t_o, t_f,h, x_o, function(t,x))&lt;/span&gt;&lt;br /&gt;euler1 &lt;span class="hl sym"&gt;::&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt; (&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;) -&amp;gt; [(&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;,&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;)]&lt;/span&gt;&lt;br /&gt;euler1 t_o t_f h x_o f &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwd"&gt;case&lt;/span&gt; t_o &lt;span class="hl sym"&gt;&amp;lt;&lt;/span&gt; t_f &lt;span class="hl kwd"&gt;of&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl kwa"&gt;True&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl sym"&gt;[(&lt;/span&gt;t_o&lt;span class="hl sym"&gt;,&lt;/span&gt;x_o&lt;span class="hl sym"&gt;)] ++ (&lt;/span&gt;euler1 &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o&lt;span class="hl sym"&gt;+&lt;/span&gt;h&lt;span class="hl sym"&gt;)&lt;/span&gt; t_f h &lt;span class="hl sym"&gt;(&lt;/span&gt;x_o&lt;span class="hl sym"&gt;+(&lt;/span&gt;h &lt;span class="hl sym"&gt;*&lt;/span&gt; f t_o x_o&lt;span class="hl sym"&gt;))&lt;/span&gt; f&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl kwa"&gt;False&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl sym"&gt;[]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;--Euler method (t_o, t_f,steps, x_o, function(t,x))&lt;/span&gt;&lt;br /&gt;euler2 &lt;span class="hl sym"&gt;::&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Integer&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt; (&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;) -&amp;gt; [(&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;,&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;)]&lt;/span&gt;&lt;br /&gt;euler2 t_o t_f steps x_o f &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwd"&gt;case&lt;/span&gt; steps &lt;span class="hl sym"&gt;&amp;gt;&lt;/span&gt; &lt;span class="hl num"&gt;0&lt;/span&gt; &lt;span class="hl kwd"&gt;of&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl kwa"&gt;True&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl kwd"&gt;do&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; h &lt;span class="hl sym"&gt;= (&lt;/span&gt;t_f &lt;span class="hl sym"&gt;-&lt;/span&gt; t_o&lt;span class="hl sym"&gt;) / (&lt;/span&gt;&lt;span class="hl kwc"&gt;fromIntegral&lt;/span&gt; steps&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl sym"&gt;[(&lt;/span&gt;t_o&lt;span class="hl sym"&gt;,&lt;/span&gt; x_o&lt;span class="hl sym"&gt;)] ++&lt;/span&gt; euler2 &lt;span class="hl sym"&gt;(&lt;/span&gt;t_o &lt;span class="hl sym"&gt;+&lt;/span&gt; h&lt;span class="hl sym"&gt;)&lt;/span&gt; t_f &lt;span class="hl sym"&gt;(&lt;/span&gt;steps &lt;span class="hl sym"&gt;-&lt;/span&gt; &lt;span class="hl num"&gt;1&lt;/span&gt;&lt;span class="hl sym"&gt;) (&lt;/span&gt;x_o &lt;span class="hl sym"&gt;+ (&lt;/span&gt;h &lt;span class="hl sym"&gt;*&lt;/span&gt; f t_o x_o&lt;span class="hl sym"&gt;))&lt;/span&gt; f&lt;br /&gt;    &lt;span class="hl kwa"&gt;False&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl sym"&gt;[]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;-- Function&lt;/span&gt;&lt;br /&gt;f &lt;span class="hl sym"&gt;::&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt; &lt;span class="hl sym"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;br /&gt;f t x &lt;span class="hl sym"&gt;= -&lt;/span&gt; x&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;-- Print in column&lt;/span&gt;&lt;br /&gt;show_col &lt;span class="hl sym"&gt;:: [(&lt;/span&gt;&lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;,&lt;/span&gt; &lt;span class="hl kwb"&gt;Double&lt;/span&gt;&lt;span class="hl sym"&gt;)] -&amp;gt;&lt;/span&gt; &lt;span class="hl kwb"&gt;String&lt;/span&gt;&lt;br /&gt;show_col x &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwd"&gt;case&lt;/span&gt; x &lt;span class="hl kwd"&gt;of&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl sym"&gt;(&lt;/span&gt;a&lt;span class="hl sym"&gt;:&lt;/span&gt;b&lt;span class="hl sym"&gt;) -&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl kwd"&gt;do&lt;/span&gt;&lt;br /&gt;            &lt;span class="hl kwd"&gt;let&lt;/span&gt; &lt;span class="hl sym"&gt;(&lt;/span&gt;t&lt;span class="hl sym"&gt;,&lt;/span&gt; v&lt;span class="hl sym"&gt;) =&lt;/span&gt; a&lt;br /&gt;            &lt;span class="hl sym"&gt;(&lt;/span&gt;&lt;span class="hl kwc"&gt;show&lt;/span&gt; t&lt;span class="hl sym"&gt;) ++&lt;/span&gt; &lt;span class="hl str"&gt;&amp;quot; , &amp;quot;&lt;/span&gt; &lt;span class="hl sym"&gt;++ (&lt;/span&gt;&lt;span class="hl kwc"&gt;show&lt;/span&gt; v&lt;span class="hl sym"&gt;) ++&lt;/span&gt; &lt;span class="hl str"&gt;&amp;quot;\n&amp;quot;&lt;/span&gt; &lt;span class="hl sym"&gt;++ (&lt;/span&gt;show_col b&lt;span class="hl sym"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="hl sym"&gt;[] -&amp;gt;&lt;/span&gt;&lt;br /&gt;        &lt;span class="hl str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="hl slc"&gt;--main = putStrLn(show_col(euler1 0 1 0.00001 10 f))&lt;/span&gt;&lt;br /&gt;main &lt;span class="hl sym"&gt;=&lt;/span&gt; &lt;span class="hl kwc"&gt;putStrLn&lt;/span&gt;&lt;span class="hl sym"&gt;(&lt;/span&gt;show_col&lt;span class="hl sym"&gt;(&lt;/span&gt;euler2 &lt;span class="hl num"&gt;0 1 100000 10&lt;/span&gt; f&lt;span class="hl sym"&gt;))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2873094429597358169?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2873094429597358169/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2873094429597358169' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2873094429597358169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2873094429597358169'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/08/euler-method-in-haskell.html' title='Euler Method in Haskell'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8259825147023751846</id><published>2009-08-13T16:16:00.000-07:00</published><updated>2009-08-13T17:10:13.882-07:00</updated><title type='text'>Qucs</title><content type='html'>Mmmm, Creo que por fin encontre un buen programa para simular circuitos, trabaja con SPICE y ademas es libre.&lt;br /&gt;&lt;br /&gt;http://qucs.sourceforge.net/&lt;br /&gt;http://qucs.sourceforge.net/docs.html&lt;br /&gt;http://qucs.sourceforge.net/download.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8259825147023751846?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8259825147023751846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8259825147023751846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8259825147023751846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8259825147023751846'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/08/qucs.html' title='Qucs'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2361108627116134022</id><published>2009-08-12T21:57:00.001-07:00</published><updated>2009-08-12T23:32:19.917-07:00</updated><title type='text'>Symbolic Integration (Manuel Bronstein)</title><content type='html'>Well, now that i have a new book, Symbolic Integration I of Manuel Bronstein, i will implement some of the code examples on the initial chapter: polydivide, euclidean algorithm, square free factorization, all of them using GiNaC library.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;PolyDivide &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This one find the unique q and r in a field K[z] that holds a = b*q + r&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;lst PolyDivide(ex A, ex B, symbol x)&lt;br /&gt;{&lt;br /&gt;    ex Q = 0;&lt;br /&gt;    ex R = A;&lt;br /&gt;&lt;br /&gt;    int d = R.degree(x) - B.degree(x);&lt;br /&gt;&lt;br /&gt;    while ((not R.is_zero()) and (d &gt;=0))&lt;br /&gt;    {&lt;br /&gt;        ex T = R.lcoeff(x) / B.lcoeff(x) * pow(x,d);&lt;br /&gt;        Q = expand(Q + T);&lt;br /&gt;        R = expand(R - B*T);&lt;br /&gt;        d = R.degree(x) - B.degree(x);&lt;br /&gt;    }&lt;br /&gt;    return lst(Q,R);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;PolyPseudoDivide&lt;/span&gt;&lt;br /&gt;Same that last, but in a integral domain, like Z.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;lst PolyPseudoDivide(ex A, ex B, symbol x)&lt;br /&gt;{&lt;br /&gt;    ex b = B.lcoeff(x);&lt;br /&gt;    int N = A.degree(x) - B.degree(x) + 1;&lt;br /&gt;    ex Q = 0;&lt;br /&gt;    ex R = A;&lt;br /&gt;&lt;br /&gt;    int d = R.degree(x) - B.degree(x);&lt;br /&gt;&lt;br /&gt;    while ((not R.is_zero()) and (d &gt;=0))&lt;br /&gt;    {&lt;br /&gt;        ex T = R.lcoeff(x) * pow(x,d);&lt;br /&gt;        N -= 1;&lt;br /&gt;        Q = expand(b * Q + T);&lt;br /&gt;        R = expand(b * R - T * B);&lt;br /&gt;        d = R.degree(x) - B.degree(x);&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    b = pow(b, N);&lt;br /&gt;    return lst( b * Q, b * R);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Well, testing both algorithm against the quo and rem that do the same computation in GiNaC, we have this: &lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXDrkPRZrbQ/SoOzQdfquCI/AAAAAAAAACI/HyaY2M1F62E/s1600-h/div.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 273px;" src="http://1.bp.blogspot.com/_sXDrkPRZrbQ/SoOzQdfquCI/AAAAAAAAACI/HyaY2M1F62E/s400/div.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5369332276132493346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The test is a division between two polynomials of the same n degree randomly generated, in x-axis is n and in y-axis is ellapsed time of the compute code  in sec.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="cpp"&gt;&lt;br /&gt;int main()&lt;br /&gt;{&lt;br /&gt;    symbol x("x");&lt;br /&gt;    int i = 0;&lt;br /&gt;    ex a=0, b=0;&lt;br /&gt;&lt;br /&gt;    clock_t s, e;&lt;br /&gt;    double t1,t2, t3, t4, t5;&lt;br /&gt;&lt;br /&gt;    for(int n = 1; n &lt; 100000 ; n += 1000)&lt;br /&gt;    {&lt;br /&gt;        srand ( time(NULL) );&lt;br /&gt;&lt;br /&gt;        for(; i &lt; n; i++)&lt;br /&gt;        {&lt;br /&gt;            a += (rand() % 200 - 100) * pow(x,i);&lt;br /&gt;            b += (rand() % 200 - 100) * pow(x,i);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        s = clock();&lt;br /&gt;        PolyDivide(a,b,x);&lt;br /&gt;        e = clock();&lt;br /&gt;        t1 = (e-s);&lt;br /&gt;&lt;br /&gt;        s = clock();&lt;br /&gt;        PolyPseudoDivide(a,b,x);&lt;br /&gt;        e = clock();&lt;br /&gt;        t2 = (e-s);&lt;br /&gt;&lt;br /&gt;        s = clock();&lt;br /&gt;        quo(a,b,x); rem(a,b,x);&lt;br /&gt;        e = clock();&lt;br /&gt;        t3 = (e-s);&lt;br /&gt;&lt;br /&gt;        ex q;&lt;br /&gt;        s = clock();&lt;br /&gt;        q = quo(a,b,x);a - b*q;&lt;br /&gt;        e = clock();&lt;br /&gt;        t4 = (e-s);&lt;br /&gt;&lt;br /&gt;        ex r;&lt;br /&gt;        s = clock();&lt;br /&gt;        r = rem(a,b,x);(a-r)/b;&lt;br /&gt;        e = clock();&lt;br /&gt;        t5 = (e-s);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        t1 /= CLOCKS_PER_SEC;&lt;br /&gt;        t2 /= CLOCKS_PER_SEC;&lt;br /&gt;        t3 /= CLOCKS_PER_SEC;&lt;br /&gt;        t4 /= CLOCKS_PER_SEC;&lt;br /&gt;        t5 /= CLOCKS_PER_SEC;&lt;br /&gt;&lt;br /&gt;        cout &lt;&lt; n &lt;&lt; " " &lt;&lt; t1 &lt;&lt; " " &lt;&lt; t2 &lt;&lt; " " &lt;&lt; t3 &lt;&lt; " " &lt;&lt; t4 &lt;&lt; " " &lt;&lt; t5 &lt;&lt; endl;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2361108627116134022?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2361108627116134022/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2361108627116134022' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2361108627116134022'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2361108627116134022'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/08/symbolic-integration-manuel-bronstein.html' title='Symbolic Integration (Manuel Bronstein)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXDrkPRZrbQ/SoOzQdfquCI/AAAAAAAAACI/HyaY2M1F62E/s72-c/div.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-5173529796793571196</id><published>2009-07-22T19:11:00.000-07:00</published><updated>2009-07-22T21:16:25.999-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scilab'/><category scheme='http://www.blogger.com/atom/ns#' term='toolbox'/><category scheme='http://www.blogger.com/atom/ns#' term='sci_gateway'/><title type='text'>Create a new toolbox for Scilab (II)</title><content type='html'>Now i gonna follow the instructions at: http://www.scilab.org/contrib/index_contrib.php?page=toolbox_guide&lt;br /&gt;&lt;br /&gt;1) First i need to create all the files needed to the toolbox:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox$ cd scilab/scilab/contrib/&lt;br /&gt;toolbox/scilab/scilab/contrib$ mkdir symbolic&lt;br /&gt;toolbox/scilab/scilab/contrib$ cd symbolic/&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ mkdir macros src sci_gateway help etc unit_tests demos  includes&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ touch readme.txt builder.sce loader.sce license.txt&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2) Macros, well, basically i only have one macro at the symbolic module, but i gonna test the macro at the instructions, so:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ cd macros/&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/macros$ cat &lt;&lt; EOF &gt; foo1.sci&lt;br /&gt;function [X]=foo1(A)&lt;br /&gt;    // This function returns the positive components of the A diagonal&lt;br /&gt;&lt;br /&gt;    // Check the type and the size of A&lt;br /&gt;    if  type(A)&lt;&gt;1 then&lt;br /&gt;        error("type of input argument must be a double");&lt;br /&gt;    end&lt;br /&gt;    if  size(A,1)&lt;&gt;size(A,2) then&lt;br /&gt;        error("input argument must be a square matrix");&lt;br /&gt;    end&lt;br /&gt;    //Extraction of the positive components&lt;br /&gt;    X=[];&lt;br /&gt;    for i=1:size(A,1)&lt;br /&gt;        if A(i,i)&gt;0 then&lt;br /&gt;            X($+1)=A(i,i);&lt;br /&gt;        end&lt;br /&gt;    end&lt;br /&gt;endfunction&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/macros$ cat &lt;&lt; EOF &gt; buildmacros.sce&lt;br /&gt;mode(-1)&lt;br /&gt;toolboxname='symbolic'&lt;br /&gt;pathB=get_absolute_file_path('buildmacros.sce')&lt;br /&gt;disp('Building macros  in ' +pathB)&lt;br /&gt;genlib(toolboxname+'lib',pathB,%t)&lt;br /&gt;clear pathB genlib toolboxname&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/macros$ cat &lt;&lt; EOF &gt; loadmacros.sce&lt;br /&gt;mode(-1)&lt;br /&gt;pathL=get_absolute_file_path('loadmacros.sce')&lt;br /&gt;disp('Loading macros  in ' +pathL)&lt;br /&gt;load(pathL+'/lib')&lt;br /&gt;clear pathL&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3) We're going to create some primitives now, basically is like the module, so, there is a sci_gateway path and a src path, in the first we define the gateways to our functions, and in the second we write the main code of the primitives.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ cd src/&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/src$ cat &lt;&lt; EOF &gt; vectsum.c&lt;br /&gt;void vectsum(int n, double * a, double * b, double * y)&lt;br /&gt;{&lt;br /&gt;    int k;&lt;br /&gt;    for (k = 0; k &lt; n; ++k) &lt;br /&gt;    y[k] = a[k] + b[k];&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;jcardona@terminus:~/stuff/personal/symbolic/main/toolbox/scilab/scilab/contrib/symbolic/src$ cd ..&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ cd sci_gateway/&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/sci_gateway$ cat &lt;&lt; EOF &gt; sci_sumab.c&lt;br /&gt;#include "stack-c.h"&lt;br /&gt;extern int vectsum(int n, double * a, double * b, double * y); &lt;br /&gt;&lt;br /&gt;void sci_sumab(char *fname){  &lt;br /&gt;int l1, m1, n1, l2, m2, n2, l3, n;   &lt;br /&gt;&lt;br /&gt;/* 1 - Check the number of inputs/outputs arguments  */  &lt;br /&gt;int minlhs=1, maxlhs=1, minrhs=2, maxrhs=2; &lt;br /&gt;CheckRhs(minrhs,maxrhs) ; &lt;br /&gt;CheckLhs(minlhs,maxlhs) ; &lt;br /&gt;&lt;br /&gt;/* 2 - Check inputs arguments type, and get the size&lt;br /&gt;       and the address in the Scilab stack of the inputs&lt;br /&gt;       arguments&lt;br /&gt;*/&lt;br /&gt;GetRhsVar(1, "d", &amp;m1, &amp;n1, &amp;l1);&lt;br /&gt;GetRhsVar(2, "d", &amp;m2, &amp;n2, &amp;l2);&lt;br /&gt;&lt;br /&gt;/* 3 - Check that the inputs arguments have the same size */&lt;br /&gt;/*     it's possible to use the chekdims and getscalar&lt;br /&gt;       functions to make these checks&lt;br /&gt;*/ &lt;br /&gt;n=m2*n2; &lt;br /&gt;if( n1!=n2 || m1!=m2) &lt;br /&gt;{&lt;br /&gt;    cerro("inputs arguments must have the same size"); &lt;br /&gt;    return 0; &lt;br /&gt;}&lt;br /&gt;if(n1!=0 &amp;&amp; m1!=0)    &lt;br /&gt;    if(n1!=1 &amp;&amp; m1!=1)   &lt;br /&gt;    {&lt;br /&gt;        cerro("inputs arguments must be vectors");    &lt;br /&gt;        return(0); &lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;/* 4 - Create a new variable corresponding to the output argument */ &lt;br /&gt;CreateVar(3,"d",&amp;m2,&amp;n2,&amp;l3);   &lt;br /&gt;&lt;br /&gt;/* 5 -call vectsum routine: returns in stk(l3) the sum of a and b*/&lt;br /&gt;vectsum(n,stk(l1),stk(l2),stk(l3));  &lt;br /&gt;&lt;br /&gt;/* 6 - Specif ouput argument */  &lt;br /&gt;LhsVar(1) = 3;  &lt;br /&gt;return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The builder for the primitives, we need a buildsrc.sce and a buildsci_gateway.sce, in the respective path. The first one creates a shared library that is linked to the second shared library (the one of the gateway).&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/src$ cat &lt;&lt; EOF &gt; buildsrc.sce&lt;br /&gt;//ilib_for_link('symbolicsrc',['fun1.o','fun2.o','vectsum.o'],[],"c")&lt;br /&gt;ilib_for_link('symbolicsrc',['vectsum.o'],[],"c")&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/sci_gateway$ cat &lt;&lt; EOF &gt;buildsci_gateway.sce&lt;br /&gt;// must be run from this directory&lt;br /&gt;ilib_name  = 'libsymbolic'     // interface library name&lt;br /&gt;//files = ['sci_fun.o','sci_sumab.o'];  // objects files&lt;br /&gt;files = ['sci_sumab.o'];  // objects files&lt;br /&gt;libs  = ["../src/libsymbolicsrc"]                 // other libs needed for linking&lt;br /&gt;//table = [ /*'fun', 'sci_fun';*/&lt;br /&gt;table = ['sumab','sci_sumab'];        // table of (scilab_name,interface-name)&lt;br /&gt;// do not modify below&lt;br /&gt;ilib_build(ilib_name,table,files,libs)&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;4) The help files are located at the help path with a xml format, and a dtd defined by scilab, we only add a template for the files:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/help$ cat &lt;&lt; EOF &amp;gt; sumab.xml &lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;&lt;br /&gt;&amp;lt;refentry version="5.0-subset Scilab" xml:id="sumab" xml:lang="en"&lt;br /&gt;          xmlns="http://docbook.org/ns/docbook"&lt;br /&gt;          xmlns:xlink="http://www.w3.org/1999/xlink"&lt;br /&gt;          xmlns:svg="http://www.w3.org/2000/svg"&lt;br /&gt;          xmlns:ns3="http://www.w3.org/1999/xhtml"&lt;br /&gt;          xmlns:mml="http://www.w3.org/1998/Math/MathML"&lt;br /&gt;          xmlns:db="http://docbook.org/ns/docbook"&amp;gt;&lt;br /&gt;  &amp;lt;info&amp;gt;&lt;br /&gt;    &amp;lt;pubdate&amp;gt;$LastChangedDate: 2008-03-26 09:50:39 +0100 (mer., 26 mars 2008)$&amp;lt;/pubdate&amp;gt;&lt;br /&gt;  &amp;lt;/info&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;refnamediv&amp;gt;&lt;br /&gt;    &amp;lt;refname&amp;gt;sumab&amp;lt;/refname&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;refpurpose&amp;gt;Purpose&amp;lt;/refpurpose&amp;gt;&lt;br /&gt;  &amp;lt;/refnamediv&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;refsynopsisdiv&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Calling Sequence&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;synopsis&amp;gt;sequence&amp;lt;/synopsis&amp;gt;&lt;br /&gt;  &amp;lt;/refsynopsisdiv&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;refsection&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Description&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;para&amp;gt;Do something&amp;lt;/para&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;para&amp;gt;Add here a paragraph of the function description &amp;lt;/para&amp;gt;&lt;br /&gt;  &amp;lt;/refsection&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;refsection&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Examples&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;programlisting role="example"&amp;gt;exmaple&amp;lt;/programlisting&amp;gt;&lt;br /&gt;  &amp;lt;/refsection&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;refsection&amp;gt;&lt;br /&gt;    &amp;lt;title&amp;gt;Authors&amp;lt;/title&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;simplelist type="vert"&amp;gt;&lt;br /&gt;      &amp;lt;member&amp;gt;YOUR NAME&amp;lt;/member&amp;gt;&lt;br /&gt;    &amp;lt;/simplelist&amp;gt;&lt;br /&gt;  &amp;lt;/refsection&amp;gt;&lt;br /&gt;&amp;lt;/refentry&amp;gt;&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/help$ cat sumab.xml | sed -e 's?sumab?foo1?' &amp;gt; foo1.xml&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/help$ cat &lt;&lt; EOF &gt; buildhelp.sce&lt;br /&gt;mode(-1) //force silent execution&lt;br /&gt;path=get_absolute_file_path('buildhelp.sce');//get the absolute path of this file&lt;br /&gt;add_help_chapter("Symbolic",path);//add help chapter&lt;br /&gt;xmltohtml(path,"Symbolic")&lt;br /&gt;//clear the variable stack&lt;br /&gt;clear path add_help_chapter get_absolute_file_path &lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic/help$ cat &lt;&lt; EOF &gt; loadhelp.sce&lt;br /&gt;mode(-1) //force silent execution&lt;br /&gt;path=get_absolute_file_path('loadhelp.sce');//get the absolute path of this file&lt;br /&gt;add_help_chapter("Symbolic",path);//add help chapter&lt;br /&gt;clear path add_help_chapter get_absolute_file_&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) Finally we set the global builder and loader:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ cat &lt;&lt; EOF &gt; builder.sce&lt;br /&gt;mode(-1);&lt;br /&gt;mainpathB=get_absolute_file_path('builder.sce');&lt;br /&gt;chdir(mainpathB);&lt;br /&gt;if isdir('src') then&lt;br /&gt;chdir('src');&lt;br /&gt;exec('buildsrc.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;if isdir('sci_gateway') then&lt;br /&gt;chdir('sci_gateway');&lt;br /&gt;exec('buildsci_gateway.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;if isdir('macros') then&lt;br /&gt;chdir('macros');&lt;br /&gt;exec('buildmacros.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;if isdir('help') then&lt;br /&gt;chdir('help');&lt;br /&gt;exec('buildhelp.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;clear mainpathB&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;toolbox/scilab/scilab/contrib/symbolic$ cat &lt;&lt; EOF &gt; loader.sce&lt;br /&gt;mode(-1);&lt;br /&gt;mainpathL=get_absolute_file_path('loader.sce');&lt;br /&gt;chdir(mainpathL);&lt;br /&gt;if isdir('sci_gateway') then&lt;br /&gt;chdir('sci_gateway');&lt;br /&gt;exec('loader.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;if isdir('macros') then&lt;br /&gt;chdir('macros');&lt;br /&gt;exec('loadmacros.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;if isdir('help') then&lt;br /&gt;chdir('help');&lt;br /&gt;exec('loadhelp.sce');&lt;br /&gt;chdir('..');&lt;br /&gt;end&lt;br /&gt;clear mainpathL&lt;br /&gt;&lt;br /&gt;EOF&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;6) Build it at scilab:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab$ bin/scilab&lt;br /&gt;&lt;br /&gt;--&gt;exec("contrib/symbolic/builder.sce")&lt;br /&gt; &lt;br /&gt;--&gt;mode(-1);&lt;br /&gt;   Generate a loader file&lt;br /&gt;   Generate a Makefile&lt;br /&gt;   ilib_gen_Make: Copy compilation files (Makefile*, libtool...) to TMPDIR&lt;br /&gt;   ilib_gen_Make: Copy vectsum.c to TMPDIR&lt;br /&gt;   ilib_gen_Make: Modification of the Makefile in TMPDIR.&lt;br /&gt;   Running the Makefile&lt;br /&gt;   Generate a cleaner file&lt;br /&gt; ans  =&lt;br /&gt; &lt;br /&gt; libsymbolicsrc.so   &lt;br /&gt; ilib_name  =&lt;br /&gt; &lt;br /&gt; libsymbolic   &lt;br /&gt; libs  =&lt;br /&gt; &lt;br /&gt; ../src/libsymbolicsrc   &lt;br /&gt;   Generate a gateway file&lt;br /&gt;   Generate a loader file&lt;br /&gt;   Generate a Makefile&lt;br /&gt;   ilib_gen_Make: Copy compilation files (Makefile*, libtool...) to TMPDIR&lt;br /&gt;   ilib_gen_Make: Copy sci_sumab.c to TMPDIR&lt;br /&gt;   ilib_gen_Make: Copy libsymbolic.c to TMPDIR&lt;br /&gt;   ilib_gen_Make: Modification of the Makefile in TMPDIR.&lt;br /&gt;   Running the makefile&lt;br /&gt;   Generate a cleaner file&lt;br /&gt; &lt;br /&gt; Building macros  in /home/jcardona/stuff/personal/symbolic/main/toolbox/scilab/scilab/contrib/symbolic/macros/   &lt;br /&gt;&lt;br /&gt;Building the master document:&lt;br /&gt; SCI/contrib/symbolic/help&lt;br /&gt;&lt;br /&gt;Building the manual file [html] in SCI/contrib/symbolic/help. (Please wait building ... this can take a while)&lt;br /&gt;Warning : redefining function: get_absolute_file_path  . Use funcprot(0) to avoid this message&lt;br /&gt;&lt;br /&gt;--&gt;exec("contrib/symbolic/loader.sce")&lt;br /&gt; &lt;br /&gt;--&gt;mode(-1);&lt;br /&gt;Shared archive loaded.&lt;br /&gt;Link done.&lt;br /&gt;Shared archive loaded.&lt;br /&gt;Link done.&lt;br /&gt; &lt;br /&gt; Loading macros  in /home/jcardona/stuff/personal/symbolic/main/toolbox/scilab/scilab/contrib/symbolic/macros/   &lt;br /&gt; &lt;br /&gt;--&gt;sumab(1,2)&lt;br /&gt; ans  =&lt;br /&gt; &lt;br /&gt;    3.  &lt;br /&gt; &lt;br /&gt;--&gt;sumab(2,2)&lt;br /&gt; ans  =&lt;br /&gt; &lt;br /&gt;    4.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;We have then  a brand new toolbox enjoy summing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-5173529796793571196?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/5173529796793571196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=5173529796793571196' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5173529796793571196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5173529796793571196'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/07/create-new-toolbox-for-scilab-ii.html' title='Create a new toolbox for Scilab (II)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6160491937940904686</id><published>2009-07-21T19:23:00.000-07:00</published><updated>2009-07-22T07:20:19.995-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='hdf5'/><category scheme='http://www.blogger.com/atom/ns#' term='scilab'/><category scheme='http://www.blogger.com/atom/ns#' term='toolbox'/><category scheme='http://www.blogger.com/atom/ns#' term='compile'/><title type='text'>Create a new toolbox for Scilab (I)</title><content type='html'>As i have to change my symbolic module to a symbolic toolbox, i want to write this to use as a future reference.&lt;br /&gt;&lt;br /&gt;1) Get Scilab:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;$ mkdir toolbox&lt;br /&gt;$ cd toolbox/&lt;br /&gt;toolbox$ git clone git://git.scilab.org/scilab&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;2) First compilation:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;&lt;br /&gt;toolbox$ cd scilab/scilab&lt;br /&gt;&lt;br /&gt;toolbox/scilab/scilab$ ./configure&lt;br /&gt;...&lt;br /&gt;checking hdf5.h usability... no&lt;br /&gt;checking hdf5.h presence... no&lt;br /&gt;checking for hdf5.h... no&lt;br /&gt;configure: error: Cannot find headers (hdf5.h) of the library HDF5. Please install the dev package&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;3) HDF5 Headers:&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;sudo aptitude install libhdf5-serial-dev&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;4) Installing JHDF5 :&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;wget http://www.hdfgroup.org/ftp/HDF5/hdf-java/src/hdf-java-2.5-src.tar&lt;br /&gt;tar -xvf hdf-java-2.5-src.tar&lt;br /&gt;cd hdf-java/&lt;br /&gt;./configure --with-jdk=/usr/lib/jvm/java-6-sun-1.6.0.14/include/,/usr/lib/jvm/java-6-sun-1.6.0.14/lib/&lt;br /&gt;make&lt;br /&gt;sudo mkdir -p /usr/share/java/jar&lt;br /&gt;sudo cp lib/jhdf5.jar /usr/share/java/jar&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;5) Configuring again:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="bash"&gt;&lt;br /&gt;toolbox/scilab/scilab$ ./configure&lt;br /&gt;toolbox/scilab/scilab$ make&lt;br /&gt;toolbox/scilab/scilab$ bin/scilab&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Well, we now have our scilab base.&lt;br /&gt;We have to set all the toolboxes files, but that will be tonight.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6160491937940904686?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6160491937940904686/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6160491937940904686' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6160491937940904686'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6160491937940904686'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/07/create-new-toolbox-for-scilab-i.html' title='Create a new toolbox for Scilab (I)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6861913704336542304</id><published>2009-05-13T21:33:00.000-07:00</published><updated>2009-05-13T21:39:46.966-07:00</updated><title type='text'>Lock free programming</title><content type='html'>http://en.wikipedia.org/wiki/Lock-free_and_wait-free_algorithms&lt;br /&gt;http://en.wikipedia.org/wiki/Compare-and-swap&lt;br /&gt;&lt;br /&gt;http://www.google.com/search?hl=en&amp;client=iceweasel-a&amp;rls=org.debian%3Aen-US%3Aunofficial&amp;q=lock+free+&amp;btnG=Search&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6861913704336542304?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6861913704336542304/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6861913704336542304' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6861913704336542304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6861913704336542304'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/05/lock-free-programming.html' title='Lock free programming'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6421718834907786071</id><published>2009-05-13T18:49:00.000-07:00</published><updated>2009-05-13T18:53:38.613-07:00</updated><title type='text'>Jack en gumstix.</title><content type='html'>MMM, necesito un framework de simulacion por bloques que este ligado la kernel, se me vino a la cabeza jack y su forma de pasar datos entre plugins, y simplemente vi esto en unos &lt;a href="http://lad.linuxaudio.org/events/2003_zkm/slides/paul_davis-jack/title.html"&gt;slides&lt;/a&gt;:&lt;br /&gt;&lt;br /&gt;Although not a requirement, Jack should support any streaming data type, not just audio. &lt;br /&gt;&lt;br /&gt;Podria ser una buena opcion meter jack en el gumstix y crear los bloques de control como si fueran plugins y el paso de datos serian rapidito, el llamaod a los codigos de los bloques. Suena interesante la cosa. Veremos que sale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6421718834907786071?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6421718834907786071/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6421718834907786071' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6421718834907786071'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6421718834907786071'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/05/jack-en-gumstix.html' title='Jack en gumstix.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6333594639011988588</id><published>2009-04-28T20:23:00.001-07:00</published><updated>2009-04-28T22:31:36.040-07:00</updated><title type='text'>Drivers en linux (II)</title><content type='html'>Ahora crearemos un dispositivo de caracteres en /dev/algo, para esto debemos definir cuatro nuevas  funciones: para abrir y cerrar el dispositivo, y para leer y escribirlo. Hay mas operaciones, pero con esas es suficiente por ahora (http://www.linuxtopia.org/online_books/linux_kernel/linux_kernel_module_programming_2.6/x569.html).&lt;br /&gt;&lt;br /&gt;El archivo test.h queda asi:&lt;br /&gt;&lt;pre name="code" class="C"&gt;&lt;br /&gt;#ifndef _TEST_SPI_H_&lt;br /&gt;#define _TEST_SPI_H_&lt;br /&gt;&lt;br /&gt;#define DEVICE_NAME "test-spi"&lt;br /&gt;&lt;br /&gt;MODULE_AUTHOR("Jorge Eduardo Cardona &amp;lt;jorgeecardona@gmail.com&amp;gt;");&lt;br /&gt;MODULE_DESCRIPTION("SPI test driver.");&lt;br /&gt;MODULE_LICENSE("GPL");&lt;br /&gt;&lt;br /&gt;// Character device functions.&lt;br /&gt;static int this_open(struct inode *inode, struct file *file);&lt;br /&gt;static int this_release(struct inode *inode, struct file *file);&lt;br /&gt;static ssize_t this_read(struct file *file, char __user *buffer, size_t len, loff_t *offset);&lt;br /&gt;static ssize_t this_write(struct file *file, const char __user *buffer, size_t len, loff_t *offset);&lt;br /&gt;&lt;br /&gt;// File Operations structure.&lt;br /&gt;struct file_operations this_fops = {&lt;br /&gt;    .open       = this_open,&lt;br /&gt;    .release    = this_release,&lt;br /&gt;    .read       = this_read,&lt;br /&gt;    .write      = this_write&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;// Linux module functions.&lt;br /&gt;static int __init this_init(void);&lt;br /&gt;static void __exit this_exit(void);&lt;br /&gt;module_init(this_init);&lt;br /&gt;module_exit(this_exit);&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Para crear el dispositivo de caracteres debemos llamar a la funcion: register_chrdev (http://kerneltrap.org/man/linux/man9/register_chrdev.9)(http://www.silicontao.com/ProgrammingGuide/GNU_function_list/register_chrdev.html)&lt;br /&gt;&lt;pre name="code" class="C"&gt;&lt;br /&gt;#include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/fs.h&amp;gt;&lt;br /&gt;#include &amp;lt;linux/err.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#include "test.h"&lt;br /&gt;&lt;br /&gt;// Global data&lt;br /&gt;static int this_major;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;// Function that is called every time we try to open a device.&lt;br /&gt;static int this_open(struct inode *inode, struct file *file)&lt;br /&gt;{&lt;br /&gt;    printk(DEVICE_NAME": Open device.\n");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Function that is called when we close a device.&lt;br /&gt;static int this_release(struct inode *inode, struct file *file)&lt;br /&gt;{&lt;br /&gt;    printk(DEVICE_NAME": Close device.\n");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Function that is called when we read from a device.&lt;br /&gt;static ssize_t this_read(struct file *file, char __user *buffer, size_t len, loff_t *offset)&lt;br /&gt;{&lt;br /&gt;    printk(DEVICE_NAME": Read device.\n");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Function that is called when we write to a device.&lt;br /&gt;static ssize_t this_write(struct file *file, const char __user *buffer, size_t len, loff_t *offset)&lt;br /&gt;{&lt;br /&gt;    printk(DEVICE_NAME": Write device.\n");&lt;br /&gt;    return 0;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Function that is called when we  load the module.&lt;br /&gt;static int __init this_init(void)&lt;br /&gt;{&lt;br /&gt;    int ret;&lt;br /&gt;&lt;br /&gt;    printk(DEVICE_NAME ": Init.\n");&lt;br /&gt;&lt;br /&gt;    // Register char device: 0 for dynamically allocation of the major number.&lt;br /&gt;    ret = register_chrdev(0, DEVICE_NAME, &amp;this_fops);&lt;br /&gt;    if (~IS_ERR_VALUE(ret))&lt;br /&gt;    {&lt;br /&gt;        printk(DEVICE_NAME ": Character device registered, with major=%d.\n",ret);&lt;br /&gt;        this_major = ret;&lt;br /&gt;&lt;br /&gt;        return 0;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    unregister_chrdev(this_major, DEVICE_NAME);&lt;br /&gt;    printk(DEVICE_NAME ": Character device unregistered.\n");&lt;br /&gt;&lt;br /&gt;    return ret;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Function that is called when we remove the module.&lt;br /&gt;static void __exit this_exit(void)&lt;br /&gt;{&lt;br /&gt;    unregister_chrdev(this_major, DEVICE_NAME);&lt;br /&gt;    printk(DEVICE_NAME ": Character device unregistered.\n");&lt;br /&gt;    printk(DEVICE_NAME ": Exit.\n");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;(http://tomoyo.sourceforge.jp/cgi-bin/lxr/ident?i=IS_ERR_VALUE)&lt;br /&gt;&lt;br /&gt;Bueno, igual que antes, configuramos, compilamos  y tenemos:&lt;br /&gt;&lt;pre name="code" class="Bash"&gt;&lt;br /&gt;root@gumstix-custom-connex:~$ modprobe test&lt;br /&gt;root@gumstix-custom-connex:~$ dmesg | grep "test-spi"&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Init.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Character device registered, with major=254.&lt;br /&gt;root@gumstix-custom-connex:~$ mknod /dev/test c 254 0&lt;br /&gt;root@gumstix-custom-connex:~$ cat /dev/test &lt;br /&gt;root@gumstix-custom-connex:~$ dd bs=1 count=0 if=/dev/zero of=/dev/test&lt;br /&gt;0+0 records in&lt;br /&gt;0+0 records out&lt;br /&gt;root@gumstix-custom-connex:~$ echo "ja" &amp;gt; /dev/test&lt;br /&gt;&lt;br /&gt;root@gumstix-custom-connex:~$ rmmod test&lt;br /&gt;root@gumstix-custom-connex:~$ dmesg | grep "test-spi"&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Init.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Character device registered, with major=254.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Open device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Read device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Close device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Open device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Close device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Open device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Write device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Close device.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Character device unregistered.&lt;br /&gt;&amp;lt;4&amp;gt;test-spi: Exit.&lt;br /&gt;root@gumstix-custom-connex:~$ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Los varios mensajes de Write se deben a que retornamos 0 esto quiere decir que no escribimos ningun caracter y la funcion es llamada hasta que vacie el buffer, pero aqui toca matarla con un Ctrl-C.&lt;br /&gt;&lt;br /&gt;Bueno, un paso mas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6333594639011988588?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6333594639011988588/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6333594639011988588' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6333594639011988588'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6333594639011988588'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/04/drivers-en-linux-ii.html' title='Drivers en linux (II)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-3449716384106554166</id><published>2009-04-28T07:52:00.000-07:00</published><updated>2009-04-28T20:22:04.052-07:00</updated><title type='text'>Drivers en linux (I)</title><content type='html'>Bueno iba a hacer esto en un solo post pero por partes es mejor, primero lo básico, cargar y bajar el modulo. En mi caso necesito un modulo para SPI, entonces lo ubico en drivers/spi/test.c&lt;br /&gt;&lt;br /&gt;Comenzando con lo basico, entrar y bajar el modulo.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;test.c&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="C" &gt;&lt;br /&gt;#include &amp;lt;linux/module.h&amp;gt;&lt;br /&gt;#include "test.h"&lt;br /&gt;&lt;br /&gt;static int __init this_init(void)&lt;br /&gt;{&lt;br /&gt;    // Initialize module.&lt;br /&gt;&lt;br /&gt;    printk(DEVICE_NAME ": Init.\n");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;static void __exit this_exit(void)&lt;br /&gt;{&lt;br /&gt;    // Exit module.&lt;br /&gt;&lt;br /&gt;    printk(DEVICE_NAME ": Exit.\n");&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;test.h&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="C"&gt;&lt;br /&gt;#ifndef _TEST_SPI_H_&lt;br /&gt;#define _TEST_SPI_H_&lt;br /&gt;&lt;br /&gt;#define DEVICE_NAME "test-spi"&lt;br /&gt;&lt;br /&gt;MODULE_AUTHOR("Jorge Eduardo Cardona &amp;lt;jorgeecardona@gmail.com&amp;gt;");&lt;br /&gt;MODULE_DESCRIPTION("SPI test driver.");&lt;br /&gt;MODULE_LICENSE("GPL");&lt;br /&gt;&lt;br /&gt;// Linux module functions.&lt;br /&gt;static int __init this_init(void);&lt;br /&gt;static void __exit this_exit(void);&lt;br /&gt;module_init(this_init);&lt;br /&gt;module_exit(this_exit);&lt;br /&gt;&lt;br /&gt;#endif&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Tenemos que manipular dos archivos mas: Kconfig y Makefile, ambos en la misma carpeta:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Kconfig&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="C"&gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;config SPI_TEST&lt;br /&gt;    tristate "Test SPI driver."&lt;br /&gt;    depends on SPI_MASTER &amp;&amp; EXPERIMENTAL&lt;br /&gt;    help&lt;br /&gt;      Test SPI driver.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Makefile&lt;/span&gt;&lt;br /&gt;&lt;pre name="code" class="Bash"&gt;&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;obj-$(CONFIG_SPI_TEST)      += test.o&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Al configurar el kernel nos saldra la opcion, la seleccionamos y podremos hacer esto:&lt;br /&gt;&lt;pre name="code" class="Bash"&gt;&lt;br /&gt;root@gumstix-custom-connex:~$ modprobe test&lt;br /&gt;root@gumstix-custom-connex:~$ dmesg | tail -n1&lt;br /&gt;&amp;lt;4&gt;; test-spi: Init.&lt;br /&gt;root@gumstix-custom-connex:~$ rmmod test&lt;br /&gt;root@gumstix-custom-connex:~$ dmesg | tail -n1&lt;br /&gt;&amp;lt;4&gt; test-spi: Exit.&lt;br /&gt;root@gumstix-custom-connex:~$ &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Primer paso listo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-3449716384106554166?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/3449716384106554166/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=3449716384106554166' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3449716384106554166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3449716384106554166'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/04/drivers-en-linux-i.html' title='Drivers en linux (I)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2233191648200963461</id><published>2009-04-15T15:12:00.001-07:00</published><updated>2009-04-15T16:31:01.713-07:00</updated><title type='text'>Contando racionales.</title><content type='html'>Un numero racional es todo aquel que puede ser escrito de la forma:&lt;br /&gt;&lt;br /&gt;racional = a/b : siendo a y b numeros enteros.&lt;br /&gt;&lt;br /&gt;Usando el metodo como Georg Ferdinand Ludwig Philipp Cantor demostro que los racionales son contables podemos crear un pequeñito programa para sacar el i-esimo racional de la tabla de cantor:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Python"&gt;&lt;br /&gt;from math import sqrt&lt;br /&gt;&lt;br /&gt;def rational(i):&lt;br /&gt;    b = int((sqrt(1+8*i)-1)/2)&lt;br /&gt;    n = i - (b**2 + b)/2 + 1&lt;br /&gt;    d = b + 2 - n&lt;br /&gt;&lt;br /&gt;    return (n,d)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for i in xrange(100):&lt;br /&gt;    (n,d) = rational(i)&lt;br /&gt;&lt;br /&gt;    print "(%d) %d/%d \t= %f"%(i,n,d,float(n)/float(d))&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Bueno, La tabla de Cantor es sencilla, el numerador aumenta columna a columna desde 1 hasta aleph_0 y el denumenador fila a fila de 1 a aleph_0, de esta forma todos los nuemros racionales son cubiertos por la tabla, y por tanto son contables, se les puede asociar uno a uno un elemento de los enteros.&lt;br /&gt;&lt;br /&gt;La tabla:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;1/1  2/1  3/1  4/1  5/1  6/1  7/1  8/1  9/1  ...&lt;br /&gt;1/2  2/2  3/2  4/2  5/2  6/2  7/2  8/2  9/2  ...&lt;br /&gt;1/3  2/3  3/3  4/3  5/3  6/3  7/3  8/3  9/3  ...&lt;br /&gt;1/4  2/4  3/4  4/4  5/4  6/4  7/4  8/4  9/4  ...&lt;br /&gt;1/5  2/5  3/5  4/5  5/5  6/5  7/5  8/5  9/5  ...&lt;br /&gt;1/6  2/6  3/6  4/6  5/6  6/6  7/6  8/6  9/6  ...&lt;br /&gt;1/7  2/7  3/7  4/7  5/7  6/7  7/7  8/7  9/7  ...&lt;br /&gt;1/8  2/8  3/8  4/8  5/8  6/8  7/8  8/8  9/8  ...&lt;br /&gt;1/9  2/9  3/9  4/9  5/9  6/9  7/9  8/9  9/9  ...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Y el conteo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;0    2    5    9    14   20   27   35   44   ...&lt;br /&gt;1    4    8    13   19   26   34   43   53   ...&lt;br /&gt;3    7    12   18   25   33   42   52   ...  &lt;br /&gt;6    11   17   24   32   41   51   ...&lt;br /&gt;10   16   23   31   40   50   ...&lt;br /&gt;15   22   30   39   49   ... &lt;br /&gt;21   29   38   48   ... &lt;br /&gt;28   37   47   ...&lt;br /&gt;36   46   ...&lt;br /&gt;45   ...&lt;br /&gt;...&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Resultado de la ejecucion del codigo:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;(0) 1/1  = 1.000000&lt;br /&gt;(1) 1/2  = 0.500000&lt;br /&gt;(2) 2/1  = 2.000000&lt;br /&gt;(3) 1/3  = 0.333333&lt;br /&gt;(4) 2/2  = 1.000000&lt;br /&gt;(5) 3/1  = 3.000000&lt;br /&gt;(6) 1/4  = 0.250000&lt;br /&gt;(7) 2/3  = 0.666667&lt;br /&gt;(8) 3/2  = 1.500000&lt;br /&gt;(9) 4/1  = 4.000000&lt;br /&gt;(10) 1/5  = 0.200000&lt;br /&gt;(11) 2/4  = 0.500000&lt;br /&gt;(12) 3/3  = 1.000000&lt;br /&gt;(13) 4/2  = 2.000000&lt;br /&gt;(14) 5/1  = 5.000000&lt;br /&gt;(15) 1/6  = 0.166667&lt;br /&gt;(16) 2/5  = 0.400000&lt;br /&gt;(17) 3/4  = 0.750000&lt;br /&gt;(18) 4/3  = 1.333333&lt;br /&gt;(19) 5/2  = 2.500000&lt;br /&gt;(20) 6/1  = 6.000000&lt;br /&gt;(21) 1/7  = 0.142857&lt;br /&gt;(22) 2/6  = 0.333333&lt;br /&gt;(23) 3/5  = 0.600000&lt;br /&gt;(24) 4/4  = 1.000000&lt;br /&gt;(25) 5/3  = 1.666667&lt;br /&gt;(26) 6/2  = 3.000000&lt;br /&gt;(27) 7/1  = 7.000000&lt;br /&gt;(28) 1/8  = 0.125000&lt;br /&gt;(29) 2/7  = 0.285714&lt;br /&gt;(30) 3/6  = 0.500000&lt;br /&gt;(31) 4/5  = 0.800000&lt;br /&gt;(32) 5/4  = 1.250000&lt;br /&gt;(33) 6/3  = 2.000000&lt;br /&gt;(34) 7/2  = 3.500000&lt;br /&gt;(35) 8/1  = 8.000000&lt;br /&gt;(36) 1/9  = 0.111111&lt;br /&gt;(37) 2/8  = 0.250000&lt;br /&gt;(38) 3/7  = 0.428571&lt;br /&gt;(39) 4/6  = 0.666667&lt;br /&gt;(40) 5/5  = 1.000000&lt;br /&gt;(41) 6/4  = 1.500000&lt;br /&gt;(42) 7/3  = 2.333333&lt;br /&gt;(43) 8/2  = 4.000000&lt;br /&gt;(44) 9/1  = 9.000000&lt;br /&gt;(45) 1/10  = 0.100000&lt;br /&gt;(46) 2/9  = 0.222222&lt;br /&gt;(47) 3/8  = 0.375000&lt;br /&gt;(48) 4/7  = 0.571429&lt;br /&gt;(49) 5/6  = 0.833333&lt;br /&gt;(50) 6/5  = 1.200000&lt;br /&gt;(51) 7/4  = 1.750000&lt;br /&gt;(52) 8/3  = 2.666667&lt;br /&gt;(53) 9/2  = 4.500000&lt;br /&gt;(54) 10/1  = 10.000000&lt;br /&gt;(55) 1/11  = 0.090909&lt;br /&gt;(56) 2/10  = 0.200000&lt;br /&gt;(57) 3/9  = 0.333333&lt;br /&gt;(58) 4/8  = 0.500000&lt;br /&gt;(59) 5/7  = 0.714286&lt;br /&gt;(60) 6/6  = 1.000000&lt;br /&gt;(61) 7/5  = 1.400000&lt;br /&gt;(62) 8/4  = 2.000000&lt;br /&gt;(63) 9/3  = 3.000000&lt;br /&gt;(64) 10/2  = 5.000000&lt;br /&gt;(65) 11/1  = 11.000000&lt;br /&gt;(66) 1/12  = 0.083333&lt;br /&gt;(67) 2/11  = 0.181818&lt;br /&gt;(68) 3/10  = 0.300000&lt;br /&gt;(69) 4/9  = 0.444444&lt;br /&gt;(70) 5/8  = 0.625000&lt;br /&gt;(71) 6/7  = 0.857143&lt;br /&gt;(72) 7/6  = 1.166667&lt;br /&gt;(73) 8/5  = 1.600000&lt;br /&gt;(74) 9/4  = 2.250000&lt;br /&gt;(75) 10/3  = 3.333333&lt;br /&gt;(76) 11/2  = 5.500000&lt;br /&gt;(77) 12/1  = 12.000000&lt;br /&gt;(78) 1/13  = 0.076923&lt;br /&gt;(79) 2/12  = 0.166667&lt;br /&gt;(80) 3/11  = 0.272727&lt;br /&gt;(81) 4/10  = 0.400000&lt;br /&gt;(82) 5/9  = 0.555556&lt;br /&gt;(83) 6/8  = 0.750000&lt;br /&gt;(84) 7/7  = 1.000000&lt;br /&gt;(85) 8/6  = 1.333333&lt;br /&gt;(86) 9/5  = 1.800000&lt;br /&gt;(87) 10/4  = 2.500000&lt;br /&gt;(88) 11/3  = 3.666667&lt;br /&gt;(89) 12/2  = 6.000000&lt;br /&gt;(90) 13/1  = 13.000000&lt;br /&gt;(91) 1/14  = 0.071429&lt;br /&gt;(92) 2/13  = 0.153846&lt;br /&gt;(93) 3/12  = 0.250000&lt;br /&gt;(94) 4/11  = 0.363636&lt;br /&gt;(95) 5/10  = 0.500000&lt;br /&gt;(96) 6/9  = 0.666667&lt;br /&gt;(97) 7/8  = 0.875000&lt;br /&gt;(98) 8/7  = 1.142857&lt;br /&gt;(99) 9/6  = 1.500000&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2233191648200963461?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2233191648200963461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2233191648200963461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2233191648200963461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2233191648200963461'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2009/04/contando-racionales.html' title='Contando racionales.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-6680475355700033833</id><published>2008-11-02T08:53:00.000-08:00</published><updated>2008-11-02T08:55:09.114-08:00</updated><title type='text'>El sueño de la razón produce monstruos. (Goya)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXDrkPRZrbQ/SQ3bMyafqaI/AAAAAAAAABs/Cz48f71hETU/s1600-h/Goya-El_sue%C3%B1o_de_la_raz%C3%B3n.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 267px; height: 400px;" src="http://2.bp.blogspot.com/_sXDrkPRZrbQ/SQ3bMyafqaI/AAAAAAAAABs/Cz48f71hETU/s400/Goya-El_sue%C3%B1o_de_la_raz%C3%B3n.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5264104552203790754" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-6680475355700033833?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/6680475355700033833/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=6680475355700033833' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6680475355700033833'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/6680475355700033833'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/11/el-sueo-de-la-razn-produce-monstruos.html' title='El sueño de la razón produce monstruos. (Goya)'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXDrkPRZrbQ/SQ3bMyafqaI/AAAAAAAAABs/Cz48f71hETU/s72-c/Goya-El_sue%C3%B1o_de_la_raz%C3%B3n.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2639586672807752574</id><published>2008-10-07T09:39:00.000-07:00</published><updated>2008-10-07T09:40:56.315-07:00</updated><title type='text'>GtkModelica</title><content type='html'>Mmm, mezclare un poco de C++ con Anjuta, GTK con glade, FlowCanvas, y Modelica con OpenModelica, ojala salga algo bueno, y rapido!!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2639586672807752574?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2639586672807752574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2639586672807752574' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2639586672807752574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2639586672807752574'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/10/gtkmodelica.html' title='GtkModelica'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2645827349783263090</id><published>2008-09-22T17:58:00.000-07:00</published><updated>2008-09-22T18:00:00.130-07:00</updated><title type='text'>Hoy encontre oro!</title><content type='html'>http://en.wikipedia.org/wiki/Modelica&lt;br /&gt;http://www.modelica.org/&lt;br /&gt;http://www.ida.liu.se/labs/pelab/modelica/OpenModelica.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2645827349783263090?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2645827349783263090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2645827349783263090' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2645827349783263090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2645827349783263090'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/09/hoy-encontre-oro.html' title='Hoy encontre oro!'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-922093913281006207</id><published>2008-07-14T22:20:00.000-07:00</published><updated>2008-07-14T22:56:55.772-07:00</updated><title type='text'>Dynamic Programming</title><content type='html'>Bien, hoy lei un poco de Dynamic Programming, es bacancito, de una pense en un decorator en Python, no es complicado, ahi esta el ejemplo:&lt;br /&gt;&lt;br /&gt;1) Fibonacci normal:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Python"&gt;&lt;br /&gt;#!/usr/bin/python&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;def fib(x):&lt;br /&gt;    if x==0:&lt;br /&gt;        return 0&lt;br /&gt;    if x==1:&lt;br /&gt;        return 1&lt;br /&gt;    return fib(x-1)+fib(x-2)&lt;br /&gt;&lt;br /&gt;print fib(int(sys.argv[1]))&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Este codigo tiene un comportamiento como lo muestra la grafica (N vs segundos)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_sXDrkPRZrbQ/SHw1CJFuTRI/AAAAAAAAABk/vxkJHh2igKw/s1600-h/fibonacci.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_sXDrkPRZrbQ/SHw1CJFuTRI/AAAAAAAAABk/vxkJHh2igKw/s400/fibonacci.png" alt="" id="BLOGGER_PHOTO_ID_5223107978758868242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) Ahora con un decorator implementando Dynamic Programming.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Python"&gt;&lt;br /&gt;#!/usr/bin/python&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;map={}&lt;br /&gt;def dynamic_programming(func):&lt;br /&gt;  def decorator(*args, **kwargs):&lt;br /&gt;      if (func,args) in map:&lt;br /&gt;          return map[(func,args)]&lt;br /&gt;      else:&lt;br /&gt;          r = func(*args, **kwargs)&lt;br /&gt;          map[(func,args)] = r&lt;br /&gt;          return r&lt;br /&gt;  return decorator&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;@dynamic_programming&lt;br /&gt;def fib(x):&lt;br /&gt;  if x==0:&lt;br /&gt;      return 0&lt;br /&gt;  if x==1:&lt;br /&gt;      return 1&lt;br /&gt;  return fib(x-1)+fib(x-2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;print fib(int(sys.argv[1]))&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Como pueden ver el codigo de la funcion fib no se cambio, solo se le agrego un decorator, el cual busca primero si el argumento esta en un diccionario, para no recalcularlo. (kwargs es un dict, y no puedo usarlo como un key en otro dict, toco sacarlo del key :))&lt;br /&gt;&lt;br /&gt;No pondre grafica de este solo esto:&lt;br /&gt;&lt;br /&gt;&lt;verbatim&gt;&lt;br /&gt;$ time ./fib2.py  499&lt;br /&gt;86168291600238450732788312165664788095941068326060883324529903470149056115823592713458328176574447204501&lt;br /&gt;&lt;br /&gt;real    0m0.029s&lt;br /&gt;user    0m0.024s&lt;br /&gt;sys     0m0.004s&lt;br /&gt;&lt;/verbatim&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-922093913281006207?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/922093913281006207/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=922093913281006207' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/922093913281006207'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/922093913281006207'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/07/dynamic-programming.html' title='Dynamic Programming'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_sXDrkPRZrbQ/SHw1CJFuTRI/AAAAAAAAABk/vxkJHh2igKw/s72-c/fibonacci.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2242698141769999272</id><published>2008-06-15T16:59:00.000-07:00</published><updated>2008-06-15T22:51:38.025-07:00</updated><title type='text'>OS hello world.</title><content type='html'>Je, hace rato que no escribía nada, vamos a ver si sale un hello world de un """sistema operativo""", en VirtualBox.&lt;br /&gt;&lt;br /&gt;Primero organizamos el dispositivo de arranque, que seria una imagen de un disco. Bueno tenemos que entender bien lo de MBR, eso de cilindros, sectores y cabezas.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Sector&lt;/span&gt;: Agrupación lógica de &lt;span style="font-style: italic;"&gt;512 Bytes&lt;/span&gt; en el disco. La medida que muestran programas como &lt;span style="font-weight: bold; font-style: italic;"&gt;fdisk&lt;/span&gt; es &lt;span style="font-weight: bold; font-style: italic;"&gt;Sector/Track&lt;/span&gt;, o sea cantidad de sectores en una pista del disco.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Track:&lt;/span&gt; Es una "circunferencia de datos", en cada superficie magnetica. Podemos calcular la cantidad de bytes en un track con  &lt;span style="font-style: italic; font-weight: bold;"&gt;sector/track*512.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Head: &lt;/span&gt;Representa la cantidad de dispositivos lectores magnéticos, seria como la cantidad de superficies magnéticas disponibles en el disco, aunque la medida que entregan programas como fdisk no representa esto, puede tomarse como una especie de medida para poder ubicar un byte en el disco.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Cylinder:&lt;/span&gt; Estas es la cantidad total de&lt;span style="font-style: italic; font-weight: bold;"&gt; tracks &lt;/span&gt;que existen en una sola superficie magnética.&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;&lt;/span&gt;&lt;br /&gt;Entonces podemos decir que la unidad de almacenamiento es &lt;span style="font-weight: bold;"&gt;1&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;Bit&lt;/span&gt;,  &lt;span style="font-weight: bold;"&gt;un&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;byte&lt;/span&gt; lo componen &lt;span style="font-weight: bold;"&gt;8&lt;span style="font-style: italic;"&gt; Bits&lt;/span&gt;&lt;/span&gt;,&lt;span style="font-weight: bold;"&gt; un&lt;span style="font-style: italic;"&gt; sector&lt;/span&gt;&lt;/span&gt; lo componen &lt;span style="font-weight: bold;"&gt;512 &lt;span style="font-style: italic;"&gt;Bytes&lt;/span&gt;&lt;/span&gt;, una &lt;span style="font-weight: bold;"&gt;pista&lt;/span&gt;(&lt;span style="font-weight: bold; font-style: italic;"&gt;track&lt;/span&gt;) la componen &lt;span style="font-weight: bold;"&gt;(sector/track)&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt; tracks&lt;/span&gt; o &lt;span style="font-weight: bold;"&gt;(sector/track)*512&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;Bytes&lt;/span&gt;, una superficie magnetica esta compuesta por &lt;span style="font-weight: bold;"&gt;(cylinders)&lt;/span&gt;  &lt;span style="font-weight: bold; font-style: italic;"&gt;tracks&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt;, &lt;/span&gt;&lt;/span&gt;o &lt;span style="font-weight: bold;"&gt;(cylinders)*(sector/track)*512&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;Bytes&lt;/span&gt;, y el disco completo esta compuesto por&lt;span style="font-weight: bold;"&gt; (heads)&lt;/span&gt;  &lt;span style="font-weight: bold; font-style: italic;"&gt;superficies magneticas &lt;/span&gt;o &lt;span style="font-weight: bold;"&gt;(heads)*(cylinders)*(sectors/track)*512&lt;/span&gt; &lt;span style="font-style: italic; font-weight: bold;"&gt;Bytes&lt;/span&gt;. (&lt;a href="http://www.storagereview.com/guide2000/ref/hdd/index.html"&gt;http://www.storagereview.com/guide2000/ref/hdd/index.html&lt;/a&gt;)&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MBR&lt;/span&gt;: Master Boot Record, la misma esta ubicada en el primer sector del disco (primeros &lt;span style="font-style: italic;"&gt;512 Bytes&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Ahora necesitamos generar una imagen con mbr, si queremos un disco con 16 heads, 63 sectors/track y 160 cylinders:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ dd if=/dev/zero of=disk.image bs=512 count 161280&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora con losetup montamos este archivo como un dispositivo de bloques:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo losetup /dev/loop0 disk.image&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creamos el &lt;span style="font-weight: bold;"&gt;MBR&lt;/span&gt; con:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo fdisk -u -C160 -S63 -H16 /dev/loop0&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Con -C decimos los cilindros, con -S los sectores por pista, con -H las cabezas, y con -u decimos que nos muestre los tamaños en sectores y no en cilindros. Ahora creamos una particion primaria de todo el disco con el flag de boot activo, la tabla de particiones debe quedar:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;Command (m for help): p&lt;br /&gt;&lt;br /&gt;Disk /dev/loop0: 82 MB, 82575360 bytes&lt;br /&gt;16 heads, 63 sectors/track, 160 cylinders, total 161280 sectors&lt;br /&gt;Units = sectors of 1 * 512 = 512 bytes&lt;br /&gt;Disk identifier: 0x19c7acc5&lt;br /&gt;&lt;br /&gt;Device Boot      Start         End      Blocks   Id  System&lt;br /&gt;/dev/loop0p1   *          63      161279       80608+  83  Linux&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;En este punto tenemos una imagen de un disco solo con MBR, en &lt;a href="http://en.wikipedia.org/wiki/Mbr"&gt;http://en.wikipedia.org/wiki/Mbr&lt;/a&gt; podemos ver una descripcion de las cabeceras del MBR, y podemos verificar en nuestra imagen con:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ hd -v -n512 disk.image&lt;br /&gt;00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000040  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000050  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000060  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000070  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000080  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000090  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000c0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000000f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000110  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000120  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000130  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000140  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000150  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000160  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000170  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000180  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000190  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000001a0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000001b0  00 00 00 00 00 00 00 00  c5 ac c7 19 00 00 00 01  |................|&lt;br /&gt;000001c0  01 00 83 0f 3f 9f 3f 00  00 00 c1 75 02 00 00 00  |....?.?....u....|&lt;br /&gt;000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|&lt;br /&gt;00000200&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esto corresponde al primer sector de nuestro disco, podemos ver la entrada para la particion primaria que hicimos, la cual es:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ hd -v -s446 -n16 disk.image&lt;br /&gt;000001be  00 01 01 00 83 0f 3f 9f  3f 00 00 00 c1 75 02 00  |......?.?....u..|&lt;br /&gt;000001ce&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aun falta darle formato a la particion que creamos.  La anterior cabecera nos dice que esta particion comienza en el sector &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;0x3F000000&lt;/span&gt;&lt;/span&gt;, (little-endian -&gt; 63), y tiene una extension de &lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;0xC1750200 &lt;/span&gt;&lt;/span&gt;(161217)  sectores.&lt;br /&gt;&lt;br /&gt;A esta particion le damos formato asi:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo losetup -o32256 /dev/loop1 disk.image&lt;br /&gt;$ sudo mkfs.ext2 -b1024 /dev/loop1 80608&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sabemos que podemos comenzar a hacer uso de nuestra particion desde el sector 63, que equivale al byte 63*512=32256, y tiene una extension de 161217*512 bytes, y como manejamos bloques de 1024 en ext2, tendriamos un total de 80608.5 bloques que redondeamos a 80608.&lt;br /&gt;&lt;br /&gt;Ahora tenemos que instalar el grub en nuestra imagen, esta es la parte mas confusa, es buena una cuanta documentacion (&lt;a href="http://www.gnu.org/software/grub/"&gt;http://www.gnu.org/software/grub/&lt;/a&gt; , &lt;a href="http://www.gnu.org/software/grub/manual/multiboot/"&gt;http://www.gnu.org/software/grub/manual/multiboot/&lt;/a&gt; )&lt;br /&gt;&lt;br /&gt;Debemos instalar todo lo necesario en nuestro sistema de archivos en la carpeta /boot/grub.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ mkdir mnt&lt;br /&gt;$ sudo mount -text2 /dev/loop1 mnt/&lt;br /&gt;$ wget http://ftp.br.debian.org/debian/pool/main/g/grub/grub_0.97-27_i386.deb&lt;br /&gt;$ dpkg-deb -X grub_0.97-27_i386.deb grub_debian&lt;br /&gt;$ sudo mkdir -p mnt/boot/grub&lt;br /&gt;$ sudo cp grub_debian/usr/lib/grub/i386-pc/* mnt/boot/grub/&lt;br /&gt;$ sudo grub&lt;br /&gt;&lt;br /&gt;grub&gt; device (hd0) /dev/loop0&lt;br /&gt;&lt;br /&gt;grub&gt; geometry (hd0) 160 16 63&lt;br /&gt;drive 0x80: C/H/S = 160/16/63, The number of sectors = 161280, /dev/loop0&lt;br /&gt;Partition num: 0,  Filesystem type is ext2fs, partition type 0x83&lt;br /&gt;&lt;br /&gt;grub&gt; root (hd0,0)&lt;br /&gt;Filesystem type is ext2fs, partition type 0x83&lt;br /&gt;&lt;br /&gt;grub&gt; setup (hd0)&lt;br /&gt;Checking if "/boot/grub/stage1" exists... yes&lt;br /&gt;Checking if "/boot/grub/stage2" exists... yes&lt;br /&gt;Checking if "/boot/grub/e2fs_stage1_5" exists... yes&lt;br /&gt;Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.&lt;br /&gt;succeeded&lt;br /&gt;Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... failed&lt;br /&gt;&lt;br /&gt;Error 22: No such partition&lt;br /&gt;&lt;br /&gt;grub&gt; quit&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Aqui bajamos el paquete de debian de grub, del cual copiamos todo lo necesario para que grub funcione en una arquitectura i386 que es la que pensamos virtualizar.  Encontramos un eror en grub, pero si tiramos el comando con strace vemos lo siguiente(&lt;a href="http://osdir.com/ml/boot-loaders.grub.bugs/2005-01/msg00035.html"&gt;http://osdir.com/ml/boot-loaders.grub.bugs/2005-01/msg00035.html&lt;/a&gt;) :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo strace -o trace.log grub&lt;br /&gt;...&lt;br /&gt;$ cat trace.log | grep loop&lt;br /&gt;open("/dev/loop0", O_RDONLY|O_LARGEFILE) = 4&lt;br /&gt;open("/dev/loop0", O_RDWR|O_LARGEFILE)  = 3&lt;br /&gt;open("/dev/loop01", O_RDWR|O_LARGEFILE) = -1 ENOENT (No such file or directory)&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Grub cree que la particion 1 de nuestra imagen se encuentra en loop01, entonces ahi se la daremos:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo ln -s /dev/loop1 /dev/loop01&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Volvemos a tirar grub:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo grub&lt;br /&gt;&lt;br /&gt;grub&gt; device (hd0) /dev/loop0&lt;br /&gt;&lt;br /&gt;grub&gt; geometry (hd0) 160 16 63&lt;br /&gt;drive 0x80: C/H/S = 160/16/63, The number of sectors = 161280, /dev/loop0&lt;br /&gt;Partition num: 0,  Filesystem type is ext2fs, partition type 0x83&lt;br /&gt;&lt;br /&gt;grub&gt; root (hd0,0)&lt;br /&gt;Filesystem type is ext2fs, partition type 0x83&lt;br /&gt;&lt;br /&gt;grub&gt; setup (hd0)&lt;br /&gt;Checking if "/boot/grub/stage1" exists... yes&lt;br /&gt;Checking if "/boot/grub/stage2" exists... yes&lt;br /&gt;Checking if "/boot/grub/e2fs_stage1_5" exists... yes&lt;br /&gt;Running "embed /boot/grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded. succeeded&lt;br /&gt;Running "install /boot/grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/boot/grub/stage2 /boot/grub/menu.lst"... succeeded&lt;br /&gt;Done.&lt;br /&gt;&lt;br /&gt;grub&gt; quit&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ya podemos verificar la instalacion del stage1 en el mbr:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ hd -v -n512 disk.image&lt;br /&gt;&lt;br /&gt;00000000  eb 48 90 00 00 00 00 00  00 00 00 00 00 00 00 00  |.H..............|&lt;br /&gt;00000010  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|&lt;br /&gt;00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 03 02  |................|&lt;br /&gt;00000040  ff 00 00 20 01 00 00 00  00 02 fa 90 90 f6 c2 80  |... ............|&lt;br /&gt;00000050  75 02 b2 80 ea 59 7c 00  00 31 c0 8e d8 8e d0 bc  |u....Y|..1......|&lt;br /&gt;00000060  00 20 fb a0 40 7c 3c ff  74 02 88 c2 52 be 7f 7d  |. ..@|&lt;.t...R..}| &lt;br /&gt;00000070  e8 34 01 f6 c2 80 74 54  b4 41 bb aa 55 cd 13 5a  |.4....tT.A..U..Z| &lt;br /&gt;00000080  52 72 49 81 fb 55 aa 75  43 a0 41 7c 84 c0 75 05  |RrI..U.uC.A|..u.| &lt;br /&gt;00000090  83 e1 01 74 37 66 8b 4c  10 be 05 7c c6 44 ff 01  |...t7f.L...|.D..| &lt;br /&gt;000000a0  66 8b 1e 44 7c c7 04 10  00 c7 44 02 01 00 66 89  |f..D|.....D...f.| &lt;br /&gt;000000b0  5c 08 c7 44 06 00 70 66  31 c0 89 44 04 66 89 44  |\..D..pf1..D.f.D| &lt;br /&gt;000000c0  0c b4 42 cd 13 72 05 bb  00 70 eb 7d b4 08 cd 13  |..B..r...p.}....| &lt;br /&gt;000000d0  73 0a f6 c2 80 0f 84 ea  00 e9 8d 00 be 05 7c c6  |s.............|.| &lt;br /&gt;000000e0  44 ff 00 66 31 c0 88 f0  40 66 89 44 04 31 d2 88  |D..f1...@f.D.1..| &lt;br /&gt;000000f0  ca c1 e2 02 88 e8 88 f4  40 89 44 08 31 c0 88 d0  |........@.D.1...| &lt;br /&gt;00000100  c0 e8 02 66 89 04 66 a1  44 7c 66 31 d2 66 f7 34  |...f..f.D|f1.f.4| &lt;br /&gt;00000110  88 54 0a 66 31 d2 66 f7  74 04 88 54 0b 89 44 0c  |.T.f1.f.t..T..D.| &lt;br /&gt;00000120  3b 44 08 7d 3c 8a 54 0d  c0 e2 06 8a 4c 0a fe c1  |;D.}&lt;.T.....L...| &lt;br /&gt;00000130  08 d1 8a 6c 0c 5a 8a 74  0b bb 00 70 8e c3 31 db  |...l.Z.t...p..1.| &lt;br /&gt;00000140  b8 01 02 cd 13 72 2a 8c  c3 8e 06 48 7c 60 1e b9  |.....r*....H|`..| &lt;br /&gt;00000150  00 01 8e db 31 f6 31 ff  fc f3 a5 1f 61 ff 26 42  |....1.1.....a.&amp;amp;B| &lt;br /&gt;00000160  7c be 85 7d e8 40 00 eb  0e be 8a 7d e8 38 00 eb  ||..}.@.....}.8..| &lt;br /&gt;00000170  06 be 94 7d e8 30 00 be  99 7d e8 2a 00 eb fe 47  |...}.0...}.*...G| &lt;br /&gt;00000180  52 55 42 20 00 47 65 6f  6d 00 48 61 72 64 20 44  |RUB .Geom.Hard D| &lt;br /&gt;00000190  69 73 6b 00 52 65 61 64  00 20 45 72 72 6f 72 00  |isk.Read. Error.| &lt;br /&gt;000001a0  bb 01 00 b4 0e cd 10 ac  3c 00 75 f4 c3 00 00 00  |........&lt;.u.....| &lt;br /&gt;000001b0  00 00 00 00 00 00 00 00  cc 69 95 5f 00 00 80 01  |.........i._....| &lt;br /&gt;000001c0  01 00 83 0f 3f 9f 3f 00  00 00 c1 75 02 00 00 00  |....?.?....u....| &lt;br /&gt;000001d0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| &lt;br /&gt;000001e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| &lt;br /&gt;000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.| &lt;br /&gt;00000200   &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Comencemos con el codigo, primero necesitamos la porcion de codigo que nos salta al codigo en C que queremos ejecutar, esta primera parte viene en assembly, aqui hay uno que nos puede servir (tomado de &lt;a href="http://javiervalcarce.es/wiki/Kernel_multiboot_m%C3%ADnimo"&gt;http://javiervalcarce.es/wiki/Kernel_multiboot_m%C3%ADnimo&lt;/a&gt;):&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;/* Start-up */&lt;br /&gt;&lt;br /&gt;#define STACK_SIZE              0x4000      /* The size of our stack (16KB) */&lt;br /&gt;#define MULTIBOOT_HEADER_MAGIC  0x1BADB002      /* The magic number for the Multiboot header */&lt;br /&gt;&lt;br /&gt;        .text&lt;br /&gt;        .globl  _start&lt;br /&gt;&lt;br /&gt;    .align  4               /* Align 32 bits boundary */&lt;br /&gt;                            /* Multiboot-compliant header */&lt;br /&gt;        .long   +MULTIBOOT_HEADER_MAGIC         /* magic */&lt;br /&gt;        .long   0                   /* flags=0 */&lt;br /&gt;        .long   -MULTIBOOT_HEADER_MAGIC         /* checksum */&lt;br /&gt;_start:&lt;br /&gt;        movl    $(stack + STACK_SIZE), %esp /* Initialize the stack pointer */&lt;br /&gt;&lt;br /&gt;        push   $0                   /* Reset EFLAGS */&lt;br /&gt;        popf&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;        call    cmain               /* C main function... */&lt;br /&gt;loop:   hlt&lt;br /&gt;        jmp     loop&lt;br /&gt;&lt;br /&gt;        .comm   stack, STACK_SIZE       /* Our stack area */&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;lo guardamos en un archivo llamado &lt;span style="font-style: italic;"&gt;startup.S&lt;/span&gt;, ahora el codigo en C:&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;/* kernel.c - the C part of the kernel */&lt;br /&gt;&lt;br /&gt;/* Some screen stuff. */&lt;br /&gt;#define COLUMNS         80      /* The number of columns */&lt;br /&gt;#define LINES           24      /* The number of lines */&lt;br /&gt;#define ATTRIBUTE       7       /* The attribute of an character */&lt;br /&gt;#define VIDEO           0xB8000 /* The video memory address */&lt;br /&gt;&lt;br /&gt;/* Variables */&lt;br /&gt;static int xpos;        /* Save the X position */&lt;br /&gt;static int ypos;        /* Save the Y position */&lt;br /&gt;static volatile&lt;br /&gt;unsigned char *video;   /* Point to the video memory */&lt;br /&gt;&lt;br /&gt;/* Forward declarations */&lt;br /&gt;void cmain (unsigned long magic, unsigned long addr);&lt;br /&gt;static void cls();&lt;br /&gt;static void putchar (int c);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;void cmain (unsigned long magic, unsigned long addr)&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;char msg[] = "Hello World";&lt;br /&gt;char*   p;&lt;br /&gt;&lt;br /&gt;cls();&lt;br /&gt;&lt;br /&gt;/* printf */&lt;br /&gt;p = msg;&lt;br /&gt;for (p = msg; *p != 0; p++)&lt;br /&gt;{&lt;br /&gt;putchar(*p);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;////////////////////////////////////////////////////////////////////////////////&lt;br /&gt;/* Clear the screen and initialize VIDEO, XPOS and YPOS */&lt;br /&gt;static void cls (void)&lt;br /&gt;{&lt;br /&gt;int i;&lt;br /&gt;&lt;br /&gt;video = (unsigned char *) VIDEO;&lt;br /&gt;&lt;br /&gt;for (i = 0; i &lt; xpos =" 0;" ypos =" 0;" c ="=" c ="=" xpos =" 0;"&gt;= LINES)&lt;br /&gt;ypos = 0;&lt;br /&gt;return;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;*(video + (xpos + ypos * COLUMNS) * 2)     = c &amp;amp; 0xFF;&lt;br /&gt;*(video + (xpos + ypos * COLUMNS) * 2 + 1) = ATTRIBUTE;&lt;br /&gt;&lt;br /&gt;xpos++;&lt;br /&gt;if (xpos &gt;= COLUMNS)&lt;br /&gt;goto newline;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Guardamos esto en un kernel1.c, y compilamos :&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ gcc -c kernel1.c&lt;br /&gt;$ gcc -c startup.S&lt;br /&gt;$ ld -o kernel1 kernel1.o startup.o -Ttext 0x100000&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ahora terminamos de configurar el grub para que funcione con nuestro kernel1:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo cp kernel1 mnt/boot/&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Creamos el archivo menu.lst con:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;default         0&lt;br /&gt;timeout         2&lt;br /&gt;color cyan/blue white/blue&lt;br /&gt;&lt;br /&gt;title           kernel1&lt;br /&gt;root            (hd0,0)&lt;br /&gt;kernel          /boot/kernel1&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Y lo copiamos a boot/grub/menu.lst:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo cp menu.lst  mnt/boot/grub/&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ya deberiamos tener nuestro ambiente listo, falta convertir esta imagen en un disco que virtualbox pueda leer:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ sudo umount mnt&lt;br /&gt;$ sudo losetup -d /dev/loop1&lt;br /&gt;$ sudo losetup -d /dev/loop0&lt;br /&gt;$ sudo rm /dev/loop01&lt;br /&gt;$ vditool DD PruebaOS.vdi disk.image&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Prendemos nuestro VirtualBox, organizamos una maquina virtual cuyo disco sea el que acabamos de crear, mmmm, bueno, grub arranco, sale la lista con kernel1, intenta correrlo, pero sale un error "Error 13: Invalid or unsupported executable format" , aaaa, buen detalle:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ uname -m&lt;br /&gt;x86_64&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De seguro si tienen una maquina i386 les funciona de una.&lt;br /&gt;Listo, entonces compilo en chroot de i386:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;pre&gt;&lt;br /&gt;$ cp kernel1.c  startup.S  /var/etch-i386-20080604/tmp/&lt;br /&gt;$ sudo chroot /var/etch-i386-20080604/ /bin/bash&lt;br /&gt;# cd /tmp&lt;br /&gt;# gcc -c kernel1.c&lt;br /&gt;# gcc -c startup.S&lt;br /&gt;# ld -o kernel1 kernel1.o startup.o -Ttext 0x100000&lt;br /&gt;# exit&lt;br /&gt;$ sudo losetup -o32256 /dev/loop1 disk.image&lt;br /&gt;$ sudo mount -text2 /dev/loop1 mnt/&lt;br /&gt;$ sudo cp /var/etch-i386-20080604/tmp/kernel1 mnt/boot/kernel1&lt;br /&gt;$ sudo umount mnt&lt;br /&gt;$ sudo losetup -d /dev/loop1&lt;br /&gt;$ rm PruebaOS.vdi&lt;br /&gt;$ vditool DD PruebaOS.vdi disk.image&lt;br /&gt;&lt;/pre&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Otra vez abrimos virtualbox, borramos la configuracion con el disco anterior, ponemos el nuevo y corremos la maquina.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_sXDrkPRZrbQ/SFX12bTx9iI/AAAAAAAAABU/XbD2DKnZyRE/s1600-h/HelloWorld1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_sXDrkPRZrbQ/SFX12bTx9iI/AAAAAAAAABU/XbD2DKnZyRE/s400/HelloWorld1.png" alt="" id="BLOGGER_PHOTO_ID_5212342459143681570" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_sXDrkPRZrbQ/SFX2EVvqoVI/AAAAAAAAABc/3t1HpGbbZXg/s1600-h/HelloWorld2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_sXDrkPRZrbQ/SFX2EVvqoVI/AAAAAAAAABc/3t1HpGbbZXg/s400/HelloWorld2.png" alt="" id="BLOGGER_PHOTO_ID_5212342698168197458" border="0" /&gt;&lt;/a&gt;Listo eso es todo, de ahí a hacer un kernelcito decente hay un paso, jaja.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2242698141769999272?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2242698141769999272/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2242698141769999272' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2242698141769999272'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2242698141769999272'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/06/os-hello-world.html' title='OS hello world.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_sXDrkPRZrbQ/SFX12bTx9iI/AAAAAAAAABU/XbD2DKnZyRE/s72-c/HelloWorld1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2239661719697605730</id><published>2008-06-09T17:49:00.000-07:00</published><updated>2008-06-09T17:53:57.774-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='colombia'/><category scheme='http://www.blogger.com/atom/ns#' term='Sia ingenieros'/><category scheme='http://www.blogger.com/atom/ns#' term='medellin'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño web'/><category scheme='http://www.blogger.com/atom/ns#' term='Soluciones en ingenieria'/><title type='text'>Ayuda a la comunidad</title><content type='html'>Luego de 6 meses sin entradas: La pagina web de la empresa de unos amigos &lt;a href="http://www.siaingenieros.com/"&gt;SIA Ingenieros, Soluciones en Ingeniería Aplicada&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-2239661719697605730?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2239661719697605730/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2239661719697605730' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2239661719697605730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2239661719697605730'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2008/06/ayuda-la-comunidad.html' title='Ayuda a la comunidad'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-481558400897489812</id><published>2007-12-10T19:03:00.001-08:00</published><updated>2007-12-10T19:03:38.221-08:00</updated><title type='text'>Botka, The Barely Standing Robot</title><content type='html'>&lt;script src="http://flash.revver.com/player/1.0/player.js?mediaId:443032;affiliateId:122762;width:480;height:392" type="text/javascript"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-481558400897489812?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/481558400897489812/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=481558400897489812' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/481558400897489812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/481558400897489812'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/12/botka-barely-standing-robot.html' title='Botka, The Barely Standing Robot'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-1597402821967755935</id><published>2007-10-02T21:40:00.000-07:00</published><updated>2007-10-02T21:50:13.135-07:00</updated><title type='text'>Crazy Multi-Input Touch Screen</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/89sz8ExZndc"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/89sz8ExZndc" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&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/34133079-1597402821967755935?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/1597402821967755935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=1597402821967755935' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1597402821967755935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/1597402821967755935'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/10/crazy-multi-input-touch-screen.html' title='Crazy Multi-Input Touch Screen'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-2176132253428969282</id><published>2007-09-10T20:35:00.000-07:00</published><updated>2007-09-10T20:36:25.815-07:00</updated><title type='text'>Transformando a Medellín</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/PzZKA14ghb4"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/PzZKA14ghb4" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&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/34133079-2176132253428969282?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/2176132253428969282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=2176132253428969282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2176132253428969282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/2176132253428969282'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/09/transformando-medelln.html' title='Transformando a Medellín'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-3003058856609945942</id><published>2007-09-04T18:20:00.000-07:00</published><updated>2007-09-04T18:24:49.504-07:00</updated><title type='text'>Libertad es una palabra que el sueño humano alimenta, que no hay nadie que la explique y nadie que no la entienda.</title><content type='html'>&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4kDN49_bFno"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/4kDN49_bFno" type="application/x-shockwave-flash" wmode="transparent" width="425" height="350"&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/34133079-3003058856609945942?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/3003058856609945942/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=3003058856609945942' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3003058856609945942'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3003058856609945942'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/09/libertad-es-una-palabra-que-el-sueo.html' title='Libertad es una palabra que el sueño humano alimenta, que no hay nadie que la explique y nadie que no la entienda.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4938329175487221157</id><published>2007-09-03T12:41:00.000-07:00</published><updated>2007-09-03T12:43:35.107-07:00</updated><title type='text'>Sin embargo los ojos incerrables del che miran como si no pudieran no mirar.</title><content type='html'>Che&lt;br /&gt;Mario Benedetti&lt;br /&gt;&lt;br /&gt;Lo han cubierto de afiches / de pancartas&lt;br /&gt;de voces en los muros&lt;br /&gt;de agravios retroactivos&lt;br /&gt;de honores a destiempo&lt;br /&gt;&lt;br /&gt;lo han transformado en pieza de consumo&lt;br /&gt;en memoria trivial&lt;br /&gt;en ayer sin retorno&lt;br /&gt;en rabia enmbalsamada&lt;br /&gt;&lt;br /&gt;han decidido usarlo como epilogo&lt;br /&gt;como ultima thule de la inocencia vana&lt;br /&gt;como anejo arquetipo de santo o satanas&lt;br /&gt;&lt;br /&gt;y quizas han resuelto que la unica forma&lt;br /&gt;de desprenderse de El&lt;br /&gt;o dejarlo al garete&lt;br /&gt;es vaciarlo de lumbre&lt;br /&gt;convertirlo en un heroe&lt;br /&gt;de marmol o de yeso&lt;br /&gt;y por lo tanto inmovil&lt;br /&gt;o mejor como mito&lt;br /&gt;o silueta o fantasma&lt;br /&gt;del pasado pisado&lt;br /&gt;&lt;br /&gt;sin embargo los ojos incerrables del che&lt;br /&gt;miran como si no pudieran no mirar&lt;br /&gt;asombrados tal vez de que el mundo no entienda&lt;br /&gt;que treinta anos despues siga bregando&lt;br /&gt;dulce y tenaz por la dicha del hombre.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4938329175487221157?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4938329175487221157/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4938329175487221157' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4938329175487221157'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4938329175487221157'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/09/sin-embargo-los-ojos-incerrables-del.html' title='Sin embargo los ojos incerrables del che miran como si no pudieran no mirar.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4051940356035834204</id><published>2007-08-06T18:49:00.000-07:00</published><updated>2007-08-06T18:55:47.710-07:00</updated><title type='text'>Por que software libre?</title><content type='html'>If I have seen further [than others] it is by standing on the&lt;br /&gt;shoulders of giants... Issac Newton&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4051940356035834204?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4051940356035834204/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4051940356035834204' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4051940356035834204'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4051940356035834204'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/08/por-que-software-libre.html' title='Por que software libre?'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-5655933066754941658</id><published>2007-05-02T21:06:00.000-07:00</published><updated>2007-05-02T22:15:51.958-07:00</updated><title type='text'>Tiempo para Tesis.</title><content type='html'>Bueno, tal parece que le voy a poder sacar tiempo a la tesis el próximo semestre.&lt;br /&gt;TODO:&lt;br /&gt; - Comenzar anteproyecto.&lt;br /&gt; - Conseguir director.&lt;br /&gt; - Terminar anteproyecto.&lt;br /&gt; - Revisar anteproyecto.&lt;br /&gt; - Entregar anteproyecto.&lt;br /&gt;&lt;br /&gt;Tesis TODO:&lt;br /&gt; - Estudiar UML.&lt;br /&gt; - Estudiar B-Method.&lt;br /&gt; - Estudiar los problemas que se presentan en control.&lt;br /&gt; - Model de control en UML.&lt;br /&gt; - Estudiar la possibilidad y el como se haria el control distribuido.&lt;br /&gt; - Modelo del framework de control en UML.&lt;br /&gt; - Paso de UML a B-method.&lt;br /&gt; - Verificacion.&lt;br /&gt; - Implementacion de Framework de control (Sobre Pistachio y Gumstix)&lt;br /&gt; - Buscar un sistema cuyo control necesite tiempo real, y controlarlo con el Framework sobre el Gumstix)&lt;br /&gt;&lt;br /&gt;Tengo como maximo 12 meses para la tesis, toca repartir bien eso.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-5655933066754941658?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/5655933066754941658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=5655933066754941658' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5655933066754941658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5655933066754941658'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/05/tiempo-para-tesis.html' title='Tiempo para Tesis.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-7172786659858024300</id><published>2007-04-16T19:16:00.000-07:00</published><updated>2007-04-16T19:35:07.426-07:00</updated><title type='text'>Tesis.</title><content type='html'>Bueno, en el almuerzo se me ocurrio la idea que podria ser mi tesis (ojala algun dia decida bien que hacer). Siguiendo con la idea del anterior post, seria asi:&lt;br /&gt;&lt;br /&gt;En gumstix se correria pistachio, en el cual se correria un Framework de Control, el cual estaria previamente diseñado , modelado con UML y verificado con B-Method, y para la configuracion del control se tendria que especificar en UML.&lt;br /&gt;Se tendria algo asi:&lt;br /&gt;&lt;br /&gt;* Una aplicacion en la cual se diseñarian los componentes del sistema: Actuadores, Sensores, y el control como tal. La salida de este seria un modelo en UML.&lt;br /&gt;&lt;br /&gt;* Este modelo se le pasaria al Framework en Pistachio el cual lo implementaria y se comunicaria con los sensores y los actuadores.&lt;br /&gt;&lt;br /&gt;* El Framework se diseña en UML y se verificaria en B-Method, si algo falla ya seria problema de la arquitectura del Gumstix.&lt;br /&gt;&lt;br /&gt;* Se pondria a prueba en el control de algun sistema complejo de controlar.&lt;br /&gt;&lt;br /&gt;Eso seria todo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-7172786659858024300?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/7172786659858024300/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=7172786659858024300' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/7172786659858024300'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/7172786659858024300'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/04/tesis_16.html' title='Tesis.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-3329533983767468660</id><published>2007-04-15T19:05:00.000-07:00</published><updated>2007-04-15T19:19:12.154-07:00</updated><title type='text'>Tesis</title><content type='html'>Bueno no hay GSoC para mi, entonces vuelvo con mi tesis, pensandolo bien, creo que voy a redirigir mi tesis, tengo puntos en lso cuales quiero trabajar:&lt;br /&gt;&lt;br /&gt;* Control digital en Tiempo-Real&lt;br /&gt;* Redes neuronales.&lt;br /&gt;* Pistachio&lt;br /&gt;* Alguna implementacion en Gumstix.&lt;br /&gt;&lt;br /&gt;Hasta ahora no se bien que sera. Pero si se unen las partes seria correr pistachio en Gumstix, y encima correr un Framework de Tiempo Real para el control de "Algo" y ojala que con Redes Neuronales.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-3329533983767468660?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/3329533983767468660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=3329533983767468660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3329533983767468660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/3329533983767468660'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/04/tesis.html' title='Tesis'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8435850574454764922</id><published>2007-04-05T11:56:00.000-07:00</published><updated>2007-04-05T14:38:56.490-07:00</updated><title type='text'>GSoC</title><content type='html'>Some important lectures about Plan 9 and Inferno.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cm.bell-labs.com/sys/doc/index.html"&gt;http://cm.bell-labs.com/sys/doc/index.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vitanuova.com/inferno/papers/bltj.html"&gt;http://www.vitanuova.com/inferno/papers/bltj.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vitanuova.com/inferno/papers/descent.html"&gt;http://www.vitanuova.com/inferno/papers/descent.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.vitanuova.com/inferno/papers/limbo.html"&gt;http://www.vitanuova.com/inferno/papers/limbo.html&lt;/a&gt;&lt;br /&gt;&lt;a href="http://plan9.bell-labs.com/wiki/plan9/recommended_readings/index.html"&gt;http://plan9.bell-labs.com/wiki/plan9/recommended_readings/index.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8435850574454764922?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8435850574454764922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8435850574454764922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8435850574454764922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8435850574454764922'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/04/gsoc.html' title='GSoC'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-8562020902196806913</id><published>2007-03-27T18:43:00.000-07:00</published><updated>2007-03-27T18:47:26.607-07:00</updated><title type='text'>GSoC</title><content type='html'>Bueno, le tire al GSoC, con lo que fue el principio de la idea de construir un sistema distribuido a partir de sistemas embebidos junto con Torres, hace como 2 años.&lt;br /&gt;Al principio la idea era Inferno ( por el styx) , pero creo que limbo asusta. Seria bueno que se diera lo del GSoC, depronto saldria una implementacion de styx para pistachio. (Cumpliendo las obligaciones con el mes de marzo)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-8562020902196806913?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/8562020902196806913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=8562020902196806913' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8562020902196806913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/8562020902196806913'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/03/gsoc.html' title='GSoC'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-5040243103774492187</id><published>2007-02-02T18:22:00.000-08:00</published><updated>2007-02-02T18:25:10.131-08:00</updated><title type='text'>De argentina a México en bus</title><content type='html'>&lt;a href="http://www.soho.com.co/wf_InfoArticulo.aspx?idArt=5108"&gt;http://www.soho.com.co/wf_InfoArticulo.aspx?idArt=5108&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-5040243103774492187?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/5040243103774492187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=5040243103774492187' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5040243103774492187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/5040243103774492187'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/02/de-argentina-mxico-en-bus.html' title='De argentina a México en bus'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-242170468323477705</id><published>2007-01-28T21:15:00.001-08:00</published><updated>2007-01-28T21:15:48.241-08:00</updated><title type='text'>Corriendo wombat</title><content type='html'>Bueno, despues de bajarme y utilizar un poco Fiasco, hice lo mismo con el paquete de Pistachio que estan trabajando en NICTA y UNSW, junto con Iguana  y Wombat.&lt;br /&gt;Lo que hice fue bajarme del svn todos los paquetes necesarios. En esta pagina muestran como bajarse los paquetes (&lt;a href="http://www.ertos.nicta.com.au/software/baz-howto.pml"&gt;http://www.ertos.nicta.com.au/software/baz-howto.pml&lt;/a&gt;)  y para poder compilarlo toca hacerlo con un cross-compiler, no sirve el gcc normalcito, me baje este de nicta (&lt;a href="http://www.ertos.nicta.com.au/downloads/i686-gcc-3.3.4-glibc-2.3.3-2006-06-02.tar.gz"&gt;http://www.ertos.nicta.com.au/downloads/i686-gcc-3.3.4-glibc-2.3.3-2006-06-02.tar.gz&lt;/a&gt;)&lt;br /&gt;y posicionado en la carpeta donde estan todos los archivos ejecuto los siguiente: &lt;br /&gt;tools/scons.py  machine=pc99 toolprefix="i686-unknown-linux-gnu-" simulate&lt;br /&gt;y listo, empiezan a compilarse todas las partes necesarias, pistachio, iguana, y wombat, y queda una imagen build/c.img que se corre automatica en qemu.&lt;br /&gt;Una muestra:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_sXDrkPRZrbQ/Rb2CUm4ie3I/AAAAAAAAAAM/J-3qXzvdwDU/s1600-h/wombat.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_sXDrkPRZrbQ/Rb2CUm4ie3I/AAAAAAAAAAM/J-3qXzvdwDU/s400/wombat.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5025316049762024306" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-242170468323477705?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/242170468323477705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=242170468323477705' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/242170468323477705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/242170468323477705'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/01/corriendo-wombat_28.html' title='Corriendo wombat'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_sXDrkPRZrbQ/Rb2CUm4ie3I/AAAAAAAAAAM/J-3qXzvdwDU/s72-c/wombat.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-4221464637441410873</id><published>2007-01-21T18:25:00.000-08:00</published><updated>2007-01-21T18:30:39.378-08:00</updated><title type='text'>More Lectures</title><content type='html'>&lt;span style="font-size:130%;"&gt;&lt;a href="http://cgi.cse.unsw.edu.au/%7Ecs3231/lectures.php"&gt;Operating Systems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cse.unsw.edu.au/%7Ecs9242/06/lectures/"&gt;Advanced Operating Systems&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.cse.unsw.edu.au/%7Ecs9243/lectures/"&gt;Distributed Systems&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-4221464637441410873?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/4221464637441410873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=4221464637441410873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4221464637441410873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/4221464637441410873'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/01/more-lectures.html' title='More Lectures'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116839941947120801</id><published>2007-01-09T19:20:00.000-08:00</published><updated>2007-01-09T19:24:24.103-08:00</updated><title type='text'>Lectures</title><content type='html'>&lt;h1 class="bigheader"&gt;&lt;a href="http://os.inf.tu-dresden.de/Studium/MkK/"&gt;Microkernel Construction&lt;/a&gt;&lt;/h1&gt;&lt;a href="http://os.inf.tu-dresden.de/Studium/KMB/"&gt;&lt;br /&gt;&lt;/a&gt;&lt;h1 class="bigheader"&gt;&lt;a href="http://os.inf.tu-dresden.de/Studium/KMB/"&gt;Building Microkernel-Based Operating Systems&lt;/a&gt;&lt;/h1&gt;&lt;br /&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116839941947120801?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116839941947120801/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116839941947120801' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116839941947120801'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116839941947120801'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2007/01/lectures.html' title='Lectures'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116754131799976202</id><published>2006-12-30T21:01:00.000-08:00</published><updated>2006-12-31T08:29:57.140-08:00</updated><title type='text'>De como compilar Fiasco.</title><content type='html'>Comence a compilar Fiasco, lo que hice fue seguir las instrucciones  en  &lt;a href="http://os.inf.tu-dresden.de/fiasco/use.html"&gt;http://os.inf.tu-dresden.de/fiasco/use.html&lt;/a&gt;.&lt;br /&gt;1) Me baje los modulos grub l4 dde hello l4env dope preprocess de el cvs.&lt;br /&gt;2) En el directorio l4 ejecuto lo siguiente:&lt;br /&gt;  make O=../build_user config&lt;br /&gt;       (lo dejo como esta)&lt;br /&gt;  make O=../build_user all&lt;br /&gt;(Espero como 20 minutos y sale un error de sed, para arreglarlo toca entrar a l4/tool/gcc-wrap/Makefile y cambiar a:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;   $(VERBOSE)sed '\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@system@,$(SYSTEM),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@ar@,$(AR),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@nm@,$(NM),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@ranlib@,$(RANLIB),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@cc@,$(CC_$(DEFAULT_ARCH)),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@cxx@,$(CXX_$(DEFAULT_ARCH)),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@l4dir@,$(absfilename $(L4DIR)),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@dropsdir@,$(DROPS_STDDIR),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@compilerincdir@,$(GCCDIR_$(DEFAULT_ARCH))/include,g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@libgcc@,$(GCCLIB_$(DEFAULT_ARCH)),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@libgcc_eh@,$(GCCLIB_EH_$(DEFAULT_ARCH)),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@default_system@,$(DEFAULT_SYSTEM),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@default_arch@,$(DEFAULT_ARCH),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@default_cpu@,$(call PROCESS_SYSTEM, 's/[^-_]*_\([^-]*\).*/\1/p'),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   s,@default_l4api@,$(call PROCESS_SYSTEM, 's/.*-\(.*\)/\1/p'),g;\&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;   ' $&lt; &gt; $@.new&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;por:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:78%;"&gt;$(VERBOSE)sed 's,@system@,$(SYSTEM),g;s,@ar@,$(AR),g;s,@nm@,$(NM),g;s,@ranlib@,$(RANLIB),g;s,@cc@,$(CC_$(DEFAULT_ARCH)),g;s,@cxx@,$(CXX_$(DEFAULT_ARCH)),g;s,@l4dir@,$(absfilename $(L4DIR)),g;s,@dropsdir@,$(DROPS_STDDIR),g;s,@compilerincdir@,$(GCCDIR_$(DEFAULT_ARCH))/include,g;s,@libgcc@,$(GCCLIB_$(DEFAULT_ARCH)),g;s,@libgcc_eh@,$(GCCLIB_EH_$(DEFAULT_ARCH)),g;s,@default_system@,$(DEFAULT_SYSTEM),g;s,@default_arch@,$(DEFAULT_ARCH),g;s,@default_cpu@,$(call PROCESS_SYSTEM, 's/[^-_]*_\([^-]*\).*/\1/p'),g;s,@default_l4api@,$(call PROCESS_SYSTEM, 's/.*-\(.*\)/\1/p'),g;' $&lt; &gt; $@.new&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;No se por que mi sed no puede con las instrucciones separadas en lineas con un \,pero se arregla el problema. Luego lo dejo otra vez compilando, y me da tiempo de salir, comprar dos libros (Calicalabozo de Andrés Caicedo, y La Despedida de Milan Kundera) , comer algo y cuando vuelvo la maquina esta en un error porque no tenia instalado el doxygen, lo instalo y vuelvo a compilar, me da tiempo de organizar los libros que tengo por leer (Calicalabozo, La despedida, Despues del Hombre de Gonzalo Arango, Gato o soledad en la lluvia de Amílcar Osorio, y El libro Negro de Orhan Pamuk), tambien juego un poco en el Wii de mi hermanito, el control es loquisimo, funciona basicamente con acelerometros. por lo que no es necesario jugar parado y moverse como loco, sino tambien sentado, la parte de infrarrojos funciona siempre y cuando no le caiga sol al sensor (pense que eso solo nos pasaba en los carritos que nos ponian a hacer en la universidad) sino se enloquece, pero casi siempre esta en lugar cerrado entonces no es problema, y me imagino que funciona con conceptos de vision esteroscopica; termino de jugar y sigue compilando, me como un postre y espero, luego sale un error porque  no encuentra el comando fig2dev y me toca instalar el transfig, y comienzo de nuevo, al ratico (doy gracias que no toca compilar de nuevo lo que ya ha compilado) sale un error: no puede copiar el archivo building.tex en una carpeta, ¿¿bug del Makefile de Fiasco?? el Makefile hace ejecutar el comando, con respuesta:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;font-size:78%;"&gt;cp building.tex drops-building.tex&lt;br /&gt;cp: cannot stat `building.tex': No such file or directory&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Lo que pasa es que el Makefile entra en el directorio de trabajo, build-user/doc/.... e intenta copiar el archivo desde esa misma carpeta y hay no esta, esta en el directorio l4/doc/building-howto, solo es copiarlo de esta posicion a build_user/doc/building-howto/ y comenzar de nuevo a compilar, y ya si termina, ¡mas largo que la primera instalada de Xfree86 fue esto!.&lt;br /&gt;&lt;br /&gt;Ahora entro en la carpeta l4/kernel/fiasco, corro el comando:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;"&gt;    make BUILDDIR=../../../build-kernel&lt;br /&gt;cd ../../../build-kernel&lt;br /&gt;make menuconfig&lt;br /&gt;   (lo dejo como esta)&lt;br /&gt;make &lt;br /&gt;   (Espero mientras veo Carnivale, esta buena la serie)&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Sigo los pasos de la pagina para iniciarlo, un poco distinto (pa correrlo en vmware desde una imagen de un floppy) pero en esencia lo mismo.&lt;br /&gt;Y listo, tengo al buen Fiasco corriendo en una maquina virtual.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116754131799976202?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116754131799976202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116754131799976202' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116754131799976202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116754131799976202'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/12/de-como-compilar-fiasco.html' title='De como compilar Fiasco.'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116649626735580772</id><published>2006-12-18T16:05:00.000-08:00</published><updated>2006-12-18T18:46:48.570-08:00</updated><title type='text'>Distribuyendo mi carga</title><content type='html'>Rafa, para responder a tu comentario decidi hacer 2 cosas, comenzar a bajarme el Fiasco del cvs (y no seguir jugando con esa version de Fiasco que tenia desde hace mucho), y copiar y pegar el comentario en un nedit, separarlo por espacios y abordarlo linea por linea.&lt;br /&gt;&lt;br /&gt;1. Middleware DICE, lenguaje de IDL y generador de stub y skeleton para los servicios de userspace.&lt;br /&gt;&lt;br /&gt;Fiasco: &lt;a href="http://os.inf.tu-dresden.de/DICE/"&gt;http://os.inf.tu-dresden.de/DICE/&lt;/a&gt;&lt;br /&gt;Pistachio: &lt;a href="http://www.l4ka.org/projects/idl4/"&gt;http://www.l4ka.org/projects/idl4/&lt;/a&gt;&lt;br /&gt;    NICTA: &lt;a href="http://ertos.nicta.com.au/software/kenge/magpie/latest/"&gt;http://ertos.nicta.com.au/software/kenge/magpie/latest/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;En Fiasco van en la version 3.1.0 (Nov/2006) y en Pistachio en la 1.0.0 (2003), y el de Nicta en la 1.0 (Dic/2004) , no he trabajado con ninguna de las tres, entonces no tengo nada que decir.&lt;br /&gt;&lt;br /&gt;2. Codigo en C++ en el kernel. Bien organizado y con un preprocesador modificado que hace el codigo aun mas limpio.&lt;br /&gt;&lt;br /&gt;En pistachio tambien esta en C++, ahora, lo del preprocesador, no creo que exista en pistachio, y no se hasta que punto sea una gran ventaja, confio plenamente en cpp.&lt;br /&gt;&lt;br /&gt;3. Device Driver Environment: Entorno que permite reutilizar todos los drivers de Linux en L4&lt;br /&gt;&lt;br /&gt;Fiasco: &lt;a href="http://os.inf.tu-dresden.de/l4env/"&gt;http://os.inf.tu-dresden.de/l4env/&lt;/a&gt;  (no encontre pagina de DDE)&lt;br /&gt;Pistachio: &lt;a href="http://www.l4ka.org/projects/virtualization/drivers.php"&gt;http://www.l4ka.org/projects/virtualization/drivers.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He leido un poco la forma como lo implementaron en Pistachio y me convence, aunque deberia leerlo mas a fondo.&lt;br /&gt;&lt;br /&gt;4. El Build System es demasiado poderoso y organizado. Hace checkout del CVS y veras lo que te digo&lt;br /&gt;&lt;br /&gt;Nunca he construido Fiasco del todo, solo he usado una imagen que habia en la pagina, y fue hace un buen rato.&lt;br /&gt;Pistachio lo he compilado varias veces,y he construido aplicaciones de prueba, y si es un poco complicado, pero si uno sigue las ayudas no se pierde. (de hecho ayer recompile desde cero lo del CVS y no tuve problema).&lt;br /&gt;&lt;br /&gt;En cuanto a bajarlo del CVS, en esas ando como desde hace 2 horas y nada que baja, ojala algun dia baje.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Uno de los aspectos que mas me hacen pensar en Pistachio:&lt;br /&gt;&lt;a href="http://ertos.nicta.com.au/press/051124_L4_Qualcomm_vfinal.pdf"&gt;http://ertos.nicta.com.au/press/051124_L4_Qualcomm_vfinal.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Plataformas soportadas:&lt;br /&gt;Fiasco:&lt;br /&gt;&lt;pre&gt;  * IA32 (Intel, AMD and compatible CPUs, i486 and above)&lt;br /&gt;* ARM  (SA1110 and PXA)&lt;br /&gt;* UX   (Linux usermode emulation of Fiasco/L4&lt;/pre&gt;Pistachio:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/alpha/"&gt;Alpha&lt;/a&gt; (21164, 21264)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/amd64/"&gt;AMD64&lt;/a&gt; (Opteron 242, Simics)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/arm/"&gt;ARM&lt;/a&gt; (SA1100, XScale, ARM925T)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/ia32/"&gt;IA32&lt;/a&gt; (Pentium and higher)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/ia64/"&gt;IA64&lt;/a&gt; (Itanium1, Itanium2, Ski)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/mips64/"&gt;MIPS 64bit&lt;/a&gt; (R4000, R5000)&lt;/li&gt;&lt;li&gt;&lt;a href="http://l4ka.org/projects/pistachio/powerpc/"&gt;PowerPC 32bit&lt;/a&gt; (IBM 750)&lt;/li&gt;&lt;li&gt;PowerPC 64bit (Power3, Power4)&lt;/li&gt;&lt;li&gt;((((Pronto M68K jeje))))&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Al fin de cuentas, tal parece que ambos tiran para el mismo lado, pero me interesa mas pistachio, por muchas cosas, entre unas el hecho que lo sigan trabajando en UNSW y en NICTA en Australia.&lt;br /&gt;&lt;br /&gt;Aun asi, voy a comenzar a trabajar tambien en Fiasco, para ver bien cual se acomoda mejor a lo que estoy buscando.&lt;br /&gt;&lt;br /&gt;Pero si me tenes un puestico en Dresden me paso de una a Fiasco, y volvemos a Fiasco "El uKernel".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116649626735580772?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116649626735580772/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116649626735580772' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116649626735580772'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116649626735580772'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/12/distribuyendo-mi-carga.html' title='Distribuyendo mi carga'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116641834447479490</id><published>2006-12-17T20:53:00.000-08:00</published><updated>2006-12-17T21:05:45.160-08:00</updated><title type='text'>Volviendo a pistachio</title><content type='html'>Me estoy bajando el codigo fuente de pistachio, hace un buen rato que no lo veia, y ya ni podia entender mi enredo de idrectorios, asi, que va a tocar casi desde cero. La idea seria:&lt;br /&gt;1) Lograr controlar una tarjeta de red con pistachio. Primero voy a intentar con el codigo para el stack tcp/ip que viene con OSKIT, aunque igual creo que lo primero es manipular la tarjeta a bajo nivel a mano, y luego conectar esto con el oskit.&lt;br /&gt;2) Hacer una aplicacion cliente/servidor entre pistachios&lt;br /&gt;3) Entender bien el concepto de hilo en pistachio, la generacion de los mismos, y cuales son y para que sirven los hilos basicos de pistachio.&lt;br /&gt;&lt;br /&gt;(Esta semana tengo que llamar a averiguar acerca del precio de las tarjetas de las CPLDs)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116641834447479490?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116641834447479490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116641834447479490' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116641834447479490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116641834447479490'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/12/volviendo-pistachio.html' title='Volviendo a pistachio'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116529522460199853</id><published>2006-12-04T21:05:00.000-08:00</published><updated>2006-12-04T21:07:05.140-08:00</updated><title type='text'></title><content type='html'>&lt;a href="http://groups.google.com.co/group/comp.os.linux.advocacy/browse_thread/thread/f4bf728dc301176a/a10dcb9293cd0938?lnk=st&amp;q=&amp;amp;rnum=3&amp;hl=es#a10dcb9293cd0938"&gt;http://groups.google.com.co/group/comp.os.linux.advocacy/browse_thread/thread/f4bf728dc301176a/a10dcb9293cd0938?lnk=st&amp;amp;q=&amp;rnum=3&amp;amp;hl=es#a10dcb9293cd0938 &lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116529522460199853?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116529522460199853/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116529522460199853' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116529522460199853'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116529522460199853'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/12/httpgroups.html' title=''/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116449104694346607</id><published>2006-11-25T13:43:00.000-08:00</published><updated>2006-12-04T21:02:10.910-08:00</updated><title type='text'>Buscando un foco</title><content type='html'>Bueno, no se porque busco un foco, habiendo luz ambiente, pero bueno, parece ser necesario para poder terminar haciendo algo, la cosa es la siguiente, el fin ultimo de un computador es resolver problemas, pero el meollo esta en que hay ciertos problemas que no se pueden resolver, y hay otros problemas que aunque se pueden resolver, es inutil esperar una respuesta por parte de un computador actual, entonces la cuestion radica en cambiar por completo el como se construiria el modelo matematico del sistema que quiero desarrollar, no puedo basarme en un modelo que siga a turing, pues este se basa en un modelo secuencial de calculo en el cual para resolver un problema se siguen unos pasos en donde cada paso depende de el anterior, y no es posible realizar todos los pasos en un mismo momento, de esto salen otros problemas, los problemas indistribuibles, no se bien si estos problemas se puede resolver con una maquina cuantica de calculo, pero es claro que con una maquina determinista y con un orden secuencial de calculo, no se pueden resolver ciertos problemas, la idea seria poder ya sea escoger que problemas quisiera poder resolver, o lograr demostrar cuales problemas puede resolver un sistema como el que tengo pensado.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116449104694346607?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116449104694346607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116449104694346607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116449104694346607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116449104694346607'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/11/buscando-un-foco.html' title='Buscando un foco'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116225839621850430</id><published>2006-10-30T17:33:00.000-08:00</published><updated>2006-10-30T17:33:16.316-08:00</updated><title type='text'>The Kidnap Of Angry Daz</title><content type='html'>&lt;a href="http://thekidnapofangrydaz.blogspot.com/"&gt;The Kidnap Of Angry Daz&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116225839621850430?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116225839621850430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116225839621850430' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116225839621850430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116225839621850430'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/kidnap-of-angry-daz.html' title='The Kidnap Of Angry Daz'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116124153608701162</id><published>2006-10-19T00:05:00.000-07:00</published><updated>2006-10-30T16:51:46.876-08:00</updated><title type='text'>Que es un computador?</title><content type='html'>He estado leyendo acerca de teoria de conjuntos para poder lograr a entender bien el B-Method y en general los metodos de demostracion, tambien algo de teoria de automatas. Me gustario poder comenzar a trabajar con la definicion formal de una maquina de Turing, y a partir de ella llegar al porque es necesario todas las tecnicas que se utilizan actualmente en la implementacion de los computadores.&lt;br /&gt;&lt;br /&gt;Basicamente una maquina de turing es un automata que tiene contacto con un medio de almacenamiento.  (&lt;a href="http://www.warthman.com/ex-turing.htm"&gt;http://www.warthman.com/ex-turing.htm)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una buena lectura seria el "On Computable  Numbers, with an Application to the Entscheidungsproblem".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116124153608701162?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116124153608701162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116124153608701162' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116124153608701162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116124153608701162'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/que-es-un-computador.html' title='Que es un computador?'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116098006670270680</id><published>2006-10-15T23:23:00.000-07:00</published><updated>2006-10-15T23:27:46.866-07:00</updated><title type='text'>Una correccion a la tarjeta de la CPLD</title><content type='html'>&lt;div style="text-align: center;"&gt;V1.1&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4304/3757/1600/cpld_board_1.1.1.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4304/3757/400/cpld_board_1.1.1.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&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;div style="text-align: center;"&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/34133079-116098006670270680?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116098006670270680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116098006670270680' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116098006670270680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116098006670270680'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/una-correccion-la-tarjeta-de-la-cpld.html' title='Una correccion a la tarjeta de la CPLD'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116088066120344721</id><published>2006-10-14T17:16:00.000-07:00</published><updated>2006-10-14T22:06:20.883-07:00</updated><title type='text'>B-Method</title><content type='html'>Existe una tesis donde hacen un trabajo con el B-Method para demostrar que pistachio esta bien diseñado ( "&lt;a href="http://cgi.cse.unsw.edu.au/%7Erafalk/pubs/b-l4-api.pdf"&gt;A Formal Model of the L4 u-kernel API Using the B Method&lt;/a&gt;")  &lt;a href="http://cgi.cse.unsw.edu.au/%7Erafalk/pubs/b-l4-api-tr.pdf"&gt;2.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Acerca del &lt;a href="http://www.csse.monash.edu.au/%7Eajh/teaching/cse4213/2006/resources/index.html"&gt;B-Method&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Para instalar el BToolKit:&lt;br /&gt;&lt;a href="http://www.csse.monash.edu.au/courseware/cse4213/2006/resources/linuxInstall.html"&gt;http://www.csse.monash.edu.au/courseware/cse4213/2006/resources/linuxInstall.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Un resumen.&lt;br /&gt;&lt;a href="http://www.csse.monash.edu.au/courseware/cse4213/2006/resources/B-summary.pdf"&gt;http://www.csse.monash.edu.au/courseware/cse4213/2006/resources/B-summary.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Interoperabilidad de componentes.&lt;br /&gt;&lt;a href="http://www.iist.unu.edu/newrh/III/1/docs/techreports/report333/P05.pdf"&gt;http://www.iist.unu.edu/newrh/III/1/docs/techreports/report333/P05.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Bueno, buscare mas documentacion que me sirva, la idea seria poder usar esa herramienta en el paso de volver pistachio distribuido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116088066120344721?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116088066120344721/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116088066120344721' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116088066120344721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116088066120344721'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/b-method.html' title='B-Method'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116086339679755240</id><published>2006-10-14T14:49:00.000-07:00</published><updated>2006-10-14T15:03:38.466-07:00</updated><title type='text'>Board para la CPLD y el UltraISR</title><content type='html'>Bueno, por fin termine la version 0.0.01 Beta de la tarjeta para hacer pruebas con la cpld 39K200, y tambien el UltraISR para poder programarlas, toca ver cuanto me cobran por las tarjetas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4304/3757/1600/ultraisr_1.0.0.png"&gt;&lt;img style="cursor: pointer; width: 163px; height: 181px;" src="http://photos1.blogger.com/blogger/4304/3757/400/ultraisr_1.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4304/3757/1600/cpld_board_1.0.0.png"&gt;&lt;img style="cursor: pointer;" src="http://photos1.blogger.com/blogger/4304/3757/400/cpld_board_1.0.0.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Bueno, falta revisar bien esto, y ver si le puedo hacer mejoras.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116086339679755240?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116086339679755240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116086339679755240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116086339679755240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116086339679755240'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/board-para-la-cpld-y-el-ultraisr.html' title='Board para la CPLD y el UltraISR'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-116002702465123113</id><published>2006-10-04T22:43:00.000-07:00</published><updated>2006-10-04T22:43:44.800-07:00</updated><title type='text'>una flor que no seca el invierno</title><content type='html'>&lt;a href="http://una-flor-que-no-seca-el-invierno.blogspot.com/"&gt;una flor que no seca el invierno&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-116002702465123113?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/116002702465123113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=116002702465123113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116002702465123113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/116002702465123113'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/una-flor-que-no-seca-el-invierno.html' title='una flor que no seca el invierno'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-115976534140020890</id><published>2006-10-01T21:49:00.000-07:00</published><updated>2006-10-01T22:02:24.653-07:00</updated><title type='text'>UltraISR</title><content type='html'>Casi que no lo encuentro, pero al fin encontre el documento para hacer un UltraISR, para poder programar las CPLD's de Cypress:&lt;br /&gt;&lt;a href="http://www2.mta.ac.il/%7Eflaxer/edu/course/vhdl/isrdesign.pdf"&gt;http://www2.mta.ac.il/~flaxer/edu/course/vhdl/isrdesign.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ahora puedo hacer pruebas con las cpld's, la cosa es conseguir la plata para hacer las tarjetas para las cpld's.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www2.mta.ac.il/%7Eflaxer/edu/course/vhdl/isrdesign.pdf"&gt;&lt;span class="" style="display: block;" id="formatbar_CreateLink" title="Vínculo" onmouseover="ButtonHoverOn(this);" onmouseout="ButtonHoverOff(this);" onmouseup="" onmousedown="CheckFormatting(event);FormatbarButton('richeditorframe', this, 8);ButtonMouseDown(this);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-115976534140020890?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/115976534140020890/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=115976534140020890' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115976534140020890'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115976534140020890'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/10/ultraisr.html' title='UltraISR'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-115941168978354846</id><published>2006-09-27T19:18:00.000-07:00</published><updated>2006-09-27T19:48:10.283-07:00</updated><title type='text'>TODO</title><content type='html'>*Sistema Embebido con el 68K.&lt;br /&gt;-hacer  programador de las  CPLD's de Cypress.&lt;br /&gt;-diseñar MMU.&lt;br /&gt;-diseñar modulo de audio.&lt;br /&gt;-diseñar modulo de video.&lt;br /&gt;-diseñar modulo RTC.&lt;br /&gt;-integrar serial, video, audio, MMU, RTC, memoria, LEDS, DIPSWITCH, LCD,&lt;br /&gt;-estudiar posibilidad de un medio masivo de almacenamiento.&lt;br /&gt;-Buscar un SO facil de portar, ojala Pistachio.&lt;br /&gt;&lt;br /&gt;*Sistema embebido con el 5407&lt;br /&gt;*Sistema embebido con el 5485&lt;br /&gt;*Estudiar posibilidad de portar Pistachio a los Coldfire, o saltar a un ARM.&lt;br /&gt;*En base a lo anterior hacer un Pistachio distribuido.&lt;br /&gt;*Hacer pruebas de rendimiento.&lt;br /&gt;&lt;br /&gt;(Demas que falta algo, si algo lo agrego luego)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-115941168978354846?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/115941168978354846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=115941168978354846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115941168978354846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115941168978354846'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/09/todo.html' title='TODO'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-115845599858286269</id><published>2006-09-16T15:58:00.000-07:00</published><updated>2006-09-16T18:19:58.643-07:00</updated><title type='text'>La madre de los motorola</title><content type='html'>Hace un tiempo me tope con un buen integrado de la familia Coldfire de Freescale, el 5407, tengo 3 de estos integrados en mi caja de electonica, y no quice dejarlos llenar de polvo, me puse a la tarea de crear un sistema embebido con el integrado.&lt;br /&gt;Como no sabia como funcionaba bien, me puse a investigar y cai en la familia 68 de la cual se basa la familia coldfire, y comence a diseñar un sistema completo basado en el 68000.&lt;br /&gt;El sistema consta de:&lt;br /&gt;1 Procesador MC68HC000FN16&lt;br /&gt;2 Memorias SRAM de 128K c/u (D431000). 256K de Ram total.&lt;br /&gt;2 Memorias EEPROM de 8K c/u (AT28C64B) . 64K de memoria para el "Bios" , Bootloader, como le quieran llamar.&lt;br /&gt;1 Display de Cristal Liquido. Pa ver algo&lt;br /&gt;8 Leds a modo de Post Code. Pa depurar.&lt;br /&gt;2 Dip Switch. Uno a modo de entrada, y otro para seleccionar el numero de interrupcion.&lt;br /&gt;2 Pulsadores, pa reset y pa generar una interrupcion.&lt;br /&gt;1 74LS138. pa decodificar direcciones. los 16MB que direcciona el 68000 esta partido en 8.&lt;br /&gt;Glue Logic:&lt;br /&gt;Un monton de compuertas.&lt;br /&gt;1 2n2222 todo bamba (por no poner un IC de negadores).&lt;br /&gt;&lt;br /&gt;Mucho cable.&lt;br /&gt;Condensadores (el tipico 104)&lt;br /&gt;Resistencias.&lt;br /&gt;&lt;br /&gt;Actualmente esta problematico, creo que hay algunos cables medio sueltos y es problematico pa que funcione, pero lo hace.&lt;br /&gt;Fotos:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4304/3757/1600/cimg7065.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4304/3757/400/cimg7065.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/4304/3757/1600/cimg7069.0.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://photos1.blogger.com/blogger/4304/3757/400/cimg7069.jpg" alt="" border="0" /&gt;&lt;/a&gt;Listo, pa que corriera algo, la cosa es sencilla, primero tengo que tener el toolchain del 68K bien compilado (demas que luego digo como, es canson el proceso), y luego hacer un archivo .S donde hay un .init,  y ahi un jump a el main de algun programa en C, y listo, hay van los archivos necesarios para que corra lo que tiene actualmente.&lt;br /&gt;&lt;br /&gt;De primero la licencia de todo el codigo a continuacion:&lt;br /&gt;&lt;pre&gt;&lt;var&gt;Program test to 68000 processor.&lt;/var&gt;&lt;br /&gt;Copyright (C) &lt;var&gt;2005&lt;/var&gt;  &lt;var&gt;Jorge Eduardo Cardona Gaviria&lt;br /&gt;&lt;br /&gt;&lt;/var&gt;This program is free software; you can redistribute it and/or&lt;br /&gt;modify it under the terms of the GNU General Public License&lt;br /&gt;as published by the Free Software Foundation; either version 2&lt;br /&gt;of the License, or (at your option) any later version.&lt;br /&gt;&lt;br /&gt;This program is distributed in the hope that it will be useful,&lt;br /&gt;but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;GNU General Public License for more details.&lt;br /&gt;&lt;br /&gt;You should have received a copy of the GNU General Public License&lt;br /&gt;along with this program; if not, write to the Free Software&lt;br /&gt;Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;----------------------------------  boot.S -----------------------------------&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-family: courier new;"&gt;.extern start_main&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_002,int_003&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_004,int_005,int_006,int_007,int_008,int_009,int_010,int_011,int_012,int_013&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_014,int_015,int_016,int_017,int_018,int_019,int_020,int_021,int_022,int_023&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_024,int_025,int_026,int_027,int_028,int_029,int_030,int_031,int_032,int_033&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_034,int_035,int_036,int_037,int_038,int_039,int_040,int_041,int_042,int_043&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_044,int_045,int_046,int_047,int_048,int_049,int_050,int_051,int_052,int_053&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_054,int_055,int_056,int_057,int_058,int_059,int_060,int_061,int_062,int_063&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_064,int_065,int_066,int_067,int_068,int_069,int_070,int_071,int_072,int_073&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_074,int_075,int_076,int_077,int_078,int_079,int_080,int_081,int_082,int_083&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_084,int_085,int_086,int_087,int_088,int_089,int_090,int_091,int_092,int_093&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_094,int_095,int_096,int_097,int_098,int_099,int_100,int_101,int_102,int_103&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_104,int_105,int_106,int_107,int_108,int_109,int_110,int_111,int_112,int_113&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_114,int_115,int_116,int_117,int_118,int_119,int_120,int_121,int_122,int_123&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_124,int_125,int_126,int_127,int_128,int_129,int_130,int_131,int_132,int_133&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_134,int_135,int_136,int_137,int_138,int_139,int_140,int_141,int_142,int_143&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_144,int_145,int_146,int_147,int_148,int_149,int_150,int_151,int_152,int_153&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_154,int_155,int_156,int_157,int_158,int_159,int_160,int_161,int_162,int_163&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_164,int_165,int_166,int_167,int_168,int_169,int_170,int_171,int_172,int_173&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_174,int_175,int_176,int_177,int_178,int_179,int_180,int_181,int_182,int_183&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_184,int_185,int_186,int_187,int_188,int_189,int_190,int_191,int_192,int_193&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_194,int_195,int_196,int_197,int_198,int_199,int_200,int_201,int_202,int_203&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_204,int_205,int_206,int_207,int_208,int_209,int_210,int_211,int_212,int_213&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_214,int_215,int_216,int_217,int_218,int_219,int_220,int_221,int_222,int_223&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_224,int_225,int_226,int_227,int_228,int_229,int_230,int_231,int_232,int_233&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_234,int_235,int_236,int_237,int_238,int_239,int_240,int_241,int_242,int_243&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_244,int_245,int_246,int_247,int_248,int_249,int_250,int_251,int_252,int_253&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.extern int_254,int_255&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.global _start&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.global _vectors&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;.text&lt;br /&gt;&lt;br /&gt;_vectors:&lt;br /&gt;&lt;br /&gt;        .long   0x320000,0x400&lt;br /&gt;        .long   int_002,int_003&lt;br /&gt;        .long   int_004,int_005,int_006,int_007,int_008,int_009,int_010,int_011,int_012,int_013&lt;br /&gt;        .long   int_014,int_015,int_016,int_017,int_018,int_019,int_020,int_021,int_022,int_023&lt;br /&gt;        .long   int_024,int_025,int_026,int_027,int_028,int_029,int_030,int_031,int_032,int_033&lt;br /&gt;        .long   int_034,int_035,int_036,int_037,int_038,int_039,int_040,int_041,int_042,int_043&lt;br /&gt;        .long   int_044,int_045,int_046,int_047,int_048,int_049,int_050,int_051,int_052,int_053&lt;br /&gt;        .long   int_054,int_055,int_056,int_057,int_058,int_059,int_060,int_061,int_062,int_063&lt;br /&gt;        .long   int_064,int_065,int_066,int_067,int_068,int_069,int_070,int_071,int_072,int_073&lt;br /&gt;        .long   int_074,int_075,int_076,int_077,int_078,int_079,int_080,int_081,int_082,int_083&lt;br /&gt;        .long   int_084,int_085,int_086,int_087,int_088,int_089,int_090,int_091,int_092,int_093&lt;br /&gt;        .long   int_094,int_095,int_096,int_097,int_098,int_099,int_100,int_101,int_102,int_103&lt;br /&gt;        .long   int_104,int_105,int_106,int_107,int_108,int_109,int_110,int_111,int_112,int_113&lt;br /&gt;        .long   int_114,int_115,int_116,int_117,int_118,int_119,int_120,int_121,int_122,int_123&lt;br /&gt;        .long   int_124,int_125,int_126,int_127,int_128,int_129,int_130,int_131,int_132,int_133&lt;br /&gt;        .long   int_134,int_135,int_136,int_137,int_138,int_139,int_140,int_141,int_142,int_143&lt;br /&gt;        .long   int_144,int_145,int_146,int_147,int_148,int_149,int_150,int_151,int_152,int_153&lt;br /&gt;        .long   int_154,int_155,int_156,int_157,int_158,int_159,int_160,int_161,int_162,int_163&lt;br /&gt;        .long   int_164,int_165,int_166,int_167,int_168,int_169,int_170,int_171,int_172,int_173&lt;br /&gt;        .long   int_174,int_175,int_176,int_177,int_178,int_179,int_180,int_181,int_182,int_183&lt;br /&gt;        .long   int_184,int_185,int_186,int_187,int_188,int_189,int_190,int_191,int_192,int_193&lt;br /&gt;        .long   int_194,int_195,int_196,int_197,int_198,int_199,int_200,int_201,int_202,int_203&lt;br /&gt;        .long   int_204,int_205,int_206,int_207,int_208,int_209,int_210,int_211,int_212,int_213&lt;br /&gt;        .long   int_214,int_215,int_216,int_217,int_218,int_219,int_220,int_221,int_222,int_223&lt;br /&gt;        .long   int_224,int_225,int_226,int_227,int_228,int_229,int_230,int_231,int_232,int_233&lt;br /&gt;        .long   int_234,int_235,int_236,int_237,int_238,int_239,int_240,int_241,int_242,int_243&lt;br /&gt;        .long   int_244,int_245,int_246,int_247,int_248,int_249,int_250,int_251,int_252,int_253&lt;br /&gt;        .long   int_254,int_255&lt;br /&gt;&lt;br /&gt;_start:&lt;br /&gt;&lt;br /&gt;        move.l  #0x00100000,%a0         /* Leds */&lt;br /&gt;&lt;br /&gt;check_ram:&lt;br /&gt;        move.w  #0x80,(%a0)&lt;br /&gt;        move.l  #0x00300000,%a1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bucle1:&lt;br /&gt;        move.l  %a1,(%a1)+&lt;br /&gt;        cmpa.l  #0x00320000,%a1&lt;br /&gt;        blt     bucle1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;bucle2:&lt;br /&gt;        move.l  -(%a1),%d0&lt;br /&gt;        cmp.l   %a1,%d0&lt;br /&gt;        bne     Error&lt;br /&gt;        cmpa.l  #0x00300000,%a1&lt;br /&gt;        bgt     bucle2&lt;br /&gt;&lt;br /&gt;        move.w  #0xff,(%a0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        move.l  #0x100000,%d1           /* contador de la duracion de encendido.*/&lt;br /&gt;&lt;br /&gt;bucle3:&lt;br /&gt;        sub.l   #0x1,%d1&lt;br /&gt;        bne     bucle3&lt;br /&gt;&lt;br /&gt;        move.w  #0x3c,(%a0)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        movea.l #0x320000,%a7&lt;br /&gt;        movea.l #0x310000,%a6&lt;br /&gt;&lt;br /&gt;        jsr     start_main&lt;br /&gt;Error:&lt;br /&gt;&lt;br /&gt;        move.w  #0x00,(%a0)&lt;br /&gt;&lt;br /&gt;forever:&lt;br /&gt;        jmp     forever&lt;br /&gt;----------------------------------------------------------------------&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;--------------------------- main.c ---------------------------------&lt;br /&gt;#include "main.h"&lt;br /&gt;&lt;br /&gt;void start_main(void)&lt;br /&gt;{&lt;br /&gt;        LEDS_set_byte(0);&lt;br /&gt;&lt;br /&gt;        bienvenida();&lt;br /&gt;&lt;br /&gt;        mensaje();&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;---------------------- main.h -------------------------------&lt;br /&gt;#define LEDS_ADDRESS            0x00100000&lt;br /&gt;#define DIP_ADDRESS             0x00200000&lt;br /&gt;#define RAM_BASE_ADDRESS        0x00300000&lt;br /&gt;#define RAM_USER_BASE_ADDRESS   RAM_BASE_ADDRESS+SYSTEM_INFO_LENGHT&lt;br /&gt;#define RAM_LENGHT              0x00020000&lt;br /&gt;#define LCD_DATA_ADDRESS        0x00400000&lt;br /&gt;#define LCD_CONTROL_ADDRESS     0x00400001&lt;br /&gt;&lt;br /&gt;#define SYSTEM_INFO_LENGHT      0x00000002&lt;br /&gt;&lt;br /&gt;#include "func.h"&lt;br /&gt;#include "LCD.h"&lt;br /&gt;#include "LEDS.h"&lt;br /&gt;#include "DIP.h"&lt;br /&gt;#include "Int.h"&lt;br /&gt;&lt;br /&gt;struct _SYSTEM_INFO&lt;br /&gt;{&lt;br /&gt;        unsigned char   LEDS;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void start_main(void);&lt;br /&gt;-------------------------------------------------------------------&lt;br /&gt;--------------------------- LEDS.c ----------------------------&lt;br /&gt;#include "LEDS.h"&lt;br /&gt;#include "main.h"&lt;br /&gt;&lt;br /&gt;void LEDS_set_byte(unsigned char dato)&lt;br /&gt;{&lt;br /&gt;        unsigned char *LEDS = (unsigned char*) LEDS_ADDRESS;&lt;br /&gt;        struct _SYSTEM_INFO * info = (struct _SYSTEM_INFO *) RAM_BASE_ADDRESS;&lt;br /&gt;&lt;br /&gt;        info-&gt;LEDS=dato;&lt;br /&gt;&lt;br /&gt;        LEDS_REFRESH(LEDS);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void LEDS_set_bit(unsigned char bit)&lt;br /&gt;{&lt;br /&gt;        unsigned char *LEDS = (unsigned char*) LEDS_ADDRESS;&lt;br /&gt;        struct _SYSTEM_INFO * info = (struct _SYSTEM_INFO *) RAM_BASE_ADDRESS;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        bit=1&lt;&lt;bit;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        info-&gt;LEDS |= bit;&lt;br /&gt;&lt;br /&gt;        LEDS_REFRESH(LEDS);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void LEDS_clear_bit(unsigned char bit)&lt;br /&gt;{&lt;br /&gt;        unsigned char *LEDS = (unsigned char*) LEDS_ADDRESS;&lt;br /&gt;        struct _SYSTEM_INFO * info = (struct _SYSTEM_INFO *) RAM_BASE_ADDRESS;&lt;br /&gt;&lt;br /&gt;        bit=1&lt;&lt;bit;&lt;br /&gt;&lt;br /&gt;        info-&gt;LEDS &amp;= ~bit;&lt;br /&gt;&lt;br /&gt;        LEDS_REFRESH(LEDS);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;--------------------------------------------------------------------&lt;br /&gt;-------------------------- LEDS.h ------------------------------&lt;br /&gt;#define LEDS_REFRESH(x) *x=info-&gt;LEDS&lt;br /&gt;&lt;br /&gt;void LEDS_set_byte(unsigned char dato);&lt;br /&gt;void LEDS_set_bit(unsigned char bit);&lt;br /&gt;void LEDS_clear_bit(unsigned char bit);&lt;br /&gt;--------------------------------------------------------------------&lt;br /&gt;---------------------------  func.c -------------------------------&lt;br /&gt;#include "main.h"&lt;br /&gt;&lt;br /&gt;inline void prueba(unsigned char a);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/* espera(1) = 3.27315uS */&lt;br /&gt;void esperar(unsigned long n)&lt;br /&gt;{&lt;br /&gt;        do{}while(--n&gt;0);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void bienvenida(void)&lt;br /&gt;{&lt;br /&gt;        unsigned char *LEDS = (unsigned char *) LEDS_ADDRESS;&lt;br /&gt;        unsigned int p,q,dummy0, dummy1;&lt;br /&gt;        unsigned char k,j,i;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        for(k=0;k&lt;2;k++)&lt;br /&gt;        {&lt;br /&gt;                i=1;&lt;br /&gt;                for(j=0;j&lt;8;j++)&lt;br /&gt;                {&lt;br /&gt;                        LEDS_set_byte(i);&lt;br /&gt;                        esperar(24000);&lt;br /&gt;                }&lt;br /&gt;                i=128;&lt;br /&gt;                for(j=0;j&lt;8;j++)&lt;br /&gt;                {&lt;br /&gt;                        LEDS_set_byte(i);&lt;br /&gt;                        esperar(24000);&lt;br /&gt;                        i=i&gt;&gt;1;&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        for(k=0;k&lt;4;k++)&lt;br /&gt;        {&lt;br /&gt;                for(j=0;j&lt;8;j++)&lt;br /&gt;                {&lt;br /&gt;&lt;br /&gt;                        LEDS_set_byte(0);&lt;br /&gt;                        LEDS_set_bit(j);&lt;br /&gt;                        LEDS_set_bit(7-j);&lt;br /&gt;                        esperar(48000);&lt;br /&gt;                }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        prueba(j);&lt;br /&gt;        LEDS_set_byte(j);&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;__inline__ void prueba(register unsigned char a)&lt;br /&gt;{&lt;br /&gt;    register unsigned long d3 asm("d3") = (unsigned long) a;&lt;br /&gt;  &lt;br /&gt;    asm("move.b %d3,-(%sp) \n"&lt;br /&gt;        "jbsr   LEDS_set_byte");&lt;br /&gt;    LEDS_set_byte((unsigned char) d3);&lt;br /&gt;  &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void mensaje(void)&lt;br /&gt;{&lt;br /&gt;        LCD_configurar();&lt;br /&gt;        LCD_configurar();&lt;br /&gt;        LCD_configurar();&lt;br /&gt;        LCD_configurar();&lt;br /&gt;        LCD_configurar();&lt;br /&gt;        do&lt;br /&gt;        {&lt;br /&gt;                LCD_escribir_cadena("MC68HC000FN16",100000);&lt;br /&gt;                LCD_posicion(0,1);&lt;br /&gt;                LCD_escribir_cadena("Microprocessor",100000);&lt;br /&gt;                LCD_limpiar();&lt;br /&gt;                LCD_regresar();&lt;br /&gt;        }while(1);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;---------------------------------------------------------------&lt;br /&gt;------------------------- func.h ----------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;void esperar(unsigned long n);&lt;br /&gt;void bienvenida(void);&lt;br /&gt;void mensaje(void);&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;hay mas archivos pero luego los subo que estan malucos de pegar, por ultimo el Makefile&lt;br /&gt;------------------- Makefile -----------------------------&lt;br /&gt;#Compilador,Linkeo y generacion del bin para C.&lt;br /&gt;&lt;br /&gt;all:&lt;br /&gt;    m68k-elf-gcc  -ggdb -Os -m68000 -mshort -c func.c&lt;br /&gt;    m68k-elf-gcc  -Os -m68000 -mshort -c -S func.c&lt;br /&gt;   &lt;br /&gt;    m68k-elf-gcc  -ggdb -Os -m68000 -mshort -c main.c&lt;br /&gt;    m68k-elf-gcc  -Os -m68000 -mshort -c -S main.c&lt;br /&gt;   &lt;br /&gt;    m68k-elf-gcc  -ggdb -O0 -m68000 -mshort -c LCD.c&lt;br /&gt;    m68k-elf-gcc  -O0 -m68000 -mshort -c -S LCD.c&lt;br /&gt;&lt;br /&gt;    m68k-elf-gcc  -ggdb -Os -m68000 -mshort -c Int.c&lt;br /&gt;    m68k-elf-gcc  -Os -m68000 -mshort -c -S Int.c&lt;br /&gt;&lt;br /&gt;    m68k-elf-gcc  -ggdb -Os -m68000 -mshort -c LEDS.c&lt;br /&gt;    m68k-elf-gcc  -Os -m68000 -mshort -c -S LEDS.c&lt;br /&gt;&lt;br /&gt;    m68k-elf-gcc  -ggdb -Os -m68000 -mshort -c DIP.c&lt;br /&gt;    m68k-elf-gcc  -Os -m68000 -mshort -c -S DIP.c&lt;br /&gt;&lt;br /&gt;    m68k-elf-as -m68000 -o boot.o  boot.S&lt;br /&gt;   &lt;br /&gt;    m68k-elf-as -m68000 -o Int_e.o  Int_e.S&lt;br /&gt;   &lt;br /&gt;   &lt;br /&gt;    #m68k-elf-ld -dp  -T ldscript   boot.o  Int_e.o main.o func.o LCD.o Int.o LEDS.o DIP.o /usr/m68k-elf/lib/gcc/m68k-elf/4.0.1/m68000/libgcc.a -o prueba.o&lt;br /&gt;    m68k-elf-ld -dp -T ldscript   boot.o  Int_e.o main.o func.o LCD.o Int.o LEDS.o DIP.o -o prueba.e&lt;br /&gt;   &lt;br /&gt;    #m68k-elf-ld -dp -ggdb  -T ldscript   boot.o  Int_e.o main.o func.o LCD.o Int.o LEDS.o DIP.o -o prueba.gdb&lt;br /&gt;       &lt;br /&gt;    m68k-elf-objcopy -O binary prueba.e prueba.bin&lt;br /&gt;   &lt;br /&gt;    ./split prueba.bin&lt;br /&gt;   &lt;br /&gt;clean:&lt;br /&gt;    rm *.s *.o *.bin*&lt;br /&gt;-------------------------------------------------&lt;br /&gt;------------------- ldscript -------------------&lt;br /&gt;ENTRY(_vectors)&lt;br /&gt;SECTIONS {.text 0x0000 : {*(.text)}}&lt;br /&gt;-------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Basicamente es todo.&lt;br /&gt;&lt;br /&gt;TODO:&lt;br /&gt;hacer un TODO completo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-115845599858286269?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/115845599858286269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=115845599858286269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115845599858286269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115845599858286269'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/09/la-madre-de-los-motorola.html' title='La madre de los motorola'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-115803188517637777</id><published>2006-09-11T19:02:00.000-07:00</published><updated>2006-09-11T20:31:25.646-07:00</updated><title type='text'>Tesis</title><content type='html'>Dicen las malas lenguas que tengo que hacer tesis, y hasta el momento este va a ser mi proyecto, existe un uKernel llamado pistachio que lo han trabajado en Karlsruhe, la cosa es lograr hacer un pistachio distribuido que corra en varias maquinitas embebidas de un costo bien reducido.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-115803188517637777?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/115803188517637777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=115803188517637777' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115803188517637777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115803188517637777'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/09/tesis.html' title='Tesis'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-34133079.post-115784595324251631</id><published>2006-09-09T16:48:00.000-07:00</published><updated>2006-09-09T16:52:33.253-07:00</updated><title type='text'>De primerazo</title><content type='html'>Obligado empienzo el blog, luego vere que le agrego.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/34133079-115784595324251631?l=jorgeecardona.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jorgeecardona.blogspot.com/feeds/115784595324251631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=34133079&amp;postID=115784595324251631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115784595324251631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/34133079/posts/default/115784595324251631'/><link rel='alternate' type='text/html' href='http://jorgeecardona.blogspot.com/2006/09/de-primerazo.html' title='De primerazo'/><author><name>Jorge Eduardo Cardona</name><uri>http://www.blogger.com/profile/17366392704306249165</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
