<?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-5502681789285906166</id><updated>2012-02-04T22:38:26.615-08:00</updated><category term='tanenbaum'/><category term='mediawiki'/><category term='revistas electronicas'/><category term='development'/><category term='hashinfo'/><category term='routers'/><category term='gratis'/><category term='simpsons'/><category term='presentation'/><category term='publicaciones'/><category term='restore'/><category term='tftp'/><category term='timo'/><category term='tesis'/><category term='libros'/><category term='git'/><category term='configuration'/><category term='gem'/><category term='tips'/><category term='rails'/><category term='software engineering'/><category term='transferencia'/><category term='grupo'/><category term='beryl'/><category term='distros'/><category term='diseño'/><category term='sistemas operativos'/><category term='fossil'/><category term='gitconfig4j'/><category term='humor'/><category term='codigo'/><category term='floss'/><category term='java'/><category term='mysql'/><category term='httpd'/><category term='object'/><category term='informatica'/><category term='best practices'/><category term='metamodelo'/><category term='programacion'/><category term='diff'/><category term='introduccion'/><category term='case'/><category term='descarga'/><category term='report'/><category term='jpa'/><category term='software'/><category term='mac'/><category term='dependency'/><category term='patrones'/><category term='design'/><category term='cuento'/><category term='framework'/><category term='ubuntu'/><category term='allan'/><category term='jms'/><category term='uagrm'/><category term='nvidia'/><category term='recursion'/><category term='svn'/><category term='poe'/><category term='ruby'/><category term='rules'/><category term='technology'/><category term='smtp'/><category term='wiki'/><category term='podcast'/><category term='guía'/><category term='mathematic'/><category term='javamail'/><category term='perl'/><category term='fedora'/><category term='numeracion'/><category term='poema'/><category term='standard for software user documentation'/><category term='uncle bob'/><category term='caps'/><category term='ingenieria  del software'/><category term='ios'/><category term='correo'/><category term='script'/><category term='windows'/><category term='uml'/><category term='tdd'/><category term='code'/><category term='redes'/><category term='monodevelop'/><category term='screenshots'/><category term='hardware'/><category term='apache'/><category term='linux'/><category term='booch'/><category term='ieee'/><category term='libgpod'/><category term='traduccion'/><category term='oss'/><category term='cvs'/><category term='eratosthenes'/><category term='ant'/><category term='dcvs'/><category term='usb'/><category term='php'/><category term='sockets'/><category term='patterns'/><category term='modelo'/><category term='programming'/><category term='sqlite'/><category term='modem'/><category term='configuracion'/><category term='sqldeveloper'/><category term='diagramas de flujo'/><category term='post'/><category term='book'/><category term='blog'/><category term='tech-talk'/><category term='herramientas'/><category term='kde'/><category term='databases'/><category term='regex'/><category term='pagination'/><category term='slackware'/><category term='wikipedia'/><category term='ipod'/><category term='edgar'/><category term='kernel'/><category term='orm'/><category term='dao'/><category term='jacobson'/><category term='archlinux'/><category term='suspenso'/><category term='std'/><category term='mono'/><category term='code freze'/><category term='escritorio'/><category term='utilities'/><category term='problem'/><title type='text'>Timo's  blog</title><subtitle type='html'>Development, engineering, Slackware and life in general.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default?start-index=101&amp;max-results=100'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>105</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7136613359063833824</id><published>2012-01-31T19:27:00.000-08:00</published><updated>2012-01-31T19:27:23.144-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='eratosthenes'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Exercise: Sieve of Eratosthenes</title><content type='html'>After reading an interesting blog post from &lt;a href="http://blog.8thlight.com/uncle-bob/2012/01/31/The-Ruby-Colored-Box.html"&gt;Robert Martin&lt;/a&gt; I started writing &lt;a href="http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes"&gt;this nice algorithm&lt;/a&gt; in Ruby (I'm still learning it).&lt;br /&gt;&lt;br /&gt;As I'm a refactoring freak, here's the first version:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1714906.js"&gt; &lt;/script&gt;Nasty right? Then the cleaned up release:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1714886.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7136613359063833824?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7136613359063833824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7136613359063833824&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7136613359063833824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7136613359063833824'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2012/01/exercise-sieve-of-eratosthenes.html' title='Exercise: Sieve of Eratosthenes'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1166511140543402917</id><published>2012-01-28T05:57:00.000-08:00</published><updated>2012-01-28T05:57:59.895-08:00</updated><title type='text'>El fin de una epoca</title><content type='html'>Un poco nostálgico para estos dias, pero me parece correcto definir este día como importante con respecto a mi vida. A pesar de que no soy una persona religiosa ni teológica, me he visto afectado por esta noticia:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.eldeber.com.bo/2012/2012-01-28/ver-nota.php?id=120127143430"&gt;Muere el Hermano Pablo&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;Ciertamente era una persona apreciada por mucha gente (no por mi persona) y sus palabras influenciaron a miles de personas alrededor del mundo. No es mi intención hacer apología de su trabajo, solamente quiero recalcar que su vida afectó la mía. Que su trabajo de alguna forma me hizo ser lo que hoy soy.&lt;br /&gt; &lt;br /&gt; A pesar de que su programa me aborrecía y de que sus mensajes me parecían inútiles, marcaron una etapa imborrable de mi crecimiento.&lt;br /&gt;&lt;br /&gt;Junto con el se van muchas otras personas que afectaron mi vida de alguna forma y de seguro la de muchos mas.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1166511140543402917?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1166511140543402917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1166511140543402917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1166511140543402917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1166511140543402917'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2012/01/el-fin-de-una-epoca.html' title='El fin de una epoca'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1978562750246691042</id><published>2012-01-24T12:20:00.000-08:00</published><updated>2012-01-24T12:20:25.427-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='object'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Supporting short lived objects</title><content type='html'>While working on some projects with different environments and behaviors, I started liking the notion of short-lived objects. Besides, I read a lot in several threads from StackOverflow &amp;gt; &lt;a href="http://stackoverflow.com/questions/631919/short-lived-objects"&gt;http://stackoverflow.com/questions/631919/short-lived-objects&lt;/a&gt;.&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://psxmedia.ign.com/media/previews/image/duketk.17_640w.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://psxmedia.ign.com/media/previews/image/duketk.17_640w.jpg" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Kill them all!&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;I like this kind of objects because they are easy to control, debug, update, delete. The notion of having an long living object is state, but to keep that state among several instances and requests can be a real hell if you don't control it properly.&lt;br /&gt;&lt;br /&gt;And as you may guess, concurrency is one of the things I don't like to deal with, I prefer to leave it to a framework or third-party concurrency manager.&lt;br /&gt;&lt;br /&gt;Benefits:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Easy to control&lt;/li&gt;&lt;li&gt;Easy to code&lt;/li&gt;&lt;li&gt;Easy to test&lt;/li&gt;&lt;li&gt;Challenges your design skills&lt;/li&gt;&lt;li&gt;Avoids singleton all over the place&lt;/li&gt;&lt;li&gt;It enhances performance&amp;nbsp; &lt;/li&gt;&lt;/ul&gt;Drawbacks:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;If you don't control them, you can have an big object pool&lt;/li&gt;&lt;li&gt;You have to take care of references and garbage collection&lt;/li&gt;&lt;li&gt;If your design is bad, your objects will be bad as well.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1978562750246691042?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1978562750246691042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1978562750246691042&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1978562750246691042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1978562750246691042'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2012/01/supporting-short-lived-objects.html' title='Supporting short lived objects'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6151891346785128065</id><published>2012-01-19T20:18:00.000-08:00</published><updated>2012-01-19T20:18:12.697-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='sqlite'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='fossil'/><category scheme='http://www.blogger.com/atom/ns#' term='floss'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><category scheme='http://www.blogger.com/atom/ns#' term='dcvs'/><title type='text'>Fossil SCM</title><content type='html'>A few months ago I listened to &lt;a href="http://twit.tv/show/floss-weekly/26"&gt;FLOSS Weekly's episode about SQLite&lt;/a&gt;, and I wondered how this wonderful project was being managed.&lt;br /&gt;&lt;br /&gt;After checking for a while, I found that &lt;a href="http://en.wikipedia.org/wiki/D._Richard_Hipp"&gt;D. Richard Hipp&lt;/a&gt; has developed his own distributed SCM based on the very reliable &lt;a href="http://sqlite.org/"&gt;SQLite&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://fossil-scm.org/index.html/doc/trunk/www/fossil3.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://fossil-scm.org/index.html/doc/trunk/www/fossil3.gif" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;In a comparison with Git and Hg (which I have used), it is more than a SCM, it is a whole project-development space. Some of its features include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Bug Tracking And Wiki, really cool.&lt;/li&gt;&lt;li&gt; Web Interface, incredibly simple.&lt;/li&gt;&lt;li&gt;Autosync, still wondering what its benefits are.&lt;/li&gt;&lt;li&gt;Self-Contained, yep, everything in one binary file.&lt;/li&gt;&lt;li&gt;Simple Networking.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As a developer of some internal projects, it's really hard to keep track of my bugs an issues, and the environment required for it costs too much. But this amazing project does it for me!&lt;br /&gt;&lt;br /&gt;Its use is very similar to any distributed SCM and the installation/configuration is barely present. I totally encourage you to try it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6151891346785128065?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6151891346785128065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6151891346785128065&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6151891346785128065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6151891346785128065'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2012/01/fossil-scm.html' title='Fossil SCM'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8107172221120530563</id><published>2012-01-19T20:07:00.000-08:00</published><updated>2012-01-20T04:14:27.677-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Semantics and programming</title><content type='html'>After using the &lt;a href="http://www.playframework.org/"&gt;Play framework&lt;/a&gt; for a while, and reading several &lt;a href="http://codemonkeyism.com/generation-java-programming-style/"&gt;good articles&lt;/a&gt;, I started using some of the concepts that have been around the cloud for some time.&lt;br /&gt;&lt;br /&gt;One of them took my attention, the one claiming:&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;i&gt;"Never use strings in Java"&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;Initially I found this really stupid, how can you program without strings?&lt;br /&gt;&lt;br /&gt;But after applying the concept for some months, it has showed me how wrong I was. Once you start coding with Objects, you are giving your operations a semantic meaning. This means that you can say by checking an operation identifier what it really does.&lt;br /&gt;&lt;br /&gt;It also simplifies the API definition, because the object talk by themselves. You will not be able to pass a null string as a parameter, instead you will create a class wrapping it, then the wrapper class is in charge of checking if the data you are using is valid.&lt;br /&gt;&lt;br /&gt;As I'm still digging into it, more posts will be written about the topic. Just as a suggestion, please take a look at it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Resources&lt;/b&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/never-never-never-use-string-in-java-or-at-least-less-often/"&gt;never-never-never-use-string-in-java-or-at-least-less-often&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://codemonkeyism.com/generation-java-programming-style/"&gt;New programming style &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8107172221120530563?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8107172221120530563/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8107172221120530563&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8107172221120530563'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8107172221120530563'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2012/01/semantics-and-programming.html' title='Semantics and programming'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7037794989196125795</id><published>2011-12-23T09:41:00.000-08:00</published><updated>2011-12-24T07:50:21.172-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='blog'/><category scheme='http://www.blogger.com/atom/ns#' term='uncle bob'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>People it is worth following</title><content type='html'>Among software development there are a lot of resources, a lot of people worth of looking at it, but to find out who is good enough to follow may take some time. That's why's I'm summarizing the people I enjoy reading/listening to in any topic related to software engineering and development in general.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-52X92Rfk4F8/TvS8400U6hI/AAAAAAAAAPU/_hDkJFC0phs/s1600/ducklings-following-mother-m.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="229" src="http://2.bp.blogspot.com/-52X92Rfk4F8/TvS8400U6hI/AAAAAAAAAPU/_hDkJFC0phs/s320/ducklings-following-mother-m.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Robert C. Martin&lt;/span&gt;&lt;br /&gt;The 'Master Craftsman', I've read some of his books and are pure gold, his experience and knowledge are outstanding, and you can still see him coding!&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Old blog &lt;a href="http://butunclebob.com/ArticleS.UncleBob"&gt;http://butunclebob.com/ArticleS.UncleBob&lt;/a&gt;&amp;nbsp;(it has some very interesting posts)&lt;/li&gt;&lt;li&gt;New blog&amp;nbsp;&lt;a href="http://blog.objectmentor.com/"&gt;http://blog.objectmentor.com&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Clean coders &lt;a href="http://www.cleancoders.com/"&gt;http://www.cleancoders.com/&lt;/a&gt;, a bunch of great software development resources&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Joel Spolsky&lt;/span&gt;&lt;br /&gt;One of the heads behind &lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;, a hardcore developer that has been doing really cool things for more than a decade. His blog posts are extremely interesting and very, but very useful.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blog&amp;nbsp;&lt;a href="http://www.joelonsoftware.com/"&gt;http://www.joelonsoftware.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Hg init tutorial&amp;nbsp;&lt;a href="http://hginit.com/"&gt;http://hginit.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.joelonsoftware.com/articles/fog0000000043.html"&gt;The Joel test&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;li&gt;StackExchange &lt;a href="http://www.stackexchange.com/"&gt;http://www.stackexchange.com/&lt;/a&gt;&amp;nbsp;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Jeff Atwood&lt;/span&gt;&lt;br /&gt;Another of the heads behind&amp;nbsp;&lt;a href="http://stackoverflow.com/"&gt;StackOverflow&lt;/a&gt;,&amp;nbsp;a very skillfull developer that has been delivering lots of tips, principles and advices for years.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Coding horror&amp;nbsp;&lt;a href="http://www.codinghorror.com/blog/"&gt;http://www.codinghorror.com/blog/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;StackOverflow podcast&amp;nbsp;&lt;a href="http://blog.stackoverflow.com/category/podcasts/"&gt;http://blog.stackoverflow.com/category/podcasts/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Miguel de Icaza&lt;/span&gt;&lt;br /&gt;He is the mind behind the initial Gnome project, started with Mono and now it's driving his own company called Xamarin. He might be controversial at times, but for sure it is worthy to follow him.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blog&amp;nbsp;&lt;a href="http://tirania.org/blog"&gt;http://tirania.org/blog&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Xamarin&amp;nbsp;&lt;a href="http://xamarin.com/"&gt;http://xamarin.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Mono&amp;nbsp;&lt;a href="http://www.mono-project.com/Main_Page"&gt;http://www.mono-project.com/Main_Page&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Scott Hanselman&lt;/span&gt;&lt;br /&gt;One of the most productive developers I've seen, he's a .Net evangelist with years of expertise. His projects and blog are just amazing. Besides that he's a podcaster with various memorable recordings.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Blog&amp;nbsp;&lt;a href="http://www.hanselman.com/blog/"&gt;http://www.hanselman.com/blog/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Hanselminutes&amp;nbsp;&lt;a href="http://www.thisdeveloperslife.com/"&gt;http://www.thisdeveloperslife.com/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;This developer's life&amp;nbsp;&lt;a href="http://hanselminutes.com/"&gt;http://hanselminutes.com/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7037794989196125795?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7037794989196125795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7037794989196125795&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7037794989196125795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7037794989196125795'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/12/people-it-is-worth-following.html' title='People it is worth following'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-52X92Rfk4F8/TvS8400U6hI/AAAAAAAAAPU/_hDkJFC0phs/s72-c/ducklings-following-mother-m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3144872963339937011</id><published>2011-11-26T17:54:00.001-08:00</published><updated>2011-11-26T17:54:59.887-08:00</updated><title type='text'>SE: The house</title><content type='html'>&lt;a href="http://goo.gl/photos/WtBZZcvoE8" imageanchor="1" style="clear:right;margin-bottom:1em;margin-left:1em"&gt;&lt;img src="https://lh6.googleusercontent.com/-_biIBq9KFQk/TqbdxiqddKI/AAAAAAAAAOo/GbksZxQbD-8/s512/SDC14509.JPG" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3144872963339937011?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3144872963339937011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3144872963339937011&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3144872963339937011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3144872963339937011'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/11/se-house.html' title='SE: The house'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh6.googleusercontent.com/-_biIBq9KFQk/TqbdxiqddKI/AAAAAAAAAOo/GbksZxQbD-8/s72-c/SDC14509.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1512896314577105148</id><published>2011-11-26T17:54:00.000-08:00</published><updated>2011-11-26T17:57:39.913-08:00</updated><title type='text'>Burndown to hell</title><content type='html'>Some basic but very useful burndown chart we used for building a house model.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-s8NUwsygrLo/TqbdsQqNFrI/AAAAAAAAAN0/cHpdAjgrB3o/s1600/SDC14466.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-s8NUwsygrLo/TqbdsQqNFrI/AAAAAAAAAN0/cHpdAjgrB3o/s320/SDC14466.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1512896314577105148?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1512896314577105148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1512896314577105148&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1512896314577105148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1512896314577105148'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/11/burndown-to-hell.html' title='Burndown to hell'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-s8NUwsygrLo/TqbdsQqNFrI/AAAAAAAAAN0/cHpdAjgrB3o/s72-c/SDC14466.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1280248144141930449</id><published>2011-11-13T19:43:00.001-08:00</published><updated>2011-11-13T19:52:42.304-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rules'/><category scheme='http://www.blogger.com/atom/ns#' term='object'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Object Calisthenics</title><content type='html'>Yet again I come here to share something learned from very smart people. Initially when I saw these rules my head exploded. Even though they are reasonable rules, they break the traditional non-object-oriented I've been doing for a while.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-i-wmg2Abs4Q/TsCQcNDwvyI/AAAAAAAAAO8/9STrQj4gGws/s1600/fd2140ebc47fed75f7f18b8cd0566adb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-i-wmg2Abs4Q/TsCQcNDwvyI/AAAAAAAAAO8/9STrQj4gGws/s320/fd2140ebc47fed75f7f18b8cd0566adb.jpg" width="244" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;One level of indentation per method&lt;/li&gt;&lt;li&gt;No else keyword&lt;/li&gt;&lt;li&gt;Wrap all primitives and strings&lt;/li&gt;&lt;li&gt;Use only one dot per line&lt;/li&gt;&lt;li&gt;Don’t abbreviate names but keep them short&lt;/li&gt;&lt;li&gt;Keep all entities small&lt;/li&gt;&lt;li&gt;No more than two instance variables per class&lt;/li&gt;&lt;li&gt;Use first-class collections&lt;/li&gt;&lt;li&gt;Don’t use any getters/setters or properties&lt;/li&gt;&lt;/ol&gt;I'm still trying to wrap a prototype project around them, and the partial results are astonishing.&lt;br /&gt; &lt;br /&gt;Sources&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://bo.linkedin.com/in/pabloazero"&gt;Pablo Azero&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://schneide.wordpress.com/tag/object-oriented/"&gt;http://schneide.wordpress.com/tag/object-oriented/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1280248144141930449?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1280248144141930449/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1280248144141930449&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1280248144141930449'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1280248144141930449'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/11/object-calisthenics.html' title='Object Calisthenics'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-i-wmg2Abs4Q/TsCQcNDwvyI/AAAAAAAAAO8/9STrQj4gGws/s72-c/fd2140ebc47fed75f7f18b8cd0566adb.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8415713467283942431</id><published>2011-11-04T20:28:00.000-07:00</published><updated>2011-11-16T06:13:29.634-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><category scheme='http://www.blogger.com/atom/ns#' term='design'/><title type='text'>Software Architecture, lessons learned</title><content type='html'>There are very good developers, that can create great products out of nowhere without thinking too much. Well, I'm not one of those, it takes me a while to get the right idea, and several times I had to throw everything I've bee working on and start from scratch.&lt;br /&gt;&lt;br /&gt;But even in situations like these, there are some things you learn from time to time.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.nerdbeach.com/image.axd?picture=nulla-bike-concept_080808.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="243" src="http://www.nerdbeach.com/image.axd?picture=nulla-bike-concept_080808.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3&gt;Minimalism &lt;/h3&gt;This is something I learned from Robert Martin's Clean Code (but I think it just takes common sense). When your components are not meaningful and don't relate to each other in an almost 'natural' way, you need to refactor it. Your system might work beautifully, but your internal structure is a mess and it will create problems to future maintainers.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Keep it simple &lt;/h3&gt;Complex design leads to complex code, complex code leads to complex tests, and the mess has now started. The design has to be as simplest as possible, and your code has to be consequent to this. And by code I mean production code and the test units related, because that it's maintainable code too!.Check &lt;a href="http://en.wikipedia.org/wiki/KISS_principle"&gt;KISS Principle on Wikipedia.&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;h3&gt;Life time&lt;/h3&gt;System components and inner objects must follow the natural law, die. While shorter your objects live the better, are easier to handle, to test, and to refactor. Including memory usage improvements, as your objects are created and dropped as soon as they are used.This is something I find very useful, and I discovered by playing around with &lt;a href="http://code.google.com/p/google-guice/"&gt;Google's Guice project&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Patterns&lt;/h3&gt;Check the patterns once a while, review your architecture, don't reinvent the wheel. There are several good references for it, but I tend to enjoy &lt;a href="http://www.martinfowler.com/"&gt;Martin Fowler's&lt;/a&gt; patterns (and the articles describing them). Have a look at the &lt;a href="http://martinfowler.com/articles/lmax.html"&gt;LMAX architecture&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8415713467283942431?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8415713467283942431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8415713467283942431&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8415713467283942431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8415713467283942431'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/11/software-architecture-lessons-learned.html' title='Software Architecture, lessons learned'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3663735290965438014</id><published>2011-11-02T08:13:00.000-07:00</published><updated>2011-11-02T10:12:31.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><category scheme='http://www.blogger.com/atom/ns#' term='report'/><title type='text'>Ubuntu usage report: 2 months after</title><content type='html'>So far I've been using &lt;a href="http://www.ubuntu.com/"&gt;Ubuntu&lt;/a&gt; as my laptop's system for two months, did a lot of things with it, including serious applications development.&lt;br /&gt;&lt;br /&gt;For doing it so, I performed several package installations and system configurations, including very low-level scripting and server-oriented configurations.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-p6btMVKH_J0/TrFcYKr3a7I/AAAAAAAAAO0/BpoUBi77eSk/s1600/Screenshot-ubuntu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://1.bp.blogspot.com/-p6btMVKH_J0/TrFcYKr3a7I/AAAAAAAAAO0/BpoUBi77eSk/s400/Screenshot-ubuntu.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Considering everything I did, this are some things I find very useful in Ubuntu:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Package management system&lt;/b&gt;, this is perhaps its most obvious feature, it's really simple to install any package present in a repository.&lt;/li&gt;&lt;li&gt;&lt;b&gt;User experience&lt;/b&gt;, this is also something very well worked. The system is built to make user's life as simple as possible,&lt;/li&gt;&lt;li&gt;&lt;b&gt;Boot speed&lt;/b&gt;, it makes the difference.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Security updates&lt;/b&gt;, very robust updates that don't break anything.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Software center&lt;/b&gt;, a huge amount of software applications available for simple click-installations.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Huge community&lt;/b&gt;, it's perhaps the biggest Linux community I've ever seen.&lt;/li&gt;&lt;/ul&gt;But, it has some things that can get potential users away of it:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Dependency hell&lt;/b&gt;, do you mean I have to install the entire open-jdk stack if I want to install Maven? even if I already have sun-jdk installed?&lt;/li&gt;&lt;li&gt;&lt;b&gt;User constraints&lt;/b&gt;, if you touch some system configurations that Ubuntu is keeping track of, you are going to have problems.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Configuration complexity&lt;/b&gt;, &lt;a href="http://www.slackware.com/"&gt;Slackware&lt;/a&gt; is a heaven compared to this.&lt;/li&gt;&lt;li&gt;Imposition, once you update the distribution, you will get your beloved desktop replaced by an &lt;a href="http://www.zdnet.com/blog/perlow/why-ubuntu-1110-fills-me-with-rage/19103"&gt;awful Unity&lt;/a&gt; desktop.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Unofficial packages&lt;/b&gt;, I had very rough moments try to install something Ubuntu doesn't support, I ended up compiling all the custom software I required.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3663735290965438014?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3663735290965438014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3663735290965438014&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3663735290965438014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3663735290965438014'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/11/ubuntu-usage-report-2-months-after.html' title='Ubuntu usage report: 2 months after'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-p6btMVKH_J0/TrFcYKr3a7I/AAAAAAAAAO0/BpoUBi77eSk/s72-c/Screenshot-ubuntu.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-690486749675703851</id><published>2011-10-19T05:37:00.001-07:00</published><updated>2011-10-19T05:37:45.420-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tdd'/><category scheme='http://www.blogger.com/atom/ns#' term='software engineering'/><title type='text'>Test Driven Development: Small tutorial</title><content type='html'>Some weeks ago I did a &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development"&gt;TDD&lt;/a&gt; presentation and for that matter I prepared a small tutorial of how to do it.&lt;br /&gt;&lt;span style="font-size: large;"&gt;Details&lt;/span&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I used &lt;a href="http://butunclebob.com/ArticleS.UncleBob.TheThreeRulesOfTdd"&gt;Robert Martin's approach to TDD&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;The example idea was taken from &lt;a href="http://www.amazon.com/Art-Agile-Development-James-Shore/dp/0596527675"&gt;James Shore&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;The QueryString(built in the tutorial) component is a simple HTTP parameters parser.&lt;/li&gt;&lt;/ol&gt;&lt;i&gt;Http Parameters format: http://myhos.org/test?param1=value1&amp;amp;param2=value2&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/n8Lsrxbc34M/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/n8Lsrxbc34M?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/n8Lsrxbc34M?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://github.com/timoteoponce/TDD-example--HttpParser"&gt;HttpParser on github &lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/timoteoponce/TDD-example--HttpParser/blob/master/test/org/timo/QueryStringTest.java"&gt;QueryStringTest.java&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-690486749675703851?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/690486749675703851/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=690486749675703851&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/690486749675703851'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/690486749675703851'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/10/test-driven-development-small-tutorial.html' title='Test Driven Development: Small tutorial'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-700988446891569295</id><published>2011-10-19T05:37:00.000-07:00</published><updated>2011-10-19T05:37:18.499-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>SE books you must read: Effective Java</title><content type='html'>Although this book is kind of old, is still valid. All its concepts and best practices are still being used and its author is an authority in the development world &amp;gt; &lt;a href="http://en.wikipedia.org/wiki/Joshua_Bloch"&gt;Joshua Bloch&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;This was the first book I read when I got into professional development, and believe when I say that is one of the mandatory books to read if you want to write something functional in Java.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://demod.org/_media/blog/effectivejava.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://demod.org/_media/blog/effectivejava.jpg" width="254" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Effective-Java-2nd-Joshua-Bloch/dp/0321356683"&gt;Effective Java at Amazon&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;PS: I would like to share the ebook version of it, but I'm not sure about the licensing/copying policies.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-700988446891569295?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/700988446891569295/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=700988446891569295&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/700988446891569295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/700988446891569295'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/10/se-books-you-must-read-effective-java.html' title='SE books you must read: Effective Java'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5140208930116806268</id><published>2011-10-10T23:22:00.000-07:00</published><updated>2011-10-10T23:22:27.034-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>Why reading is important</title><content type='html'>I had a long conversation today with a very close uncle, he's one of the most knowledgeable persons I've ever met. He learned to read and write on his own, while working and raising a family.&lt;br /&gt;&lt;br /&gt;Right now he's in his 70s but the topics he shares are amazingly interesting, starting from Greek mythology, wars, and ending up with urban legends.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.book-addicts.com/wp-content/uploads/2010/10/4ptyrno.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.book-addicts.com/wp-content/uploads/2010/10/4ptyrno.jpg" width="247" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt; &lt;br /&gt;Perhaps his wisdom is the result of many years of experience and living, but I couldn't say. So tonight I asked him about his stories, where they come from? how did you get so good at telling them? how can you remember so many things?&lt;br /&gt;&lt;br /&gt;His answers were short and concise, most of the stories were taken from other people, some others are life stories where he was involved, and some others are taken from books. But at the end he told me something that I can't leave aside:&lt;br /&gt;&lt;br /&gt;"No matter how long you live, the world is big enough to leave you abandoned if you don't cope with it, read as many books as you can. Because there's something&amp;nbsp; you can always rely when all your senses start failing, your memory. Sometimes it can trick you, but with a little of practice you can train that little bastard...".&lt;br /&gt;&lt;br /&gt;That's something that always has intrigued me, I know a lot of people who reads because they have to, or because they don't know what else to do. Books are the best source of information in world (and digital books count as books), I can't understand how so many people can avoid history, stories, articles and tales just because they prefer to watch it on TV or when a movie is released. It's a waste of potential, human beings should know they environment and what's happened in the world before us, we have to learn history, science, literature, etc.&lt;br /&gt;&lt;br /&gt;As the great Steve Jobs said once "Stay foolish, stay hungry".&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5140208930116806268?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5140208930116806268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5140208930116806268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5140208930116806268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5140208930116806268'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/10/why-reading-is-important.html' title='Why reading is important'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-731117404409833161</id><published>2011-10-02T20:09:00.000-07:00</published><updated>2011-10-02T20:09:53.829-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dependency'/><category scheme='http://www.blogger.com/atom/ns#' term='configuration'/><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><title type='text'>Library management with Ivy</title><content type='html'>Back in the day, when I was a child, I used to manage all my project's libraries by hand, copying and moving everything I needed for a project into its respective folder.&lt;br /&gt;&lt;br /&gt;I was happy with this for some time, but then I had to scale, handle several projects with a mixed set of dependencies. My original idea was to use a grown up tool like Maven, but its XML-hell led me out of it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.aisee.com/gallery/g2.gif" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://www.aisee.com/gallery/g2.gif" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The alternative I chose is &lt;a href="http://ant.apache.org/ivy/"&gt;Apache Ivy&lt;/a&gt;, a dependency management tool that only does dependency management, and it's highly configurable (if you do it right).&lt;br /&gt;&lt;br /&gt;In this way you can keep several projects linking a common libraries repository that is entirely handled by &lt;a href="http://ant.apache.org/ivy/"&gt;Ivy&lt;/a&gt;, you just configure it.&lt;br /&gt;&lt;br /&gt;I recently updated some of my projects to this, the configuration files are quite simple and do all the work, including the Ivy-ant task installation if not available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Ivy configurations for my Paginator-project&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;a href="https://github.com/timoteoponce/paginator/blob/master/build-ivy.xml"&gt;build-ivy.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/timoteoponce/paginator/blob/master/ivy.xml"&gt;ivy.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/timoteoponce/paginator/blob/master/ivysettings.xml"&gt;ivysettings.xml&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="https://github.com/timoteoponce/paginator/blob/master/metrics.xml"&gt;metrics.xml&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;References&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.beilers.com/2010/06/ivy-dependency-management-lessons-learned-and-ant-1-8-mapped-resources/"&gt;http://www.beilers.com/2010/06/ivy-dependency-management-lessons-learned-and-ant-1-8-mapped-resources/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://blogs.steeplesoft.com/2008/01/dependency-management-with-ant-and-ivy/"&gt;http://blogs.steeplesoft.com/2008/01/dependency-management-with-ant-and-ivy/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-731117404409833161?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/731117404409833161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=731117404409833161&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/731117404409833161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/731117404409833161'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/10/library-management-with-ivy.html' title='Library management with Ivy'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1346709877333909852</id><published>2011-09-28T13:38:00.001-07:00</published><updated>2011-09-28T13:38:36.940-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Migrate Oracle backup script to H2 (mode=ORACLE)</title><content type='html'>Some work I've been doing today.&lt;br /&gt;&lt;script src="https://gist.github.com/1249184.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1346709877333909852?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1346709877333909852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1346709877333909852&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1346709877333909852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1346709877333909852'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/migrate-oracle-backup-script-to-h2.html' title='Migrate Oracle backup script to H2 (mode=ORACLE)'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6887448445269259618</id><published>2011-09-27T21:12:00.000-07:00</published><updated>2011-09-27T21:14:09.848-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='code freze'/><category scheme='http://www.blogger.com/atom/ns#' term='best practices'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Code freeze</title><content type='html'>When you are developing something in a constant pace and everything is moving smoothly, how do you test?&lt;br /&gt;&lt;br /&gt;Do you stop coding and then test what you've done? and then go back to code?&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.pickthebrain.com/blog/wp-content/uploads/2008/03/stop.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.pickthebrain.com/blog/wp-content/uploads/2008/03/stop.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This may work for some people, but I struggle when I have to multi-task (this does not apply for TDD) and some of the people I know have the same feeling.&lt;br /&gt;&lt;br /&gt;A while ago I worked in a project where there was a 'code freeze' day, in this day nobody could commit anything to the repository and everything you had to do was to test and register the bugs you've found.&lt;br /&gt;&lt;br /&gt;This was something conflictive for us, our how development model was to produce something and to deliver as soon as possible, trying to fix the bugs as soon as they were registered.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Advantages &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;One of the advantages we found using this practice was that the bugs were found faster.&lt;/li&gt;&lt;li&gt;We could plan and estimate all our bugfixes.&lt;/li&gt;&lt;li&gt;All bugs were easily reproducible.&lt;/li&gt;&lt;li&gt;All bugs were registered and assigned properly.&amp;nbsp;&lt;/li&gt;&lt;li&gt;We switched roles, for one weekday we turned into testers (and loved the idea of relaxing while working).&lt;/li&gt;&lt;/ul&gt;Interesting links&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span id="goog_736869081"&gt;&lt;/span&gt;&lt;a href="http://discuss.fogcreek.com/joelonsoftware/default.asp?cmd=show&amp;amp;ixPost=96096"&gt;Feature "Feature/Code Freeze" &lt;/a&gt;&lt;span id="goog_736869082"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6887448445269259618?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6887448445269259618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6887448445269259618&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6887448445269259618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6887448445269259618'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/code-freeze.html' title='Code freeze'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-456767447572880217</id><published>2011-09-26T08:52:00.000-07:00</published><updated>2011-09-26T08:52:48.541-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech-talk'/><category scheme='http://www.blogger.com/atom/ns#' term='uncle bob'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><title type='text'>Robert C. Martin: Programming Languages</title><content type='html'>Robert C. Martin has been an authority in computer science for many years, most of his work and publications are taken as must-do in Software Engineering.&lt;br /&gt;&lt;br /&gt;Here we have it at RailsConf giving us an history lesson about Programming Languages and the evolution of computing science.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object width="320" height="266" class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://1.gvt0.com/vi/mslMLp5bQD0/0.jpg"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mslMLp5bQD0&amp;fs=1&amp;source=uds" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/mslMLp5bQD0&amp;fs=1&amp;source=uds" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-456767447572880217?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/456767447572880217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=456767447572880217&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/456767447572880217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/456767447572880217'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/robert-c-martin-programming-languages.html' title='Robert C. Martin: Programming Languages'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4119679844726708065</id><published>2011-09-21T08:23:00.000-07:00</published><updated>2011-09-21T08:23:40.384-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='book'/><title type='text'>SE books you must read: The Pragmatic Programmer</title><content type='html'>Once I started working of professional software development, I was eager to learn what the world was doing at the time. I had left university and working for a considerable payment was new for me, I wanted to deserve it.&lt;br /&gt;&lt;br /&gt;Then I started reading a lot, several books about programming an engineering, some of them were obsolete and a complete waste of time. But every once I found a jewel, and this is a very good one:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://petdance.com/perl/great-non-oreilly-books/pragmatic-programmer.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://petdance.com/perl/great-non-oreilly-books/pragmatic-programmer.jpg" width="253" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;Every person getting into software development should take a look at this book, I'm not saying that everything it's written in it has to be followed religiously, but it has very good advices and practices. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4119679844726708065?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4119679844726708065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4119679844726708065&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4119679844726708065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4119679844726708065'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/se-books-you-must-read-pragmatic.html' title='SE books you must read: The Pragmatic Programmer'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7107225685758055459</id><published>2011-09-18T20:37:00.000-07:00</published><updated>2011-09-21T08:24:19.224-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><title type='text'>Podcasts I enjoy listening</title><content type='html'>&lt;span style="font-size: large;"&gt;Precedents &lt;/span&gt;&lt;br /&gt;While going to work or when I'm walking from work to the university, I tend to get bored. A year ago I got an &lt;a href="http://www.apple.com/ipod/"&gt;iPod&lt;/a&gt; due to some obscure business, but that's not the point of this story, and I got reallz interested in its &lt;a href="http://en.wikipedia.org/wiki/Podcast"&gt;Podcast&lt;/a&gt; feature.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://fuzionpodcastnetwork.com/wordpress/wp-content/uploads/2010/08/podcast-logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://fuzionpodcastnetwork.com/wordpress/wp-content/uploads/2010/08/podcast-logo.jpg" width="291" /&gt;&lt;/a&gt;&lt;/div&gt;Although it's just a radio program meant to be played in a mobile device, it is an amazing source of entertainment and information. I started listening podcasts about technology and engineering because of my English-level. But after some weeks of practice I started listening to some programs that I considered "advanced".&lt;br /&gt;&lt;br /&gt;In summary, here they are:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/FLOSS_Weekly"&gt;FLOSS weekly&lt;/a&gt;, an amazing show about open source projects. Randal Schwartz and his friends fill my Wednesdays with lots of information (you can check an outdated list of my favorites episodes in &lt;a href="http://timoponce.blogspot.com/2010/09/floss-weekly-favourite-episodes.html"&gt;Floss weekly favourite episodes&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.se-radio.net/"&gt;Software engineering radio&lt;/a&gt;, great program about software engineering and technology.&lt;/li&gt;&lt;li&gt;&lt;a href="http://thisdeveloperslife.com/"&gt;This Developer's Life&lt;/a&gt;, a very well produced show with very interesting topics, although in the last months there haven't been so many episodes, the existing ones are great. &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.thisamericanlife.org/"&gt;This American Life&lt;/a&gt;, who is not listening to this show around the world right now?.&lt;/li&gt;&lt;li&gt;&lt;a href="http://smodcast.com/"&gt;SModcast network&lt;/a&gt;, I'm a huge fan of Kevin Smith's work and his network of podcasts is just astonishing.&lt;/li&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://smodcast.com/channels/smodcast/"&gt;Smodcast&lt;/a&gt;, Kevin and Scott Mosier.&lt;/li&gt;&lt;li&gt;&lt;a href="http://smodcast.com/channels/hollywood-babble-on/"&gt;Hollywood Babble-on&lt;/a&gt;, Kevin and Ralph Garman.&lt;/li&gt;&lt;li&gt;&lt;a href="http://smodcast.com/channels/jay-silent-bob-get-old/"&gt;Jay and Silent Bob get old&lt;/a&gt;, Kevin and Jason Mewes.&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7107225685758055459?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7107225685758055459/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7107225685758055459&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7107225685758055459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7107225685758055459'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/podcasts-i-enjoy-listening.html' title='Podcasts I enjoy listening'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5822021734501495429</id><published>2011-09-17T22:04:00.000-07:00</published><updated>2011-09-17T22:06:28.207-07:00</updated><title type='text'>Mi forma de aprender</title><content type='html'>Recuerdan cuando estaban en primaria y no podían multiplicar, sin importar cuanto lo intentaban?. Yo tuve ese tipo de problemas durante toda mi vida, el estudio en su estado puro nunca me llamó la atención, tal vez por una falta de atención patológica o simplemente por pereza. Incluso no llegué a leer un libro completo hasta los 15 años, realmente los odiaba.&lt;br /&gt;&lt;br /&gt;Ahora soy un ávido lector y me emociona el hecho de afrentar algo nuevo, de aprender y de hacer que las cosas sean posibles. Qué cambió desde esos años de sufrimiento?&lt;br /&gt;&lt;br /&gt;Sencillamente, solamente cambié la forma de ver las cosas, si no podía aprender como multiplicar, trataba de hacerlo divertido o al menos interesante, durante esa época solía trabajar con mi padrelavando autos, y eventualmente recibía una paga por ello. Me interesó el hecho de pensar en cuanto me tardaría juntar dinero suficiente para comprarme lo que yo quisiera. Y ahí está!!, empecé a tomar las operaciones matemáticas como algo necesario y que me llevaba hacia algún lado.&lt;br /&gt;&lt;br /&gt;Empecé a leer libros que tenían historias increíbles y hacía, todavía hacen, volar mi imaginación más alla de los límites físicos.El hecho de ver el aprendizaje como algo mas allá de lo rutinario cambia la forma de visualizar el conocimiento, durante los años iniciales de trabajo, tuve serios problemas al ser un hispano hablante de segunda, trabajando en una empresa con un entorno de inglés puro, una pesadilla!.&lt;br /&gt;&lt;br /&gt;De nuevo, el reto, la forma de atacarlo?, durante ese tiempo me interesé bastante por los mangas, léase comics,japoneses, eran la nueva barrera de la imagicación. Entonces por qué no intentar leerlos en inglés y ver como va la cosa. El inicio fué duro, el inglés no-técnico es todavía un reto para mí, pero el entorno de aprendizaje no puede ser mejor, tienes imágenes que relatan la historia!!.&lt;br /&gt;&lt;br /&gt;Sin atajos en eso, fuí capaz de aprender un inglés rudimentario pero comprensible en unos cuantos meses. Elresultado del aprendizaje no debe ser el premio al final de un camino duro, el aprendizaje no tiene por qué ser difícil, yo critico mucho a los docentes empaquetados que dictan sus materias como si fuese una lectura de grupo, eso no es enseñar. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5822021734501495429?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5822021734501495429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5822021734501495429&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5822021734501495429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5822021734501495429'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/mi-forma-de-aprender.html' title='Mi forma de aprender'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-9022592654692279976</id><published>2011-09-14T06:03:00.000-07:00</published><updated>2011-09-21T08:24:43.606-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='code'/><title type='text'>Quick and dirty LOC counter written in Ruby</title><content type='html'>A few weeks ago I needed urgently to measure some projects I'm interested in, but I didn't have an internet connection to download the latest application that would do the work for me. So, I decided to write my own LOC counter.&lt;br /&gt;&lt;br /&gt;I didn't want to write it in Java because of the time consuming for it, and as I am learning Ruby, I just gave it a try.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size: large;"&gt;Result&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;A very short and dummy implementation that took me nearly 15 minutes, reading some API docs and testing, I don't know how to express it, but it feels right. If I would have done it in Java would work even better, but I like this approach, clean and short.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/1216487.js?file=loc_counter.rb"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-9022592654692279976?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/9022592654692279976/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=9022592654692279976&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/9022592654692279976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/9022592654692279976'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/quick-and-dirty-loc-counter-written-in.html' title='Quick and dirty LOC counter written in Ruby'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5576020857987481358</id><published>2011-09-05T20:48:00.001-07:00</published><updated>2011-09-05T20:51:49.862-07:00</updated><title type='text'>El saber de lo desconocido</title><content type='html'>A pesar de que el ser humano intente controlar todos los aspectos de su existencia, es inevitable prevenir lo que dicta el transcurso del tiempo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-VWL8LWx1qnc/TgBdvs4SJKI/AAAAAAAAAdU/LfpI301-Ihk/s320/evolution_1505831c.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://1.bp.blogspot.com/-VWL8LWx1qnc/TgBdvs4SJKI/AAAAAAAAAdU/LfpI301-Ihk/s320/evolution_1505831c.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Cuántas veces me he dicho a mi mismo que el destino es sencillamente una secuencia de eventos que consecuentemente conllevan a un resultado inverosímil. Cientos de veces la lógica intenta calar todo lo que hago, pero algunas veces el pensamiento se rinde al instinto y al condicionamiento.&lt;br /&gt;&lt;br /&gt;Quien declame que no somos animales es un ciego al mundo, así como aquel que niega lo desconocido y lo que no puede explicar. El ser humano nunca ha buscado controlar su propio destino (interesante palabra relacionada paradójicamente a la cultura sectaria), sino el porqué de las cosas.&lt;br /&gt;&lt;br /&gt;Basta pasar un día con un niño de 3 años para entender todo lo que hemos perdido durante el transcurso de nuestra vida. La sociedad nos organiza en una entidad coherente con un objetivo común, utopía de sociedad, pero no inesperado del instinto humano desvía esta sociedad fuera de los límites. El ser humano, así como los animales, somos difíciles de dominar, y el colectivo respalda al caudillo cuando este alza su voz.&lt;br /&gt;&lt;br /&gt;El condicionamiento de la mente es saludable en una sociedad, pero aniquila el intelecto humano y la capacidad de auto-superación, desgranándola a niveles tales que ya nadie recuerda cual es el sentido de la existencia. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5576020857987481358?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5576020857987481358/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5576020857987481358&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5576020857987481358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5576020857987481358'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/el-saber-de-lo-desconocido.html' title='El saber de lo desconocido'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-VWL8LWx1qnc/TgBdvs4SJKI/AAAAAAAAAdU/LfpI301-Ihk/s72-c/evolution_1505831c.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7172403936442911671</id><published>2011-09-05T20:32:00.000-07:00</published><updated>2011-09-05T20:50:59.524-07:00</updated><title type='text'>Recuerdo Fuera de Tiempo</title><content type='html'>Tal vez un poco tarde, pero no quería dejar esto e lado.&lt;br /&gt;&lt;br /&gt;Hace ya 5 años perdí a una de las personas mas honestas que haya tenido el gusto de conocer, estoy seguro que mi impresión de esta persona se replica en la mente de todos los que lo conocieron y disfrutaron de su presencia en este mundo.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.pbleepd.com/wp-content/themes/thejournal/thumb.php?src=http://www.pbleepd.com/wp-content/woo_custom/255-Father.jpg&amp;amp;h=380&amp;amp;w=280&amp;amp;zc=1&amp;amp;q=90" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://www.pbleepd.com/wp-content/themes/thejournal/thumb.php?src=http://www.pbleepd.com/wp-content/woo_custom/255-Father.jpg&amp;amp;h=380&amp;amp;w=280&amp;amp;zc=1&amp;amp;q=90" width="235" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Yo era una persona desinteresada por completo de lo referente a la muerte y sus consecuencias, nada mal viene el dicho "nadie sabe lo que tiene hasta que lo pierde", no puedo explicar de forma tan sencilla todo la marea de sentimientos encontrados que sufrí(y todos sufrimos) al enterarnos de la noticia.&lt;br /&gt;&lt;br /&gt;No es el asunto inicial el por que, o el como, sino una tremenda sorpresa que ataca en lo mas profundo del "alma", o como quiera decirse. Es el sentimiento repentino de que has perdido algo tan preciado y tan poco considerado, la inmediata ayuda y apoyo familiar por supuesto que son un alivio. Pero jamás es suficiente; el sentido de la vida se pierde aunque sea por un instante, pero así es.&lt;br /&gt;&lt;br /&gt;Nada puede reparar el dolor de una partida, no importa lo que digan, lo único que opta por hacer es seguir, no existe otro camino.&lt;br /&gt;&lt;br /&gt;El dolor nunca se va, todos los días el recuerdo regresa, y tal vez, me da alguna fortaleza. No digo que no deban olvidar(aunque en ocasiones es deseable), pero no esta de mas recordar.&lt;br /&gt;&lt;br /&gt;Prepárense para con sus allegados, nunca se sabe que frágil puede ser una vida hasta que se te escapa de las manos. Dense cuenta de lo que valen para su entorno, aunque no lo demuestren, el odio o peleas son algo, incluso una razón para mantener una relación.&lt;br /&gt;&lt;br /&gt;Lo peor transcurre en la mente, el conflicto interno no es algo que se deba tomar a la ligera, mucho menos con personas de baja autoestima, es necesario ser fuerte. Nada prepara para estos momentos, y nada mas que el momento en si debería hacerlo.&lt;br /&gt;No crean que nunca les va a pasar a ustedes, por que la vida es un momento, y así como llega pasa.&lt;br /&gt;&lt;br /&gt;Amen lo que hacen, con quienes están, con quienes estarán. Por que el final de una vida no anuncia su llegada y la vida nunca es justa, por mas que la gente tenga fe en ella.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7172403936442911671?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7172403936442911671/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7172403936442911671&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7172403936442911671'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7172403936442911671'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/recuerdo-fuera-de-tiempo.html' title='Recuerdo Fuera de Tiempo'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2477032007959558139</id><published>2011-09-05T20:17:00.000-07:00</published><updated>2011-09-05T20:33:22.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Migration</title><content type='html'>Sadly after several years of using Slackware as my main operating system, I have to leave it aside. The decision was taken after several attempts of installing networking tools and Perl patches, somehow I broke several libraries and my system was a complete mess.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://fc05.deviantart.net/fs22/f/2008/015/f/e/Waiting_for_the_Wind_of_Change_by_gilad.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="219" src="http://fc05.deviantart.net/fs22/f/2008/015/f/e/Waiting_for_the_Wind_of_Change_by_gilad.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Slackware taught me everything about Linux and software development, but the tinkering time for &lt;br /&gt;me it-s over. I can no longer spend hours having fun compiling sources or testing different configurations. My system has to work with the most recent hardware and it requires some sort of support. The distribution I chose for this is Ubuntu, not because is the best one out there, just because its community. It's a huge system with lots of groups around the world following (in their own way) the Open Source initiative.&lt;br /&gt;&lt;br /&gt;I still have Slackware running as a server, because it's without any doubt the *stablest* of all systems I ever used, that's a fact. But for my personal computer requires compatibility with many devices that are not open source and work fine with Ubuntu.&lt;br /&gt;&lt;br /&gt;PS: This does not mean that I'm leaving Slackware at all, but for my personal computer. All my other machines are still using Slackware as the master system, and they'll keep in that as long as Slackware lives.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2477032007959558139?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2477032007959558139/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2477032007959558139&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2477032007959558139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2477032007959558139'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/09/migration.html' title='Migration'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8139582271309527090</id><published>2011-08-12T04:43:00.000-07:00</published><updated>2011-08-12T04:43:51.167-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='modem'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='usb'/><title type='text'>Huawei modem in Slackware Linux</title><content type='html'>Finally, after several minutes (Linux software is getting better) I made it work. I bought a Huawei modem USB a few days ago, and the phone company who sold it to me only supports Windows and Mac systems.&lt;br /&gt;&lt;br /&gt;After a while and thanks to a great tutorial, the connection was performed; this is the article I used: &lt;a href="http://www.techonia.com/install-huawei-usb-modem-slackware"&gt;http://www.techonia.com/install-huawei-usb-modem-slackware&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Note: You have to set manually your DNS nameservers and the default gateway route, that's it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8139582271309527090?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8139582271309527090/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8139582271309527090&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8139582271309527090'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8139582271309527090'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/08/huawei-modem-in-slackware-linux.html' title='Huawei modem in Slackware Linux'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3598654910810583510</id><published>2011-07-15T11:37:00.001-07:00</published><updated>2011-07-15T11:37:29.001-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='pagination'/><title type='text'>Paginator (Java) component release 0.0.2</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3598654910810583510?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://timoponce.blogspot.com/p/paginator.html' title='Paginator (Java) component release 0.0.2'/><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3598654910810583510/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3598654910810583510&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3598654910810583510'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3598654910810583510'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/07/paginator-java-component-release-002.html' title='Paginator (Java) component release 0.0.2'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3820515119444558925</id><published>2011-03-23T07:13:00.000-07:00</published><updated>2011-07-15T11:17:38.669-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='mac'/><category scheme='http://www.blogger.com/atom/ns#' term='diff'/><title type='text'>Configure DiffMerge on MacOSX</title><content type='html'>Based on &lt;a href="http://www.andrejkoelewijn.com/wp/2010/01/08/configure-diffmerge-with-git/"&gt;this article&lt;/a&gt;, I modified it a little bit in order to make it work on Mac:&lt;br /&gt;&lt;br /&gt;&lt;pre class="py" name="code" cols="150"&gt;[diff]   tool=diffmerge                                                                                                                   &lt;br /&gt;[difftool "diffmerge"]                                                                                                                      &lt;br /&gt;  cmd = exec /Applications/DiffMerge.app/Contents/MacOS/DiffMerge \"$LOCAL\" \"$REMOTE\"                                                                                                                                   &lt;br /&gt;[merge]                                                                                                                                     &lt;br /&gt;  tool = diffmerge                                                                                                                    &lt;br /&gt;[mergetool "diffmerge"]                                                                                                                            &lt;br /&gt;  cmd = exec /Applications/DiffMerge.app/Contents/MacOS/DiffMerge --merge --result=\"$MERGED\"\n\"$LOCAL\" \"$BASE\" \"$REMOTE\"                                                                                           &lt;br /&gt;  trustexitcode = false     &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/5502681789285906166-3820515119444558925?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3820515119444558925/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3820515119444558925&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3820515119444558925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3820515119444558925'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/03/configure-diffmerge-on-macosx.html' title='Configure DiffMerge on MacOSX'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8569211074292836301</id><published>2011-02-19T12:12:00.000-08:00</published><updated>2011-02-19T12:12:13.325-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='databases'/><category scheme='http://www.blogger.com/atom/ns#' term='development'/><title type='text'>Distributed software development</title><content type='html'>As you have seen through the entries of this blog, I'm a distributed-stuff fanatic. I really think that the future of software development is closely related with this concept.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.procto.biz/wp-content/uploads/2009/05/distributed_software_development-300x235.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" src="http://www.procto.biz/wp-content/uploads/2009/05/distributed_software_development-300x235.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Many problems arise when you are working in a project that involves more than 2 developers, and the problems are even worst if new developers are included into the development process. It's a mess.&lt;br /&gt;&lt;br /&gt;But you can make it work if you follow a simple goal: Every developer should be able to do whatever he wants without bothering anybody else.&lt;br /&gt;&lt;br /&gt;This is very important when you are working in a database-based application, if several developers test their applications against a central database, you will have inconsistency problems in a matter of minutes.&lt;br /&gt;&lt;br /&gt;I have worked in projects where this kind of problems arose more than once every day, it's a complete mess when testing and even worst when you are trying to integrate the work.&lt;br /&gt;&lt;br /&gt;But not everything is bad here, I have also worked in projects where everything was meant to be distributed. Working with local databases such as &lt;a href="http://www.h2database.com/"&gt;H2 &lt;/a&gt;and versioning tool like &lt;a href="http://mercurial.selenic.com/"&gt;HG&lt;/a&gt; or &lt;a href="http://www.git-scm.com/"&gt;GIT&lt;/a&gt;. It's a big difference to be able to test all your changes without messing with other people data.&lt;br /&gt;&lt;br /&gt;If you are working in a project with 2 or more developers, configure the project to be self-sufficient in all senses: Database, compilation, deployment, execution, tests.&lt;br /&gt;&lt;br /&gt;Your development process will be shorter and the integration problems will be reduced, I can assure you that.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8569211074292836301?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8569211074292836301/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8569211074292836301&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8569211074292836301'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8569211074292836301'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2011/02/distributed-software-development.html' title='Distributed software development'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3224667527542616277</id><published>2010-12-12T18:14:00.000-08:00</published><updated>2010-12-12T18:22:02.250-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='development'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Things I have learned from work... so far</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://blog.photos2view.com/files/programmer.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="304" src="http://blog.photos2view.com/files/programmer.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;Back in 2009 I started working on a Swiss software development company called &lt;a href="http://www.swissbytes.ch/"&gt;Swissbytes&lt;/a&gt;, since then I have learned a &lt;b&gt;lot&lt;/b&gt; of things. This is a very short list of the most important ones:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You are not the best programmer in the world, deal with it.&lt;/li&gt;&lt;li&gt;Always put your name in your source code.&lt;/li&gt;&lt;li&gt;Keep track of your work, as well of your source code.&lt;/li&gt;&lt;li&gt;Think a little bit before jumping into programming, but do not exagerate.&lt;/li&gt;&lt;li&gt;Keep yourself updated, no one likes conformists.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Learn English, that's a &lt;b&gt;must do&lt;/b&gt;.&lt;/li&gt;&lt;li&gt;A good specification is short and to the point.&lt;/li&gt;&lt;li&gt;A software product is never finished, never.&lt;/li&gt;&lt;li&gt;Work with standards, that's required if you are working in teams.&lt;/li&gt;&lt;li&gt;Write tests for your code (this is something I'm still learning).&lt;/li&gt;&lt;li&gt;Simplify your life, there are tools for that: revision control systems, automated build, template engines, static analysis tools.&lt;/li&gt;&lt;li&gt;&lt;b&gt;&lt;span style="color: #45818e;"&gt;And the most important of all: Enjoy what you are doing, if your work does not make you happy, there's something wrong. That's the best motivational advice I could give you, enjoy your work, enjoy working on group, enjoy working alone, enjoy challenges, be proud of yourself.&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;ul&gt;&lt;/ul&gt;I guess those are the most important for the moment, for sure I will be updating this list. Enjoy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3224667527542616277?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3224667527542616277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3224667527542616277&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3224667527542616277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3224667527542616277'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/12/things-i-have-learned-from-work-so-far.html' title='Things I have learned from work... so far'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-72332156379222598</id><published>2010-12-08T18:48:00.000-08:00</published><updated>2010-12-08T18:48:05.239-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cvs'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Revision control systems - Part 1</title><content type='html'>As a software engineering student, many of the subjects of the career includes software development projects. And as every kind of project, they normally have: documentation, source code, configuration files, templates, etc.&lt;br /&gt;&lt;br /&gt;At first being a newbie in software development practices I concluded after a while that I needed some sort of revision control for my projects, because all of them were presented to the teachers incrementally and progressively.&lt;br /&gt;&lt;br /&gt;My first approach was to 'clone' my project and name it with some I meaningful name, something like:&lt;br /&gt;&lt;ul style="color: #76a5af;"&gt;&lt;li&gt;bookstore_presentation_1&lt;/li&gt;&lt;/ul&gt;Was very common for me, if I read the name in the future is easy to deduce that this 'clone' is a snapshot of my project in the first presentation date.&lt;br /&gt;But after a while I required to recover a 'clone' of an specific date, the only way to find it was to manually check the modification date of the files... pretty dumb.&lt;br /&gt;&lt;br /&gt;Because of that I defined a naming convention for my snapshot copies, it was something like this:&lt;br /&gt;&lt;ul style="color: #e69138;"&gt;&lt;li&gt;project_presentationNumber_date(YY-MM-dd)_description&lt;/li&gt;&lt;/ul&gt;And I was kind of happy with this approach for some time, but after a a year my projects workspace got really nasty:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="color: #f6b26b;"&gt;bookstore_pres1_08-02-10_initial&lt;/span&gt; &lt;/li&gt;&lt;li style="color: #e69138;"&gt;bookstore_pres2_08-02-12_basic_func&lt;/li&gt;&lt;li style="color: #f1c232;"&gt;bookstore_pres3_08-03-01_simple_reports&lt;/li&gt;&lt;li style="color: #93c47d;"&gt; bookstore_presFinal_08-03-10_final&lt;/li&gt;&lt;li style="color: #6aa84f;"&gt;bookstore_presFinal_08-03-10_improved&lt;/li&gt;&lt;li&gt; &lt;span style="color: #38761d;"&gt;bookstore_presFinal_08-03-10_not_working&lt;/span&gt;&lt;/li&gt;&lt;li style="color: #6fa8dc;"&gt;bookstore_presFinal_08-03-10_1h_before_presentation&lt;/li&gt;&lt;/ul&gt;Nasty, right?&lt;br /&gt;&lt;br /&gt;But somehow I managed all my projects in this way for quite a while. Then I started working with teams; after a week of development it was pretty obvious that my naming convention was not working:&lt;br /&gt;&lt;ul&gt;&lt;li style="color: #9fc5e8;"&gt;bookstore_pres1mine_08-08-05&lt;/li&gt;&lt;li style="color: #93c47d;"&gt;bookstore_pres1jhonny_08-08-05&lt;/li&gt;&lt;li style="color: #f6b26b;"&gt;bookstore_pres1oscar_08-08-05&lt;/li&gt;&lt;/ul&gt;We had some torture hours trying to merge our project versions, but at the end we did it. To finish that project, we suffered as cargo horses for a complete semester, doing manual merges and dumb overrides.&lt;br /&gt;&lt;br /&gt;The next year I started my thesis work and I didn't want for any reason to be involved with the same problems again (I was working with a fellow developer) and I started searching for a software tool that could help me to keep track of a project. After some minutes I have found &lt;a href="http://www.cvs.com/"&gt;CVS&lt;/a&gt;, I read all I could find and I got involved in Revision Control theories.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.automaticable.com/wp-content/uploads/2008/06/subversion-logo-150x150.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://www.automaticable.com/wp-content/uploads/2008/06/subversion-logo-150x150.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Then a teacher suggested me &lt;a href="http://subversion.tigris.org/"&gt;Subversion&lt;/a&gt; (CVS done right, as he said). I downloaded a copy of SVN red book and learned the basics commands and theory of the system. It took a whole afternoon to setup a local Subversion server and create a proper repository for the project, but I did it. My partner and I started working with an initial project structure and we were progressing really fast, but at the moment of merging our work, we had LOTS of problems and ended up with the decision of setting up a central repository for both of us, as is recommended in SVN book.&lt;br /&gt;&lt;br /&gt;&lt;table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://hginit.com/i/00-svn.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"&gt;&lt;img border="0" src="http://hginit.com/i/00-svn.png" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;Image taken from spectacular hg-init tutorial http://hginit.com/&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;We created a project in &lt;a href="http://code.google.com/"&gt;Google Code&lt;/a&gt; with Subversion and we started working from zero again, and the result? It was a developer heaven, all our changes were being tracked and held in a reliable service. And yes we still had conflicts but Tortoise SVN did all the dirty work for us, we finished the project in 6 months with a dozen of releases (tags) and got our degree with a very good mark.&lt;br /&gt;&lt;br /&gt;SVN taught us how to handle our source code, our documentation files and some other important files (images, scripts). It taught us which files should be tracked and which ones should be omitted. It gave us a tracking discipline, we learned the meaning of keywords like commit, update, revert, log, resolve, etc.&amp;nbsp; &lt;br /&gt;&lt;br /&gt;Since then all our projects were under SVN and we were pretty happy. But then we started working with some fellows in other cities, 5 in total, and some of them didn't have an internet connection for more that an hour by day.&lt;br /&gt;&lt;br /&gt;We required another approach, SVN was not enough this time, that is why we started working with Distributed Revision Control Systems, which is described in &lt;a href="http://revision%20control%20systems%20-%20part%202/"&gt;Revision control systems - Part 2&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-72332156379222598?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/72332156379222598/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=72332156379222598&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/72332156379222598'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/72332156379222598'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/12/revision-control-systems-part-1.html' title='Revision control systems - Part 1'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7079010926151542240</id><published>2010-11-27T09:19:00.000-08:00</published><updated>2010-11-27T09:23:09.156-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='framework'/><title type='text'>Play web framework</title><content type='html'>For a long time I've been searching for a Rails-like application in Java, after a couple search attempts, I found this wonderful framework:&lt;br /&gt;&lt;br /&gt;&lt;div align="center"&gt;&lt;iframe frameborder="0" height="225" src="http://player.vimeo.com/video/7087610?byline=0&amp;amp;portrait=0&amp;amp;color=ffffff" width="400"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;a href="http://vimeo.com/7087610"&gt;A web app  in 10 minutes using Play framework&lt;/a&gt; from &lt;a href="http://vimeo.com/user2463720"&gt;zenexity&lt;/a&gt; on &lt;a href="http://vimeo.com/"&gt;Vimeo&lt;/a&gt;.&lt;/div&gt;&lt;div align="center"&gt;&lt;br /&gt;&lt;/div&gt;Main website: &lt;a href="http://www.playframework.org/"&gt;http://www.playframework.org/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7079010926151542240?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7079010926151542240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7079010926151542240&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7079010926151542240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7079010926151542240'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/11/play-web-framework.html' title='Play web framework'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8304213555988406362</id><published>2010-11-27T09:11:00.000-08:00</published><updated>2010-11-27T09:11:12.731-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='problem'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='rails'/><category scheme='http://www.blogger.com/atom/ns#' term='gem'/><title type='text'>Problems installing Rails</title><content type='html'>When you are trying to install Rails via Gem, you will have this exception:&lt;br /&gt;&lt;blockquote&gt;# gem install rails &lt;br /&gt;ERROR:&amp;nbsp; While executing gem ... (Errno::ENOENT)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; No such file or directory - lib&lt;/blockquote&gt;&lt;br /&gt;To solve it, the solution is pretty obvious, create 'lib' folder:&lt;br /&gt;&lt;blockquote&gt;&amp;nbsp;# mkdir /usr/lib/ruby/gems/1.9.1/gems/rails-3.0.3/lib&lt;/blockquote&gt;&lt;br /&gt;Then execute the first command again, and done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8304213555988406362?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8304213555988406362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8304213555988406362&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8304213555988406362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8304213555988406362'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/11/problems-installing-rails.html' title='Problems installing Rails'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4000132301733187610</id><published>2010-11-17T19:41:00.000-08:00</published><updated>2010-11-17T20:02:36.868-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='hashinfo'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><category scheme='http://www.blogger.com/atom/ns#' term='libgpod'/><title type='text'>libgpod with Ipod Nano 5th generation</title><content type='html'>I've been having a bad time with my iPod Nano and Slackware Linux lately. A lot of the problems I had don't even need a description, but I give just some keywords : 'HashInfo' , 'SysInfoExtended' , 'Database Sync'.&lt;br /&gt;'s all, &lt;br /&gt;All of&amp;nbsp; them were solved by building the last stable release of libgpod with this configuration:&lt;br /&gt;&lt;blockquote&gt;./configure -prefix=/usr --libdir=/usr/lib --with-hal-callouts-dir=/usr/libexec/scripts &lt;/blockquote&gt;That's all, have fun.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4000132301733187610?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4000132301733187610/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4000132301733187610&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4000132301733187610'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4000132301733187610'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/11/libgpod-with-ipod-nano-5th-generation.html' title='libgpod with Ipod Nano 5th generation'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3043264002120556879</id><published>2010-11-14T17:11:00.000-08:00</published><updated>2010-11-15T04:01:53.619-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='gitconfig4j'/><title type='text'>gitconfig4j v0.0.1</title><content type='html'>Another weekend project has been released. As a short overview, one of the things I really love about &lt;a href="http://git-scm.com/"&gt;GIT&lt;/a&gt; it's the .gitconfig layout:&lt;br /&gt;&lt;br /&gt;&lt;script src="https://gist.github.com/676291.js"&gt; &lt;/script&gt;&lt;br /&gt;&lt;br /&gt;I love the simplicity and the clearness of those configuration files, and I wanted something similar for some of my Java projects, but I couldn't find an implementation of it.&lt;br /&gt;&lt;br /&gt;So, I decided to create a very small library for supporting git-config file layout for Java. After a couple days of work, I have something I'm not ashamed of.&lt;br /&gt;&lt;br /&gt;But well, here you go: &lt;a href="http://timoponce.blogspot.com/p/gitconfig4j.html"&gt;gitconfig4j project page&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3043264002120556879?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3043264002120556879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3043264002120556879&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3043264002120556879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3043264002120556879'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/11/gitconfig4j-v001.html' title='gitconfig4j v0.0.1'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5842654589691787648</id><published>2010-11-06T11:26:00.000-07:00</published><updated>2010-11-06T11:27:08.004-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='libros'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='guía'/><category scheme='http://www.blogger.com/atom/ns#' term='traduccion'/><title type='text'>Traducción del libro Slackbasics</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://code.google.com/p/slackbasics-i18n/logo?cct=1253651334" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://code.google.com/p/slackbasics-i18n/logo?cct=1253651334" /&gt;&lt;/a&gt;&lt;/div&gt;Felizmente anuncio la conclusión de la traducción del libro &lt;a href="https://code.google.com/p/slackbasics-i18n/"&gt;Slackbasics, Daniel de Kok&lt;/a&gt; a español latinoamericano.&lt;br /&gt;&lt;br /&gt;Este es un proyecto que tomó poco mas de un año, enseñándome cosas que solamente un traductor puede enfrentar...&lt;br /&gt;&lt;br /&gt;Para mas información referirse a la página dedicada a este tema:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://timoponce.blogspot.com/p/slackbasics.html"&gt;Slackbasics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5842654589691787648?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5842654589691787648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5842654589691787648&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5842654589691787648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5842654589691787648'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/11/traduccion-del-libro-slackbasics.html' title='Traducción del libro Slackbasics'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-370992551999539124</id><published>2010-10-31T07:27:00.000-07:00</published><updated>2010-10-31T07:27:10.715-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><category scheme='http://www.blogger.com/atom/ns#' term='regex'/><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><title type='text'>Regular expressions</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://imgs.xkcd.com/comics/regular_expressions.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://imgs.xkcd.com/comics/regular_expressions.png" width="316" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-370992551999539124?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/370992551999539124/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=370992551999539124&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/370992551999539124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/370992551999539124'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/10/regular-expressions.html' title='Regular expressions'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5236776919035523389</id><published>2010-10-31T07:25:00.001-07:00</published><updated>2010-10-31T07:25:51.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mathematic'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Mathematical miracle</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://img34.imageshack.us/img34/9153/thenamiracleoccurscarto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://img34.imageshack.us/img34/9153/thenamiracleoccurscarto.png" width="280" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5236776919035523389?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5236776919035523389/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5236776919035523389&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5236776919035523389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5236776919035523389'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/10/mathematical-miracle.html' title='Mathematical miracle'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2830395314480227562</id><published>2010-10-25T20:53:00.000-07:00</published><updated>2010-10-25T20:56:30.258-07:00</updated><title type='text'>Simplified JMX with Apache Commons Modeler</title><content type='html'>Since I started working with JMX, I always had a background framework doing the dirty job for me. First it was &lt;a href="http://static.springsource.org/spring/docs/2.0.x/reference/jmx.html"&gt;Spring JMX&lt;/a&gt; with all its utilities, it's impossible to describe how pleased I was with it. &lt;br /&gt;&lt;br /&gt;Then I worked in a web application, using JBoss, and again, all was as simple as adding an annotation string to some classes or operations.&lt;br /&gt;&lt;br /&gt;But recently I got involved in a pure-java application without frameworks and without the possibility of integrating one. As I was so pleased with the previous frameworks I used, I didn't want to waste time defining objects, creating and registering them.&lt;br /&gt;&lt;br /&gt;My brain doesn't like to work ... I needed a library.&lt;br /&gt;&lt;br /&gt;After a half hour search, I found a very interesting utility called &lt;a href="http://commons.apache.org/modeler/"&gt;Apache Commons Modeler&lt;/a&gt;, that claims to be the solution to my problem.&lt;br /&gt;&lt;br /&gt;Being myself a huge fan of all &lt;a href="http://commons.apache.org/"&gt;Apache Commons&lt;/a&gt; solutions, I have no doubt this will solve all my problems.&lt;br /&gt;&lt;br /&gt;To continue...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2830395314480227562?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2830395314480227562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2830395314480227562&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2830395314480227562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2830395314480227562'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/10/simplified-jmx-with-apache-commons.html' title='Simplified JMX with Apache Commons Modeler'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-618709442381460765</id><published>2010-09-30T18:38:00.000-07:00</published><updated>2010-10-02T09:53:23.773-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='oss'/><category scheme='http://www.blogger.com/atom/ns#' term='technology'/><category scheme='http://www.blogger.com/atom/ns#' term='floss'/><category scheme='http://www.blogger.com/atom/ns#' term='podcast'/><title type='text'>FLOSS Weekly favourite episodes</title><content type='html'>Since last year I am loyal listener of &lt;a href="http://en.wikipedia.org/wiki/FLOSS_Weekly"&gt;FLOSS Weekly&lt;/a&gt; podcasts, &lt;a href="http://en.wikipedia.org/wiki/Randal_Schwartz"&gt;Randall Schwartz&lt;/a&gt; and his guests give us hours and hours of very useful information in an interesting way.&lt;br /&gt;&lt;br /&gt;As I am a software developer, I rather prefer some episodes related to certain issues, like frameworks and development tools and not so much with hardware-related issues.&lt;br /&gt;&lt;br /&gt;So, based on that, this is my selection of &lt;i&gt;&lt;b&gt;must listen&lt;/b&gt;&lt;/i&gt; episodes of this great show (* recommended):&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mozilla_Firefox"&gt;Episode 3: Mozilla Firefox &lt;/a&gt;with  &lt;a href="http://en.wikipedia.org/wiki/Ben_Goodger" title="Ben Goodger"&gt;Ben Goodger&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://twit.tv/floss5"&gt;Episode 5: GNOME, Mono&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/Miguel_de_Icaza" title="Miguel de Icaza"&gt;Miguel de Icaza *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://twit.tv/floss9"&gt;Episode 9: Perl&lt;/a&gt; with&amp;nbsp;  &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Randal_Schwartz" title="Randal Schwartz"&gt;Randal Schwartz *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss11" rel="nofollow"&gt;Episode 11: Python&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/Guido_van_Rossum" title="Guido van Rossum"&gt;Guido van Rossum&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://www.twit.tv/floss26" rel="nofollow"&gt;Episode 26: SQLite&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/D._Richard_Hipp" title="D. Richard Hipp"&gt;D. Richard Hipp *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://www.twit.tv/floss34" rel="nofollow"&gt;Episode 34: Django&lt;/a&gt; with  &lt;a class="new" href="http://en.wikipedia.org/w/index.php?title=Jacob_Kaplan-Moss&amp;amp;action=edit&amp;amp;redlink=1" title="Jacob Kaplan-Moss (page does not exist)"&gt;Jacob Kaplan-Moss&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss49" rel="nofollow"&gt;Episode 49: XMPP&lt;/a&gt; with  &lt;a class="new" href="http://en.wikipedia.org/w/index.php?title=Peter_Saint-Andre&amp;amp;action=edit&amp;amp;redlink=1" title="Peter Saint-Andre (page does not exist)"&gt;Peter Saint-Andre&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss55" rel="nofollow"&gt;Episode 55: JQuery&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/John_Resig" title="John Resig"&gt;John Resig&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss58" rel="nofollow"&gt;Episode 58: ZFS&lt;/a&gt; with &lt;a class="new" href="http://en.wikipedia.org/w/index.php?title=Aaron_Newcomb&amp;amp;action=edit&amp;amp;redlink=1" title="Aaron Newcomb (page does not exist)"&gt;Aaron Newcomb&lt;/a&gt;, &lt;a class="new" href="http://en.wikipedia.org/w/index.php?title=David_Brittlel&amp;amp;action=edit&amp;amp;redlink=1" title="David Brittlel (page does not exist)"&gt;David Brittlel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss73" rel="nofollow"&gt;Episode 73: O'Reilly Media&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/Tim_O%27Reilly" title="Tim O'Reilly"&gt;Tim O'Reilly *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss79" rel="nofollow"&gt;Episode 79: Ruby on Rails&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/David_Heinemeier_Hansson" title="David Heinemeier Hansson"&gt;David Heinemeier Hansson *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss87" rel="nofollow"&gt;Episode 87: Extreme Programming&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/Kent_Beck" title="Kent Beck"&gt;Kent Beck *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://twit.tv/floss88" rel="nofollow"&gt;Episode 88: Linux&lt;/a&gt; with  &lt;a href="http://en.wikipedia.org/wiki/Linus_Torvalds" title="Linus Torvalds"&gt;Linus Torvalds *&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a class="external text" href="http://www.twit.tv/floss122" rel="nofollow"&gt;Episode 122: Mercurial&lt;/a&gt; with &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/Matt_Mackall" title="Matt Mackall"&gt;Matt Mackall&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-618709442381460765?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/618709442381460765/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=618709442381460765&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/618709442381460765'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/618709442381460765'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/09/floss-weekly-favourite-episodes.html' title='FLOSS Weekly favourite episodes'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1428541532199752035</id><published>2010-09-25T11:31:00.001-07:00</published><updated>2010-09-25T11:31:23.575-07:00</updated><title type='text'></title><content type='html'>You are not your programming language. You are not the web stack you’ve  learned. You are not your text editor you write your code in. You are  the all crafting, multilingual developer of the world!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1428541532199752035?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1428541532199752035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1428541532199752035&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1428541532199752035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1428541532199752035'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/09/you-are-not-your-programming-language.html' title=''/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4000421047755244633</id><published>2010-09-11T21:38:00.000-07:00</published><updated>2010-09-11T21:38:02.985-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sqldeveloper'/><title type='text'>SQL Developer - Displaying error</title><content type='html'>I've been using Oracle SQL Developer for a few months, and something very annoying happened to me, the application was buggy...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Add the following lines to the sqldeveloper.conf file (found in the sqldeveloper\bin sub-directory)&lt;br /&gt;&lt;br /&gt;AddVMOption -Duser.language=en&lt;br /&gt;AddVMOption -Duser.region=US&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4000421047755244633?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4000421047755244633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4000421047755244633&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4000421047755244633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4000421047755244633'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/09/sql-developer-displaying-error.html' title='SQL Developer - Displaying error'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5561071963816771182</id><published>2010-09-01T12:45:00.000-07:00</published><updated>2010-09-01T12:45:11.954-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>UML representation of GIT model</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://utsl.gen.nz/talks/git-svn/git-model.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="186" src="http://utsl.gen.nz/talks/git-svn/git-model.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5561071963816771182?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5561071963816771182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5561071963816771182&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5561071963816771182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5561071963816771182'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/09/uml-representation-of-git-model.html' title='UML representation of GIT model'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2120489942638402242</id><published>2010-08-28T08:29:00.000-07:00</published><updated>2010-11-10T08:52:29.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='utilities'/><title type='text'>Factories, builders and singletons in standalone applications</title><content type='html'>When I started development, desktop applications were my only target and source of pain. I spent several&lt;br /&gt;hours, days, months making things work. When I moved to web-enterprise development, a lot of frameworks save me a lot of time, things like Hibernate, Seam, JMS, Guice.&lt;br /&gt;&lt;br /&gt;But when I tried to go back to desktop applications, things hadn't changed very much, I still needed to do a lot of work. Then I started emulating some of the best features of Enterprise frameworks for desktop application development.&lt;br /&gt;&lt;br /&gt;One common problem I've been facing to, it's related to this components:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Factories: Delegate object creation and decouple components.&lt;/li&gt;&lt;li&gt;Builders: Construct complex components from different parts.&lt;/li&gt;&lt;li&gt;Singletos: Let's face it, in standalone applications are not that bad.&lt;/li&gt;&lt;/ul&gt;I've created a so called 'BaseFactory' component with a Guice-like approach to provide some of the previous features, here it is:&lt;br /&gt;&lt;script src="https://gist.github.com/671113.js?file=gistfile1.java"&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2120489942638402242?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2120489942638402242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2120489942638402242&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2120489942638402242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2120489942638402242'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/08/factories-builders-and-singletons-in.html' title='Factories, builders and singletons in standalone applications'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3519333433929435728</id><published>2010-08-22T20:27:00.000-07:00</published><updated>2010-08-22T20:27:09.395-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='archlinux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>ArchLinux deception</title><content type='html'>Last weekend I decided to give &lt;a href="http://www.archlinux.org/"&gt;ArchLinux&lt;/a&gt; a chance, I only read good articles about it and I thought it would be nice to get out of &lt;a href="http://www.slackware.com/"&gt;Slackware&lt;/a&gt; world.&lt;br /&gt;&lt;br /&gt;I will divide my experiences in a few sections:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Installation&lt;/li&gt;&lt;ul&gt;&lt;li&gt; This part was really strange for me, it supposed to be easier than Slackware ncurses wizards. It's not, it's even worse.&amp;nbsp;&lt;/li&gt;&lt;li&gt;I don't know if is just me, but I the default installation doesn't have anything, no media support, not extra-fs support, nothing. I don't know why ArchLinux community declares that it's painless than Slackware.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Configuration&lt;/li&gt;&lt;ul&gt;&lt;li&gt;A good point here, configuration of mirrors and the system in general is pretty straightforward, very simple configuration with a lot of comments. &amp;nbsp; &lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Package management&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Maybe Pacman is its best feature, it's even better(IMHO) than APT.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Usability&lt;/li&gt;&lt;ul&gt;&lt;li&gt;For me, it's not usable at all, I spent 2 hours to get a minimum XFCE desktop working. And don't make me talk about a work environment, it will take days!. I don't really get the idea of having such a basic environment, I don't want to install everything from scratch. But that's just me, maybe there's some other people who like to waste their time, good for them.&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Conclusion&lt;/li&gt;&lt;ul&gt;&lt;li&gt;In general, it's not better than Ubuntu or Slackware, installation and configuration tasks are not hard, but can be simplified. Meanwhile, I will stay with my Slackware desktop for another year. &lt;/li&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3519333433929435728?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3519333433929435728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3519333433929435728&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3519333433929435728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3519333433929435728'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/08/archlinux-deception.html' title='ArchLinux deception'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-952506236042781374</id><published>2010-07-29T10:33:00.000-07:00</published><updated>2010-07-29T10:33:12.231-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><category scheme='http://www.blogger.com/atom/ns#' term='dcvs'/><title type='text'>Presentation - Distributed Revision control systems</title><content type='html'>&lt;iframe frameborder="0" height="342" src="https://docs.google.com/present/embed?id=df2zqd5c_33g6zmw4ch" width="410"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-952506236042781374?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/952506236042781374/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=952506236042781374&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/952506236042781374'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/952506236042781374'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/07/presentation-distributed-revision.html' title='Presentation - Distributed Revision control systems'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-594552067980774839</id><published>2010-07-29T10:30:00.000-07:00</published><updated>2010-07-29T10:30:13.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Linux - Nvidia driver issues</title><content type='html'>Sadly I have to talk about this again, since Slackware 12.2 I've been having problems with&lt;br /&gt;my Nvidia GeForce 6400 card (I know it's old, shut up). And most of the times a little of&lt;br /&gt;investigation and configuration would be enough, but not this time.&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Problem description: User switch action freezes all the system and the only way to restore it is by restarting it.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Affected OS: Ubuntu Linux 10.4, Slackware Linux 13.1&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;As is not only affecting my Slackware installation, I'm pretty sure that is an issue with the kernel&lt;br /&gt;module. For safety concerns (my information is important now), I'm forced to uninstall all&lt;br /&gt;nvidia drivers and return to the legacy VESA drivers.&lt;br /&gt;&lt;br /&gt;Is not as good as it used to, but at least is quite stable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-594552067980774839?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/594552067980774839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=594552067980774839&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/594552067980774839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/594552067980774839'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/07/linux-nvidia-driver-issues.html' title='Linux - Nvidia driver issues'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7459297700346656676</id><published>2010-07-03T09:14:00.000-07:00</published><updated>2010-07-03T09:14:11.613-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tech-talk'/><category scheme='http://www.blogger.com/atom/ns#' term='git'/><title type='text'>Google tech talk - Linus Torvalds on GIT</title><content type='html'>Great talk about distributed &lt;a href="http://en.wikipedia.org/wiki/Distributed_Concurrent_Versions_System"&gt;concurrent version control systems&lt;/a&gt; and &lt;a href="http://git-scm.com/"&gt;GIT&lt;/a&gt;.&lt;br /&gt;&lt;object height="385" width="480"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4XpnKHJAok8&amp;amp;hl=es_ES&amp;amp;fs=1?rel=0"&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/4XpnKHJAok8&amp;amp;hl=es_ES&amp;amp;fs=1?rel=0" 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/5502681789285906166-7459297700346656676?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7459297700346656676/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7459297700346656676&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7459297700346656676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7459297700346656676'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/07/google-tech-talk-linus-torvalds-on-git.html' title='Google tech talk - Linus Torvalds on GIT'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3509965185105619074</id><published>2010-06-27T14:49:00.000-07:00</published><updated>2010-06-27T14:52:07.703-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='presentation'/><title type='text'>Continuous Integration presentation</title><content type='html'>&lt;iframe frameborder="0" height="560px" src="http://docs.google.com/present/embed?id=0AdMTz6H3ARDuZGYyenFkNWNfOWMyOWRnY2Z6&amp;amp;size=m&amp;amp;hl=en" width="100%"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3509965185105619074?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3509965185105619074/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3509965185105619074&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3509965185105619074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3509965185105619074'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/06/continuous-integration-presentation.html' title='Continuous Integration presentation'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7356199466946962471</id><published>2010-05-29T11:05:00.000-07:00</published><updated>2010-05-29T11:05:41.277-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Slackware 13.1 - Nvidia driver issue</title><content type='html'>I've been installing the latest Slackware stable release on my main machine these days and I have to say, it's great!!!. Most of the problems of Slackware 13 are now solved, it's pretty stable and so far without exceptions!!.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But I found a problem not related to Slackware, there is a problem with the kernel series 2.6.33.x and Nvidia legacy drivers. In short, once the driver is installed, the 'logout' action freezes the system and the only way to restore it is restarting manually, tough.&lt;br /&gt;&lt;br /&gt;The solution, edit file '/etc/kde/kdm/kdmrc' and set:&lt;br /&gt;&lt;pre class="py" name="code"&gt;# by default is false&lt;br /&gt;#TerminateServer=true &lt;br /&gt;TerminateServer=true&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Solution source: &lt;a href="http://www.linuxquestions.org/questions/slackware-14/black-screen-after-logout-in-slackware-current-780540/"&gt;black-screen-after-logout-in-slackware&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7356199466946962471?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7356199466946962471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7356199466946962471&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7356199466946962471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7356199466946962471'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/slackware-131-nvidia-driver-issue.html' title='Slackware 13.1 - Nvidia driver issue'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5608233526881387894</id><published>2010-05-24T19:25:00.000-07:00</published><updated>2010-05-24T19:25:04.424-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><title type='text'>Slackware 13.1 released</title><content type='html'>Finally, after several modifications and security updates, we have a stable release of our beloved Slackware Linux. Slackware 13.1 has several improvements and changes, you can check it in the &lt;a href="http://slackware.com/announce/13.1.php"&gt;ANNOUNCEMENT&lt;/a&gt;  or the &lt;a href="http://slackware.com/releasenotes/13.1.php"&gt;RELEASE  NOTES&lt;/a&gt; and also in &lt;a href="http://slackware.osuosl.org/slackware-13.1/CHANGES_AND_HINTS.TXT"&gt;CHANGES_AND_HINT.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5608233526881387894?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5608233526881387894/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5608233526881387894&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5608233526881387894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5608233526881387894'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/slackware-131-released.html' title='Slackware 13.1 released'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2237951659304484439</id><published>2010-05-20T06:04:00.000-07:00</published><updated>2010-05-20T06:06:27.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Testing Ubuntu 10.4</title><content type='html'>I've been testing the new Ubuntu 10.4 distribution for a couple of weeks, just to see how much changed since last year. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.ubuntu.com/files/1004features/01.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="174" src="http://www.ubuntu.com/files/1004features/01.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;I have to say that is really good, nice, lightweight, and really easy to use. Is taking the MacOS approach to attract users and I think it will work.&lt;br /&gt;&lt;br /&gt;They are taking the right way for PC users, including very useful applications in a single-CD set. But I'm not a normal PC user, I'm a developer, a curious, stupid, bastard that wants to control everything in the system. Ubuntu doesn't let you do that (at least not in an easy way). &lt;br /&gt;&lt;br /&gt;I have tried and tried many distributions and still can't find something better than Slackware. Not because it's easy to use(it really is), or because it has huge software sources. Is because its simplicity, is a very simple system, and allows you to change, modify, ruin everything without telling you 'gfy!'.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh5.ggpht.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s1600/linux.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh5.ggpht.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s320/linux.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &lt;br /&gt;*Note: Is an old screenshoot, but is still valid.&lt;br /&gt;If you are a developer, and you would like to learn how a Linux system is, or how to use it, you should give it a try.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2237951659304484439?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2237951659304484439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2237951659304484439&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2237951659304484439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2237951659304484439'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/testing-ubuntu-104.html' title='Testing Ubuntu 10.4'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s72-c/linux.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6777264080719732127</id><published>2010-05-11T15:33:00.000-07:00</published><updated>2010-05-11T15:33:55.484-07:00</updated><title type='text'>Timo's blog</title><content type='html'>&lt;a href="http://picasaweb.google.com/lh/photo/Pc8Uok5aOKwWRQawOxhI3uSuzbniFQ8W7zy6itwq5XA?feat=blogger" style="clear:right;float:right;margin-bottom:1em;margin-left:1em"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_KIIvcCa3NIc/S-nbH1Z9r-I/AAAAAAAAAH0/Jx1UktOeKGc/s512/shot-0.PNG"&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6777264080719732127?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6777264080719732127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6777264080719732127&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6777264080719732127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6777264080719732127'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/timos-blog.html' title='Timo&apos;s blog'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_KIIvcCa3NIc/S-nbH1Z9r-I/AAAAAAAAAH0/Jx1UktOeKGc/s72-c/shot-0.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-486479511328958012</id><published>2010-05-07T13:33:00.000-07:00</published><updated>2010-05-07T13:41:38.535-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>Git svn dcommit, interruption recovery</title><content type='html'>As usual, I was doing all my work in my local copy(Git) of a SVN repository, when everything was stable and pretty, I started pushing everything to the central server. But in the middle of the operation the network was shutdown, some of my commits couldn't be pushed and my working tree was a mess!!.&lt;br /&gt;&lt;br /&gt;"Ok" - I said - "I just have to point to HEAD again... which was the commit number?". I couldn't remember the commit number(is not so easy to do, admit it) but that's not necessary, right?, just do a 'git log --all' and you will see your commits. But NOOOOOOOOO, all commits were up to the last SVN dcommit entry!!!.&lt;br /&gt;e.g. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * -&amp;gt; 'super commit'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; * -&amp;gt; 'some other commit'          &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [*]-&amp;gt; 'where SVN commit crashed'&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; |&lt;br /&gt;&lt;br /&gt;"Oh shit, oh dear Lord!!, don't worry, Git tracks content, can't lose my commits" - I said. But nevertheless all options I've tried, my commits seem to be lost.&lt;br /&gt;&lt;br /&gt;After a few minutes reading Git's manual, I found this:&lt;br /&gt;&lt;pre class="py" name="code"&gt;$&amp;gt; git rev-list --all --pretty=oneline&lt;br /&gt;&lt;/pre&gt;And.. YES!! all my commits are there, so, to make the long story short:&lt;br /&gt;&lt;pre class="py" name="code"&gt;$&amp;gt; git checkout awfulCommitNumber&lt;br /&gt;$&amp;gt; git svn rebase&lt;br /&gt;$&amp;gt; git svn dcommit&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/5502681789285906166-486479511328958012?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/486479511328958012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=486479511328958012&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/486479511328958012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/486479511328958012'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/git-svn-dcommit-interrution-recovery.html' title='Git svn dcommit, interruption recovery'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6589943160294669422</id><published>2010-05-04T19:40:00.000-07:00</published><updated>2010-05-04T19:45:06.484-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><title type='text'>External merge-diff - Git on windows</title><content type='html'>To configure and use &lt;a href="http://git-scm.com/"&gt;Git&lt;/a&gt; in a Linux environment is quite easy, but if you are working in a Windows system, things get a little bit complicated.&lt;br /&gt;&lt;br /&gt;I use &lt;a href="http://code.google.com/p/msysgit/"&gt;MsysGit&lt;/a&gt; which is a great port to win32, and as a merge/diff tool I use &lt;a href="http://winmerge.org/"&gt;WinMerge&lt;/a&gt; (I can't stand KDiff); to work with WinMerge as 'difftool' and 'mergetool' you could do this:&lt;br /&gt;&lt;br /&gt;- First, create a wrapper script for our 'difftool', save this file as 'diff-tool.sh' in your $HOME folder:&lt;br /&gt;&lt;br /&gt;&lt;pre class="py" name="code"&gt;#!/bin/sh&lt;br /&gt;# Change "E:/bin/WinMerge/WinMergeU.exe" with your winmerge path&lt;br /&gt;"E:/bin/WinMerge/WinMergeU.exe" -e -ub "$1" "$2" | cat&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;- Now, edit your $HOME/.gitconfig file, you can take as example my current configuration:&lt;br /&gt;&lt;pre class="py" name="code"&gt;[core] &lt;br /&gt;autocrlf = false &lt;br /&gt;&lt;br /&gt;[alias]&lt;br /&gt;lg = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)&amp;lt;%an&amp;gt;%Creset' --abbrev-commit --date=relative&lt;br /&gt;&lt;br /&gt;[user]&lt;br /&gt;name = Timoteo Ponce&lt;br /&gt;email = timo.slack@gmail.com&lt;br /&gt;&lt;br /&gt;[merge]&lt;br /&gt;tool = winmerge&lt;br /&gt;&lt;br /&gt;[mergetool "winmerge"]&lt;br /&gt;cmd = "E:/bin/WinMerge/WinMergeU.exe" "$MERGED"&lt;br /&gt;keepBackup = false&lt;br /&gt;&lt;br /&gt;[diff]&lt;br /&gt;tool = winmerge&lt;br /&gt;&lt;br /&gt;[difftool "winmerge"]&lt;br /&gt;cmd = $HOME/diffmerge-tool.sh "$LOCAL" "$REMOTE"&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/5502681789285906166-6589943160294669422?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6589943160294669422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6589943160294669422&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6589943160294669422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6589943160294669422'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/05/external-merge-diff-git-on-windows.html' title='External merge-diff - Git on windows'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6181546784987625795</id><published>2010-04-18T19:50:00.000-07:00</published><updated>2010-04-18T19:51:55.350-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='patterns'/><title type='text'>Which pattern is this?</title><content type='html'>I've been working in a component with some singularities, one of them is his incremental behavior. To make it clear: When a feature is almost complete (or completed), some other features arise.&lt;br /&gt;&lt;br /&gt;This is really annoying if you have implemented everything for an specific use (never do this, I've learned in the bad way) if needs to be changed to work with the new stuff.&lt;br /&gt;&lt;br /&gt;One of the things that I needed to do is to create/fill/validate different objects; I started thinking: "This is easy, let's do a mapper for each one of them". So far so good, then another type of object to work with.... shit, create more mappers, modify logic...&lt;br /&gt;&lt;br /&gt;I started thinking "I'm doing this over and over, why am I so stupid?, use interfaces, builders, factories, simplify the problem... moron". I realized that the validation/filling... logic was the same, so the things that are different&amp;nbsp; needed to be isolated: the mappers (I don't know the real name).&lt;br /&gt;&lt;br /&gt;With a little of work, I did this:&lt;br /&gt;&lt;pre class="java" name="code"&gt;public interface Initializer&amp;lt;Source,Target&amp;gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; // initializes the Target object using the Source as data provider &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Target initializeThis(Source source, Target reference);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Then my object creator is:&lt;br /&gt;&lt;pre class="java" name="code"&gt;public class ObjectCreator&amp;lt;Car&amp;gt; implements Creator{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public Car prepareObject(){&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; Info info= readInfo();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Initializer init = InitializerFactory.newInitializer(Car.class,Info.class);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return init.initializeThis(new Car(),info);&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;The logic doesn't changes, just use the proper Creator, and that's it. But I don't really know if this is a pattern, or an anti-pattern, or whatever.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6181546784987625795?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6181546784987625795/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6181546784987625795&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6181546784987625795'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6181546784987625795'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/04/which-pattern-is-this.html' title='Which pattern is this?'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4721263553435043707</id><published>2010-04-14T07:04:00.000-07:00</published><updated>2010-04-14T07:04:21.482-07:00</updated><title type='text'>Hace un año</title><content type='html'>Hace exactamente un año, sufrí junto a mi hermano un accidente que hubiese sido fatal de no haber contado con las personas indicadas en el momento dado. Sobreviví no gracias a Dios o algun tipo de voluntad divina, fue gracias a mi hermano y a la gente que lo ayudo. Doy gracias a ellos y elijo no recordar a aquellos que nos ignoraron.&lt;br /&gt;&lt;br /&gt;Tambien expreso mi profundo respeto por la familia Chavarria, que perdió a su único hijo en este incidente, ojala esto nos recuerde el valor de la vida.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4721263553435043707?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4721263553435043707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4721263553435043707&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4721263553435043707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4721263553435043707'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/04/hace-un-ano.html' title='Hace un año'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7045130567240957728</id><published>2010-04-13T13:09:00.000-07:00</published><updated>2010-04-13T13:12:58.239-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='post'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>Jakarta HttpClient , POST request</title><content type='html'>This library contains a set of very handy utilities for HTTP interaction, in this occasion, I'll show you how to create a POST request:&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;final String url = "http://localhost:8080/eco/management"&lt;br /&gt;public void sendRequest(Map&amp;lt;String, String&amp;gt; parameters) throws DigestException,   HttpException, IOException {&lt;br /&gt;        println("Sending request to : " + url);&lt;br /&gt;        HttpClient httpClient = new HttpClient();&lt;br /&gt;        PostMethod method = new PostMethod(url);&lt;br /&gt;&lt;br /&gt;        for (Entry&amp;lt;String,String&amp;gt; entry : parameters.entrySet()) {&lt;br /&gt;            method.addParameter(entry.getKey(), entry.getValue());&lt;br /&gt;        }&lt;br /&gt;        final int status = httpClient.executeMethod(method);&lt;br /&gt;&lt;br /&gt;        if (status == HttpStatus.SC_OK) {&lt;br /&gt;            println("Request successfully processed");&lt;br /&gt;            println("Response : " + new String(method.getResponseBody()));&lt;br /&gt;        }&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/5502681789285906166-7045130567240957728?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7045130567240957728/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7045130567240957728&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7045130567240957728'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7045130567240957728'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/04/jakarta-httpclient-post-request.html' title='Jakarta HttpClient , POST request'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2318662092748436681</id><published>2010-03-23T15:33:00.000-07:00</published><updated>2010-03-23T15:34:24.720-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='perl'/><category scheme='http://www.blogger.com/atom/ns#' term='script'/><title type='text'>Setting environment variables with perl</title><content type='html'>Usually I work with different environments on different projects, this means that sometimes I have to change system variables and references in order to work in a different project. To avoid this repetitive task, I've created a few &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;PERL&lt;/a&gt; scripts to make my life easier.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Changing environment variables&lt;/h3&gt;What I did was to create a script that receives as a parameter a file name, this file contains a set of environment variables to set. To make it even easier, the file has the format:&lt;br /&gt;&lt;pre class="py" name="code"&gt;KEY&lt;br /&gt;VALUE&lt;br /&gt;&lt;/pre&gt;Like this:&lt;br /&gt;&lt;pre class="py" name="code"&gt;JAVA_HOME &lt;br /&gt;/opt/java/jdk1.6.0_12&lt;br /&gt;JBOSS_HOME&lt;br /&gt;/opt/java/4.2.3.GA/jboss-as\&lt;br /&gt;&lt;/pre&gt;Note: I still don't know a lot of &lt;a href="http://en.wikipedia.org/wiki/Perl"&gt;PERL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Script(file: my_setenv.pl ):&lt;br /&gt;&lt;pre class="py" name="code"&gt;$filename = $ARGV[0];&lt;br /&gt;print "Using filename $filename";&lt;br /&gt;&lt;br /&gt;open FILE, "$filename" or die $!;&lt;br /&gt;&lt;br /&gt;$iterator = 0;&lt;br /&gt;$current_var = "";&lt;br /&gt;while (my $line = &lt;file&gt;) {&lt;br /&gt;&lt;br /&gt; if( $iterator == 0 ){&lt;br /&gt;  $current_var = $line;&lt;br /&gt;  $iterator++;&lt;br /&gt; }else{&lt;br /&gt;  print "Setting ENV -&amp;gt; $current_var = $line";&lt;br /&gt;  $ENV{"$current_var"} = $line;  &lt;br /&gt;  $current_var = "";&lt;br /&gt;  $iterator = 0;&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;close(FILE); &lt;br /&gt;&lt;br /&gt;print "Let's show all ENVIRONMENT variables.\n";&lt;br /&gt;foreach $key (keys(%ENV)) {&lt;br /&gt;    printf("%-10.10s: $ENV{$key}\n", $key);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Usage:&lt;br /&gt;&lt;pre class="py" name="code"&gt;$&amp;gt; perl my_setenv.pl google_code_env.env&lt;br /&gt;&lt;/pre&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/5502681789285906166-2318662092748436681?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2318662092748436681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2318662092748436681&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2318662092748436681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2318662092748436681'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/03/setting-environmet-variables-with-perl.html' title='Setting environment variables with perl'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8556024157828161912</id><published>2010-03-18T05:56:00.000-07:00</published><updated>2010-03-22T07:31:27.042-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><title type='text'>Get metadata from JPA entities</title><content type='html'>I needed to extract a column length from a EJB-JPA Entity configured with annotations, this is how I did it:&lt;br /&gt;&lt;pre name="code" class="java"&gt;import javax.persistence.Column;&lt;br /&gt;import javax.persistence.Entity;&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class Person {&lt;br /&gt;&lt;br /&gt;   @Column(length=30)&lt;br /&gt;   private String firstName;&lt;br /&gt;&lt;br /&gt;   public static void main(String[] args) throws SecurityException,     NoSuchFieldException {&lt;br /&gt;      Object person = new Person();&lt;br /&gt;      println(person.getClass().getDeclaredField("firstName").getAnnotation(Column.class).length());&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://stackoverflow.com/questions/1816780/"&gt;Solution source&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8556024157828161912?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8556024157828161912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8556024157828161912&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8556024157828161912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8556024157828161912'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/03/get-metadata-from-jpa-entities.html' title='Get metadata from JPA entities'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1556136147556315611</id><published>2010-03-11T19:11:00.000-08:00</published><updated>2010-03-11T19:11:00.789-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>GIT - Working with a SVN repository</title><content type='html'>Git a SCM created by Linus Torvalds and currently mantained by Junio Hamano, is a distributed revision control system very simple and extremely powerful.&lt;br /&gt;&lt;br /&gt;For those people who want to test this system (me included), and comes from a SVN environment, there are some utilities (included with GIT) to interact with SVN repositories.&lt;br /&gt;&lt;br /&gt;In my case, I have a copy of a project fetched from the SVN repository, and for local development I use a branch called 'development'. When the development branch is stable, I merge this branch with the branch 'master', and then commit the changes to the SVN repository.&lt;br /&gt;&lt;br /&gt;- Create and fetch from SVN repository&lt;br /&gt;&lt;pre name="code" class="py"&gt;git svn init https://localhost/dev/svn/tiergen&lt;br /&gt;git svn fetch -r HEAD&lt;br /&gt;&lt;/pre&gt;- Create a 'development' branch and start working with it.&lt;br /&gt;&lt;pre name="code" class="py"&gt;git branch development&lt;br /&gt;git checkout development&lt;br /&gt;&lt;/pre&gt;- After all changes are made in the development branch, let's merge thi with 'master'.&lt;br /&gt;&lt;pre name="code" class="py"&gt;git checkout master&lt;br /&gt;git merge development&lt;br /&gt;&lt;/pre&gt;- Finally, commit everything to the SVN repository.&lt;br /&gt;&lt;pre name="code" class="py"&gt;git svn rebase # I always do this&lt;br /&gt;git dcommit&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/5502681789285906166-1556136147556315611?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1556136147556315611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1556136147556315611&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1556136147556315611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1556136147556315611'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/03/git-working-with-svn-repository.html' title='GIT - Working with a SVN repository'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3036253456658105548</id><published>2010-03-02T06:09:00.000-08:00</published><updated>2010-03-11T18:58:58.106-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuracion'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><title type='text'>3d acceleration in Nvidia cards</title><content type='html'>This was tested in a Slackware 13 environment:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="py" cols="60" name="code" rows="10"&gt;&amp;lt;br /&amp;gt; //Server Layout Section&amp;lt;br /&amp;gt; Option "AIGLX" "true"&amp;lt;br /&amp;gt; //Screen section&amp;lt;br /&amp;gt; Option "RenderAccel" "true"&amp;lt;br /&amp;gt; Option "AllowGLXWithComposite" "true"&amp;lt;br /&amp;gt; Option "AddARGBGLXVisuals" "true"&amp;lt;br /&amp;gt; Option "DisableGLXRootClipping" "True"&amp;lt;br /&amp;gt; //at the bottom&amp;lt;br /&amp;gt; Section "Extensions"&amp;lt;br /&amp;gt; Option "Composite" "Enable"&amp;lt;br /&amp;gt; EndSection&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3036253456658105548?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3036253456658105548/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3036253456658105548&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3036253456658105548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3036253456658105548'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/03/3d-acceleration-in-nvidia-cards.html' title='3d acceleration in Nvidia cards'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-570664120499687073</id><published>2010-03-01T06:17:00.000-08:00</published><updated>2010-03-01T06:53:32.459-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Joda Time - Difference between dates</title><content type='html'>In order to calculate a difference between dates, I've found many problems:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Leap years.&lt;/li&gt;&lt;li&gt;Minute, seconds differences between months and years.&lt;/li&gt;&lt;li&gt;Months with different amount of days, etc.&lt;/li&gt;&lt;/ul&gt;&amp;nbsp;And I was not going to develop all this, right?. Somebody must have already done this, so, I started searching. The result was &lt;a href="http://joda-time.sourceforge.net/"&gt;Joda-time&lt;/a&gt;, a very handy library that is being used in projects like JBoss Seam.&lt;br /&gt;&lt;br /&gt;With this library, my work only was to use it, so, if I wanted to calculate date differences, I just have to:&lt;br /&gt;&lt;textarea class="java" cols="60" name="code" rows="10"&gt;&amp;lt;br /&amp;gt; int difference = 0;&amp;lt;br /&amp;gt;         DateTime start = new DateTime(source);&amp;lt;br /&amp;gt;         DateTime end = new DateTime(target);&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;         if (source.after(target)) {&amp;lt;br /&amp;gt;             start = end;&amp;lt;br /&amp;gt;             end = new DateTime(source);&amp;lt;br /&amp;gt;         }&amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt;         switch (type) {&amp;lt;br /&amp;gt;             case MONTHS:&amp;lt;br /&amp;gt;                 difference = Months.monthsBetween(start, end).getMonths();&amp;lt;br /&amp;gt;                 break;&amp;lt;br /&amp;gt;             case DAYS:&amp;lt;br /&amp;gt;                 difference = Days.daysBetween(start, end).getDays();&amp;lt;br /&amp;gt;                 break;&amp;lt;br /&amp;gt;             case YEARS:&amp;lt;br /&amp;gt;                 difference = Years.yearsBetween(start, end).getYears();&amp;lt;br /&amp;gt;                 break;&amp;lt;br /&amp;gt;             case HOURS:&amp;lt;br /&amp;gt;                 difference = Hours.hoursBetween(start, end).getHours();&amp;lt;br /&amp;gt;                 break;&amp;lt;br /&amp;gt;             case MINUTES:&amp;lt;br /&amp;gt;                 difference = Minutes.minutesBetween(start, end).getMinutes();&amp;lt;br /&amp;gt;                 break;&amp;lt;br /&amp;gt;         }&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-570664120499687073?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/570664120499687073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=570664120499687073&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/570664120499687073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/570664120499687073'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/03/joda-time-difference-between-dates.html' title='Joda Time - Difference between dates'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2413373751230816796</id><published>2010-02-23T20:35:00.000-08:00</published><updated>2010-02-25T07:27:43.163-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='monodevelop'/><category scheme='http://www.blogger.com/atom/ns#' term='mono'/><title type='text'>Monodevelop, following the river</title><content type='html'>Mono is a free implementation of .Net standard for Windows, GNU/Linux and some other platforms. Is compatible with .Net and has called my attention since its creation, I just needed the motivation of Miguel de Icaza to get into this.&lt;br /&gt;&lt;br /&gt;As I'm not a .Net developer, I wanted to learn it using C#, that looks like Java, but I wanted to start with Mono because of the portability feature, applications can run in different environments, and that's a lot. Almost all distributions support or provide Mono packages, and it has beautiful IDE called MonoDevelop, that might not be as complete as Visual Studio, but I really like it.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://monodevelop.com/@api/deki/files/201/=ss-main-window.png?size=webview" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://monodevelop.com/@api/deki/files/201/=ss-main-window.png?size=webview" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;I tried with desktop applications, that handle files and some XML processing and I have to say that is really interesting to see an application (binary) run in different environments without extra compilations.&lt;br /&gt;&lt;br /&gt;After many years of work, Ximian team and the community have make it, it works, and it has a very promisory future, I can't wait to see what they will do next.&lt;br /&gt;&lt;br /&gt;Links:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://monodevelop.com/"&gt;MonoDevelop &lt;/a&gt;- you will find all related links here&lt;/li&gt;&lt;li&gt;&lt;a href="http://tirania.org/blog"&gt;Miguel de Icaza&lt;/a&gt;, blog&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2413373751230816796?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2413373751230816796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2413373751230816796&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2413373751230816796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2413373751230816796'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/02/monodevelop-following-river.html' title='Monodevelop, following the river'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1171485811885468660</id><published>2010-02-11T10:05:00.000-08:00</published><updated>2010-02-11T10:05:04.901-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Slackware 13 and KDE</title><content type='html'>There have been&lt;a href="http://linuxcritic.wordpress.com/2009/08/28/the-first-time-ive-ever-been-disappointed-by-slackware/"&gt; many comments&lt;/a&gt; around the Slackware community about the decision &lt;a href="http://www.slackware.com/announce/13.0.php"&gt;replacing KDE 3 for the new KDE 4&lt;/a&gt; desktop environment. In my point of view, those comments (some of them very offensive) are justified, KDE 4 seems to be in a beta state, is not as stable as KDE 3 was. The new look has removed many options from its predecessor, and has introduced a &lt;a href="http://www.kde.org/announcements/4.4/"&gt;widget-based&lt;/a&gt; environment to the user experience:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://www.kde.org/announcements/4.4/screenshots/thumbs/general-desktop_thumb.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://www.kde.org/announcements/4.4/screenshots/thumbs/general-desktop_thumb.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;That's not bad at all, I would say, innovation always have critics, and I think that KDE 4 is the way to go. But I'm not sure if putting it in the 'stable' release of Slackware is correct. Many Slackware users are upset because of this, but let me point why I still love Slackware:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Slackware is not only a desktop environment, is a system.&lt;/li&gt;&lt;li&gt;If you don't like KDE 4, you can use XFCE or install GNOME.&lt;/li&gt;&lt;li&gt;If you really like Slackware, is not because of his desktop, is because of his philosophy.&lt;/li&gt;&lt;li&gt;System configuration, services, kernel, etc. Are still the same as in previous releases, if you are a user, you have to know something about these issues.&lt;/li&gt;&lt;/ul&gt;The extremely useful KDE3:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://lh6.ggpht.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s1600/escritorio2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://lh6.ggpht.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s320/escritorio2.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;But I have to be honest, I don't really think that KDE 4 is ready for a stable release in Slackware, Slackware is a great system, that's why I use it. It's very stable and simple, you don't have treat with non-standard configuration files or idiotic wizards.&lt;br /&gt;&lt;br /&gt;I really love Slackware, but not all users do the same things with his system. I'm a developer, not a desktop user, but even in those cases Slackware rocks!.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1171485811885468660?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1171485811885468660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1171485811885468660&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1171485811885468660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1171485811885468660'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/02/slackware-13-and-kde.html' title='Slackware 13 and KDE'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s72-c/escritorio2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5549148871303475774</id><published>2010-01-29T07:10:00.000-08:00</published><updated>2010-02-01T09:39:07.403-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='jms'/><title type='text'>Interacción con JMS</title><content type='html'>Java Messaging Service es un middleware de comunicación a través de mensajes para Java muy utilizado a nivel mundial, con estandares definidos y varios proveedores.&lt;br /&gt;&lt;br /&gt;Actualmente, yo requería utilizar múltiples proveedores de JMS en una aplicacion, entonces para no estar creando implementaciones independientes para cada tipo de proveedor, decidi hacer una interfaz que utilice los estandares JMS y me permita implementar mis clases de forma transparente al proveedor JMS, este es un diagrama de clase de mi diseño:&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_KIIvcCa3NIc/S2L6IqqhcuI/AAAAAAAAAEI/KBJ7AzWWGyI/s1600-h/main.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="325" src="http://4.bp.blogspot.com/_KIIvcCa3NIc/S2L6IqqhcuI/AAAAAAAAAEI/KBJ7AzWWGyI/s400/main.png" width="400" /&gt; &lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;Patrones de diseño utilizados:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://es.wikipedia.org/wiki/Strategy_%28patr%C3%B3n_de_dise%C3%B1o%29"&gt;Strategy &lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5549148871303475774?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5549148871303475774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5549148871303475774&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5549148871303475774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5549148871303475774'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/01/interaccion-con-jms.html' title='Interacción con JMS'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KIIvcCa3NIc/S2L6IqqhcuI/AAAAAAAAAEI/KBJ7AzWWGyI/s72-c/main.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2219701310946210151</id><published>2010-01-16T18:43:00.000-08:00</published><updated>2010-01-17T19:03:57.922-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='diseño'/><category scheme='http://www.blogger.com/atom/ns#' term='patrones'/><category scheme='http://www.blogger.com/atom/ns#' term='dao'/><title type='text'>DAO - Data Access Object en Java - primera parte</title><content type='html'>El patrón de diseño &lt;a href="http://es.wikipedia.org/wiki/Data_Access_Object"&gt;DAO&lt;/a&gt; facilita el acceso a fuentes de datos a través de elementos transitorios denominados "transfer objects", estos objectos no son mas que simples clases. Una gran ventaja de este patrón, es de la separación exclusiva de las tareas de acceso de datos, dejando a los demas componentes involucrados hacer su trabajo de forma transparente.&lt;br /&gt;&lt;br /&gt;Pueden revisar una introducción muy completa en: &lt;a href="http://sherekan.com.ar/category/patrones-de-diseno/"&gt;Patrones de diseño&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;El artículo enlazado arriba es muy completo, no pretendo repetir lo que ahi indica, solamente agregar ciertos comentarios y modificaciones a las implementaciones de ejemplo.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Debido a que los objetos &lt;a href="http://es.wikipedia.org/wiki/Data_Access_Object"&gt;DAO&lt;/a&gt; proveen operaciones &lt;a href="http://es.wikipedia.org/wiki/CRUD"&gt;CRUD&lt;/a&gt; comunes, no es necesario escribir las operaciones en las interfaces de cada uno de los DAOs, por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="java" cols="60" name="code" rows="10"&gt;&lt;br /&gt;public interface PersonDao{&lt;br /&gt;void create(Person person);&lt;br /&gt;Person read(Person person);&lt;br /&gt;void update(Person person);&lt;br /&gt;void delete(Person person);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public interface PetDao{&lt;br /&gt;void create(Pet pet);&lt;br /&gt;Pet read(Pet pet);&lt;br /&gt;void update(Pet pet);&lt;br /&gt;void delete(Pet pet);&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Seria muy engorroso hacer esto para cada entidad que manipulemos, pero podemos simplificar las cosas de esta forma:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="java" cols="60" name="code" rows="10"&gt;&lt;br /&gt;public interface GenericDao&lt;T&gt;{&lt;br /&gt;void create(T dto);&lt;br /&gt;T read(T dto);&lt;br /&gt;void update(T dto);&lt;br /&gt;void delete(T dto);&lt;br /&gt;}&lt;br /&gt;public interface PersonDao extends GenericDao&lt;Person&gt;{&lt;br /&gt;//custom operations&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public interface PetDao extends GenericDao&lt;Pet&gt;{&lt;br /&gt;//custom operations&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;De esta forma, evitamos repetir la definicion de las operaciones (véa &lt;a href="http://es.wikipedia.org/wiki/No_te_repitas"&gt;DRY&lt;/a&gt;). &lt;br /&gt;&lt;br /&gt;Se puede hacer aún mas, utilizando clases abstractas, pero es algo que preferiría evitar, ... nunca me gustaron las herencias... pero tal vez para la segunda parte, nos vemos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2219701310946210151?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2219701310946210151/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2219701310946210151&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2219701310946210151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2219701310946210151'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/01/dao-data-access-object-en-java-primera.html' title='DAO - Data Access Object en Java - primera parte'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-9155312586458687445</id><published>2010-01-11T18:21:00.000-08:00</published><updated>2010-01-11T18:23:44.109-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='hardware'/><title type='text'>Nunca más</title><content type='html'>Estaba yo un dia leyendo un libro en mi Slackware Linux 13.0, sin preocuparme por nada en el mundo, escuchando buena música, en un estado de completa relajación.&lt;br /&gt;&lt;br /&gt;Cuando apareció, el teclado parpadeó repentinamente, el mouse no respondía, la música dejó de sonar...&lt;br /&gt;&lt;br /&gt;"Imposible" - dije. El primer cuelgue en mi Slackware Linux desde el 2005, inadmisible.&lt;br /&gt;&lt;br /&gt;Intenté leer el log del sistema, pero cada el ordenador se reiniciaba aleatoriamente. Probe mi sistema Ubuntu (testing), instalado en el mismo disco. Fue aun peor, Ubuntu hasta la fecha no puede arrancar.&lt;br /&gt;&lt;br /&gt;Al final, probe Windows, - ":-(" - todo bien, no hay problemas... esperen, ... pantallazo azul...&lt;br /&gt;&lt;br /&gt;Comprobé la memoria del sistema, sus temperatura, componentes, conectores, ... nada.&lt;br /&gt;&lt;br /&gt;Al final, como último intento, limpie el CMOS con un jumper. Y, maravilla, todo funciona de nuevo, no volvio a ocurrir nada inesperado, - al menos en Linux - Slackware no volvió a fallar.&lt;br /&gt;&lt;br /&gt;Pero aún me pregunto, qué habra sido, pero algo sucedió. A pesar de haber sido un problema de hardware, &lt;span style="color: black; font-family: Georgia; font-size: small;"&gt; Slackware cayó, mi mundo cambió, mi alma, del fondo de esa sombra que flota sobre el suelo, no podrá liberarse. ¡Nunca más!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-9155312586458687445?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/9155312586458687445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=9155312586458687445&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/9155312586458687445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/9155312586458687445'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2010/01/extrano-problema-con-la-bios.html' title='Nunca más'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-992515979245243878</id><published>2009-11-23T09:57:00.000-08:00</published><updated>2010-02-25T07:28:43.533-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Apache commons IO - FilenameUtils</title><content type='html'>Cuantas veces nos ha tocado programar de forma 'universal'?, en mi caso, muchas. Las aplicaciones Java funcionan bien en varios entornos y plataformas diferentes, siempre y cuando no se toquen cosas realmente específicas.&lt;br /&gt;&lt;br /&gt;Una de estas, son los ficheros; los sistemas de ficheros en los dos sistemas operativos más populares en el mundo(GNU/Linux y Windows) varian, no drásticamente, pero lo hacen.&lt;br /&gt;&lt;br /&gt;Cuando se interactúa cona archivos y direcciones, se debe tener bastante cuidado, ya que Java interpreta las cosas según el entorno.&lt;br /&gt;&lt;br /&gt;Para normalizar los nombres de archivo y direcciones de directorio, algo tan trivial como lo el siguiente ejemplo, puede volverse un dolor de cabeza:&lt;br /&gt;&lt;textarea class="java" cols="60" name="code" rows="10"&gt;&amp;lt;br /&amp;gt; //normalized path&amp;lt;br /&amp;gt; File file = new File("configurations");&amp;lt;br /&amp;gt; String path = "project/configurations"; // path esperado&amp;lt;br /&amp;gt; System.out.println(file.getPath);&amp;lt;br /&amp;gt; System.out.println("path == filePath ? "+ file.getPath().equals(path));&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;Simple, no es cierto, veámos las salidas que generan:&lt;br /&gt;&lt;textarea class="xml" cols="60" name="code" rows="10"&gt;&amp;lt;br /&amp;gt; //windows&amp;lt;br /&amp;gt; project\configuration&amp;lt;br /&amp;gt; path == filePath ? false&amp;lt;br /&amp;gt; //gnu/linux&amp;lt;br /&amp;gt; project/configurations &amp;lt;br /&amp;gt; path == filePath ? true&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;La solución, utilizando &lt;a href="http://commons.apache.org/io/"&gt;Apache Commons IO&lt;/a&gt; , sería: &lt;br /&gt;&lt;br /&gt;&lt;textarea class="java" cols="60" name="code" rows="10"&gt;&amp;lt;br /&amp;gt; //normalized path&amp;lt;br /&amp;gt; File file = new File("configurations");&amp;lt;br /&amp;gt; String path = "project/configurations"; // path esperado&amp;lt;br /&amp;gt; System.out.println(file.getPath);&amp;lt;br /&amp;gt; System.out.println("path == filePath ? "+ FilenameUtils.normalize(file.getPath()).equals(path));&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;Y todos felices.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-992515979245243878?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/992515979245243878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=992515979245243878&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/992515979245243878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/992515979245243878'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/11/apache-commons-io-filenameutils.html' title='Apache commons IO - FilenameUtils'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5536479457635078562</id><published>2009-10-18T14:44:00.000-07:00</published><updated>2009-11-12T09:19:25.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='herramientas'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><title type='text'>Mantener Slackware current</title><content type='html'>&lt;a href="http://slackware.com/"&gt;Slackware &lt;/a&gt;como una de las más simples y completas distribuciones existentes, no provee complejos servicios de dependencia ni actualización. Pero existen herramientas de terceros que ayudan a mantener un sistema actualizado, en esta oportunidad, hablaremos de &lt;a href="http://www.slackpkg.org/"&gt;slackpkg&lt;/a&gt;.&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://learn.clemsonlinux.org/images/8/8c/BluepiSW.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"&gt;&lt;img border="0" height="195" src="http://learn.clemsonlinux.org/images/8/8c/BluepiSW.jpg" width="200" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2&gt;Slackpkg &lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Slackpkg es una herramienta de línea de comandos utilizada para instalar y actualizar paquetes a través de una red, viene como paquete adicional en la última versión de Slackware y es un reciente descubrimiento de mi parte.&lt;br /&gt;&lt;br /&gt;Permite actualizar paquetes instalados con la rama current de los mirrors de slackware con órdenes simples, por ejemplo:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="c" name="code"&gt;&amp;lt;br /&amp;gt; slackpkg install php&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Esta orden indica que se debe instalar la última versión disponible de php, si es que existe una versión previa de la aplicación, se procede a su actualización.&lt;br /&gt;&lt;br /&gt;Particularmente la opción que más utilizo es:&lt;br /&gt;&lt;textarea class="c" name="code"&gt;&amp;lt;br /&amp;gt; slackpkg upgrade-all&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Esto me permite actualizar todos los paquetes que tengo instalados en mi sistema actual.&lt;br /&gt;&lt;br /&gt;&lt;h2&gt;Configuración&lt;/h2&gt;&lt;br /&gt;&lt;br /&gt;Para poder utilzar slackpkg, debe configurar un mirror de donde descargar los paquetes, y actualizar el cache local. Para el mirror, se puede utilizar la siguiente dirección en el fichero /etc/slackpkg/mirrors :&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mirrors.usc.edu/pub/linux/distributions/slackware/slackware-13.0/"&gt;http://mirrors.usc.edu/pub/linux/distributions/slackware/slackware-13.0/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Luego, guarde las modificaciones realizadas y ejecute el comando:&lt;br /&gt;&lt;br /&gt;&lt;textarea class="c" name="code"&gt;&amp;lt;br /&amp;gt; slackpkg update&amp;lt;br /&amp;gt; &lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Asi, de forma sencilla, puede mantener actualizado el sistema base Slackware. Tome en cuenta que los paquetes no oficiales no pueden ser actualizados con esta herramienta.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5536479457635078562?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5536479457635078562/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5536479457635078562&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5536479457635078562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5536479457635078562'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/10/mantener-slackware-current.html' title='Mantener Slackware current'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3425999456442179969</id><published>2009-10-13T05:49:00.001-07:00</published><updated>2009-10-18T15:05:11.408-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='jpa'/><category scheme='http://www.blogger.com/atom/ns#' term='orm'/><title type='text'>JPA Entity Manager y la operación 'merge'</title><content type='html'>Durante el desarrollo de un proyecto, nos encontramos con el problema de que muchas actualizaciones que se realizaban a entidades (JPA) no se escribían en la base de datos. Revisando el log de Hibernate, encontramos que muchas veces la operación &amp;#39;merge&amp;#39; solamente ejecutaba una selección de datos, y no asi su modificacion. &lt;div&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;Revisando encontramos la siguiente referencia en el libro &amp;#39;Seam in action&amp;#39; :&lt;/div&gt;&lt;blockquote class="gmail_quote" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0.8ex; border-left-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; padding-left: 1ex; "&gt; Merging is a crude operation and should be avoided if possible&lt;/blockquote&gt;&lt;div&gt;Además el mismo autor recomienda hacer uso de las operaciones &amp;#39;flush&amp;#39; y &amp;#39;refresh&amp;#39; para actualizar datos o deshacer cambios. Esto nos salvo muchos problemas, ademas de habernos aclarado algunas dudas, ojala les sea útil. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3425999456442179969?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3425999456442179969/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3425999456442179969&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3425999456442179969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3425999456442179969'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/10/jpa-entity-manager-y-la-operacion-merge.html' title='JPA Entity Manager y la operación &apos;merge&apos;'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6210455272968059806</id><published>2009-09-04T06:59:00.000-07:00</published><updated>2009-10-18T15:05:33.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='nvidia'/><title type='text'>Nvidia driver en Slackware Linux 13</title><content type='html'>Este mes se lanzó el release oficial de &lt;a href="http://www.slackware.com/getslack/"&gt;Slackware 13&lt;/a&gt;, la cual tiene muchos cambios con respecto a su anterior versión, el &lt;a href="http://www.slackware.com/changelog/current.php?cpu=i386"&gt;changelog&lt;/a&gt; brinda mas detalles sobre el asunto.&lt;br /&gt;&lt;br /&gt;Para probar la nueva 'distro', actualicé segun las indicaciones del UPGRADE.txt y todo fue perfecto, una de las cosas que noté es que ahora Xorg brinda un soporte básico(sin direct rendering) para las tarjetas NVIDIA. Al instalar el driver para mi tarjeta de video(GForce 5200), el servidor X no podía iniciar; luego de revisar varios logs y foros, encontré la solución(temporal, supongo).&lt;br /&gt;&lt;br /&gt;Solamente se debe agregar el siguiente parámetro al fichero '/etc/kde/kdm/kdmrc':&lt;br /&gt;&lt;blockquote&gt;ServerCmd=/usr/bin/X -ignoreABI&lt;/blockquote&gt; Ahora solamente inicien el sistema X con 'init 4' y todo perfecto.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6210455272968059806?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6210455272968059806/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6210455272968059806&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6210455272968059806'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6210455272968059806'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/09/nvidia-driver-en-slackware-linux-13.html' title='Nvidia driver en Slackware Linux 13'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6606198085896845131</id><published>2009-08-15T17:26:00.000-07:00</published><updated>2009-10-18T15:05:54.160-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='case'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='tesis'/><title type='text'>Proyecto de grado: Tiergen</title><content type='html'>Como proyecto final de grado, dentro de la carrera de Ingeniería Informática, elegí como tema de tesis la generación de código para la norma de persistencia &lt;a href="http://es.wikipedia.org/wiki/Java_Persistence_API"&gt;JPA&lt;/a&gt;, todo a través de un editor de diagramas de clase.&lt;br /&gt;&lt;br /&gt;Para aumentar la capacidad de la aplicación, utilicé la arquitectura multicapas como arquitectura destino del código generado; el proyecto en si no es grande, pero si complejo, debido a los conceptos y componentes que se deben utilizar.&lt;br /&gt;&lt;br /&gt;El proyecto fué denonimado "Tiergen" por los factores ya nombrados, y soporta las siguientes normas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;UML 1.4.2 ISO/IEC 19501&lt;/li&gt;&lt;li&gt;MOF 1.4 ISO/IEC 19502&lt;/li&gt;&lt;li&gt;XMI 1.2&lt;/li&gt;&lt;li&gt;Java Persistence API 1.0 JSR 220&lt;/li&gt;&lt;li&gt;Java Metadata Interface JSR 40&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Las herramientas y componentes utilizados fueron:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://mdr.netbeans.org/"&gt;Netbeans Metadata Repository&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://mdr.netbeans.org/"&gt;Uml2Mof&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jgoodies.com/"&gt;JGoodies&lt;/a&gt; Forms&lt;/li&gt;&lt;li&gt;JGoddies Bindings&lt;/li&gt;&lt;li&gt;&lt;a href="http://logging.apache.org/log4j/1.2/index.html"&gt;Log4j&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://velocity.apache.org/moving.html"&gt;Apache Velocity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;El proyecto es un fork de la aplicación &lt;a href="https://mvcase.dev.java.net/"&gt;MVCase de Daniel Lucredio&lt;/a&gt; y actualmente está liberado con la licencia BSD, el contenedor del proyecto es Google Code y está disponible a cualquiera que tenga curiosidad sobre el tema.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/tiergen/"&gt;Enlace al proyecto alojado en Google Code&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6606198085896845131?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6606198085896845131/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6606198085896845131&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6606198085896845131'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6606198085896845131'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/08/proyecto-de-grado-tiergen.html' title='Proyecto de grado: Tiergen'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3094868865140176294</id><published>2009-05-15T19:45:00.000-07:00</published><updated>2009-10-18T15:06:16.944-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ant'/><title type='text'>Apache Ant</title><content type='html'>&lt;p&gt;¿Cuantas veces debemos llevar un producto en elaboración a una demostración a los clientes, y cuantas veces se encuentra el tiempo de configurar un entorno para dicho producto?. Casi nunca, es muy tedioso configurar un entorno ajeno al de desarrollo; pero para eso se crearon las herramientas de automatización, y en el mundo Java, una de las más versátiles(y usadas) es &lt;a href="http://ant.apache.org/"&gt;Apache Ant&lt;/a&gt;.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Para no alargar la explicación puse el enlace, pero en español &lt;a href="http://es.wikipedia.org/wiki/Apache_Ant"&gt;Apache Ant&lt;/a&gt;, instalar esta utilidad requiere de pocos pasos, que explico a continuación:&lt;/p&gt;&lt;br /&gt;&lt;h3&gt;Requisitos&lt;/h3&gt;&lt;ul&gt;&lt;li&gt;Java Virtual Machine(entorno normal para la ejecución de aplicaciones Java)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Java Development Kit(para compilar y empaquetar)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;*Pueden encontrarse en &lt;a href="http://java.sun.com/javase/downloads/index.jsp"&gt;Sun Downloads&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Entorno Windows&lt;/h3&gt;&lt;br /&gt;&lt;textarea name="code" class="xml" cols="60" rows="10"&gt;&lt;br /&gt;&gt;SET ANT_HOME=I:\miUsbStick\bin\ant&lt;br /&gt;&gt;SET PATH=%PATH%;%ANT_HOME%\bin&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;h3&gt;Entorno GNU/Linux&lt;/h3&gt;&lt;br /&gt;&lt;textarea name="code" class="xml" cols="60" rows="10"&gt;&lt;br /&gt;#export ANT_HOME=/media/sdb1/miUsbStick/bin/ant&lt;br /&gt;#export PATH=${PATH}:${ANT_HOME}/bin&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;* Nota: Deben tener asignada la variable JAVA_HOME, muy importante&lt;br /&gt;&lt;br /&gt;Una vez instalado en el entorno, basta crear un fichero de construcción, o build file, que mas o menos se ve así:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="xml" cols="60" rows="10"&gt;&lt;br /&gt;&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&lt;br /&gt;&lt;project name="case3capas" default="run" basedir="."&gt;&lt;br /&gt; &lt;description&gt;Proyecto de tesis, Juan Timoteo Ponce Ortiz. UAGRM.&lt;/description&gt;&lt;br /&gt; &lt;property name="common.location" location="../../common/src/build/common.xml"&gt;&lt;br /&gt; &lt;import file="${common.location}"&gt;&lt;br /&gt;&lt;br /&gt; &lt;!--  &lt;import file="C:/projects/swissbytes/sbcommon/src/build/common.xml"&gt;&lt;br /&gt; --&gt;&lt;br /&gt; &lt;property name="project.src" location="src"&gt;&lt;br /&gt; &lt;property name="project.build" location="build-ant"&gt;&lt;br /&gt; &lt;property name="project.build.dist" location="${project.build}/dist"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;path id="compile.classpath"&gt;&lt;br /&gt;  &lt;fileset dir="lib" includes="**/*.jar"&gt;&lt;br /&gt;  &lt;pathelement location="${java.home}/lib/tools.jar"&gt;&lt;br /&gt; &lt;/path&gt;&lt;br /&gt;&lt;br /&gt; &lt;path id="src.path"&gt;&lt;br /&gt;  &lt;pathelement location="${project.src}"&gt;&lt;br /&gt; &lt;/path&gt;&lt;br /&gt;&lt;br /&gt; &lt;path id="run.classpath"&gt;&lt;br /&gt;  &lt;path refid="compile.classpath"&gt;&lt;br /&gt;  &lt;path location="${project.build}"&gt;&lt;br /&gt;  &lt;path location="${project.config}"&gt;&lt;br /&gt;  &lt;path location="resources"&gt;&lt;br /&gt; &lt;/path&gt;&lt;br /&gt;&lt;br /&gt; &lt;target name="distJar" depends="build" description="Build a distribution jar file"&gt;&lt;br /&gt;  &lt;mkdir dir="${project.build.dist}"&gt;&lt;br /&gt;  &lt;jar destfile="${project.build.dist}/${dist.jar.name}"&gt;&lt;br /&gt;   &lt;manifest&gt;&lt;br /&gt;    &lt;attribute name="Built-By" value="Juan Timoteo Ponce Ortiz."&gt;&lt;br /&gt;    &lt;attribute name="Main-Class" value="vista/Main"&gt;&lt;br /&gt;    &lt;attribute name="Class-Path" value="./config/ ./templates/ lib/antlr-2.7.5.jar lib/avalon-logkit-2.1.jar lib/commons-collections-3.2.1.jar lib/commons-lang-2.4.jar lib/commons-logging-1.1.jar lib/jdom-1.0.jar lib/jmi.jar lib/jmiutils.jar lib/log4j-1.2.12.jar lib/mdrapi.jar lib/mof.jar lib/nbmdr.jar lib/openide-util.jar lib/oro-2.0.8.jar lib/servletapi-2.3.jar lib/umlmetamodel.jar lib/velocity-1.6.1-dep.jar lib/velocity-1.6.1.jar lib/werken-xpath-0.9.4.jar lib/ant-launcher.jar lib/ant.jar lib/xercesImpl.jar lib/xml-apis.jar lib/swingx-0.9.5.jar lib/forms-1.2.1.jar lib/looks-2.2.1.jar lib/ejb3-persistence.jar lib/tools.jar lib/l2fprod-common-all.jar lib/jgoodies-uif-lite.jar"&gt;&lt;br /&gt;   &lt;/manifest&gt;&lt;br /&gt;   &lt;fileset dir="${project.build}"&gt;&lt;br /&gt;    &lt;include name="**"&gt;&lt;br /&gt;    &lt;exclude name="**/*Test.class"&gt;&lt;br /&gt;    &lt;exclude name="*.*"&gt;&lt;br /&gt;   &lt;/fileset&gt;&lt;br /&gt;   &lt;fileset dir="resources"&gt;&lt;br /&gt;    &lt;include name="**"&gt;&lt;br /&gt;    &lt;exclude name="*.db"&gt;&lt;br /&gt;   &lt;/fileset&gt;&lt;br /&gt;  &lt;/jar&gt;&lt;br /&gt; &lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;!-- def distribution; usually overridden in the build.xml file    &lt;target name="dist" depends="rebuild,distJar"&gt;  --&gt;&lt;br /&gt; &lt;target name="dist" depends="build,distJar"&gt;&lt;br /&gt;  &lt;property name="base.name" value="${ant.project.name}"&gt;&lt;br /&gt;  &lt;delete dir="release"&gt;&lt;br /&gt;  &lt;mkdir dir="release"&gt;&lt;br /&gt;  &lt;mkdir dir="release/log"&gt;&lt;br /&gt;  &lt;mkdir dir="release/config"&gt;&lt;br /&gt;  &lt;mkdir dir="release/lib"&gt;&lt;br /&gt;  &lt;mkdir dir="release/templates"&gt;&lt;br /&gt;&lt;br /&gt;  &lt;copy todir="release/config"&gt;&lt;br /&gt;   &lt;fileset dir="config" includes="**"&gt;&lt;br /&gt;  &lt;/copy&gt;&lt;br /&gt;&lt;br /&gt;  &lt;copy todir="release/templates"&gt;&lt;br /&gt;   &lt;fileset dir="templates" includes="**"&gt;&lt;br /&gt;  &lt;/copy&gt;&lt;br /&gt;  &lt;copy todir="release/lib"&gt;&lt;br /&gt;   &lt;fileset dir="lib" includes="*.jar"&gt;&lt;br /&gt;  &lt;/copy&gt;&lt;br /&gt;&lt;br /&gt;  &lt;copy todir="release/common_libs"&gt;&lt;br /&gt;   &lt;fileset dir="common_libs" includes="**/*"&gt;&lt;br /&gt;  &lt;/copy&gt;&lt;br /&gt;&lt;br /&gt;  &lt;copy todir="release" file="${project.build.dist}/${dist.jar.name}"&gt;&lt;br /&gt;&lt;br /&gt; &lt;/target&gt;&lt;br /&gt;&lt;br /&gt; &lt;target name="run" description="Run the app" depends="build"&gt;&lt;br /&gt;  &lt;java classname="vista.Main" fork="true" classpathref="run.classpath"&gt;&lt;br /&gt; &lt;/target&gt;&lt;br /&gt;&lt;br /&gt; &lt;target name="copy-libs" description="Copy repo libs to lib folder"&gt;&lt;br /&gt;  &lt;copy todir="lib"&gt;&lt;br /&gt;   &lt;path refid="compile.classpath"&gt;&lt;br /&gt;  &lt;/copy&gt;&lt;br /&gt; &lt;/target&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/project&gt;&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;Tal vez algo complejo, pero muestra toda la potencia que puede llegar a tener Ant. Saludos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3094868865140176294?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3094868865140176294/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3094868865140176294&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3094868865140176294'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3094868865140176294'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/05/apache-ant.html' title='Apache Ant'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5512222578671303382</id><published>2009-01-24T08:55:00.000-08:00</published><updated>2009-04-17T16:56:34.835-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Copia rápida de archivos con Java</title><content type='html'>Recientemente se me presentó una situación interesante, en la empresa que trabajo llego una queja de un cliente sobre el funcionamiento de un producto. Esta aplicación copia ficheros entre memorias flash usb y el disco duro, utilizando las herramientas IO de Java.&lt;br /&gt;&lt;br /&gt;El problema en concreto era que con algunos ordenadores se presentaba un error en la copia, no pudiendo realizarse de forma correcta, el algoritmo de copia original era este:&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="java" cols="60" rows="10"&gt;&lt;br /&gt;public static void copyFile(File in, File out) &lt;br /&gt;        throws IOException &lt;br /&gt;    {&lt;br /&gt;        FileChannel inChannel = new&lt;br /&gt;            FileInputStream(in).getChannel();&lt;br /&gt;        FileChannel outChannel = new&lt;br /&gt;            FileOutputStream(out).getChannel();&lt;br /&gt;        try {&lt;br /&gt;            inChannel.transferTo(0, inChannel.size(),&lt;br /&gt;                    outChannel);&lt;br /&gt;        } &lt;br /&gt;        catch (IOException e) {&lt;br /&gt;            throw e;&lt;br /&gt;        }&lt;br /&gt;        finally {&lt;br /&gt;            if (inChannel != null) inChannel.close();&lt;br /&gt;            if (outChannel != null) outChannel.close();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Este algoritmo de copia es bastante ràpido, un poco mas que la copia nativa del sistema, pero generaba un error con la JVM 1.6.x, en algunos ordenadores. Entonces le propusimos cambiarlo, para esto tuvimos que probar todas las opciones utilizando las librerias nativas de Java, las java.io.*.&lt;br /&gt;&lt;br /&gt;Las pruebas se centraron en dos tipos de algoritmos:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Copia con buffer de datos nativos&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;textarea name="code" class="java" cols="60" rows="10"&gt;&lt;br /&gt;static final int BUFFER_SIZE = 2048;&lt;br /&gt;static final byte[] buffer = new byte[BUFF_SIZE];&lt;br /&gt;&lt;br /&gt;public static void copy(String from, String to) throws IOException{&lt;br /&gt;   InputStream in = null;&lt;br /&gt;   OutputStream out = null; &lt;br /&gt;   int amountRead;&lt;br /&gt;   try {&lt;br /&gt;      in = new FileInputStream(from);&lt;br /&gt;      out = new FileOutputStream(to);&lt;br /&gt;      while (true) {&lt;br /&gt;            amountRead = in.read(buffer);&lt;br /&gt;            if (amountRead == -1) &lt;br /&gt;               break;            &lt;br /&gt;            out.write(buffer, 0, amountRead); &lt;br /&gt;         }&lt;br /&gt;      } &lt;br /&gt;   } finally {&lt;br /&gt;      if (in != null) {&lt;br /&gt;         in.close();&lt;br /&gt;      }&lt;br /&gt;      if (out != null) {&lt;br /&gt;         out.close();&lt;br /&gt;      }&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Copia con buffer&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;textarea name="code" class="java" cols="60" rows="10"&gt;&lt;br /&gt;public static void copyFile(File in, File out) throws Exception {&lt;br /&gt;    BufferedInpInputStream fis  = new BufferedInputStream( new FileInputStream(in) );&lt;br /&gt;    BufferedOutputStream fos = new BufferedInputStream( new FileOutputStream(out) );&lt;br /&gt;    try {&lt;br /&gt;        byte[] buf = new byte[2048];&lt;br /&gt;        int i = 0;&lt;br /&gt;        while ((i = fis.read(buf)) != -1) {&lt;br /&gt;            fos.write(buf, 0, i);&lt;br /&gt;        }&lt;br /&gt;    } &lt;br /&gt;    catch (Exception e) {&lt;br /&gt;        throw e;&lt;br /&gt;    }&lt;br /&gt;    finally {&lt;br /&gt;        if (fis != null) fis.close();&lt;br /&gt;        if (fos != null) fos.close();&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;&lt;/textarea&gt;&lt;br /&gt;&lt;br /&gt;De forma inesperada, las pruebas de rendimiento realizadas con JUnit dan como la mejor alternativa, al algoritmo de &lt;span style="font-weight: bold;"&gt;Copia con buffer de datos nativos&lt;/span&gt;, por lo que lo sustituimos dentro de la aplicacion, teniendo un rendimiento entre 5-10% menor que el algoritmo original, pero sin problemas con la JVM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5512222578671303382?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5512222578671303382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5512222578671303382&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5512222578671303382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5512222578671303382'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2009/01/copia-rpida-de-archivos-con-java.html' title='Copia rápida de archivos con Java'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3920356975776487895</id><published>2008-12-21T10:56:00.000-08:00</published><updated>2008-12-21T11:25:42.883-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cuento'/><title type='text'>Perdido en el bosque</title><content type='html'>Cierto tiempo atrás un grupo de cazadores se disponía a iniciar una expedición a un terreno ya conocido, por demas queda decir que eran personas acostumbradas al oficio, haciéndolo mas por deporte que por necesidad.&lt;br /&gt;&lt;br /&gt;El grupo estaba compuesto por cuatro personas, todas armadas con escopetas calibre 16, debido a la peligrosidad de los animales de la zona. El lugar escogido era denominado chaco, zonas amplias donde el clima se caracteriza por la elevada temperatura y el ambiente bajo en humedad.&lt;br /&gt;&lt;br /&gt;Tambien es una zona donde las lluvias son reducidas, contando con pocos dias nublados durante una temporada. A pesar de tan desfavorables condiciones, estos lugares se ven poblados de animales de todo tipo, desde lagartos, cocodrilos, tigres, víboras y otros que pudieron adaptarse.&lt;br /&gt;&lt;br /&gt;Nuestro grupo se lanza a la faena un viernes al amanecer, separandose desde el inicio para buscar un sitio de encuentro, todos ellos tienen conocimientos de supervivencia, por lo que no necesitan ayuda alguna.&lt;br /&gt;&lt;br /&gt;El mas experimentado toma la ruta del cañaveral, rozando la senda de agua que yace seca desde hace semanas, esperando encontrar un tipo de venado denominado corzuela.&lt;br /&gt;&lt;br /&gt;El segundo, que por ser un novato en estos terrenos, marca su camino con piedras, telas y otros objetos que permitan reconocer la ruta que recorre.&lt;br /&gt;&lt;br /&gt;Los otros dos siguen su camino guiados por instinto, perdiendose en el monte ralo. Al dia siguiente se reunen en una laguna, tal como trataron el dia anterior, pero solamente tres de ellos aparecen, el cuarto miembro del grupo no aparece por ningun lado.&lt;br /&gt;&lt;br /&gt;Cansados de esperar su llegada, los miembros restantes salen en su busqueda, pero no separados, sino en grupo, repitiendo su nombre a gritos a medida que avanzan.&lt;br /&gt;&lt;br /&gt;Al llegar el dia lunes, los apresurados rescatistas continuan buscando al cazador extraviado, ahora se les unen los pobladores cercanos a la zona, que conocen mejor el terreno.&lt;br /&gt;&lt;br /&gt;El alba del dia martes los sorprende cerca de la carretera departamental, su busqueda se habia prolongado por mas de cincuenta kilometros, pero su compañero no aparecia.&lt;br /&gt;&lt;br /&gt;Al llegar el dia jueves, el extravio ya es un tema regional, convocando a todas las personas que tienen algun interes en el hecho; el grupo de rescatistas comienza una busqueda en forma de embudo desde el punto de partida de los cazadores, realizando un rastrillaje incansable por dos dias.&lt;br /&gt;&lt;br /&gt;Al llegar a los limites posibles por un ser humano, se presume por dar al extraviado como muerto, invocando abandonar la búsqueda.&lt;br /&gt;&lt;br /&gt;El dia domingo, una niña que iba a recoger agua de un pozo para el ganado de su familia, escucha el sonido jadeante de un ser vivo a la distancia. Temerosa de acercarse, informa a su padre de esto, el mismo que con la impresion de un ladrón, toma su arma y se dirige al sitio con su hijo mayor.&lt;br /&gt;&lt;br /&gt;Al llegar a inmediaciones del pozo, el hombre escucha el mismo jadeo, que viene desde afuera de su propiedad. Ingresa al monte unos treinta metros, cuando se encuentra a un hombre en los ultimos suspiros de vida acurrucado a un arbol, con una escopeta a un lado y un hedor pestilente que emana de su cabeza.&lt;br /&gt;&lt;br /&gt;El grupo de rescatistas que abandonaba la búsqueda, se encuentra con el campesino en su retirada, el cual les informa del suceso y los lleva ante el ser carente de reacción. Grande es la impresión de sus compañeros al verlo casi en huesos, siendo que era una persona corpulenta. Lo intentan llevar a un centro de atención, pero al primer intento de acercamiento suspira al viento de sus pulmones, reduciendo el aire que tan vagamente lo mantenia vivo, y fallece.&lt;br /&gt;&lt;br /&gt;Resignados todos, se dan a la tarea de averiguar como un cazador experimentado se extravia en un terreno tan conocido. Al seguir las huellas que habia dejado en el camino, que aun estaban claras debido a la sequedad del terreno, el hombre se habia desviado del punto inicial hacia el este unos cinco kilometros, despues de los cuales empieza un interminable ciclo sobre una ruta de varios cientros de metros a la redonda, estaba caminando sobre sus pasos por varios dias.&lt;br /&gt;&lt;br /&gt;Pero esto no tiene mucho sentido, ya que los primeros kilometros los recorrio el primer dia, y el ciclo interminable prosiguio desde el dia sabado hasta el siguiente domingo, entonces, ¿que habia ocurrido?.&lt;br /&gt;&lt;br /&gt;Tambien notaron que el grado de desnutricion en que estaba era demasiado para una semana de castigo, hubo en esto otro elemento, que llevo a confundir a nuestro cazador, llevandolo al punto de la perdición, desorientandolo por completo por dias, hasta que ya no pudo mas y se arrimo a un arbol cercano, esperando el desenlace.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3920356975776487895?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3920356975776487895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3920356975776487895&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3920356975776487895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3920356975776487895'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/12/perdido-en-el-bosque.html' title='Perdido en el bosque'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5219039430997148196</id><published>2008-11-10T08:28:00.000-08:00</published><updated>2008-11-10T08:34:33.416-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='simpsons'/><category scheme='http://www.blogger.com/atom/ns#' term='poema'/><category scheme='http://www.blogger.com/atom/ns#' term='suspenso'/><category scheme='http://www.blogger.com/atom/ns#' term='poe'/><category scheme='http://www.blogger.com/atom/ns#' term='allan'/><category scheme='http://www.blogger.com/atom/ns#' term='edgar'/><title type='text'>Edgar Allan Poe - El Cuervo</title><content type='html'>Sinceramente una de las mejores lecturas de mi vida, un poema rítmico, simple, irradia temor y sobrecogimiento. Que mas se puede decir de una de las obras literarias mas resaltantes de la historia:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://es.wikipedia.org/wiki/Edgar_Allan_Poe"&gt;Edgar Allan Poe&lt;/a&gt; - El cuervo&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Cierta noche aciaga, cuando, con la mente cansada,&lt;br /&gt;meditaba sobre varios libracos de sabiduría ancestral&lt;br /&gt;y asentía, adormecido, de pronto se oyó un rasguido,&lt;br /&gt;como si alguien muy suavemente llamara a mi portal.&lt;br /&gt;"Es un visitante -me dije-, que está llamando al portal;&lt;br /&gt;sólo eso y nada más."&lt;br /&gt;&lt;/p&gt; &lt;p&gt;¡Ah, recuerdo tan claramente aquel desolado diciembre!&lt;br /&gt;Cada chispa resplandeciente dejaba un rastro espectral.&lt;br /&gt;Yo esperaba ansioso el alba, pues no había hallado calma en mis libros,&lt;br /&gt;ni consuelo a la pérdida abismal&lt;br /&gt;de aquella a quien los ángeles Leonor podrán llamar&lt;br /&gt;y aquí nadie nombrará.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Cada crujido de las cortinas purpúreas y cetrinas&lt;br /&gt;me embargaba de dañinas dudas y mi sobresalto era tal&lt;br /&gt;que, para calmar mi angustia repetí con voz mustia:&lt;br /&gt;"No es sino un visitante que ha llegado a mi portal;&lt;br /&gt;un tardío visitante esperando en mi portal.&lt;br /&gt;Sólo eso y nada más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Mas de pronto me animé y sin vacilación hablé:&lt;br /&gt;"Caballero -dije-, o señora, me tendréis que disculpar&lt;br /&gt;pues estaba adormecido cuando oí vuestro rasguido&lt;br /&gt;y tan suave había sido vuestro golpe en mi portal&lt;br /&gt;que dudé de haberlo oído...", y abrí de golpe el portal:&lt;br /&gt;sólo sombras, nada más.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;La noche miré de lleno, de temor y dudas pleno,&lt;br /&gt;y soñé sueños que nadie osó soñar jamás;&lt;br /&gt;pero en este silencio atroz, superior a toda voz,&lt;br /&gt;sólo se oyó la palabra "Leonor", que yo me atreví a susurrar...&lt;br /&gt;sí, susurré la palabra "Leonor" y un eco volvióla a nombrar.&lt;br /&gt;Sólo eso y nada más.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Aunque mi alma ardía por dentro regresé a mis aposentos&lt;br /&gt;pero pronto aquel rasguido se escuchó más pertinaz.&lt;br /&gt;"Esta vez quien sea que llama ha llamado a mi ventana;&lt;br /&gt;veré pues de qué se trata, que misterio habrá detrás.&lt;br /&gt;Si mi corazón se aplaca lo podré desentrañar.&lt;br /&gt;¡Es el viento y nada más!".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Mas cuando abrí la persiana se coló por la ventana,&lt;br /&gt;agitando el plumaje, un cuervo muy solemne y ancestral.&lt;br /&gt;Sin cumplido o miramiento, sin detenerse un momento,&lt;br /&gt;con aire envarado y grave fue a posarse en mi portal,&lt;br /&gt;en un pálido busto de Palas que hay encima del umbral;&lt;br /&gt;fue, posóse y nada más.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Esta negra y torva ave tocó, con su aire grave,&lt;br /&gt;en sonriente extrañeza mi gris solemnidad.&lt;br /&gt;"Ese penacho rapado -le dije-, no te impide ser&lt;br /&gt;osado, viejo cuervo desterrado de la negrura abisal;&lt;br /&gt;¿cuál es tu tétrico nombre en el abismo infernal?"&lt;br /&gt;Dijo el cuervo: "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Que una ave zarrapastrosa tuviera esa voz virtuosa&lt;br /&gt;sorprendióme aunque el sentido fuera tan poco cabal,&lt;br /&gt;pues acordaréis conmigo que pocos habrán tenido&lt;br /&gt;ocasión de ver posado tal pájaro en su portal.&lt;br /&gt;Ni ave ni bestia alguna en la estatua del portal&lt;br /&gt;que se llamara "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Mas el cuervo, altivo, adusto, no pronunció desde el busto,&lt;br /&gt;como si en ello le fuera el alma, ni una sílaba más.&lt;br /&gt;No movió una sola pluma ni dijo palabra alguna&lt;br /&gt;hasta que al fin musité: "Vi a otros amigos volar;&lt;br /&gt;por la mañana él también, cual mis anhelos, volará".&lt;br /&gt;Dijo entonces :"Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Esta certera respuesta dejó mi alma traspuesta;&lt;br /&gt;"Sin duda - dije-, repite lo que ha podido acopiar&lt;br /&gt;del repertorio olvidado de algún amo desgraciado&lt;br /&gt;que en su caída redujo sus canciones a un refrán:&lt;br /&gt;"Nunca, nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Como el cuervo aún convertía en sonrisa mi porfía&lt;br /&gt;planté una silla mullida frente al ave y el portal;&lt;br /&gt;y hundido en el terciopelo me afané con recelo&lt;br /&gt;en descubrir qué quería la funesta ave ancestral&lt;br /&gt;al repetir: "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Esto, sentado, pensaba, aunque sin decir palabra&lt;br /&gt;al ave que ahora quemaba mi pecho con su mirar;&lt;br /&gt;eso y más cosas pensaba, con la cabeza apoyada&lt;br /&gt;sobre el cojín purpúreo que el candil hacía brillar.&lt;br /&gt;¡Sobre aquel cojín purpúreo que ella gustaba de usar,&lt;br /&gt;y ya no usará nunca más!.&lt;br /&gt;&lt;/p&gt; &lt;p&gt;&lt;br /&gt;Luego el aire se hizo denso, como si ardiera un incienso&lt;br /&gt;mecido por serafines de leve andar musical.&lt;br /&gt;"¡Miserable! -me dije-. ¡Tu Dios estos ángeles dirige&lt;br /&gt;hacia ti con el filtro que a Leonor te hará olvidar!&lt;br /&gt;¡Bebe, bebe el dulce filtro, y a Leonor olvidarás!".&lt;br /&gt;Dijo el cuervo: "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;"¡Profeta! -grité -, ser malvado, profeta eres, diablo alado!&lt;br /&gt;¿Del Tentador enviado o acaso una tempestad&lt;br /&gt;trajo tu torvo plumaje hasta este yermo paraje,&lt;br /&gt;a esta morada espectral? ¡Mas te imploro, dime ya,&lt;br /&gt;dime, te imploro, si existe algún bálsamo en Galaad!"&lt;br /&gt;Dijo el cuervo: "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;"¡Profeta! -grité -, ser malvado, profeta eres, diablo alado!&lt;br /&gt;Por el Dios que veneramos, por el manto celestial,&lt;br /&gt;dile a este desventurado si en el Edén lejano&lt;br /&gt;a Leonor, ahora entre ángeles, un día podré abrazar".&lt;br /&gt;Dijo el cuervo: "¡Nunca más!".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;"¡Diablo alado, no hables más!", dije, dando un paso atrás;&lt;br /&gt;¡Que la tromba te devuelva a la negrura abisal!&lt;br /&gt;¡Ni rastro de tu plumaje en recuerdo de tu ultraje&lt;br /&gt;quiero en mi portal! ¡Deja en paz mi soledad!&lt;br /&gt;¡Quita el pico de mi pecho y tu sombra del portal!"&lt;br /&gt;Dijo el cuervo: "Nunca más".&lt;br /&gt;&lt;/p&gt; &lt;p&gt;Y el impávido cuervo osado aún sigue, sigue posado,&lt;br /&gt;en el pálido busto de Palas que hay encima del portal;&lt;br /&gt;y su mirada aguileña es la de un demonio que sueña,&lt;br /&gt;cuya sombra el candil en el suelo proyecta fantasmal;&lt;br /&gt;y mi alma, de esa sombra que allí flota fantasmal,&lt;br /&gt;no se alzará...¡nunca más!.&lt;br /&gt;&lt;span class="OtraVersion" id="El_cuervo_.28T.Juan_Antonio_P.C3.A9rez_Bonalde.29" title="El cuervo (T.Juan Antonio Pérez Bonalde)|El cuervo (T.Juan Antonio Pérez Bonalde)" style="display: none;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;br /&gt;PD: Existe un capítulo de los Simpsons con una referencia a este poema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5219039430997148196?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5219039430997148196/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5219039430997148196&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5219039430997148196'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5219039430997148196'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/11/edgar-allan-poe-el-cuervo.html' title='Edgar Allan Poe - El Cuervo'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7061343919640939810</id><published>2008-11-07T15:14:00.000-08:00</published><updated>2009-10-18T15:07:02.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Programacion básica</title><content type='html'>Como auxiliar de programación, tiendo a escuchar muchas preguntas y aseveraciones sobre los lenguajes de programación, he aqui algunas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;¿Cual es el mejor lenguaje?&lt;/li&gt;&lt;li&gt;Pero nos quieres enseñar en consola, lo que yo quiero es programar en serio.&lt;/li&gt;&lt;li&gt;Cuantos lenguajes debo aprender para ser un buen programador?&lt;/li&gt;&lt;li&gt;Yo uso PHP, es mejor que Pascal, por que ahi no declaro nada y sale todo.&lt;/li&gt;&lt;li&gt;Y siguen..&lt;/li&gt;&lt;/ul&gt;Mis respuestas siempre son las mismas, en base a mi experiencia propongo estas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;El mejor lenguaje de programacion depende de lo quieras hacer, si quieres programar para escritorio, fundamenta tu elección.&lt;/li&gt;&lt;li&gt;La programación en consola puede ser básica o avanzada, las interfaces son solamente pantalleo a lo que en realidad hace una aplicacion.&lt;/li&gt;&lt;li&gt;Para ser un buen programador puede bastar solamente con saber un solo lenguaje, en este mundo no es mejor quien sabe un poco de todo, sino aquel que domina todo lo que maneja.&lt;/li&gt;&lt;li&gt;A mi parecer los lenguajes tipados son los mejores para aprender a programar y para programar, no creo que sea una buena elección programar solamente por los tipos de datos, sinceramente PHP no me gusta demasiado exactamente por eso.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7061343919640939810?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7061343919640939810/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7061343919640939810&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7061343919640939810'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7061343919640939810'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/11/programacion-bsica.html' title='Programacion básica'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-11927701954852980</id><published>2008-11-07T15:05:00.000-08:00</published><updated>2009-10-18T15:06:40.079-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='metamodelo'/><title type='text'>Metamodelo de UML 2</title><content type='html'>UML fue propuesto de forma paralela a MOF, debido a que la OMG, una organizacion que define estándares, publicó una solicitud halla por los noventa.&lt;br /&gt;&lt;br /&gt;La solicitud fue para dos cosas, un lenguaje para definir estructuras( ver metalenguaje), y un lenguaje de modelado de propoósito general.&lt;br /&gt;&lt;br /&gt;La repuesta para ambos fue UML, desde IBM, Rational , y un par de decenas de compañias.&lt;br /&gt;&lt;br /&gt;UML en si es un lenguaje, por tanto puede interpretarse y validarse, la contraparte fue MOF, un "lenguaje" para definir estructuras u otros lenguajes, que a su vez esta definido en UML, en el UML Profile for MOF.&lt;br /&gt;&lt;br /&gt;Ahora, que tal si quiero programar en MOF o sobre UML(no modelar UML, sino programar con UML), hace poco la solucion a esto era implementar MOF o UML( que son muy similares).&lt;br /&gt;&lt;br /&gt;Esto era lento y propenso a errores, entonces la OMG publico una libreria que contiene la definicion completa de UML en Java, utilizando las potentes interfaces.&lt;br /&gt;&lt;br /&gt;Esta libreria define lo que cada elemento dentro de UML deberia poder hacer, sus herencias, características y métodos. Entonces solamente debemos implementar estas interfaces, pero esto tambien es tedioso; la solucion a todos nuestros problemas es MDR(Metadata Repository) de Netbeans, que es un repositorio de datos que puede realizar la implementacion de metamodelos, que cosa no?.&lt;br /&gt;&lt;br /&gt;Continuara...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-11927701954852980?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/11927701954852980/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=11927701954852980&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/11927701954852980'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/11927701954852980'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/11/metamodelo-de-uml-2.html' title='Metamodelo de UML 2'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2784110765791748955</id><published>2008-10-12T12:16:00.000-07:00</published><updated>2008-10-12T12:23:18.975-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ieee'/><category scheme='http://www.blogger.com/atom/ns#' term='std'/><category scheme='http://www.blogger.com/atom/ns#' term='descarga'/><category scheme='http://www.blogger.com/atom/ns#' term='publicaciones'/><category scheme='http://www.blogger.com/atom/ns#' term='ingenieria  del software'/><category scheme='http://www.blogger.com/atom/ns#' term='standard for software user documentation'/><title type='text'>Estándares de la IEEE</title><content type='html'>Inicio esto para ayudar a toda persona interesada en los artículos de la &lt;a href="http://ieee.org/"&gt;IEEE&lt;/a&gt; que no pueden obtenerlos debido al dinero, como siempre.&lt;br /&gt;&lt;br /&gt;Para reducirles el calvario de la búsqueda publicaré para su descarga las normas para ingeniería del software que más me costaron encontrar.&lt;br /&gt;&lt;br /&gt;Iniciamos con &lt;span style="font-style: italic;"&gt;"IEEE Std 1063Standard for Software User Documentation" es una norma para escribir documentaciones de usuario, muy completa y útil.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gigasize.com/get.php?d=gszlvhkxgvf"&gt;IEEE Std 1063- Standard for Software User Documentation.rar&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2784110765791748955?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2784110765791748955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2784110765791748955&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2784110765791748955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2784110765791748955'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/10/estndares-de-la-ieee.html' title='Estándares de la IEEE'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2677086276874404410</id><published>2008-09-12T15:14:00.000-07:00</published><updated>2008-10-12T12:16:38.869-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='uml'/><category scheme='http://www.blogger.com/atom/ns#' term='jacobson'/><category scheme='http://www.blogger.com/atom/ns#' term='metamodelo'/><category scheme='http://www.blogger.com/atom/ns#' term='booch'/><category scheme='http://www.blogger.com/atom/ns#' term='modelo'/><title type='text'>Metamodelo UML - 1</title><content type='html'>Como avance dentro de un proyecto de grado, me encuentro con &lt;a href="http://es.wikipedia.org/wiki/Uml"&gt;UML(Unified Modelling Language)&lt;/a&gt;, este famoso y conocidísimo lenguaje de modelado definido por los grandes de los procesos de desarrollo del software.&lt;br /&gt;&lt;br /&gt;Pero, ¿qué es UML?, UML es una convención para modelar( visualizar, diseñar, especificar, documentar) algun elemento del mundo real, esa es la definicion de modelado, UML esta orientado hacia el desarrollo de software, aunque eso no quiera decir que solo se pueda usar para esto.&lt;br /&gt;&lt;br /&gt;Perfecto entonces, es algo que me permite modelar, ¿pero como?.&lt;br /&gt;&lt;br /&gt;UML define un conjunto de elementos que permiten el modelado, llamados diagramas. Existen diagramas de todo tipo, que tienen un objetivo específico y diferentes características propias.&lt;br /&gt;&lt;br /&gt;Ahora mi problema es que debía definir UML en un lenguaje de programación, es decir, crear la estructura para modelor. Esto es algo interesante, ya que UML esta definido en UML !!.&lt;br /&gt;&lt;br /&gt;Algo extraño, no?.  Esto es llamado metamodelo, un metamodelo es un modelo de un modelo, son datos de datos, son esquemas de esquemas.&lt;br /&gt;&lt;br /&gt;El metamodelo de UML se vería algo así:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_KIIvcCa3NIc/SMrs8u71GVI/AAAAAAAAACY/lNetwsmwW0M/s1600-h/multiple-inheritance-original.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_KIIvcCa3NIc/SMrs8u71GVI/AAAAAAAAACY/lNetwsmwW0M/s320/multiple-inheritance-original.png" alt="" id="BLOGGER_PHOTO_ID_5245265244161644882" border="0" /&gt; &lt;/a&gt;Semejante cosa es posible gracias &lt;a style="font-style: italic;" href="http://en.wikipedia.org/wiki/Meta-Object_Facility"&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;MOF&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Meta-Object_Facility"&gt;&lt;span style="font-style: italic;"&gt; Meta-Object_Facility"&lt;/span&gt;&lt;/a&gt;, que es otra norma para definir esquemas o arquitecturas, fué creado específicamente para UML, pero sus beneficios son numerosos.&lt;br /&gt;&lt;br /&gt;Ahora como solo me interesan los diagramas de clase, una pequeña porción del UML, cada uno de estos elementos define la estructura del diagrama, sus elementos, operaciones y atributos.&lt;br /&gt;&lt;br /&gt;Entonces la solución es utilizar MDR Meta-Data Repository, un proyecto iniciado por Netbeans que maneja una implementación del metamodelo de UML, aunque eso por supuesto no es todo lo que puede hacer.&lt;br /&gt;&lt;br /&gt;Hasta aqui este post, más adelante seguiremos con este tema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2677086276874404410?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2677086276874404410/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2677086276874404410&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2677086276874404410'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2677086276874404410'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/09/metamodelo-uml-1.html' title='Metamodelo UML - 1'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_KIIvcCa3NIc/SMrs8u71GVI/AAAAAAAAACY/lNetwsmwW0M/s72-c/multiple-inheritance-original.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7491065873136097877</id><published>2008-09-01T16:43:00.000-07:00</published><updated>2008-09-01T17:06:35.955-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='recursion'/><category scheme='http://www.blogger.com/atom/ns#' term='codigo'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Recursion</title><content type='html'>&lt;p&gt;&lt;br /&gt;La recursion es una de las características de la programación mas intrigantes, asi como efectiva y muy interesante.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Segun la enciclopedia libre &lt;a href="http://www.blogger.com/es.wikipedia.org"&gt;Wikipedia&lt;/a&gt;, la definición es la siguiente:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Recursión es la forma en la cual se especifica un proceso basado en su propia definición.&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Algo complejo, no?. Desde el punto de vista del ser humano, podemos tomar el ejemplo mas simple, una persona sosteniendo un espejo frente a otro, reflejando el entorno, ambos crean algo llamado "ciclo infinito".&lt;br /&gt;&lt;br /&gt;Esto aclara un poco la idea; aunque estos criterios son mas utiles para ámbitos matemáticos, como la informatica. Esto es muy evidente cuando colocamos un ejemplo simple, veamos:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;textarea name="code" class="java" cols="60" rows="10"&gt;asdf&lt;br /&gt;&lt;br /&gt;//PROCESO ITERATIVO&lt;br /&gt;//programa para multiplicar en base a sumas sucesivas&lt;br /&gt;int multiplicar( int multiplicando , int multiplicador ){&lt;br /&gt;    int resultado = 0;&lt;br /&gt;    for( int i=0; i&lt; multiplicador; i++ ){&lt;br /&gt;        resultado = resultado + multiplicando;&lt;br /&gt;    }&lt;br /&gt;    return resultado;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//PROCESO RECURSIVO&lt;br /&gt;//Este proceso llama a multiplicar, es una mascara&lt;br /&gt;int multiplicarMask( int multiplicando , int multiplicador ){&lt;br /&gt;        return multiplicarRecursivo( 0 , multiplicando , multiplicador );&lt;br /&gt;}&lt;br /&gt;//Este es el proceso recursivo, recibe el acumulador del resultado&lt;br /&gt;// ademas del multiplicando y  el multiplicador    &lt;br /&gt;int multiplicarRecursivo( int resultado ,int multiplicando ,int multiplicador ){&lt;br /&gt;        if( multiplicador == 0)&lt;br /&gt;            return resultado;&lt;br /&gt;        return multiplicarRecursivo( resultado + multiplicando , multiplicando , multiplicador -1 );&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7491065873136097877?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7491065873136097877/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7491065873136097877&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7491065873136097877'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7491065873136097877'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/09/recursion.html' title='Recursion'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-2556860108038289299</id><published>2008-05-29T19:13:00.000-07:00</published><updated>2008-05-29T19:30:43.372-07:00</updated><title type='text'>Slapt-get, Slackware potenciado</title><content type='html'>Como se habran dado cuenta, soy un fanático de Slackware, la distro mas antigua de todas, que tiene otras características que ya se han discutido anteriormente.&lt;br /&gt;Pero ahora me toca hablar de una herramienta muy potente, pero antes, muchos amigos son usuarios asiduos de Ubuntu y todas sus variantes, cada vez me tiran en cara la facilidad de su sistema de paquetes, basta con decir:&lt;br /&gt;&lt;blockquote&gt;apt-get install aplicacion&lt;br /&gt;&lt;/blockquote&gt;En cambio, uno debia descargar los paquetes, buscar sus posibles dependencias, y luego instalar, lo cual es simple en lo simple, y complejo en lo opuesto. Pero dirán, ¿entonces por que no compilas loque quieras instalar?.&lt;br /&gt;&lt;br /&gt;Respuesta simple, por tiempo, estar compilando quita mucho tiempo, por lo que esto de momento queda descartado.&lt;br /&gt;&lt;br /&gt;Entonces probé varias opciones, buscar todo mediante wget, usando swaret(que es muy bueno), pero al final me recomendaron &lt;a href="http://es.wikipedia.org/wiki/Slapt-get"&gt;slapt-get&lt;/a&gt;, una herramienta basada en el famoso apt-get de Debian.&lt;br /&gt;&lt;br /&gt;Una vez instalado y configurado, una maravilla, solo basta con:&lt;br /&gt;&lt;blockquote&gt;slapt-get -i postgresql&lt;/blockquote&gt;&lt;br /&gt;e instala absolutamente todo lo necesario, sus dependencias y posibles complementos, por lo que me quede asombrado inicialmente. Mucho mas asombrado quede al probar su opcion de actualizacion de distribucion:&lt;br /&gt;&lt;blockquote&gt;slapt-get --dist-upgrade&lt;/blockquote&gt;&lt;br /&gt;todo va correctamente, y sin esfuerzo, ya actualicé mi Slackware.&lt;br /&gt;&lt;br /&gt;Asi que aqui va como instalar y configurar esta potente herramienta:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Descargamos el paquete desde &lt;a href="http://www.linuxpackages.net"&gt;linuxpackages&lt;/a&gt; slapt-get-xxx.tgz&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Instalamos&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;installpkg slapt-get-xxx.tgz&lt;br /&gt;&lt;/blockquote&gt;&lt;ul&gt;&lt;li&gt;Ahora configuramos el archivo /etc/slapt-get/slapt-getrc descomentando todas las lineas de contengan nuestra version de Slackware, y alguna superior, en mi caso descomente todas las que contienen Slackware 12 y Slackware 12.1.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Finalmente ejecutamos&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;slapt-get -update&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Todo listo, ya estamos preparados para probar esta utileria.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2556860108038289299?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2556860108038289299/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2556860108038289299&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2556860108038289299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2556860108038289299'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/05/slapt-get-slackware-potenciado.html' title='Slapt-get, Slackware potenciado'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6533482603550599173</id><published>2008-05-25T17:10:00.000-07:00</published><updated>2008-05-25T18:28:25.417-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='numeracion'/><category scheme='http://www.blogger.com/atom/ns#' term='informatica'/><category scheme='http://www.blogger.com/atom/ns#' term='diagramas de flujo'/><category scheme='http://www.blogger.com/atom/ns#' term='introduccion'/><title type='text'>Introducción a la informática</title><content type='html'>Empezamos con las publicaciones para la materia "Introducción a la informática", todo el material que se provea de aqui en adelante, es material universitario, sujeto a licencias públicas.&lt;br /&gt;&lt;br /&gt;Primero iniciamos con la publicación de manuales básicos sobre computación, historia, tecnología y actualidad.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.um.es/docencia/barzana/II/Ii05.html"&gt;Sistemas de numeración&lt;/a&gt; , una breve pero concreta descripción de los sistemas de numeración.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.google.com/url?sa=t&amp;amp;ct=res&amp;amp;cd=6&amp;amp;url=http%3A%2F%2F146.83.41.79%2Fprofesor%2Fjmbm%2Fco1%2FApuntes%2FProgComp%2FApt-PComp.htm&amp;amp;ei=FRI6SMqgPJT2eeKN5dwN&amp;amp;usg=AFQjCNFOjXhkJhVDANlJAGBfiM8rbDy_Lg&amp;amp;sig2=c3OjhHN1XA-SGWwXIqJ10A"&gt;Diagramas de flujo&lt;/a&gt; , un documento completo, con definiciones, detalles, y un par de ejemplos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6533482603550599173?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6533482603550599173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6533482603550599173&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6533482603550599173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6533482603550599173'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/05/introduccin-la-informtica.html' title='Introducción a la informática'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6758408810884510596</id><published>2008-04-21T19:40:00.000-07:00</published><updated>2009-02-09T18:32:42.232-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='smtp'/><category scheme='http://www.blogger.com/atom/ns#' term='correo'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='javamail'/><title type='text'>Envio de Mensajes via SMTP en Java</title><content type='html'>La mayoría de los desarrolladores en Java, al momento de hablar de aplicaciones de correo, gritan JavaMail, y estan en lo correcto. Pero por motivos de aprendizaje, o por condiciones varias, uno se ve en la necesidad de programar esto.&lt;br /&gt;&lt;br /&gt;SMTP es sencillo, y desarrollar aplicaciones que interactuen con el tambien lo son. Por lo que presento una estructura muy simple para el envío de mensajes por SMTP, claro es un hilo.&lt;br /&gt;&lt;br /&gt;&lt;textarea name="code" class="java" cols="60" rows="10"&gt;&lt;br /&gt;&lt;br /&gt;package negocio.smtp;&lt;br /&gt;&lt;br /&gt;import datos.Mensaje;&lt;br /&gt;import java.io.DataInputStream;&lt;br /&gt;import java.io.DataOutputStream;&lt;br /&gt;import java.io.IOException;&lt;br /&gt;import java.net.Socket;&lt;br /&gt;import negocio.*;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; *&lt;br /&gt; * @author Juan Timoteo Ponce Ortiz&lt;br /&gt; */&lt;br /&gt;public class ManejadorSMTP extends Thread{&lt;br /&gt;&lt;br /&gt;    private Socket socket;&lt;br /&gt;    private DataInputStream entrada;&lt;br /&gt;    private DataOutputStream salida;&lt;br /&gt;    private String server;&lt;br /&gt;    private Mensaje msg;&lt;br /&gt;&lt;br /&gt;    public static final String OK_CONECTADO     = "220";&lt;br /&gt;    public static final String OK_GENERICO      = "250";&lt;br /&gt;    public static final String HOLA             = "HELO ";&lt;br /&gt;    public static final String EOLN             = "\n";&lt;br /&gt;    public static final String REMITENTE        = "MAIL From: ";&lt;br /&gt;    public static final String DESTINO          = "RCPT To: ";&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public ManejadorSMTP(String serv , Mensaje ms) {&lt;br /&gt;        this.msg = ms;&lt;br /&gt;        this.server = serv;&lt;br /&gt;        try {&lt;br /&gt;            socket = new Socket( server , 25 );&lt;br /&gt;            salida = new DataOutputStream( socket.getOutputStream() );&lt;br /&gt;            entrada = new DataInputStream( socket.getInputStream() );&lt;br /&gt;&lt;br /&gt;            while( ! entrada.readLine().contains( OK_CONECTADO ));&lt;br /&gt;            print( "Conectado " );&lt;br /&gt;&lt;br /&gt;            salida.writeBytes( HOLA  + server + EOLN );&lt;br /&gt;&lt;br /&gt;            while( ! entrada.readLine().contains( OK_GENERICO ));&lt;br /&gt;            print( "Autentificado " );&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean setRemitente(String remit){&lt;br /&gt;        String cad;&lt;br /&gt;        try {&lt;br /&gt;            salida.writeBytes( REMITENTE + remit + EOLN );&lt;br /&gt;            cad = entrada.readLine();&lt;br /&gt;&lt;br /&gt;            if(cad.contains( OK_GENERICO ))&lt;br /&gt;                return true;&lt;br /&gt;        } catch (Exception ex) {&lt;br /&gt;            ex.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean setDestino(String dest){&lt;br /&gt;        String cad;&lt;br /&gt;        try {&lt;br /&gt;            salida.writeBytes( DESTINO + dest + EOLN );&lt;br /&gt;            cad = entrada.readLine();&lt;br /&gt;&lt;br /&gt;            if(cad.contains( OK_GENERICO ))&lt;br /&gt;                return true;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean setTema(String tema){&lt;br /&gt;        String cad;&lt;br /&gt;        try {&lt;br /&gt;            salida.writeBytes("DATA\n");&lt;br /&gt;            cad = entrada.readLine();&lt;br /&gt;&lt;br /&gt;            if(cad.contains("354")){&lt;br /&gt;                salida.writeBytes("Subject:"+tema+"\n");&lt;br /&gt;                return true;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setContenido(String msg){&lt;br /&gt;        try {&lt;br /&gt;            salida.writeBytes(msg);&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public boolean enviar(){&lt;br /&gt;        String cad;&lt;br /&gt;        try {&lt;br /&gt;            salida.writeBytes("\n.\n");&lt;br /&gt;            cad = entrada.readLine();&lt;br /&gt;&lt;br /&gt;            if(cad.contains("250"))&lt;br /&gt;                return true;&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;        return false;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void setMensaje( Mensaje msg ){&lt;br /&gt;        this.msg = msg;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void enviarMensaje() {&lt;br /&gt;        try {&lt;br /&gt;            setRemitente( msg.getRemitente() );&lt;br /&gt;            setDestino( msg.getDestino() );&lt;br /&gt;            setTema( msg.getTema() );&lt;br /&gt;            setContenido( msg.getContenido() );&lt;br /&gt;            if( enviar() )&lt;br /&gt;                print( "Mensaje enviado" );&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            e.printStackTrace();&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public void run() {&lt;br /&gt;        enviarMensaje();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    private void print( String str){&lt;br /&gt;        System.out.println( str );&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        String server= "servidorSMTP";&lt;br /&gt;&lt;br /&gt;        Mensaje msg = new Mensaje();&lt;br /&gt;        msg.setRemitente( "prueba@"+server );&lt;br /&gt;        msg.setDestino("grupo7sa@"+server);&lt;br /&gt;        msg.setTema("Envio desde Java 55");&lt;br /&gt;        msg.setContenido("Prueba de envio mediante smtp 55");&lt;br /&gt;&lt;br /&gt;        ManejadorSMTP smtp = new ManejadorSMTP( server , msg );&lt;br /&gt;        smtp.start();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;/textarea&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6758408810884510596?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6758408810884510596/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6758408810884510596&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6758408810884510596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6758408810884510596'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/04/envio-de-mensajes-via-smtp-en-java.html' title='Envio de Mensajes via SMTP en Java'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5401886748063005494</id><published>2008-04-09T04:44:00.000-07:00</published><updated>2008-04-09T04:45:32.111-07:00</updated><title type='text'>Prueba de edicion Yomar</title><content type='html'>Prueba de edicion desde cuenta, Yomar Cesar.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5401886748063005494?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5401886748063005494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5401886748063005494&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5401886748063005494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5401886748063005494'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/04/prueba-de-edicion-yomar.html' title='Prueba de edicion Yomar'/><author><name>Yomar</name><uri>http://www.blogger.com/profile/13363921513067871637</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-5502681789285906166.post-2036040545833853068</id><published>2008-04-01T08:19:00.000-07:00</published><updated>2008-04-01T08:36:31.290-07:00</updated><title type='text'>Crea tu propio servidor de correo, sendmail en Slackware</title><content type='html'>A quien no le gustaría poder tener su propio sistema de correo funcionando en casa, gracias a GNU/Linux, y en mi caso, a Slackware, puedes hacerlo de una forma muy sencilla.&lt;br /&gt;&lt;br /&gt;Aunque necesitas algunas cosas primero:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Un dominio, algo como "timo.com", mas o menos, existen servicios que te ofrecen servicios gratuitos.&lt;/li&gt;&lt;li&gt;Alguna distribucion GNU/Linux, en este caso Slackware.&lt;/li&gt;&lt;/ul&gt;Por defecto,  las distros traen esta utilidad  por defecto, pero no configurada. Primero, se debe entender que existen dos tipos básicos de correo electrónico, webmail  y servidores de correo.&lt;br /&gt;&lt;br /&gt;Un ejemplo de webmail  es Hotmail, y otro de servidor de correo es Gmail, nuestro caso es el segundo. por lo que se necesitan dos servicios para esto:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Servidor STMP(puerto 25) para el envio de correo.&lt;/li&gt;&lt;li&gt;Servidor POP3(puerto 110) para la recepción de correo.&lt;/li&gt;&lt;/ul&gt;Slackware incluye un servidor de smtp, sendmail, y un servidor de pop3, denominado popa3d. Ahora pasamos a configurar ambos servicios.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Configuración Sendmail&lt;br /&gt;&lt;/span&gt;Para la configuración de sendmail, tenemos dos opciones, utilizar un archivo predefinido, o crearnos uno. Para usar el archivo de configuración por defecto:&lt;br /&gt;&lt;blockquote&gt;cp /usr/share/sendmail/cf/sendmail-slackware.cf /etc/mail/sendmail.cf&lt;/blockquote&gt;para crear uno propio, debemos usar un fichero .mc, ya que es mas entendible, entonces:&lt;br /&gt;&lt;blockquote&gt;cp /usr/share/sendmail/cf/cf/sendmail-slackware.mc /etc/mail/sendmail.mc&lt;br /&gt;cd /etc/mail&lt;br /&gt;jed sendmail.mc&lt;br /&gt;m4 sendmail.mc &gt; sendmail.cf&lt;/blockquote&gt;y listo, ya esta configurado sendmail, ahora solamente iniciamos el servicio:&lt;br /&gt;&lt;blockquote&gt;chmod +x /etc/rc.d/rc.sendmail&lt;br /&gt;/etc/rc.d/rc.sendmail start&lt;/blockquote&gt;y podemos verificar su ejecución con&lt;br /&gt;&lt;blockquote&gt;nmap localhost&lt;/blockquote&gt;&lt;br /&gt;si vemos el puerto 25 abierto, para smtp todo esta correcto.&lt;br /&gt;&lt;br /&gt;Configuración POPA3D&lt;br /&gt;&lt;br /&gt;Este es simple, simplemente editamos el fichero "/etc/inetd.conf" y descomentamos la linea que contenga el comando "popa3d", luego:&lt;br /&gt;/etc/rc.d/rc.inetd restart&lt;br /&gt;y verificamos su estado con&lt;br /&gt;&lt;blockquote&gt;nmap localhost&lt;/blockquote&gt;Si quieres verificarlom configura Thunderbird, o Evolution, o el cliente de correo que quieras con servidor smtp = "tudominio" y servidor pop3="tudominio", todos los usuarios que tengan una cuenta en tu pc, tienen su cuenta de correo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-2036040545833853068?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/2036040545833853068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=2036040545833853068&amp;isPopup=true' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2036040545833853068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/2036040545833853068'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/04/crea-tu-propio-servidor-de-correo.html' title='Crea tu propio servidor de correo, sendmail en Slackware'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-724852121103634764</id><published>2008-03-17T08:44:00.000-07:00</published><updated>2008-03-17T09:21:29.520-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='configuracion'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='httpd'/><title type='text'>Servidor Apache en Slackware 12</title><content type='html'>Para algunos que nos mudamos de versiones anteriores, en el changelog de Slackware 12 nos indican que &lt;a href="http://www.blogger.com/www.apache.org"&gt;Apache&lt;/a&gt; pasa a llamarse httpd, debido a convenciones.&lt;br /&gt;&lt;br /&gt;Como sabemos, tanto los paquetes de &lt;a href="http://www.blogger.com/www.apache.org"&gt;Apache&lt;/a&gt;, como los de &lt;a href="http://www.blogger.com/www.php.net"&gt;PHP&lt;/a&gt; y &lt;a href="http://www.blogger.com/www.mysql.com"&gt;Mysql&lt;/a&gt; vienen incluidos por defecto en nuestra amada distro, asi que, ¿cómo usarlos?.&lt;br /&gt;&lt;br /&gt;Primero, para iniciar &lt;a href="http://www.blogger.com/www.apache.org"&gt;Apache&lt;/a&gt; tenemos dos caminos:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;apachectl start&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ó, simplemente damos permisos de ejecución a nuestro archivo de servicio:&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;chmod +x /etc/rc.d/rc.httpd&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;luego&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/etc/rc.d/rc.httpd start&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Por supuesto que ambas formas soportan las opciones "start | stop | restart", por lo que no habrá ningún problema. Por defecto el directorio root de Apache esta en&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/var/www/htdocs&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;para cambiarlo, editamos el archivo de configuración&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;/etc/httpd/httpd.conf&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Bien, ahora activamos el soporte para &lt;a href="http://www.blogger.com/www.php.net"&gt;PHP&lt;/a&gt;, en el fichero anterior, descomentamos&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Include /etc/httpd/mod_php.conf&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;y reiniciamos el servidor, todo listo.&lt;br /&gt;&lt;br /&gt;Para probar, en nuestro navegador por defecto, dirigimos la URL&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://localhost&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;ó&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;http://localhost:80&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-724852121103634764?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/724852121103634764/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=724852121103634764&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/724852121103634764'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/724852121103634764'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/03/servidor-apache-en-slackware-12.html' title='Servidor Apache en Slackware 12'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-5615401911378649056</id><published>2008-03-12T19:34:00.000-07:00</published><updated>2008-03-12T19:39:05.288-07:00</updated><title type='text'>Tabla de requerimientos de hardware, distros GNU/Linux</title><content type='html'>Algunos amigos van semanas diciendo que su PC no puede con SuSe, o Fedora, pues para que ya no me molesten, aca una tabla de requerimientos de hardware para las distros mas populares.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microteknologias.cl/blog/?p=904"&gt;Tabla requerimientos hardware segun distro&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ojala les sirva.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-5615401911378649056?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/5615401911378649056/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=5615401911378649056&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5615401911378649056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/5615401911378649056'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/03/algunos-amigos-van-semanas-diciendo-que.html' title='Tabla de requerimientos de hardware, distros GNU/Linux'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8801329233594299026</id><published>2008-03-12T19:20:00.000-07:00</published><updated>2008-03-12T19:27:24.817-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><category scheme='http://www.blogger.com/atom/ns#' term='software'/><category scheme='http://www.blogger.com/atom/ns#' term='windows'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>Fedora Transformation Pack</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://i32.tinypic.com/iz2o0p.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://i32.tinypic.com/iz2o0p.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Via &lt;a href="http://www.vivalinux.com.ar/"&gt;vivalinux &lt;/a&gt;me entero de la salida de un pack de software que nos brinda la posibilidad de cambiar la apariencia de Windows, haciendo que se parezca a la popular distribución de Red Hat, mediante &lt;a href="http://rapidshare.com/files/99105781/Fedora_Transformation_Pack_1.0.rar"&gt;Fedora Transformatio Pack&lt;/a&gt;(descarga).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;El tiempo dirá si logrará tener el éxito de &lt;a href="http://www.google.com.bo/url?sa=t&amp;amp;ct=res&amp;amp;cd=1&amp;amp;url=http%3A%2F%2Fwww.vivalinux.com.ar%2Fdesktop%2Fubuntu-transformation-pack.html&amp;amp;ei=P5DYR5aEJKXAggS-5rTDCA&amp;amp;usg=AFQjCNHWJYhHhDHVkZPfSt7-LgR8zIs3pA&amp;amp;sig2=Do0PwoZtKwSXhjt5E3OQwg"&gt;Ubuntu Transformation Pack&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8801329233594299026?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8801329233594299026/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8801329233594299026&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8801329233594299026'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8801329233594299026'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/03/fedora-transformation-pack.html' title='Fedora Transformation Pack'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://i32.tinypic.com/iz2o0p_th.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-8825181759072885917</id><published>2008-03-12T18:57:00.000-07:00</published><updated>2008-03-12T19:18:20.916-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='wikipedia'/><category scheme='http://www.blogger.com/atom/ns#' term='mediawiki'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='wiki'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><title type='text'>Crea tu propia enciclopedia</title><content type='html'>Cualquier persona que se digne a navegar por la Red, debe haber pasado en algun momento por la &lt;a href="http://es.wikipedia.org/"&gt;Wikipedia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Este es uno de los proyectos de comunidad libre mas grandes del mundo, con artículos de gran calidad y revisiones periódicas por parte de personas maravillosas :-) .&lt;br /&gt;&lt;br /&gt;Pero, que sería la Wikipedia sin &lt;a href="http://www.mediawiki.org/wiki/MediaWiki/es"&gt;MediaWiki&lt;/a&gt;, la plataforma que soporta el proyecto.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.mediawiki.org/wiki/MediaWiki/es"&gt;MediaWiki&lt;/a&gt; es una plataforma libre escrita inicialmente para &lt;a href="http://es.wikipedia.org/"&gt;Wikipedia&lt;/a&gt;, utiliza el concepto de páginas wiki almacenadas en bases de datos relacionales.&lt;br /&gt;&lt;br /&gt;A lo nuestro, por su capacidad de software libre, existe la posibilidad de instalar &lt;a href="http://www.mediawiki.org/wiki/MediaWiki/es"&gt;MediaWiki&lt;/a&gt; en nuestra PC. Sus requerimientos son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;PHP version 5 o superior&lt;/li&gt;&lt;li&gt;Mysql version 5.0 o superior&lt;/li&gt;&lt;li&gt;Apache cualquier version&lt;/li&gt;&lt;/ul&gt;Una alternativa muy completa es &lt;a href="http://es.wikipedia.org/wiki/XAMPP"&gt;XAMPP&lt;/a&gt;, que incluye todo el software requerido.&lt;br /&gt;&lt;br /&gt;Se descarga el software desde aquí, deben copiarse los archivos a la carpeta de publicación de Apache, se siguen las instrucciones para crear la base de datos, y listo.&lt;br /&gt;&lt;br /&gt;Tenemos nuestra &lt;a href="http://www.mediawiki.org/wiki/MediaWiki/es"&gt;MediaWiki&lt;/a&gt; funcional.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://webscripts.softpedia.com/screenshots/MediaWiki-20344.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 313px; height: 198px;" src="http://webscripts.softpedia.com/screenshots/MediaWiki-20344.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-8825181759072885917?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/8825181759072885917/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=8825181759072885917&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8825181759072885917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/8825181759072885917'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/03/crea-tu-propia-enciclopedia.html' title='Crea tu propia enciclopedia'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-794358708545260803</id><published>2008-03-03T18:23:00.000-08:00</published><updated>2008-03-12T19:29:13.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='distros'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='caps'/><title type='text'>Por qué usar Slackware</title><content type='html'>&lt;span&gt;Varios amigos que recien entraron al mundo GNU/Linux, me increpan por que no uso una distro mas "cool", como Ubuntu, Fedora, o Suse.&lt;br /&gt;&lt;br /&gt;Bueno, en esto mi punto de vista se basa en ciertas experiencias propias con alguna de estas distribuciones:&lt;br /&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;Ubuntu, hermosa, rapida, muy elaborada y amigable. Pero, instalar alguna cosa sin tener una conexión a internet... &lt;/li&gt;&lt;li&gt;Suse, similar a Ubuntu, pero mucho mas completa. Pero, yo no requiero un tanque cuando solo requiero una camioneta.&lt;/li&gt;&lt;li&gt;Fedora, pues no se.&lt;/li&gt;&lt;/ul&gt;Uso Slackware desde hace mucho tiempo, no por nada es una de las distros mas antiguas y tambien una de las mas usadas, con una comunidad muy grande.&lt;br /&gt;&lt;br /&gt;Algunas de las características que me gustaria puntualizar, son:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Simplicidad, creo que esta palabra define todo lo que Slackware significa, no tiene grandes sistemas de paquetes que te empañan cualquier trabajo.&lt;/li&gt;&lt;li&gt;Filosofía, es aun una de las pocas distros que viene con una version "limpia" del kernel Linux, además que incita a que el usuario mejore las características del mismo.&lt;/li&gt;&lt;li&gt;Estabilidad, tuve la oportunidad de manipular un ordenador ATX que aun funciona de una manera increible.&lt;/li&gt;&lt;li&gt;Rapidez, si, es tal vez la distro mas rápida que he utilizado.&lt;/li&gt;&lt;li&gt;Versatilidad, la he podido instalar y configurar en casi todo ordenador que tuve en mano(aunque claro, en algunos casos con algo de trabajo).&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s1600-h/escritorio2.png"&gt;&lt;img style="width: 237px; height: 176px;" src="http://bp3.blogger.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s320/escritorio2.png" alt="" id="BLOGGER_PHOTO_ID_5173902416891858658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-size:85%;"&gt;Slackware 12 en ejecución&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Debo agregar, tambien cosas que a la gente no les gusta de Slackware:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Instalación en modo consola(ncurses)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No tiene herramientas visuales de configuración del sistema&lt;/li&gt;&lt;li&gt;No hace el trabajo que el usuario debería hacer&lt;/li&gt;&lt;/ul&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_KIIvcCa3NIc/R81lH-1fzwI/AAAAAAAAABE/PTjli1zGR9o/s1600-h/ncurses1.png"&gt;&lt;img style="width: 243px; height: 182px;" src="http://bp1.blogger.com/_KIIvcCa3NIc/R81lH-1fzwI/AAAAAAAAABE/PTjli1zGR9o/s320/ncurses1.png" alt="" id="BLOGGER_PHOTO_ID_5173902734719438594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Si aún no estas desanimado por esto, te invito a &lt;a href="http://www.blogger.com/www.slackware.com/getslack/"&gt;probar Slackware&lt;/a&gt; te aseguro que no te arrepentirás.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_KIIvcCa3NIc/R81k1u1fzvI/AAAAAAAAAA8/LvYvKasjr1w/s1600-h/escritorio1.png"&gt;&lt;img style="width: 255px; height: 190px;" src="http://bp0.blogger.com/_KIIvcCa3NIc/R81k1u1fzvI/AAAAAAAAAA8/LvYvKasjr1w/s320/escritorio1.png" alt="" id="BLOGGER_PHOTO_ID_5173902421186825970" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Aca algunos sitios muy interesantes:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://esslackware.blogspot.com/"&gt;_ES Slackware blog en español sobre Slackware y SL&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://slackwiki.org/Main_Page"&gt;SlackWiki si no te asusta el inglés, sitio muy completo con mucha información&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.slackware.cl/"&gt;Slackware Chile comunidad chilena de Slackware, muy recomendada&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-794358708545260803?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/794358708545260803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=794358708545260803&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/794358708545260803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/794358708545260803'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/03/por-qu-usar-slackware.html' title='Por qué usar Slackware'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_KIIvcCa3NIc/R81k1e1fzuI/AAAAAAAAAA0/yNC2_51eh3Q/s72-c/escritorio2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6035056856041494348</id><published>2008-01-30T14:37:00.000-08:00</published><updated>2008-09-02T14:04:53.475-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='routers'/><category scheme='http://www.blogger.com/atom/ns#' term='redes'/><category scheme='http://www.blogger.com/atom/ns#' term='restore'/><category scheme='http://www.blogger.com/atom/ns#' term='tftp'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='informatica'/><title type='text'>Configuracion de routers: Recuperacion del IOS</title><content type='html'>Todos aquellos curiosos o administradores de redes, en algun momento, deben manipular y administrar router's.&lt;br /&gt;&lt;br /&gt;Llega algun momento, que, por alguna circunstancia, borramos el IOS(Sistema Operativo) del mismo, incluso de la memoria residente.&lt;br /&gt;&lt;br /&gt;El asunto es, ¿que hacer?. Debido a que el software es propietario, es ilegal descargarlo, por lo que solo existe una solucion:&lt;br /&gt;&lt;br /&gt;* Copiar desde otro router(funcional) el IOS hacia nuestro dispositivo victima.&lt;br /&gt;&lt;br /&gt;La forma correcta de hacerlo es mediante un host intermedio, el cual puede ser una PC. Mediante un servidor TFTP, podemos copiar el sistema del router en buen estado, y pasarlo hacia el dispositvo 'vacio'.&lt;br /&gt;&lt;br /&gt;Se puede usar el &lt;a href="http://perso.wanadoo.fr/philippe.jounin/tftpd32.html"&gt;TFTPd32&lt;/a&gt; , conectar nuestro router mediante un cable ethernet inverso, se ejecuta:&lt;br /&gt;&lt;br /&gt;# copy c2600.xx.bin tftp://192.168.1.15&lt;br /&gt;&lt;br /&gt;por ejemplo, asi ya tenemos copiado el IOS en nuestra PC, ahora para pasarlo hacia el dispositivo vacio, nos valemos de su ROMmon mode, colocando las direcciones mediante:&lt;br /&gt;&lt;br /&gt;#set IP_ADDRESS=192.168.1.16&lt;br /&gt;&lt;br /&gt;y los demas restantes, entonces&lt;br /&gt;&lt;br /&gt;#set &lt;small&gt;TFTP_FILE=&lt;/small&gt;c2600.xx.bin&lt;br /&gt;&lt;br /&gt;y listo, al reiniciar iniciamos el wizard correspondiente.&lt;br /&gt;&lt;br /&gt;Para resumir, aca un comprimido con las guias y una imagen para el router Cisco 2600:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Comprimido con guias e imagen IOS -&gt; &lt;a href="http://www.gigasize.com/get.php?d=lrz2sf83r9b"&gt;Restore IOS&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Ruta de descargar del servidor tftp -&gt; &lt;a href="http://perso.wanadoo.fr/philippe.jounin/tftpd32.html"&gt;TFTPd32&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6035056856041494348?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6035056856041494348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6035056856041494348&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6035056856041494348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6035056856041494348'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2008/01/configuracion-de-routers-recuperacion.html' title='Configuracion de routers: Recuperacion del IOS'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-3264930080217884870</id><published>2007-11-14T15:14:00.000-08:00</published><updated>2008-03-12T19:30:09.873-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='escritorio'/><category scheme='http://www.blogger.com/atom/ns#' term='screenshots'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='slackware'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='beryl'/><title type='text'></title><content type='html'>Slackware 10.2(mi primera Slack)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s1600-h/linux.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s320/linux.jpg" alt="" id="BLOGGER_PHOTO_ID_5132840921152255570" border="0" /&gt;&lt;/a&gt;Slackware 11&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_KIIvcCa3NIc/RzuDlXHedkI/AAAAAAAAAAM/t_xb4lyzJC4/s1600-h/instantnea1.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_KIIvcCa3NIc/RzuDlXHedkI/AAAAAAAAAAM/t_xb4lyzJC4/s320/instantnea1.png" alt="" id="BLOGGER_PHOTO_ID_5132840878202582594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Slackware 12&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_KIIvcCa3NIc/RzuDoHHedmI/AAAAAAAAAAc/R-mabiFO8-4/s1600-h/instant%C3%A1nea151.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_KIIvcCa3NIc/RzuDoHHedmI/AAAAAAAAAAc/R-mabiFO8-4/s320/instant%C3%A1nea151.png" alt="" id="BLOGGER_PHOTO_ID_5132840925447222882" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Ah, desde el momento que probé Slackware, sabía que era para mí.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-3264930080217884870?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/3264930080217884870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=3264930080217884870&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3264930080217884870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/3264930080217884870'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/11/slackware-11-slackware-10.html' title=''/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_KIIvcCa3NIc/RzuDn3HedlI/AAAAAAAAAAU/KFOCY32pN9o/s72-c/linux.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4680119815748140946</id><published>2007-10-26T20:11:00.000-07:00</published><updated>2007-10-26T20:18:03.990-07:00</updated><title type='text'>Proyecto SI2</title><content type='html'>&lt;a href="http://www.megaupload.com/?d=7F56ZOM8"&gt;Proyecto SI2&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4680119815748140946?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4680119815748140946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4680119815748140946&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4680119815748140946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4680119815748140946'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/10/proyecto-si2.html' title='Proyecto SI2'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-1625195465407707972</id><published>2007-09-20T20:35:00.000-07:00</published><updated>2007-09-20T20:39:47.909-07:00</updated><title type='text'>Actualización Proyecto - Modificacion Severa</title><content type='html'>Aqui va la ultima modificación, ahora con la novedad de que maneja un modulo de errores, del cual ya estan las bases.&lt;br /&gt;&lt;a href="http://www.megaupload.com/?d=YUIKLPA9"&gt;&lt;br /&gt;Proyecto SILIBSCZ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;La contraseña es el apodo de Ronald.&lt;br /&gt;No les estoy enviando las librerias ni los añadidos, que ya los tienes, solo codigo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-1625195465407707972?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/1625195465407707972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=1625195465407707972&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1625195465407707972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/1625195465407707972'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/09/actualizacin-proyecto-modificacion.html' title='Actualización Proyecto - Modificacion Severa'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4456598976733938974</id><published>2007-09-13T17:08:00.000-07:00</published><updated>2011-10-18T20:46:14.480-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='sockets'/><category scheme='http://www.blogger.com/atom/ns#' term='transferencia'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><title type='text'>Transmision de Archivos con Sockets en Java</title><content type='html'>Algunos siempre tuvimos problemas en la transferencia de archivos, especialmente en Java, que a pesar de ser muy completo, a veces ese es su principal incoveniente (qué clase o componente usar).Aca les dejo un pequeño ejemplo que realmente funciona, con archivos de gran tamaño y usando Socket's en Java.El cliente envia el archivo al servidor.&lt;script src="https://gist.github.com/1297433.js"&gt; &lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4456598976733938974?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4456598976733938974/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4456598976733938974&amp;isPopup=true' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4456598976733938974'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4456598976733938974'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/09/transmision-de-archivos-con-sockets-en.html' title='Transmision de Archivos con Sockets en Java'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-7265891120892577</id><published>2007-09-11T16:32:00.000-07:00</published><updated>2007-09-11T18:06:56.369-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='uagrm'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><category scheme='http://www.blogger.com/atom/ns#' term='programacion'/><category scheme='http://www.blogger.com/atom/ns#' term='timo'/><category scheme='http://www.blogger.com/atom/ns#' term='grupo'/><title type='text'>Proyecto SI Grupo</title><content type='html'>Las unicas modificaciones que hice son referentes a la ubicacion, tal vez haya mas clases, pero los metodos son los mismos.&lt;br /&gt;Todo esta mas ordenado, la contraseña es el apellido de Oscar (todo en minuscula sin tildes).&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Si es que añadimos el caso de uso "devolucion por compra" hay que agregar a la base de datos.&lt;br /&gt;&lt;br /&gt;-&gt;    &lt;a href="http://www.megaupload.com/?d=T5SES9B4"&gt;Proyecto LibreriaSCZ&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Esta en MegaUpload, si no tienen la barra, la descargan si es que utilizan IExplorer, si usan Firefox &lt;a href="https://addons.mozilla.org/es-ES/firefox/addon/3843"&gt;descargen este plugin y activenlo&lt;/a&gt;, luego todo es facil.&lt;br /&gt;&lt;br /&gt;Solo rellenan el campo de verificacion(el de letritas) y esperan unos segundos.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-7265891120892577?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/7265891120892577/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=7265891120892577&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7265891120892577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/7265891120892577'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/09/proyecto-si-grupo.html' title='Proyecto SI Grupo'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-4362750303737086745</id><published>2007-07-21T19:38:00.000-07:00</published><updated>2007-07-21T19:48:11.316-07:00</updated><title type='text'>Java corriendo mas rápido que C !!</title><content type='html'>Esta si que es noticia, dentro del último release del JDK 1.6 de Sun, se realizaron pruebas (no la gran cosa, pero es algo) en varios lenguajes de programación "de moda". Entre los de mejor rendimiento son Java ( JDK 1.6)  y C (gcc) con resultados sorprendentes.&lt;br /&gt;&lt;br /&gt;Para no hacerles todos el trabajo, aca les dejo el link en inglés , turistas.&lt;br /&gt;&lt;br /&gt;&lt;a style="font-style: italic;" href="http://paulbuchheit.blogspot.com/2007/06/java-is-faster-than-c.html"&gt;java-is-faster-than-c&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Todo esto se añade a varias noticias gratas desde Sun, como la &lt;a href="http://vivalinux.com.ar/soft/openjdk.html"&gt;liberación de su código fuente&lt;/a&gt; con OpenJDK.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-4362750303737086745?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/4362750303737086745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=4362750303737086745&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4362750303737086745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/4362750303737086745'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/07/java-corriendo-mas-rpido-que-c.html' title='Java corriendo mas rápido que C !!'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5502681789285906166.post-6806104112546312705</id><published>2007-07-21T19:25:00.000-07:00</published><updated>2007-09-13T17:20:00.890-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='descarga'/><category scheme='http://www.blogger.com/atom/ns#' term='revistas electronicas'/><title type='text'>Revistas que no se deben dejar pasar</title><content type='html'>Cada cierto tiempo tenemos la grata noticia de publicaciones de revistas electrónicas libres, sobre &lt;a href="http://www.blogger.com/es.wikipedia.org/wiki/Tecnolog%C3%83%C2%ADas_de_la_informaci%C3%83%C2%B3n"&gt;TI&lt;/a&gt; , iniciando desde Software Libre, y llegando a temas más que interesantes.&lt;br /&gt;&lt;br /&gt;Dentro de uno de mis sitios favoritos &lt;a href="http://espaciolinux.com/"&gt;EspacioLinux&lt;/a&gt; exiten dentro del directorio Web varios enlaces por demás de interesantes. Tanto de software como hardware.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://espaciolinux.com/directorioweb-13.html"&gt;Aquí para el índice de susodichas publicaciones&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5502681789285906166-6806104112546312705?l=timoponce.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://timoponce.blogspot.com/feeds/6806104112546312705/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5502681789285906166&amp;postID=6806104112546312705&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6806104112546312705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5502681789285906166/posts/default/6806104112546312705'/><link rel='alternate' type='text/html' href='http://timoponce.blogspot.com/2007/07/revistas-que-no-se-deben-dejar-pasar.html' title='Revistas que no se deben dejar pasar'/><author><name>Timoteo Ponce</name><uri>https://profiles.google.com/107712459507918881105</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh4.googleusercontent.com/-TsWpwa55g68/AAAAAAAAAAI/AAAAAAAAASE/XzPDWQ7yWM0/s512-c/photo.jpg'/></author><thr:total>0</thr:total></entry></feed>
