<?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-6433163430809277331</id><updated>2012-02-04T15:12:51.280-08:00</updated><category term='agent-based modelling'/><category term='ESSA'/><category term='ebooks'/><category term='Git'/><category term='workaround'/><category term='trick'/><category term='Maven'/><category term='lol'/><category term='security'/><category term='Eclipse'/><category term='Google Scholar'/><category term='plotting'/><category term='BibTeX'/><category term='Java 7'/><category term='poster'/><category term='geekfun'/><category term='Perl'/><category term='puzzle'/><category term='ELTE'/><category term='template'/><category term='Java'/><category term='LaTeX'/><category term='Java Ant'/><category term='R'/><title type='text'>0xCAFEBABE</title><subtitle type='html'>Blog of a Professional Bugwriter</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-4258838000350929168</id><published>2011-12-19T00:53:00.000-08:00</published><updated>2011-12-20T01:11:26.660-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Java 7'/><title type='text'>Java 7: What is new and noteworthy?</title><content type='html'>Java 7 is here! Well, to be honest it was here a few months ago, but it required a bit of workarounds to use it in production code (&lt;a href="http://blog.teamextension.com/java-7-on-eclipse-indigo-479"&gt;especially under Eclipse&lt;/a&gt;, you had to use the nightly builds to access the beta support).&lt;br /&gt;&lt;br /&gt;Now, the &lt;a href="http://wiki.eclipse.org/JDT/Eclipse_Java_7_Support_(BETA)"&gt;Eclipse Java 7 support&lt;/a&gt; is no longer in beta phase: it has been integrated into the existing streams! Hurray!&lt;br /&gt;&lt;br /&gt;A set of small enhancements was introduced thanks to &lt;a href="http://openjdk.java.net/projects/coin/"&gt;Project Coin&lt;/a&gt;, check out &lt;a href="http://www.eclipse.org/jdt/ui/r3_8/Java7news/whats-new-java-7.html"&gt;the list of new Eclipse features&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;You can get an overview of the new language features in the &lt;a href="http://docs.oracle.com/javase/7/docs/webnotes/adoptionGuide/index.html#lang"&gt;Java 7 adoption guide&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you are interested in details, here are the set of new features collected from the Java tutorial:&lt;br /&gt;&lt;br /&gt;- Now we can use &lt;a href="http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html"&gt;Strings in Switch statement&lt;/a&gt;. Well, that's a bit strange because we shift from strictly verifiable constants to objects with &lt;code&gt;equals()&lt;/code&gt;, but we'll see.&lt;br /&gt;- &lt;a href="http://docs.oracle.com/javase/tutorial/java/generics/non-reifiable-varargs-type.html"&gt;"Simplified" vararg invocation&lt;/a&gt;. I found a reference to &lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6945418"&gt;this bug entry&lt;/a&gt;.&lt;br /&gt;- We have binary literals:&lt;br /&gt;  &lt;pre name="code" class="Java"&gt;&lt;br /&gt;  // The number 26, in binary&lt;br /&gt;  int binVal = 0b11010;&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;- We can use underscores in numeric literals. Ah, at last! Perl had this sugar ~20 years ago.&lt;br /&gt;  &lt;pre name="code" class="Java"&gt;&lt;br /&gt;  int million = 1_000_000;&lt;br /&gt;  &lt;/pre&gt;&lt;br /&gt;- The try-with-resources Statement [&lt;a href="http://docs.oracle.com/javase/7/docs/technotes/guides/language/try-with-resources.html"&gt;Guide&lt;/a&gt;] [&lt;a href="http://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html"&gt;Tutorial&lt;/a&gt;]&lt;br /&gt;- Catching Multiple Exception Types and Rethrowing Exceptions with Improved Type Checking [&lt;a href="http://docs.oracle.com/javase/7/docs/technotes/guides/language/catch-multiple.html"&gt;Tutorial&lt;/a&gt;]&lt;br /&gt;- Type Inference and Instantiation with Diamond [&lt;a href="http://docs.oracle.com/javase/7/docs/technotes/guides/language/type-inference-generic-instance-creation.html"&gt;Guide&lt;/a&gt;] [&lt;a href="http://docs.oracle.com/javase/tutorial/java/generics/gentypeinference.html#type-inference-instantiation"&gt;Tutorial&lt;/a&gt;]&lt;br /&gt;- A new &lt;a href="http://docs.oracle.com/javase/tutorial/essential/io/fileio.html"&gt;NIO.2&lt;/a&gt; implementation.&lt;br /&gt;- &lt;a href="http://docs.oracle.com/javase/tutorial/sdp/TOC.html"&gt;Sockets Direct Protocol&lt;/a&gt; (SDP), that is said to provide access to high performance network connections.&lt;br /&gt;- Another interesting thing I found while I was browsing the updated tutorials. Swing has a new component called &lt;a href="http://docs.oracle.com/javase/tutorial/uiswing/misc/jlayer.html"&gt;JLayer&lt;/a&gt;, and at last we &lt;a href="http://www.youtube.com/watch?v=6mQYsWCkx4g"&gt;got an embedded YouTube video tutorial&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;Anything I missed?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-4258838000350929168?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/4258838000350929168/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/12/java-7-what-is-new-and-noteworthy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/4258838000350929168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/4258838000350929168'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/12/java-7-what-is-new-and-noteworthy.html' title='Java 7: What is new and noteworthy?'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-6050634974792499159</id><published>2011-12-18T13:48:00.000-08:00</published><updated>2011-12-18T13:50:48.582-08:00</updated><title type='text'>Comments</title><content type='html'>This post is about some comments I ocassionally find in my old code. Hope I can update them once in a while :-))&lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/rlegendi/JYzer/blob/master/src/jyzer/items/accessflags/AccessFlags.java"&gt;AccessFlags.java&lt;/a&gt;, 2005&lt;br /&gt;&lt;br /&gt;// DON'T WORRY, I'LL FINISH IT :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-6050634974792499159?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/6050634974792499159/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/12/comments.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6050634974792499159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6050634974792499159'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/12/comments.html' title='Comments'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-927907733175426873</id><published>2011-09-30T06:00:00.001-07:00</published><updated>2011-09-30T08:27:54.299-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='Eclipse'/><category scheme='http://www.blogger.com/atom/ns#' term='Maven'/><title type='text'>ArtifactDescriptorException: Failed to read artifact descriptor</title><content type='html'>I was trying to add the latest Log4J dependency for one of my projects.&lt;br /&gt;&lt;br /&gt;Life with Maven can cause some headache once in a while, here's an error message I got with Eclipse 3.7 and the new bundled-in &lt;i&gt;m2e&lt;/i&gt; plug-in:&lt;br /&gt;&lt;br /&gt;&lt;pre code="bash"&gt;&lt;br /&gt;ArtifactDescriptorException: Failed to read artifact descriptor for log4j:log4j:bundle:1.2.16: &lt;br /&gt;ArtifactResolutionException: Failure to transfer log4j:log4j:pom:1.2.16 from http://&lt;br /&gt;repo1.maven.org/maven2 was cached in the local repository, resolution will not be reattempted &lt;br /&gt;until the update interval of central has elapsed or updates are forced. Original error: Could not &lt;br /&gt;transfer artifact log4j:log4j:pom:1.2.16 from/to central (http://repo1.maven.org/maven2): null to &lt;br /&gt;http://repo1.maven.org/maven2/log4j/log4j/1.2.16/log4j-1.2.16.pom&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I also tried using the previous version Log4J 1.2.15, but I saw it has a few issues on its own - with an &lt;a href="http://unitstep.net/blog/2009/05/18/resolving-log4j-1215-dependency-problems-in-maven-using-exclusions/"&gt;available workaround&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I had a little time with the problem and the result was that my local Maven repo got corrupted somehow (maybe I tried to add the Log4J while I was offline with my laptop and it broke something). &lt;b&gt;So, if you get the same problem, just delete the problematic dependency from your local repo, it will solve the issue.&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Oh, yes, and there was another issue: the current Log4J is inserted as a &lt;i&gt;bundle&lt;/i&gt;, which should be omitted from the generated configuration. I ended up editing the POM by hand and replacing the version added by the IDE with the following lines:&lt;br /&gt;&lt;br /&gt;&lt;pre code="xml"&gt;&lt;br /&gt;&lt;dependency&gt;&lt;br /&gt;    &lt;groupId&gt;log4j&lt;/groupId&gt;&lt;br /&gt;    &lt;artifactId&gt;log4j&lt;/artifactId&gt;&lt;br /&gt;    &lt;version&gt;1.2.16&lt;/version&gt;&lt;br /&gt;&lt;/dependency&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Issue solved.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-927907733175426873?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/927907733175426873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/artifactdescriptorexception-failed-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/927907733175426873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/927907733175426873'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/artifactdescriptorexception-failed-to.html' title='ArtifactDescriptorException: Failed to read artifact descriptor'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-6854668707522315701</id><published>2011-09-28T12:56:00.000-07:00</published><updated>2011-09-28T13:04:07.868-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Git'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Gitignore for LaTeX under Windows</title><content type='html'>LaTeX is the &lt;i&gt;de facto&lt;/i&gt; standard for writing scientific papers, I usually use it under Windows as well. I prefer ignoring the temporary files, so I ended up using the following &lt;tt&gt;.gitignore&lt;/tt&gt; for the LaTeX + Gitignore + Windows combo:&lt;br /&gt;&lt;br /&gt;&lt;pre code="bash"&gt;&lt;br /&gt;###############################################################################&lt;br /&gt;# Led undo files&lt;br /&gt;# They have sort of an overhead when get larger, it is recommended to&lt;br /&gt;# delete them ocassionally.&lt;br /&gt;*.tex.undo&lt;br /&gt;*.txt.undo&lt;br /&gt;&lt;br /&gt;###############################################################################&lt;br /&gt;# Ignore common LaTeX temporary files&lt;br /&gt;*.aux&lt;br /&gt;*.blg&lt;br /&gt;*.idx&lt;br /&gt;*.ind&lt;br /&gt;*.lof&lt;br /&gt;*.lot&lt;br /&gt;*.mpx&lt;br /&gt;*.toc&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Anything to add?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-6854668707522315701?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/6854668707522315701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/gitignore-for-latex-under-windows.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6854668707522315701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6854668707522315701'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/gitignore-for-latex-under-windows.html' title='Gitignore for LaTeX under Windows'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-8071994667968987809</id><published>2011-09-15T00:43:00.000-07:00</published><updated>2011-09-15T00:52:37.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='lol'/><category scheme='http://www.blogger.com/atom/ns#' term='ELTE'/><title type='text'>ELTE-s Anekdota</title><content type='html'>Az újra feltámadt Javalistáról egy érdekes történet. A sztori azon okból merült fel, hogy nem tudják a srácok a levlistát rendesen migrálni, mert fizikailag nem találják az üzemeltetők a szervert amin az előzőleg volt. Az ügyintéző kisasszonyok nem fogadják el a Sun utódjaként az Oracle-t, és nem jutnak el technikai emberhez :-)&lt;br /&gt;&lt;br /&gt;Juteszembe, &lt;a href="http://lists.javaforum.hu/mailman/listinfo/javalist"&gt;itt az új oldal&lt;/a&gt;. Tessék feliratkozni!&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;Nem tudom legenda, vagy tényleg igaz, évekkel ezelőtt olvastam egy történetet egy elveszett szerverről, amit sehogy sem találtak, végül az derült ki, hogy egy évekkel azelőtt befalazott helységben működik zavartalanul. (Király Péter)&lt;br /&gt;&lt;br /&gt;...&lt;br /&gt;&lt;br /&gt;Nekem Molnár János mesélte a történetet (úgy tudom, ma is a HP-ban dolgozik (DEC -&gt; Compaq -&gt; HP)), aki már másodkézből hallotta egy olyan embertől aki konkrétan követte az Ethernet kábelt a falig.&lt;br /&gt;&lt;br /&gt;A másik történetet, ami hasonló viszont első kézből hallottam: amikor az ELTE épülete készült (info park) a bejáráskor derül ki, hogy a tervrajzon "Usereket fogadó szoba" néven nevezett helységnek nincs ajtaja. Se a terven, sem a valóságban. A munkások (kőműves, gipszkartonos, villszerelő, festő) nem foglalkozott vele, bemásztak az ablak melletti 30cm résen, megcsinálták amit kellett, a végén kimásztak, és nem szóltak senkinek. (Verhás Péter)&lt;br /&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-8071994667968987809?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/8071994667968987809/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/elte-s-anekdota.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/8071994667968987809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/8071994667968987809'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/elte-s-anekdota.html' title='ELTE-s Anekdota'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-8672539499345865404</id><published>2011-09-14T01:20:00.000-07:00</published><updated>2011-09-14T01:45:32.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='poster'/><category scheme='http://www.blogger.com/atom/ns#' term='template'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>LaTeX poster with baposter package</title><content type='html'>I've created a &lt;a href="http://mass.aitia.ai/publications/index.php?option=com_jombib&amp;amp;task=showbib&amp;amp;id=135"&gt;poster&lt;/a&gt; for the ECCS 2011 conference at Vienna about my current work on dynamic networks with Brian Amberg's &lt;a href="http://www.brian-amberg.de/uni/poster/"&gt;baposter&lt;/a&gt; package. It is a very nice and usable template I'd recommend trying.&lt;br /&gt;&lt;br /&gt;What I missed though is a bit more example source code, so I thought I'd upload my creation, you may &lt;a href="http://people.inf.elte.hu/legendi/resources/latex/poster_template/ECCS2011_LaTeX_poster_template.zip"&gt;download it here&lt;/a&gt;. Ain't sure if worth anything, but others may find it useful at the beginning.&lt;br /&gt;&lt;br /&gt;Thanks for the great work for &lt;a href="http://www.cs.unibas.ch/personen/amberg_brian/"&gt;Brian&lt;/a&gt; with the poster template, and for sharing with us!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/-treMhQkk-Yo/TnBlif7SVjI/AAAAAAAAAqY/IjCgY05uIxY/s1600/ECCS_poster_thumbnail.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 283px; height: 400px;" src="http://2.bp.blogspot.com/-treMhQkk-Yo/TnBlif7SVjI/AAAAAAAAAqY/IjCgY05uIxY/s400/ECCS_poster_thumbnail.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5652129175710094898" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-8672539499345865404?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/8672539499345865404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/latex-poster-with-baposter-package.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/8672539499345865404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/8672539499345865404'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/latex-poster-with-baposter-package.html' title='LaTeX poster with baposter package'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-treMhQkk-Yo/TnBlif7SVjI/AAAAAAAAAqY/IjCgY05uIxY/s72-c/ECCS_poster_thumbnail.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-5064651308636296120</id><published>2011-09-11T02:25:00.000-07:00</published><updated>2011-09-11T02:30:23.131-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='trick'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>R subplot() with multiple lines</title><content type='html'>I have recently used the &lt;code&gt;subplot()&lt;/code&gt; function of the &lt;a href="http://rss.acs.unt.edu/Rdoc/library/TeachingDemos/html/subplot.html"&gt;TeachingDemos&lt;/a&gt; library for R: I wanted to create a simple embedded chart with multiple lines on it. The trick was to create a simple function that prepares the whole plot and pass it to the &lt;code&gt;subplot()&lt;/code&gt; function to execute as shown below:&lt;br /&gt;&lt;br /&gt;&lt;pre code="R"&gt;&lt;br /&gt; &gt; x &lt;- function() { plot(1:3); lines(3:1) }&lt;br /&gt; &gt; x()&lt;br /&gt; &gt; plot(1:10)&lt;br /&gt; &gt; subplot(x(), 5, 5)&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/6433163430809277331-5064651308636296120?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/5064651308636296120/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/r-subplot-with-multiple-lines.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/5064651308636296120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/5064651308636296120'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/r-subplot-with-multiple-lines.html' title='R subplot() with multiple lines'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-2866700087947027475</id><published>2011-09-08T00:17:00.000-07:00</published><updated>2011-09-08T00:41:56.103-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='workaround'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><category scheme='http://www.blogger.com/atom/ns#' term='plotting'/><title type='text'>Multiple plots with subplot in R</title><content type='html'>I'm in the middle of creating a poster and wanted to compresss the content by transforming some of the charts into subplots of other charts.&lt;br /&gt;&lt;br /&gt;I made a little survey and found that there is a &lt;a href="http://rss.acs.unt.edu/Rdoc/library/TeachingDemos/html/subplot.html"&gt;TeachingDemos&lt;/a&gt; library in CRAN that fits my needs. Well, the parameterization of the functions is a bit tricky but after a few tries you get used to it.&lt;br /&gt;&lt;br /&gt;However, there is a minor flaw in the code of version 2.7: when I wanted to use multiple plots on one layout (e.g., next to each other to use a common legend), it always drew the charts into the first plotting area. A bit of Googling helped, my solution is based on &lt;a href="http://r.789695.n4.nabble.com/Inserting-a-plot-into-another-td2720936.html"&gt;this thread&lt;/a&gt; on the R-help list since October, 2010. If you manage to install version 2.8, the problem is solved automatically. On the other side, if you want a quick solution, add the following code segment to your script (so it is &lt;i&gt;shadowing&lt;/i&gt; the original function definition).&lt;br /&gt;&lt;br /&gt;Only change the first 3 lines of the code, leave the other untouched (you can verify it by diffing this code and entering &lt;code&gt;subplot&lt;/code&gt; into the R console).&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="R"&gt;&lt;br /&gt;subplot &lt;- function (fun, x, y = NULL, size = c(1, 1), vadj = 0.5, hadj = 0.5, &lt;br /&gt;  inset = c(0, 0), type = c("plt", "fig"), pars = NULL) &lt;br /&gt;{&lt;br /&gt;#------------------------------------------------------&lt;br /&gt;# Version 2.7 has a minor issue here:&lt;br /&gt;# old.par &lt;- par(no.readonly = TRUE)&lt;br /&gt;# on.exit(par(old.par))&lt;br /&gt;# type &lt;- match.arg(type)&lt;br /&gt;#------------------------------------------------------&lt;br /&gt;# Change to this in order to solve the issue&lt;br /&gt; # HACK HERE!&lt;br /&gt; print("Hacked")&lt;br /&gt; type &lt;- match.arg(type) &lt;br /&gt; old.par &lt;- par( c(type, 'usr', names(pars) ) ) &lt;br /&gt;#------------------------------------------------------&lt;br /&gt;# The remaining part is untouched&lt;br /&gt; on.exit(par(old.par))&lt;br /&gt; &lt;br /&gt; if (missing(x)) &lt;br /&gt;  x &lt;- locator(2)&lt;br /&gt; if (is.character(x)) {&lt;br /&gt;  if (length(inset) == 1) &lt;br /&gt;   inset &lt;- rep(inset, 2)&lt;br /&gt;  x.char &lt;- x&lt;br /&gt;  tmp &lt;- par("usr")&lt;br /&gt;  x &lt;- (tmp[1] + tmp[2])/2&lt;br /&gt;  y &lt;- (tmp[3] + tmp[4])/2&lt;br /&gt;  if (length(grep("left", x.char, ignore.case = TRUE))) {&lt;br /&gt;   x &lt;- tmp[1] + inset[1] * (tmp[2] - tmp[1])&lt;br /&gt;   if (missing(hadj)) &lt;br /&gt;    hadj &lt;- 0&lt;br /&gt;  }&lt;br /&gt;  if (length(grep("right", x.char, ignore.case = TRUE))) {&lt;br /&gt;   x &lt;- tmp[2] - inset[1] * (tmp[2] - tmp[1])&lt;br /&gt;   if (missing(hadj)) &lt;br /&gt;    hadj &lt;- 1&lt;br /&gt;  }&lt;br /&gt;  if (length(grep("top", x.char, ignore.case = TRUE))) {&lt;br /&gt;   y &lt;- tmp[4] - inset[2] * (tmp[4] - tmp[3])&lt;br /&gt;   if (missing(vadj)) &lt;br /&gt;    vadj &lt;- 1&lt;br /&gt;  }&lt;br /&gt;  if (length(grep("bottom", x.char, ignore.case = TRUE))) {&lt;br /&gt;   y &lt;- tmp[3] + inset[2] * (tmp[4] - tmp[3])&lt;br /&gt;   if (missing(vadj)) &lt;br /&gt;    vadj &lt;- 0&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; xy &lt;- xy.coords(x, y)&lt;br /&gt; if (length(xy$x) != 2) {&lt;br /&gt;  pin &lt;- par("pin")&lt;br /&gt;  tmp &lt;- cnvrt.coords(xy$x[1], xy$y[1], "usr")$plt&lt;br /&gt;  x &lt;- c(tmp$x - hadj * size[1]/pin[1], tmp$x + (1 - hadj) * &lt;br /&gt;      size[1]/pin[1])&lt;br /&gt;  y &lt;- c(tmp$y - vadj * size[2]/pin[2], tmp$y + (1 - vadj) * &lt;br /&gt;      size[2]/pin[2])&lt;br /&gt;  xy &lt;- cnvrt.coords(x, y, "plt")$fig&lt;br /&gt; }&lt;br /&gt; else {&lt;br /&gt;  xy &lt;- cnvrt.coords(xy, , "usr")$fig&lt;br /&gt; }&lt;br /&gt; par(pars)&lt;br /&gt; if (type == "fig") {&lt;br /&gt;  par(fig = c(xy$x, xy$y), new = TRUE)&lt;br /&gt; }&lt;br /&gt; else {&lt;br /&gt;  par(plt = c(xy$x, xy$y), new = TRUE)&lt;br /&gt; }&lt;br /&gt; fun&lt;br /&gt; tmp.par &lt;- par(no.readonly = TRUE)&lt;br /&gt; return(invisible(tmp.par))&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;There is a second workaround suggested in the aforementioned thread, namely managing &lt;code&gt;par('mfg')&lt;/code&gt; by hand before and after executing the &lt;code&gt;subplot()&lt;/code&gt; function, but it didn't work for me. The third option (wait a few days until the CRAN packages are updated to 2.8) seems to take a bit longer. :-) Anyway, it is working so I'm happy.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-2866700087947027475?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/2866700087947027475/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/multiple-plots-with-subplot-in-r.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2866700087947027475'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2866700087947027475'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/multiple-plots-with-subplot-in-r.html' title='Multiple plots with subplot in R'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-7207098214092355726</id><published>2011-09-06T00:25:00.001-07:00</published><updated>2011-09-08T00:17:15.810-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ebooks'/><category scheme='http://www.blogger.com/atom/ns#' term='R'/><title type='text'>Free R Book Collection</title><content type='html'>I have just encountered some R PDF books that seem quite interesting. One of them is written by Venables himself.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://heather.cs.ucdavis.edu/%7Ematloff/132/NSPpart.pdf"&gt;The Art of R Programming&lt;/a&gt; by Norman Matloff&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cran.r-project.org/doc/manuals/R-intro.pdf"&gt;An Introduction to R&lt;/a&gt; by W.N. Venables and D. M. Smith&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://lib.stat.cmu.edu/S/Spoetry/Tutor/R_inferno.pdf"&gt;The R Inferno&lt;/a&gt; by Patrick Burns&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cran.r-project.org/doc/contrib/Owen-TheRGuide.pdf"&gt;The R Guide&lt;/a&gt; by W. J. Owen&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://cran.r-project.org/doc/contrib/Paradis-rdebuts_en.pdf"&gt;R for Beginners&lt;/a&gt; by Emmanuel Paradis&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Do you have any other suggestions I should add to the list?&lt;/p&gt;&lt;ul&gt;&lt;li&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/6433163430809277331-7207098214092355726?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/7207098214092355726/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/free-r-book-collection.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/7207098214092355726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/7207098214092355726'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/free-r-book-collection.html' title='Free R Book Collection'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-3461369707418447042</id><published>2011-09-05T23:38:00.000-07:00</published><updated>2011-09-06T00:04:24.813-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Google Scholar'/><category scheme='http://www.blogger.com/atom/ns#' term='BibTeX'/><category scheme='http://www.blogger.com/atom/ns#' term='LaTeX'/><title type='text'>Google Scholar Tips</title><content type='html'>&lt;a href="http://scholar.google.hu/"&gt;Google Scholar&lt;/a&gt; is a primary source for me to locate publications, and it seems it has quite a few &lt;i&gt;"hidden features"&lt;/i&gt;.&lt;br /&gt;&lt;br /&gt;This post is a collection what I found so far, updated ocassionally. If you have any suggestion, let me know in the comments!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Finding BibTeX Entries for Publications with Google&lt;/b&gt;&lt;br /&gt;It is possible to use Google as a Bibliography Manager: you can set Google Scholar to include the BibTex entries for the publications if it is available in plaintext format (ain't sure why isn't it the default). It is usually easier and more convenient than searching on different sitest for the &lt;i&gt;"Export to BibTex"&lt;/i&gt; buttons, downloading/importing them - just copy &amp;amp; paste the reference.&lt;br /&gt;&lt;br /&gt;In order to set Google to include BibTex entries, do the following:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Go to &lt;a href="http://scholar.google.hu/"&gt;http://scholar.google.hu/&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Sign in with your Google account&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click on &lt;i&gt;Scholar Preferences&lt;/i&gt; on the upper right side of the page&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Find the &lt;i&gt;Bibliography Manager&lt;/i&gt; setting in the bottom of the page and select &lt;i&gt;Show links to import citations into: BibTeX&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/-CjkdIthtqVw/TmXCAFngusI/AAAAAAAAAp8/c0SRjeVRdcE/s1600/Google%2Bscholar%2Bbibliography%2Bmanager.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 138px;" src="http://4.bp.blogspot.com/-CjkdIthtqVw/TmXCAFngusI/AAAAAAAAAp8/c0SRjeVRdcE/s400/Google%2Bscholar%2Bbibliography%2Bmanager.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5649134614369843906" /&gt;&lt;/a&gt;&lt;br /&gt;You can choose between several options including BibTeX, EndNote, RefMan and the others.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Click on &lt;i&gt;Save Preferences&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Search for any article, e.g. &lt;i&gt;Modeling Autonomous Adaptive Agents with Functional Language for Simulations&lt;/i&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;A new button appears called Import into BibTeX where you can find the plaintext BibTeX entry of the searched article!&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/-Ai7_1Qf5ktY/TmXEtlob2AI/AAAAAAAAAqE/a8KjR8zYc5o/s1600/Google%2Bscholar%2Bimport%2Binto%2BBibTeX.png" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 115px;" src="http://1.bp.blogspot.com/-Ai7_1Qf5ktY/TmXEtlob2AI/AAAAAAAAAqE/a8KjR8zYc5o/s400/Google%2Bscholar%2Bimport%2Binto%2BBibTeX.png" border="0" alt="" id="BLOGGER_PHOTO_ID_5649137595081021442" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;In general, I hardly suggest using a &lt;i&gt;Bibliography Manager&lt;/i&gt; software (like &lt;a href="http://www.zotero.org/"&gt;Zotero&lt;/a&gt; which is my preferred one), but when you quickly have to hunt down something new Google Scholar may be your friend.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-3461369707418447042?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/3461369707418447042/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/google-scholar-tips.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3461369707418447042'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3461369707418447042'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/google-scholar-tips.html' title='Google Scholar Tips'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-CjkdIthtqVw/TmXCAFngusI/AAAAAAAAAp8/c0SRjeVRdcE/s72-c/Google%2Bscholar%2Bbibliography%2Bmanager.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-3677197359851045597</id><published>2011-09-05T23:26:00.000-07:00</published><updated>2011-09-05T23:37:12.664-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agent-based modelling'/><category scheme='http://www.blogger.com/atom/ns#' term='ESSA'/><title type='text'>2nd ESSA Summer School on Agent-Based Modelling</title><content type='html'>I had the fortune to participate at the &lt;a href="http://www.simian.ac.uk/courses/essa-summer-school-2011"&gt;second ESSA Summer School on Agent-Based Modelling&lt;/a&gt; which was held a few weeks ago on 18-22 July. Many thanks for Nigel Gilbert, Lu Yang and the others for organizing such an amazing event for us!&lt;br /&gt;&lt;br /&gt;The school was held in Guildford, at the &lt;a href="http://www.surrey.ac.uk/"&gt;University of Surrey&lt;/a&gt; which was a beautiful place to visit during the guided and boat trips we had.&lt;br /&gt;&lt;br /&gt;The lectures covered the full lifecycle of modelling that a new researcher should be aware of, from questions like why, when and how (not) to use simulations (Bruce Edmons), how to refine the research topic and what rules should we keep in mind during the research to avoid common pitfalls (Edmund Chattoe-Brown), and how participatory simulations may help our work (Flaminio Squazzoni).&lt;br /&gt;&lt;br /&gt;We were shown several case studies for both prediction or validation, like how to apply the agent-based framework for the interbank payment system (Pietro Terna) or predicting volatile markets like the fruit juice market of Switzerland (Abhijit Sengupta), but we also got general strategies and advices like what to keep in mind for policy modelling and how declarative tools may help us in the subject (Klaus G. Troitzsch).&lt;br /&gt;&lt;br /&gt;We also got a lot of fundamental advices regarding to modelling through a set of practical examples that people have paid money for (Paul Ormerod), or how to use design of experiments to perform the simulations in a proper way, and how to extract hidden information from the raw output data (Iris Lorscheid and Warren Thorngate).&lt;br /&gt;&lt;br /&gt;All of the presentations may be found at the &lt;a href="http://www.simian.ac.uk/courses/essa-summer-school-2011/presentations"&gt;Simian site&lt;/a&gt; created for the event.&lt;br /&gt;&lt;br /&gt;Special thanks to David Hales, who made great effort to record and edit all of the lectures and &lt;a href="http://www.youtube.com/user/daphal"&gt;made them available&lt;/a&gt; with video interviews. If you missed the event but interested what we learnt there, you will find these materials especially useful!&lt;br /&gt;&lt;br /&gt;Also thanks to &lt;a href="http://www.simian.ac.uk/courses/essa-summer-school-2011/delegates"&gt;the delegates&lt;/a&gt; for all the interesting discussions and valuable advices during the group meetings. It was a really fruitful week.&lt;br /&gt;&lt;br /&gt;The Summer school was sponsored by the SIMIAN project, Unilever plc, ASSYST and the University of Surrey, to whom we are grateful for their support.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-3677197359851045597?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/3677197359851045597/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/2nd-essa-summer-school-on-agent-based.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3677197359851045597'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3677197359851045597'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2011/09/2nd-essa-summer-school-on-agent-based.html' title='2nd ESSA Summer School on Agent-Based Modelling'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-2073076957767183941</id><published>2009-11-28T00:28:00.000-08:00</published><updated>2009-11-28T00:32:03.260-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='ebooks'/><title type='text'>Java Books Collection</title><content type='html'>I've found a few Java books recently. If any of them grabs your attention, you can download it at Rapidshare.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9892741/JAVA_BOOKS.part1.rar"&gt;http://rapidshare.com/files/9892741/JAVA_BOOKS.part1.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9893110/JAVA_BOOKS.part2.rar"&gt;http://rapidshare.com/files/9893110/JAVA_BOOKS.part2.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9893665/JAVA_BOOKS.part3.rar"&gt;http://rapidshare.com/files/9893665/JAVA_BOOKS.part3.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9894206/JAVA_BOOKS.part4.rar"&gt;http://rapidshare.com/files/9894206/JAVA_BOOKS.part4.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9897209/JAVA_BOOKS.part5.rar"&gt;http://rapidshare.com/files/9897209/JAVA_BOOKS.part5.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9897376/JAVA_BOOKS.part6.rar"&gt;http://rapidshare.com/files/9897376/JAVA_BOOKS.part6.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9897538/JAVA_BOOKS.part7.rar"&gt;http://rapidshare.com/files/9897538/JAVA_BOOKS.part7.rar&lt;/a&gt;&lt;br /&gt;&lt;a href="http://rapidshare.com/files/9897735/JAVA_BOOKS.part8.rar"&gt;http://rapidshare.com/files/9897735/JAVA_BOOKS.part8.rar&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Complete idiot's guide to javascript&lt;br /&gt;DEITEL - Java Advanced How to Program redistilled in one book&lt;br /&gt;Thinking in java, 2nd edition&lt;br /&gt;Developing intranet applications with java&lt;br /&gt;Teach yourself javascript in 1 week&lt;br /&gt;Java books - O'reilly&lt;br /&gt;Complete idiot's guide to javascript, 2nd edition&lt;br /&gt;Hacking java&lt;br /&gt;Sam's presenting java beans&lt;br /&gt;Xml programming in java&lt;br /&gt;Java programming language basics&lt;br /&gt;Developing intranet applications with java&lt;br /&gt;Java in a nutshell&lt;br /&gt;Programming - java basic 1&lt;br /&gt;Programming - java basic 2&lt;br /&gt;Developing professional java applets&lt;br /&gt;Java books - o'reilly&lt;br /&gt;Addisonwesley - the design patterns java companion &amp;src&lt;br /&gt;Thinking in java - second edition 1&lt;br /&gt;Using uml for modeling a distributed java application&lt;br /&gt;Programming java using jbuilder&lt;br /&gt;AddisonWesleyJavaServerPages2ndEdition -LiBchm&lt;br /&gt;Computer science - design java apps with uml&lt;br /&gt;Corba networking with java&lt;br /&gt;Creating web applets with java&lt;br /&gt;Data structures &amp; algorithms in java&lt;br /&gt;Design java apps with UML&lt;br /&gt;Designing enterprise applications with java 2ee0010&lt;br /&gt;Developing_professional_java_applets&lt;br /&gt;Manual - uml java reverse engineering tutorial&lt;br /&gt;Manuale completo su java - mattone ita&lt;br /&gt;O'reilly - java cookbook 2001&lt;br /&gt;O'reilly java servlet programming&lt;br /&gt;Black art of java game programming&lt;br /&gt;Enterprise javabeans developer's guide&lt;br /&gt;Getting started with java&lt;br /&gt;Hacking java-the java professional's resource kit&lt;br /&gt;Hacking java-the java professional's resource kit&lt;br /&gt;Java programming language handbook - 1&lt;br /&gt;Java programming language handbook - 2&lt;br /&gt;java programming language handbook - 3&lt;br /&gt;Java programming language handbook - 4&lt;br /&gt;Java - By Example&lt;br /&gt;Java - By Examplerar&lt;br /&gt;Java - Creating Web Appletsrar&lt;br /&gt;Java - Developers Guide&lt;br /&gt;Java - Developers Guiderar&lt;br /&gt;Java - Developers Referencerar&lt;br /&gt;Java - Developing Intranet Applications With Javarar&lt;br /&gt;Java - Developing Professional Java Appletsrar&lt;br /&gt;Java - Internet Game Programming With Java in 21 Daysrar&lt;br /&gt;Java - Intranet Applications With Javarar&lt;br /&gt;Java - Java Unleashedrar&lt;br /&gt;Java - p2p jxta reference implementation&lt;br /&gt;Java beans&lt;br /&gt;Java cgi how to&lt;br /&gt;Java cryptography&lt;br /&gt;Java developer's guide&lt;br /&gt;Java oreilly books&lt;br /&gt;Java Programming Unleasheddoc&lt;br /&gt;Java programming unleashed&lt;br /&gt;Java programming with oracle jdbc&lt;br /&gt;Java secrets&lt;br /&gt;Java secrets&lt;br /&gt;Java vm specification&lt;br /&gt;Javatm development kit documentation 118_003&lt;br /&gt;Java-Certification-Guide&lt;br /&gt;Java-tutorial&lt;br /&gt;Java coding standards&lt;br /&gt;Javadatabase&lt;br /&gt;Javadoc&lt;br /&gt;Javanut&lt;br /&gt;Java_developers_guide&lt;br /&gt;Learning java with jbuilder&lt;br /&gt;O'Reilly - java - enterprise java beans&lt;br /&gt;O'Reilly - java - distributed computing&lt;br /&gt;O'Reilly - java 2 network security&lt;br /&gt;O'Reilly - java cookbook&lt;br /&gt;O'Reilly - java cryptography&lt;br /&gt;O'Reilly - JavaServer Pages_2nd Edition&lt;br /&gt;O'Reilly java rmi&lt;br /&gt;O'Reilly java threads 2nd&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-2073076957767183941?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/2073076957767183941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/11/ive-found-few-java-books-recently.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2073076957767183941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2073076957767183941'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/11/ive-found-few-java-books-recently.html' title='Java Books Collection'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-3208540078967167924</id><published>2009-09-30T01:18:00.000-07:00</published><updated>2009-09-30T01:22:38.038-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='geekfun'/><category scheme='http://www.blogger.com/atom/ns#' term='security'/><title type='text'>Nice Report</title><content type='html'>The guys at &lt;a href="http://www.sophsec.com/"&gt;sophsec&lt;/a&gt; has quite a lot of free time ;] They've created the &lt;a href="http://www.sophsec.com/nice_report.mp3"&gt;following song&lt;/a&gt; (lyrics &lt;a href="http://www.sophsec.com/nicereport.txt"&gt;here&lt;/a&gt;), pmsl. Cannot stop looping the song over and over again :D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-3208540078967167924?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/3208540078967167924/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/09/nice-report.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3208540078967167924'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/3208540078967167924'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/09/nice-report.html' title='Nice Report'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-2931826752114986419</id><published>2009-08-08T05:12:00.000-07:00</published><updated>2009-08-08T12:13:47.356-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='geekfun'/><title type='text'>Perl Poetry</title><content type='html'>Hm, a few days ago I've posted about the Perl Poetry site. Yesterday I've created my own contribution to the subject - it's not a big deal really, I've just enjoyed playing a bit with Perl.&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Perl"&gt;&lt;br /&gt;eval(join('',&lt;&lt;POEM =~ /(.+)/g)^substr(&lt;&lt;COMPLEMENT,0,-1));&lt;br /&gt;THE SHROUDED STRANGER&lt;br /&gt;&lt;br /&gt;Bare skin is my wrinkled sack&lt;br /&gt;When hot Apollo humps my back&lt;br /&gt;When Jack Frost grabs me in these rags&lt;br /&gt;I wrap my legs with burlap bags&lt;br /&gt;&lt;br /&gt;My flesh is cinder my face is snow&lt;br /&gt;I walk the railroad to and fro&lt;br /&gt;When city streets are black and dead&lt;br /&gt;The railroad embankment is my bed&lt;br /&gt;&lt;br /&gt;I sup my soup from old tin cans&lt;br /&gt;And take my sweets from little hands&lt;br /&gt;In Tiger Alley near the jail&lt;br /&gt;I steal away from the garbage pail&lt;br /&gt;&lt;br /&gt;In darkest night where none can see&lt;br /&gt;Down in the bowels of the factory&lt;br /&gt;I sneak barefoot upon stone&lt;br /&gt;Come and hear the old man groan&lt;br /&gt;&lt;br /&gt;I hide and wait like a naked child&lt;br /&gt;Under the bridge my heart goes wild&lt;br /&gt;I scream at a fire on the river bank&lt;br /&gt;I give my body to an old gas tank&lt;br /&gt;&lt;br /&gt;I dream that I have burning hair&lt;br /&gt;Boiled arms that claw the air&lt;br /&gt;The torso of an iron king&lt;br /&gt;And on my back a broken wing&lt;br /&gt;&lt;br /&gt;Who'll go out whoring into the night&lt;br /&gt;On the eyeless road in the skinny moonlight&lt;br /&gt;Maid or dowd or athlete proud&lt;br /&gt;May wanton with me in the shroud&lt;br /&gt;&lt;br /&gt;Who'll come lay down in the dark with me&lt;br /&gt;Belly to belly and knee to knee&lt;br /&gt;Who'll look into my hooded eye&lt;br /&gt;Who'll lay down under my darkened thigh?&lt;br /&gt;&lt;br /&gt;                  Allen Ginsberg, 1949&lt;br /&gt;POEM&lt;br /&gt;\x77\x69\x6a\x55\x20\x3a\x7d\x2d\x3c\x2a\x6a\x34\x45\x21\x38\x72\x6c\x39\x4d\x30\x21\x27\x41\x01\x11\x52\x1a\x08\x1d\x55\x2a\x1c\x00\x45\x4d\x0e\x41\x05\x1c\x00\x00\x0c\x1f\x5e\x6e\x2a\x06\x12\x06\x4b\x1b\x3f\x35\x54\x1a\x3d\x1c\x11\x52\x00\x17\x0a\x02\x18\x54\x2a\x62\x18\x14\x50\x57\x50\x0c\x0d\x54\x07\x13\x0d\x4b\x6a\x48\x14\x1c\x0f\x40\x3d\x07\x10\x11\x6a\x41\x12\x2f\x5a\x7c\x03\x09\x50\x4e\x40\x5d\x31\x4b\x7c\x0d\x15\x11\x58\x5b\x18\x2f\x4b\x7c\x16\x1a\x56\x5f\x7a\x5d\x4d\x2e\x05\x0b\x11\x41\x4c\x5d\x66\x4a\x1f\x48\x2a\x7d\x04\x0d\x48\x04\x12\x07\x1d\x14\x18\x50\x1d\x42\x12\x0f\x1a\x2b\x0d\x1b\x6c\x66\x08\x0a\x48\x04\x08\x14\x45\x0d\x1d\x4e\x59\x45\x3e\x77\x3d\x43\x1a\x33\x12\x06\x17\x61\x0e\x16\x4e\x07\x43\x51\x19\x2c\x57\x4c\x6b\x48\x0a\x47\x11\x06\x11\x0d\x4c\x11\x1b\x03\x0a\x16\x49\x43\x48\x00\x1b\x50\x46\x42\x44\x04\x16\x00\x00\x2f\x11\x4c\x4e\x49\x05\x49\x50\x09\x52\x1c\x0c\x0b\x5e\x6f\x7e\x00\x55\x03\x52\x01\x55\x0f\x1c\x31\x11\x04\x58\x18\x22\x0d\x53\x10\x45\x1a\x6e\x5d\x05\x1c\x00\x56\x00\x0d\x08\x00\x4f\x5c\x44\x53\x0d\x04\x04\x15\x55\x61\x64\x08\x17\x54\x04\x1b\x16\x53\x1d\x59\x1d\x42\x41\x05\x2e\x45\x1d\x01\x5d\x1e\x0a\x1c\x54\x5b\x4b\x14\x14\x44\x14\x5b\x54\x67\x29\x65\x65\x11\x4e\x18\x0c\x1d\x53\x43\x49\x4a\x01\x24\x1d\x14\x0d\x4a\x08\x18\x3a\x53\x18\x1a\x43\x16\x04\x16\x4c\x54\x08\x2a\x6f\x7b\x1f\x1f\x49\x02\x1d\x54\x27\x38\x21\x65\x3a\x33\x4e\x46\x35\x28\x07\x4c\x31\x0d\x47\x03\x17\x54\x22\x04\x05\x0b\x1e\x00\x02\x0c\x12\x06\x00\x12\x1a\x0a\x4d\x4a\x45\x08\x08\x2d\x52\x49\x54\x25\x1a\x37\x04\x13\x12\x12\x09\x0d\x58\x01\x1b\x0c\x54\x01\x1b\x3a\x4c\x0e\x0f\x17\x3f\x1c\x3b\x0b\x02\x4b\x6b\x60\x65\x3b\x0b\x54\x11\x13\x1c\x50\x45\x79\x7d\x5d\x64\x60\x6d\x61\x12\x4f\x05\x0d\x04\x11\x0d\x00\x03\x16\x4e\x41\x50\x0a\x19\x17\x00\x5b\x41\x17\x21\x1c\x07\x43\x1e\x0a\x01\x4e\x00\x0d\x0b\x54\x42\x52\x09\x45\x01\x5c\x04\x1f\x07\x54\x00\x0d\x17\x4e\x49\x06\x4a\x54\x14\x52\x09\x3b\x49\x1d\x1a\x45\x43\x4f\x50\x0b\x19\x0b\x39\x08\x4d\x54\x54\x5d\x7f\x0d\x65\x64\x4d\x0a\x54\x2f\x1d\x0c\x37\x0a\x1e\x45\x1d\x41\x46\x6e\x29\x4f\x0d\x15\x06\x50\x4e\x47\x4a\x57\x18\x1b\x4a\x50\x1f\x0e\x16\x59\x4a\x1e\x06\x12\x1a\x67\x4e\x0d\x1d\x4b\x03\x52\x04\x1d\x0c\x0d\x07\x13\x06\x0c\x59\x41\x05\x02\x16\x54\x12\x0e\x1d\x09\x1f\x08\x08\x07\x4f\x62\x60\x4b\x0c\x21\x1a\x14\x5f\x5d\x0f\x03\x1f\x12\x0e\x12\x00\x06\x1c\x1e\x48\x4c\x04\x0a\x54\x46\x0b\x04\x06\x5b\x41\x09\x00\x0b\x0a\x4d\x18\x1c\x1f\x49\x39\x52\x1c\x1b\x0b\x48\x0d\x04\x53\x15\x07\x0e\x12\x48\x12\x04\x1e\x42\x0c\x65\x67\x07\x1c\x1c\x11\x50\x48\x46\x59\x12\x05\x57\x4c\x11\x1c\x04\x31\x59\x4a\x05\x1f\x16\x54\x43\x17\x45\x16\x40\x10\x0b\x41\x1a\x1c\x50\x00\x1c\x45\x01\x18\x49\x50\x15\x0e\x0b\x59\x59\x0d\x07\x18\x3d\x53\x4a\x01\x0d\x15\x00\x4c\x53\x44\x6b\x7d\x07\x21\x54\x1c\x11\x4c\x4a\x0f\x15\x02\x05\x40\x19\x1c\x08\x58\x11\x0d\x00\x01\x36\x41\x07\x09\x11\x4b\x07\x4d\x78\x64\x54\x48\x00\x1c\x11\x4e\x0f\x4c\x1b\x16\x00\x0e\x12\x1a\x00\x53\x09\x19\x00\x3b\x10\x1c\x4c\x1d\x1c\x06\x5d\x00\x52\x08\x49\x07\x4d\x64\x29\x4e\x1a\x1b\x1a\x50\x51\x46\x41\x10\x36\x19\x4a\x46\x1d\x0b\x53\x05\x09\x52\x0d\x19\x1a\x07\x49\x12\x54\x4c\x1d\x1d\x0c\x4a\x07\x4e\x13\x0c\x16\x49\x27\x00\x1f\x18\x1c\x0d\x47\x02\x52\x12\x48\x59\x7e\x29\x50\x00\x1b\x06\x19\x54\x48\x0f\x1e\x19\x03\x41\x4d\x01\x04\x11\x49\x1e\x1b\x08\x10\x0d\x61\x01\x52\x13\x47\x11\x58\x11\x26\x04\x00\x09\x5c\x03\x52\x1d\x17\x18\x4a\x54\x11\x1a\x07\x7e\x41\x5e\x2a\x79\x0d\x06\x1c\x4e\x14\x59\x4d\x4b\x06\x4e\x44\x58\x47\x46\x5a\x6d\x50\x50\x4d\x00\x14\x78\x29\x14\x1a\x04\x0c\x00\x2f\x01\x49\x15\x11\x1b\x40\x45\x56\x0d\x54\x04\x02\x55\x5a\x4b\x3a\x16\x0e\x0e\x04\x00\x03\x15\x06\x1c\x0e\x05\x1c\x5b\x18\x52\x02\x1d\x59\x46\x1a\x49\x19\x0d\x48\x02\x53\x46\x52\x47\x51\x0d\x6b\x59\x5f\x07\x53\x4c\x10\x43\x55\x4d\x42\x07\x45\x41\x57\x00\x46\x4b\x1e\x40\x48\x1d\x03\x02\x4f\x62\x18\x2a\x6e\x07\x1d\x19\x00\x1a\x10\x54\x4c\x49\x4d\x4d\x73\x45\x42\x42\x59\x15\x5d\x4f\x5b\x68\x6c\x1c\x19\x0a\x48\x41\x2e\x17\x49\x1f\x0b\x16\x49\x00\x56\x07\x54\x1f\x1e\x5f\x4a\x78\x1f\x18\x50\x42\x1c\x52\x03\x17\x16\x5f\x46\x1b\x0b\x11\x41\x43\x02\x14\x0f\x18\x0e\x08\x01\x41\x0d\x0e\x0d\x0d\x08\x3b\x4a\x54\x2d\x11\x66\x2a\x0a\x0e\x0b\x00\x4c\x2f\x04\x07\x54\x10\x1d\x4d\x45\x09\x00\x09\x0c\x4d\x14\x31\x00\x04\x1d\x17\x29\x0d\x53\x00\x40\x4d\x38\x41\x04\x00\x5d\x00\x2a\x2a\x45\x58\x49\x54\x00\x10\x1b\x2a\x7f\x7f\x65\x6e\x64\x1e\x33\x66\x46\x4e\x52\x2b\x0c\x09\x16\x0c\x01\x1b\x4b\x0c\x12\x01\x09\x0d\x33&lt;br /&gt;COMPLEMENT&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What do you think about the code? Any suggestions how to obfuscate it a bit more would be more than welcome. Btw, I think I've provided an evidence of Ginsberg was a 1337 h4x0r ;-)&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-2931826752114986419?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/2931826752114986419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/08/perl-poetry.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2931826752114986419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/2931826752114986419'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/08/perl-poetry.html' title='Perl Poetry'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-9126104901177585305</id><published>2009-07-24T06:02:00.001-07:00</published><updated>2009-08-04T01:23:17.198-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java Ant'/><title type='text'>Hide password for Ant SCP Task</title><content type='html'>I have an Ant script that archives the &lt;span style="font-weight:bold;"&gt;dist&lt;/span&gt;s after each build by copying the new build into a server via SCP.&lt;br /&gt;&lt;br /&gt;However, I always had some troubles how to specify the password required for the connection. Currently there are the following possibilities to assign the password for the Ant SCP task:&lt;br /&gt;&lt;ol&gt;&lt;br /&gt;&lt;li&gt;Hardcoding the password and/or username in scp task. &lt;span style="font-weight:bold;"&gt;Gigafail&lt;/span&gt;.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; Get the username from the command line:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code"&gt;&lt;br /&gt;ant -Dusername=jibble -Dpassword=iseeu target&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;These properties may be used in the Ant script with the usual way:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Xml"&gt;&lt;br /&gt;&lt;scp todir="${username}:${password}@host:/dir" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;li&gt; A slightly better solution under Unix based systems is a &lt;span style="font-weight:bold;"&gt;secured properties file&lt;/span&gt; (Windows is still a single-user OS for me). You may use either &lt;span style="font-weight:bold;"&gt;${user.home}/build.properties&lt;/span&gt; (for personal settings), &lt;span style="font-weight:bold;"&gt;{$project}/build.properties&lt;/span&gt; (for project level settings) or &lt;span style="font-weight:bold;"&gt;master_include_directory/build.properties&lt;/span&gt; (for universal settings).&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;It could be pretty helpful if I wouldn't have to type the password each time I run the build script, but I always had doubts about storing my password on my local computer (even if it can be hashed) because of those "password recovery tools". In my opinion, they undermine safety.&lt;br /&gt;&lt;br /&gt;My first attempt to achieve my goal was this:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Xml"&gt;&lt;br /&gt;&lt;input message="Password: " addproperty="scp.pass" /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;What bothered me was that it had a clear text input. Here's where my saga begin.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Updating Ant:&lt;/h1&gt;So, after a bit of Googling I found that the new version of Ant offers this feature. Updating to Ant 1.7.1 offers us &lt;span style="font-weight:bold;"&gt;SecureInputHandler&lt;/span&gt; that can be used as follows:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Xml"&gt;&lt;br /&gt;&lt; input message="Password:" addproperty="password"&gt;&lt;br /&gt;     &lt;handler classname="org.apache.tools.ant.input.SecureInputHandler" /&gt;&lt;br /&gt;&lt;/input&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Unfortunatelly it's not supported in Eclipse 3.4.2 yet - at least it wasn't working for me. The console was still displaying the typed password in plain text, and it wasn't able to accept any inputs. A bit disappointing.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;Attempt 2:&lt;/h1&gt;Next I tried to crete an own input handler to read the password using &lt;span style="font-weight:bold;"&gt;java.io.Console&lt;/span&gt; (introduced in JDK 1.6).&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Java"&gt;&lt;br /&gt;import java.io.Console;&lt;br /&gt;&lt;br /&gt;import org.apache.tools.ant.BuildException;&lt;br /&gt;import org.apache.tools.ant.input.DefaultInputHandler;&lt;br /&gt;import org.apache.tools.ant.input.InputRequest;&lt;br /&gt;&lt;br /&gt;public class AntPasswordInputHandler&lt;br /&gt; extends DefaultInputHandler {&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public void handleInput(final InputRequest request)&lt;br /&gt;  throws BuildException {&lt;br /&gt; final Console console = System.console();&lt;br /&gt; if (null == console) {&lt;br /&gt;  throw new BuildException("Console is not accessible.");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; char[] pass = console.readPassword(getPrompt(request));&lt;br /&gt; final String password = new String(pass);&lt;br /&gt; request.setInput(password);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The code above may be used in the following way:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Xml"&gt;&lt;br /&gt;   &lt;target name="test"&gt;&lt;br /&gt;    &lt;input message="Enter password:" addproperty="password"&gt;&lt;br /&gt;     &lt;handler classname="edu.lro.ant.ext.AntPasswordInputHandler" /&gt;&lt;br /&gt;    &lt;/input&gt;&lt;br /&gt;    &lt;echo message="Given password is ${password}" /&gt;&lt;br /&gt;   &lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;As an alternate solution, a custom task may be implemented as &lt;a href="http://byteco.de/2009/05/01/ant-input-and-passwords/"&gt;Shivprasad Bade&lt;/a&gt; suggests.&lt;br /&gt;&lt;br /&gt;This solution works well if Ant is called from the console. However, if you try to use it from Eclipse, you won't get the Console reference. Great.&lt;br /&gt;&lt;br /&gt;Nota bene Console may be omitted and the password could be read by using simple &lt;span style="font-weight:bold;"&gt;DataInputStreams&lt;/span&gt; and masking the password with &lt;span style="font-weight:bold;"&gt;"\010*"&lt;/span&gt; or &lt;span style="font-weight:bold;"&gt;"\b*"&lt;/span&gt;, but it requires several additional tasks (like masking the password reader in a different thread with maximum priority to make sure the typed character is replaced by a * immediately) which makes this approach a bit ugly for me. See the article &lt;a href="http://java.sun.com/developer/technicalArticles/Security/pwordmask/"&gt;Password Masking&lt;/a&gt; or the 3rd section of this document about &lt;a href="http://sourceforge.net/projects/emaria/files/antdocs/antinput/antinput.pdf/download"&gt;Extending Ant Input Abilities&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;h1&gt;The enlightement:&lt;/h1&gt;Okay, so there's no hope to use the console (hm, okay, I lost my motivation). The final solution was to create a minimal graphical password handler dialog:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Java"&gt;&lt;br /&gt;import java.awt.Dimension;&lt;br /&gt;import java.awt.FlowLayout;&lt;br /&gt;import java.awt.Toolkit;&lt;br /&gt;import java.awt.Window;&lt;br /&gt;import java.awt.event.KeyAdapter;&lt;br /&gt;import java.awt.event.KeyEvent;&lt;br /&gt;&lt;br /&gt;import javax.swing.JDialog;&lt;br /&gt;import javax.swing.JFrame;&lt;br /&gt;import javax.swing.JPasswordField;&lt;br /&gt;&lt;br /&gt;import org.apache.tools.ant.BuildException;&lt;br /&gt;import org.apache.tools.ant.input.DefaultInputHandler;&lt;br /&gt;import org.apache.tools.ant.input.InputRequest;&lt;br /&gt;&lt;br /&gt;public class AntGUIPasswordInputHandler&lt;br /&gt; extends DefaultInputHandler {&lt;br /&gt;&lt;br /&gt;private String password = "";&lt;br /&gt;&lt;br /&gt;public AntGUIPasswordInputHandler() {&lt;br /&gt; ;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Override&lt;br /&gt;public void handleInput(final InputRequest input) throws BuildException {&lt;br /&gt; final JDialog dialog = new JDialog((JFrame)null, "Password:", true);&lt;br /&gt; final JPasswordField passwordField = new JPasswordField(15);&lt;br /&gt;&lt;br /&gt; passwordField.addKeyListener(new KeyAdapter() {&lt;br /&gt;  @Override&lt;br /&gt;  public void keyTyped(KeyEvent e) {&lt;br /&gt;   if (KeyEvent.VK_ENTER == e.getKeyChar()) {&lt;br /&gt;    password = new String(passwordField.getPassword());&lt;br /&gt;    dialog.dispose();&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt; });&lt;br /&gt;&lt;br /&gt; dialog.setLayout(new FlowLayout());&lt;br /&gt; dialog.add(passwordField);&lt;br /&gt; dialog.pack();&lt;br /&gt; putToMiddle(dialog);&lt;br /&gt; dialog.setVisible(true);&lt;br /&gt;&lt;br /&gt; input.setInput(password);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static void putToMiddle(final Window target) {&lt;br /&gt; final int height = target.getHeight();&lt;br /&gt; final int width = target.getWidth();&lt;br /&gt; final Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();&lt;br /&gt; final int locationX = (screenSize.width - width) / 2;&lt;br /&gt; final int locationY = (screenSize.height - height) / 2;&lt;br /&gt; target.setLocation(locationX, locationY);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Compile it, put it into a Jar and add it to the Ant Runtime Classpath settings in your Eclipse. Voila, coup de grâce!&lt;br /&gt;It can be used in the following way:&lt;br /&gt;&lt;br /&gt;&lt;pre name="code" class="Xml"&gt;&lt;br /&gt;   &lt;target name="testGUI"&gt;&lt;br /&gt;    &lt;input message="Enter password:" addproperty="password"&gt;&lt;br /&gt;     &lt;handler classname="edu.lro.ant.ext.AntGUIPasswordInputHandler" /&gt;&lt;br /&gt;    &lt;/input&gt;&lt;br /&gt;    &lt;echo message="Given password is ${password}" /&gt;&lt;br /&gt;   &lt;/target&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Phew, what an immense of muddling for such a trivial task. It's one of those &lt;span style="font-style:italic;"&gt;"it gonna take 5 mins to implement, it's obvious I'll finish it before I start working"&lt;/span&gt; but I ended up with ~2 hours of laming issues.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-9126104901177585305?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/9126104901177585305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/scp-ant-task-to-archive-builds.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/9126104901177585305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/9126104901177585305'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/scp-ant-task-to-archive-builds.html' title='Hide password for Ant SCP Task'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-6289035953645753895</id><published>2009-07-22T07:43:00.000-07:00</published><updated>2009-07-22T08:08:31.077-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Perl'/><category scheme='http://www.blogger.com/atom/ns#' term='geekfun'/><title type='text'>Poetry Pe[a]rl[s]</title><content type='html'>&lt;span style="font-style:italic;"&gt;Pun intended :-)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One of my best friends has shown me two interesting links:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt; The first one is a &lt;a href="http://www.perlmonks.org/index.pl?node=Perl%20Poetry"&gt;Perl Poetry&lt;/a&gt; page at &lt;a href="http://www.perlmonks.org"&gt;perlmonks.org&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt; And the other one is the &lt;a href="http://search.cpan.org/~dconway/Lingua-Romana-Perligata-0.50/lib/Lingua/Romana/Perligata.pm"&gt;Lingua Romana Perligata&lt;/a&gt; Perl precompiler in the CPAN library that allows us to code in Roman language in Perl:&lt;br /&gt;&lt;pre name="code" class="Perl"&gt;&lt;br /&gt;Enter tum next tum word inquementum tum &lt;br /&gt;biguttam egresso scribe.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Becomes:&lt;br /&gt;&lt;pre name="code" class="Perl"&gt;&lt;br /&gt;print STDOUT 'Enter next word:';&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The funny thing is that I've just bought a Roman language books a few weeks ago, maybe this extension will boost up my learning speed (I'm still got stuck at the 10th page at the 2nd lesson in the book).&lt;li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-6289035953645753895?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/6289035953645753895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/poetry-pearls.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6289035953645753895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/6289035953645753895'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/poetry-pearls.html' title='Poetry Pe[a]rl[s]'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-5095311426271184659</id><published>2009-07-21T06:39:00.000-07:00</published><updated>2009-07-22T08:10:18.183-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><title type='text'>The Lack of Static Function Variables in Java</title><content type='html'>Gee, I really miss this feature from Java and I don't see the reason why it wasn't implemented (as far as I followed the &lt;a href="http://java.sun.com/features/jdk/7/"&gt;Java 7.0 feature requests&lt;/a&gt; there's no hope it will be a reality).&lt;br /&gt;&lt;/p&gt;In the good old C++ it is allowed to create &lt;span style="font-weight:bold;"&gt;static&lt;/span&gt; variables in a function assuring the variable is &lt;span style="font-style:italic;"&gt;permanent&lt;/span&gt;, &lt;span style="font-style:italic;"&gt;initialized precisely once&lt;/span&gt; without having to pollute unnecessarily the global namespace of the class (i.e. the variable has a static storage).&lt;br /&gt;&lt;br /&gt;Nowadays it's pretty common that we use &lt;a href="http://www.javaworld.com/javaworld/javatips/jw-javatip67.html"&gt;lazy instantiation&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For instance, take a look at the following C++ code:&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;public void foo()&lt;br /&gt;{&lt;br /&gt;  static Bar bar = BarFactory.createBar()&lt;br /&gt;                    .setAttendance(50)&lt;br /&gt;                    .setServingBeer(true);&lt;br /&gt;  return bar;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In the code listing above it is ensured that the object &lt;span style="font-style:italic;"&gt;bar&lt;/span&gt; is &lt;span style="font-style:italic;"&gt;instantiated only once&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;However, if we want to reproduce the same funcionality in Java, we have to write a bit of boilerplate code:&lt;br /&gt;&lt;pre name="code" class="Java"&gt;&lt;br /&gt;private Bar bar = null;&lt;br /&gt;&lt;br /&gt;public void foo() {&lt;br /&gt;  if (null == bar) {&lt;br /&gt;    bar = BarFactory.createBar();&lt;br /&gt;    bar.setAttendance(50);&lt;br /&gt;    bar.setServingBeer(true);&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return bar;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Somewhat unnatural, isn't it? So what do you think, wouldn't this feature be handy?&lt;br /&gt;&lt;br /&gt;However, as far as I know the major reason for avoiding these constructions is that they might be somewhat notorious for causing problems when code is called repeatedly from multiple threads.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-5095311426271184659?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/5095311426271184659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/static-variables-in-functions.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/5095311426271184659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/5095311426271184659'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/static-variables-in-functions.html' title='The Lack of Static Function Variables in Java'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6433163430809277331.post-4568142440882979632</id><published>2009-07-21T02:47:00.000-07:00</published><updated>2009-07-22T08:05:59.543-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='puzzle'/><title type='text'>Today's Lameness</title><content type='html'>&lt;p&gt;I got a bit muddled up above this code yesterday evening after 8 hours of coding and cost me ~5 minutes to reach enlightenment. Can you spot why is the first definition syntactically correct whilst the second one causes a compilation error? :-)&lt;/p&gt;&lt;br /&gt;&lt;pre name="code" class="Java"&gt;&lt;br /&gt;package test;&lt;br /&gt;&lt;br /&gt;public class JTest {&lt;br /&gt;    public static void main(String[] args) {&lt;br /&gt;        String s = "a";&lt;br /&gt;        int i = 0;&lt;br /&gt;      &lt;br /&gt;        s = s + + + + + i;   // OK&lt;br /&gt;        s = s + + + + + s;   // Error&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_mCQzO3LpMvU/SmWZoWy_0iI/AAAAAAAAAAM/cfVZdNvUb8M/s1600-h/facepalm.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 320px;" src="http://4.bp.blogspot.com/_mCQzO3LpMvU/SmWZoWy_0iI/AAAAAAAAAAM/cfVZdNvUb8M/s400/facepalm.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5360859850047738402" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6433163430809277331-4568142440882979632?l=xcafebabe.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xcafebabe.blogspot.com/feeds/4568142440882979632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/todays-lameness.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/4568142440882979632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6433163430809277331/posts/default/4568142440882979632'/><link rel='alternate' type='text/html' href='http://xcafebabe.blogspot.com/2009/07/todays-lameness.html' title='Today&apos;s Lameness'/><author><name>rlegendi</name><uri>http://www.blogger.com/profile/11038971188784596070</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_mCQzO3LpMvU/SmWZoWy_0iI/AAAAAAAAAAM/cfVZdNvUb8M/s72-c/facepalm.jpg' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
