<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss version="2.0"><channel><title>Tiago, O Irrepupável</title><link>http://blog.irrepupavel.com/</link><description>Tiago Cogumbreiro loves to talk about Python, GNOME, web development, and Open Source; with a bit of nonsense here and there.</description><language>en</language><managingEditor>noreply@blogger.com (Tiago Cogumbreiro)</managingEditor><lastBuildDate>Sat, 03 Dec 2011 02:25:02 PST</lastBuildDate><generator>Blogger http://www.blogger.com</generator><openSearch:totalResults xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">146</openSearch:totalResults><openSearch:startIndex xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">1</openSearch:startIndex><openSearch:itemsPerPage xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/">25</openSearch:itemsPerPage><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="irrepupavel" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://irrepupavel.blogspot.com/feeds/posts/default" /><feedburner:emailServiceId xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">irrepupavel</feedburner:emailServiceId><feedburner:feedburnerHostname xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0">http://feedburner.google.com</feedburner:feedburnerHostname><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.bloglines.com/sub/http://irrepupavel.blogspot.com/feeds/posts/default" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://fusion.google.com/add?feedurl=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Firrepupavel.blogspot.com%2Ffeeds%2Fposts%2Fdefault" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><item><title>GNOME Pages mockups</title><link>http://blog.irrepupavel.com/2011/12/gnome-pages-mockups.html</link><category>gnome</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Sat, 03 Dec 2011 02:25:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-9216333340272167722</guid><description>The &lt;a href="http://www.gnome.org/"&gt;GNOME&lt;/a&gt; folks are rethinking the browser for desktop. Meet &lt;a href="https://live.gnome.org/Design/Apps/Web"&gt;GNOME Pages&lt;/a&gt;. Seif Lotfy &lt;a href="http://seilo.geekyogre.com/2011/12/web-prototype-day-2/"&gt;blogs about some&amp;nbsp;very clean mockups&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-9216333340272167722?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Proof Wiki</title><link>http://blog.irrepupavel.com/2011/12/proof-wiki.html</link><category>proofs</category><category>phd</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Fri, 02 Dec 2011 09:50:19 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-2909791709834909832</guid><description>I stumbled upon an interesting site called &lt;a href="http://www.proofwiki.org/"&gt;Proof Wiki&lt;/a&gt;, might be a valuable resource. Besides laying out proofs and relating them, there are also bibliographical references.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-2909791709834909832?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Android 4.0 (ICS) for x86 released!</title><link>http://blog.irrepupavel.com/2011/11/android-40-ics-for-x86-released.html</link><category>android x86</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Sat, 03 Dec 2011 01:45:15 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-2648929695969699192</guid><description>Android 4.0, aka ICS, &lt;a href="http://groups.google.com/group/android-x86/msg/57c47e36531d20ee"&gt;is out for x86&lt;/a&gt;. There is an &lt;a href="http://android-x86.googlecode.com/files/android-x86-4.0-devel-amd_brazos.iso"&gt;ISO available&lt;/a&gt;, featuring hardware acceleration for AMD Radeon, but not yet for Intel-based systems. There is also &lt;a href="http://groups.google.com/group/android-x86/browse_thread/thread/83dfe0e5a835cfa2/4252f950d8332d00"&gt;a VirtualBox image available&lt;/a&gt;. Also related, there are some videos floating around of &lt;a href="http://www.youtube.com/watch?v=kt8ZZLincUY"&gt;ICS running on the ZTE Blade&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Update:&lt;/b&gt;&amp;nbsp;there is &lt;a href="http://www.youtube.com/watch?v=ugG80Zqjgd4"&gt;a video on YouTube showcasing Android 4.0 x86&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-2648929695969699192?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Zotero to help me research, Pandoc to power my website</title><link>http://blog.irrepupavel.com/2011/10/zotero-to-help-me-research-pandoc-to.html</link><category>site generator</category><category>haskell</category><category>homepage</category><category>citations</category><category>pandoc</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Mon, 10 Oct 2011 05:39:18 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-3108425928518283836</guid><description>Some days ago I've stumbled upon &lt;a href="http://www.zotero.org/"&gt;Zotero&lt;/a&gt;, a well-integrated application to aid in collecting papers.&lt;br /&gt;
Meanwhile, while thinking about that I want to update my homepage I googled for yet another website generator and I encountered &lt;a href="http://johnmacfarlane.net/pandoc/"&gt;Pandoc&lt;/a&gt;, again. This time I looked a bit more carefully to the &lt;a href="http://johnmacfarlane.net/pandoc/README.html#citations"&gt;Pandoc's help page&lt;/a&gt; and found &lt;span id="goog_400496403"&gt;&lt;/span&gt;&lt;a href="http://citationstyles.org/"&gt;CSL&lt;/a&gt;&lt;span id="goog_400496404"&gt;, "a&lt;/span&gt;n open XML-based language to describe the formatting of citations and bibliographies." I can use Pandoc to load my BibTeX databases, through Andrea Rossato’s &lt;code&gt;&lt;a href="http://code.google.com/p/citeproc-hs/"&gt;hs-citeproc&lt;/a&gt;&lt;/code&gt;. I can even &lt;a href="http://johnmacfarlane.net/pandoc/README.html#templates"&gt;use templates to customize the output&lt;/a&gt;. Seems interesting.&lt;code&gt;&lt;br /&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-3108425928518283836?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>PhD dissertation tips and some relevant PhD thesis</title><link>http://blog.irrepupavel.com/2011/09/phd-dissertation-tips-and-some-relevant.html</link><category>phd thesis</category><category>phd</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Wed, 21 Sep 2011 03:46:08 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-9073327170414867017</guid><description>Tips on PhD dissertation proposal tips.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.dal.ca/"&gt;Dalhouse University&lt;/a&gt; has some &lt;a href="http://www.cs.dal.ca/graduate/phd-thesis-proposal"&gt;PhD thesis proposal guidelines&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://ciir.cs.umass.edu/%7Estrohman/"&gt;Trevor Strohman&lt;/a&gt; gives some &lt;a href="http://www.cs.dal.ca/graduate/phd-thesis-proposal"&gt;dissertation proposal tips&lt;/a&gt;. &lt;/li&gt;
&lt;/ul&gt;
Relevant Computer Science dissertations:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt; &lt;a href="http://web.willbenton.com/"&gt;William C. Benton&lt;/a&gt;. &lt;i&gt;&lt;a href="http://willbenton.com/dissertation/dissertation.pdf"&gt;Fast, Effective Program Analysis for Object-Level Parallelism&lt;/a&gt;.&lt;/i&gt; It is about multicore and parallel programming. Has a delightful typesetting, a good overall structure, and even tablatures (!).&lt;/li&gt;
&lt;li&gt;&lt;a href="http://cs.anu.edu.au/%7EDaniel.Frampton/"&gt;Daniel Frampton&lt;/a&gt;. &lt;a href="http://cs.anu.edu.au/%7EDaniel.Frampton/DanielFrampton_Thesis_Jun2010.pdf"&gt;&lt;i&gt;Garbage Collection and the Case for High-level Low-level Programming&lt;/i&gt;&lt;/a&gt;. Was distinguished by &lt;a href="http://www.core.edu.au/"&gt;CORE&lt;/a&gt; with best PhD thesis, 2011. Is working on implementation issues for X10 with &lt;a href="http://cs.anu.edu.au/%7EJosh.Milthorpe"&gt;Josh Milthorpe&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Alexandra Tsyban. &lt;i&gt;&lt;a href="http://www-wjp.cs.uni-sb.de/publikationen/Tsy09.pdf"&gt;Formal Verification of a Framework for Microkernel Programmers&lt;/a&gt;.&lt;/i&gt; Highlights the relevance of formal verification.&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/29769023-9073327170414867017?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>PhD thesis templates (LaTeX and XeTeX)</title><link>http://blog.irrepupavel.com/2011/09/phd-templates-latex-and-xetex.html</link><category>xetex</category><category>latex</category><category>phd thesis</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Mon, 19 Sep 2011 01:33:24 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-1386275994447346077</guid><description>I am gathering a list of PhD templates to use in my thesis:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://code.google.com/p/xdthesis/"&gt;xdthesis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/shakes76/xelatex_thesis_template/"&gt;xelatex_thesis_template&lt;/a&gt;: Has support for &lt;a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;amp;id=xetex"&gt;XeLaTeX&lt;/a&gt;. Got stuck the absence of file &lt;i&gt;svn-multi.sty&lt;/i&gt;, installed it with command &lt;code&gt;sudo yum install texlive-svn-multi&lt;/code&gt;. Then I got hit by &lt;pre&gt;The font "Courier 10 Pitch" cannot be found.&lt;/pre&gt;
on the line 53 &lt;i&gt;\setmonofont{Courier 10 Pitch}&lt;/i&gt;, from file &lt;i&gt;fonts.tex&lt;/i&gt;. I commented out that line. I had to install package &lt;i&gt;texlive-ntheorem&lt;/i&gt;. Finally, got hit by error message: &lt;pre&gt;kpathsea: Running mktexmf rsfs10
! I can't find file `rsfs10'.
&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/cambridge/thesis"&gt;cambridge&lt;/a&gt; is a classic.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/Thesis/Template"&gt;Thesis/Template&lt;/a&gt; looks like a complex, useful piece of work.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/willb/wi-thesis-template"&gt;willb/wi-thesis-template&lt;/a&gt; has a very nice readme and looks good too and points to &lt;a href="http://web.willbenton.com/writing/2008/better-latex"&gt;a solid collection of tips for LaTeX packages&lt;/a&gt; used in the template.&lt;/li&gt;
&lt;li&gt;LaTeX for humans presents &lt;a href="http://latexforhumans.wordpress.com/2011/03/10/thesis-templates-for-latex/"&gt;a list of templates from English and American Universities&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/29769023-1386275994447346077?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Some links on XeTeX, OpenType fonts</title><link>http://blog.irrepupavel.com/2011/09/some-links-on-xetex-opentype-fonts.html</link><category>xelatex</category><category>xetex</category><category>opentype</category><category>fonts</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Tue, 04 Oct 2011 07:14:30 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-4076279426661826141</guid><description>&lt;a href="http://scripts.sil.org/xetex"&gt;XeTeX&lt;/a&gt; seems as an improvement over LaTeX. One of its nice features is that it is easier to use &lt;a href="http://en.wikipedia.org/wiki/TrueType"&gt;&lt;acronym title="TrueType Fonts"&gt;TTF&lt;/acronym&gt;&lt;/a&gt; and &lt;a href="http://www.adobe.com/type/opentype/"&gt;OpenType&lt;/a&gt; fonts on the document typesetting. &lt;a href="http://scholarsfonts.net/"&gt;David J. Perry&lt;/a&gt; made a nice open font named &lt;a href="http://scholarsfonts.net/cardofnt.html"&gt;Cardo&lt;/a&gt; and also &lt;a href="http://scholarsfonts.net/xetextt.pdf"&gt;a tutorial on XeTeX&lt;/a&gt;. &lt;a href="http://www.google.com/webfonts"&gt;Google Webfonts&lt;/a&gt; is a great resource for open source fonts. &lt;a href="http://robjhyndman.com/"&gt;Hyndman&lt;/a&gt;&lt;span class="st"&gt;—has a great looking homepage&lt;/span&gt;&lt;span class="st"&gt;—&lt;/span&gt;gives a a push on &lt;a href="http://robjhyndman.com/researchtips/xelatex/"&gt;Getting started with XeLaTeX&lt;/a&gt;. &lt;a href="http://www.tug.org/"&gt;&lt;acronym title="TeX User Group"&gt;TUG&lt;/acronym&gt;&lt;/a&gt; also has &lt;a href="http://www.tug.org/xetex/"&gt;a good resource listing on XeTeX&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Package &lt;a href="http://www.ctan.org/tex-archive/macros/latex/contrib/iftex"&gt;&lt;i&gt;iftex&lt;/i&gt;&lt;/a&gt; is important to enable adjustments to your style when running under LaTeX, XeLaTeX, or LuaLaTeX.&lt;br /&gt;
&lt;br /&gt;
To install the cardo font on Fedora 15, just do:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;sudo yum install scholarsfonts-cardo-fonts&lt;/pre&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-4076279426661826141?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>XeTeX on Fedora 15</title><link>http://blog.irrepupavel.com/2011/09/xetex-on-fedora-15.html</link><category>xelatex</category><category>xetex</category><category>fedora</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Sun, 18 Sep 2011 15:28:08 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-1124331783354523378</guid><description>&lt;a href="http://scripts.sil.org/cms/scripts/page.php?site_id=nrsi&amp;amp;id=xetex"&gt;XeTeX&lt;/a&gt; (XeLaTeX) is broken out-of-the-box on Fedora 15, see &lt;a href="https://bugzilla.redhat.com/show_bug.cgi?id=717268"&gt;bug #717268&lt;/a&gt;. To make it work, &lt;a href="http://fedoraproject.org/wiki/Features/TeXLive#TeX_Live_2011_development"&gt;install and update texlive from the TeX Live 2011 repository&lt;/a&gt;:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;sudo rpm -i &lt;a class="external free" href="http://jnovy.fedorapeople.org/texlive/packages.f15/texlive-release.noarch.rpm"&gt;http://jnovy.fedorapeople.org/texlive/packages.f15/texlive-release.noarch.rpm&lt;/a&gt;
sudo yum clean all
sudo yum update
sudo yum install texlive-xetex
sudo yum reinstall texlive-xetex # &lt;i&gt;make sure the configuration is refreshed&lt;/i&gt;
&lt;/pre&gt;
&lt;br /&gt;
The error I had was:&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ xelatex file.tex 
This is XeTeX, Version 3.1415926-2.3-0.9997.5 (TeX Live 2011)
 restricted \write18 enabled.

kpathsea: Running mktexfmt xelatex.fmt
I can't find the format file `xelatex.fmt'!
&lt;/pre&gt;
&lt;br /&gt;
The idea to update the TeX Live distribution came from &lt;a href="http://tex.stackexchange.com/questions/24762/latex-sourcefiles-older-than-5-years-old-xelatex-fails/24764#24764"&gt;Leo&lt;/a&gt;. The tip on how to refresh the configuration of XeTeX came from &lt;a href="http://tex.stackexchange.com/questions/23164/i-cant-find-the-format-file-xelatex-fmt/23224#23224"&gt;Stephen&lt;/a&gt;.&lt;br /&gt;
&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-1124331783354523378?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Java 7 brings you fork/join, phasers</title><link>http://blog.irrepupavel.com/2011/07/java-7-brings-you-forkjoin-phasers.html</link><category>java</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Fri, 29 Jul 2011 02:24:45 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-5756706911788626040</guid><description>Yay, &lt;a href="http://download.oracle.com/javase/7/docs/technotes/guides/concurrency/changes7.html"&gt;Java 7 is here and with it&lt;/a&gt;:
&lt;ul&gt;
&lt;li&gt;fork/join barriers&lt;/li&gt;
&lt;li&gt;phasers (&lt;acronym title="also known as"&gt;aka&lt;/acronym&gt; clocks) barriers&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/29769023-5756706911788626040?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>MeeGo really fast review</title><link>http://blog.irrepupavel.com/2010/05/meego-really-fast-review.html</link><category>meego</category><category>linux review</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Mon, 22 Nov 2010 13:13:31 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-8292320736103046637</guid><description>&lt;p&gt;I just installed &lt;a href="http://meego.com/"&gt;MeeGo&lt;/a&gt; on my &lt;a href="http://www.pcpro.co.uk/reviews/laptops/355027/asus-eee-pc-seashell-1005p"&gt;netbook&lt;/a&gt;. This new segment stemmed innovation in the Linux world, which brings me back to the old days of trying out each and every new distribution out there.&lt;/p&gt;

&lt;p&gt;
I use my netbook for surfing the web, writing documents (LaTeX), create presentations (LaTeX), and program in Java (with Eclipse). Unfortunately, this distribution has no proxy support, or a usable wireless connection application. Since It lacks support for HTTP proxies, I cannot connect to the wired network at work. Also, there is no way to connect to a WPA Enterprise wireless network, thus I cannot connect to the wireless network at work. So, for my use case, this distribution is still in its infancy.
&lt;/p&gt;

&lt;p&gt;Pros:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fast boot (below 30secs)&lt;/li&gt;
&lt;li&gt;common applications are well integrated in the interface&lt;/li&gt;
&lt;li&gt;fast and simple user experience&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cons:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;rudimentary wireless connection interface&lt;/li&gt;
&lt;li&gt;no HTTP proxy support&lt;/li&gt;
&lt;li&gt;screen brightness mostly working&lt;/li&gt;
&lt;li&gt;does not hibernate (only suspend and shutdown)&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/29769023-8292320736103046637?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description></item><item><title>Learn you a Haskell for great good</title><link>http://blog.irrepupavel.com/2010/05/learn-you-haskell-for-great-good.html</link><category>haskell</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Tue, 23 Nov 2010 13:17:35 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-425094850628415171</guid><description>Just stumbled upon &lt;a href="http://learnyouahaskell.com/"&gt;Learn you a Haskell for great good&lt;/a&gt;. Looks funny.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-425094850628415171?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description></item><item><title>OpenCL review</title><link>http://blog.irrepupavel.com/2010/01/opencl-review.html</link><category>multicore</category><category>opencl</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Tue, 02 Feb 2010 01:19:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-4955203240993233811</guid><description>&lt;p&gt;OpenCL is an open standard being created by the Khronos Group, pushed by Apple and AMD. This technology features data parallelism and task parallelism. It is supposed to target a varied range of devices, for example, there is an embedded profile for mobile devices. MacOS X 10.6 has support for OpenCL. There is support for Linux and Windows in x86 and x86-64 architectures via AMD.&lt;/p&gt;

&lt;p&gt;OpenCL may be touted as being in relation to multicores as OpenGL is in relation GPUs. But in fact, OpenCL is a broader technology than OpenGL is, since it targets not only multicores but GPUs as well. Additionally, there is a tight coupling between both of these technologies, e.g. it is possible to share a buffer between an OpenCL operation and an OpenGL operation.&lt;/p&gt;

&lt;p&gt;In OpenCL there is a concept of &lt;em&gt;kernel&lt;/em&gt; that is akin to SIL places. A kernel consists of a C program whose entry point is a function. Kernels communicate via shared memory (&lt;em&gt;buffers&lt;/em&gt;). A &lt;em&gt;work-item&lt;/em&gt; is composed by one ore more kernels that are executed sequentially. Each kernel may be target of data parallelization. A work-item may be target of task parallelization. Work-items are executed on a &lt;em&gt;device&lt;/em&gt; (e.g. a CPU, a GPU) that consists of one or more processing unit.&lt;/p&gt;

&lt;p&gt;Technically kernels are C string that must be compiled every time the program loads. Notice that the OpenCL runtime may cache compilation.&lt;/p&gt;

&lt;p&gt;The site HPC Wire published a very good insight from a person with experience with HPC (OpenMP in particular) &lt;a href="http://www.hpcwire.com/features/Compilers-and-More-OpenCL-Promises-and-Potential-58625442.html?page=1"&gt;“Compilers and More: OpenCL Promises and Potential”&lt;/a&gt; from which I would like to quote two paragraphs:
&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;
So, are OpenCL programs going to be performance portable or not? Sadly, not. [...] An optimized kernel for one device may or may not perform well on another, but is unlikely to be optimal for that second device.
&lt;/p&gt;

&lt;p&gt;
The intent is apparently that OpenCL will support an ecosystem of tools, middleware and applications, not to be the portable parallel abstraction. Even though the kernels are not performance portable, even if you have to tune your kernels for each device, the ability to write your kernels for different devices in the same language is a great leap forward from where we are today.
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;References&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.khronos.org/files/opencl-quick-reference-card.pdf"&gt;OpenCL Quick Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.khronos.org/registry/cl/specs/opencl-1.0.43.pdf"&gt;Specification&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.apple.com/mac/library/documentation/Performance/Conceptual/OpenCL_MacProgGuide/Introduction/Introduction.html"&gt;MacOSX Programming Guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.amd.com/GPU/ATISTREAMSDKBETAPROGRAM/Pages/default.aspx"&gt;Linux and Windows OpenCL SDK (by AMD)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.amd.com/documentation/videos/InsideTrack/Pages/default.aspx#opencl"&gt;Introductory video by AMD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://ati.amd.com/technology/streamcomputing/intro_opencl.html"&gt;An introduction to OpenCL by AMD&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://developer.nvidia.com/object/get-opencl.html"&gt;NVIDIA's OpenCL for Linux and Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.nvidia.com/object/cuda_learn_products.html"&gt;NVIDIA devices that support OpenCL&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/29769023-4955203240993233811?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Revisão da linguagem Go</title><link>http://blog.irrepupavel.com/2009/12/revisao-da-linguagem-go.html</link><category>go</category><category>google</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Tue, 16 Feb 2010 13:26:37 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-7200748815070373455</guid><description>&lt;p&gt;Podemos pensar no Go como um C mais limpo: estruturas (&lt;i&gt;structs&lt;/i&gt;) como no C, libertação automática de memória (há &lt;i&gt;garbage collection&lt;/i&gt;), referências (sem aritmética de ponteiros) e valores, funções e os tipos de dados usuais. As funções podem retornar tuplos, mas os tuplos não são valores de primeira-classe, i.e. não podem ser alocados ou guardados numa variável.&lt;/p&gt;

&lt;p&gt;Exemplo de uma função que retorna um tuplo:&lt;/p&gt;

&lt;pre&gt;
func foo(int v) (int v1, int v2) {
return v, v*2
}

a, b = foo(3);
&lt;/pre&gt;

&lt;p&gt;
Temos a palavra chave &lt;code&gt;func&lt;/code&gt;, o nome da função &lt;code&gt;foo&lt;/code&gt;, os parâmetros da função &lt;code&gt;(int v)&lt;/code&gt; e os parâmetros de saída &lt;code&gt;(int v1, int v2)&lt;/code&gt;. É o regresso dos parâmetros de saída no sentido em que podemos manipulá-los, mas sintacticamente não estão ao lado dos parâmetros de entrada, o que me parece uma boa escolha. O mesmo exemplo pode ser reescrito assim (mais estranho na minha opinião):
&lt;/p&gt;
&lt;pre&gt;
func foo(int v) (int v1, int v2) {
v1 = v;
v2 = v * 2;
return;
}

a, b = foo(3);
&lt;/pre&gt;

&lt;p&gt;
Existem dois conceitos que merecem realce: &lt;em&gt;métodos&lt;/em&gt; e &lt;em&gt;interfaces&lt;/em&gt;. Os métodos são funções que se associam a um tipo de dados e são utilizados como os métodos do C++ ou do Java. Não podem ser associados a interfaces; podem ser associados tipos, por exemplo a uma estrutura. A definição de um método é isolada, não é feita na definição do tipo ao qual está associada.
&lt;/p&gt;

&lt;p&gt;Exemplo ilustrativo de um método que calcula a norma sobre o tipo de dados ponto:&lt;/p&gt;
&lt;pre&gt;
// Disclairmer: o exemplo foi feito por mim sem testar se funciona
struct Point {
int x;
int y;
}

func (Point self) Magnitude() int {
return Math.sqrt(self.x * self.x + self.y * self.y)
}

Point p = Point{0, 0};
p.Magnitude(); // returns 0
p.x = 2;
p.Magnitude(); // returns 2
&lt;/pre&gt;

&lt;p&gt;
Resumindo, para definir um método temos a keyword &lt;code&gt;func&lt;/code&gt;, entre
parêntises o tipo ao qual o método vai estar associado e o nome da
variável (neste caso usei &lt;code&gt;self&lt;/code&gt;), de seguida os parâmetros e o tipo de
retorno (ou parâmetros de saída).

Um interface identifica (estruturalmente) tipos que tenham um dado
conjunto de métodos associados. Ou seja, se dois valores tiverem pelo
menos os mesmos métodos que um dado interface, então são considerados
daquele interface. A associação a um dado interface é implicita, não
existe associação, &lt;i&gt;e.g.&lt;/i&gt; &lt;code&gt;T1 implements ISomeInterface&lt;/code&gt;.

&lt;h3&gt;Concorrência&lt;/h3&gt;

&lt;p&gt;
Existe paralelismo de tarefas, nesta linguagem é feita através de uma
&lt;code&gt;goroutine&lt;/code&gt; (semelhantes a &lt;code&gt;threads&lt;/code&gt; ou &lt;code&gt;tasks&lt;/code&gt;). As &lt;i&gt;goroutines&lt;/i&gt; são (pretendem ser) leves. Para criar uma &lt;i&gt;goroutine&lt;/i&gt;, colocamos a keyword &lt;code&gt;go&lt;/code&gt; antes de uma chamada de uma função:
&lt;/p&gt;

&lt;pre&gt;
go LongComputation();
&lt;/pre&gt;

&lt;p&gt;
A comunicação entre tarefas parelelas é feita através de memória
partilhada ou através de canais. Por exemplo, para criar um canal que transmite inteiros e associá-lo a uma variável &lt;i&gt;c&lt;/i&gt;, faz-se:
&lt;/p&gt;

&lt;pre&gt;
c := make(chan int)
&lt;/pre&gt;

&lt;p&gt;
Podemos usar esse canal no exemplo seguinte em que criamos duas tarefas paralelas (&lt;i&gt;goroutines&lt;/i&gt;) uma envia mensagem pelo canal &lt;i&gt;c&lt;/i&gt; e a outra tarefa recebe mensagens pelo mesmo canal, mostrando o valor recebido no ecrã.&lt;/p&gt;

&lt;pre&gt;
func client() {
  c&amp;lt;- 10;
}

func server() {
  for { // this for is equivalente to C's for (;;) 
    msg := &amp;lt;-c;
    fmt.Printf("received %d\n", msg);
  }
}
&lt;/pre&gt;

&lt;p&gt;O &lt;code&gt;select&lt;/code&gt; da linguagem é muito poderoso e podem fazer-se servidores/clientes mais complicados com brevidade. O seguinte exemplo está na especificação da linguagem.&lt;/p&gt;
&lt;pre&gt;
var c, c1, c2 chan int;
var i1, i2 int;
select {
case i1 = &amp;lt;-c1:
 print("received ", i1, " from c1\n");
case c2 &amp;lt;- i2:
 print("sent ", i2, " to c2\n");
default:
 print("no communication\n");
}

for {  // send random sequence of bits to c
 select {
 case c &amp;lt;- 0:  // note: no statement, no fallthrough, no folding of cases
 case c &amp;lt;- 1:
 }
}
&lt;/pre&gt;
&lt;p&gt;
Num &lt;code&gt;select&lt;/code&gt; com várias operações de recepção (&lt;code&gt;&amp;lt;-c&lt;/code&gt;) e/ou de envio (&lt;code&gt;c&amp;lt;-&lt;/code&gt;) de mensagem é tratada de cima para baixo o primeiro ramo que esteja activo. Caso não hajam expressões de envio/recepção de mensagem activas, é avaliado o caso &lt;code&gt;default&lt;/code&gt;. Se o ramo &lt;code&gt;default&lt;/code&gt; não estiver definido, então o &lt;code&gt;select&lt;/code&gt; fica bloqueado até uma expressão de envio/recepção esteja activa. No exemplo acima, o primeiro &lt;code&gt;select&lt;/code&gt; tenta receber uma mensagem pelo canal &lt;code&gt;c1&lt;/code&gt;. Caso não haja mensagem para se receber no canal &lt;code&gt;c1&lt;/code&gt;, o &lt;code&gt;select&lt;/code&gt; tenta enviar uma mensagem pelo canal &lt;code&gt;c2&lt;/code&gt;. Se não houver transmissão da mensagem, então é avaliado o ramo &lt;code&gt;default&lt;/code&gt; e mostra-se no ecrã &lt;code&gt;no communication&lt;/code&gt;. De seguida temos um &lt;code&gt;select&lt;/code&gt; dentro de um ciclo, o Go alterna de uma forma uniforme e justa (não está provado) entre os vários ramos activos, enviando por este motivo ora o valor &lt;code&gt;1&lt;/code&gt; ora o valor &lt;code&gt;0&lt;/code&gt; pelo canal &lt;code&gt;c&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;
Como os canais são valores, podem ser enviados através de um canal. Existe primitivas de comunicação síncrona e assíncrona. É possível tipificar canais, especificando o
tipo de valores comunicado e se é de entrada ou de saída. Não há
suporte para &lt;a href="http://www.dcs.gla.ac.uk/~simon/publications/TR-2003-133.pdf"&gt;tipos de sessão&lt;/a&gt;.
&lt;/p&gt;

&lt;h3&gt;Conclusão&lt;/h3&gt;

&lt;p&gt;
O Go é vendida como uma linguagem de sistemas (concorrência incluida).
Se me dessem para escolher C ou Go ignorando o contexto de utilização,
escolheria Go sem piscar os olhos. Escolheria também Go ao invés do C++.
Acho que tem uma elegância sintática razoável (para uma linguagem que segue a sintaxe do C) e que faz um bom compromisso nas primitivas e abstracções escolhidas: gosto muito do sistema de interfaces mas sinto falta de excepções.
&lt;/p&gt;

&lt;p&gt;A resposta à concorrência é insuficiente. Um slogan do Go é, e passo a citar:&lt;/p&gt;
&lt;blockquote source="http://golang.org/doc/effective_go.html#concurrency"&gt;Do not communicate by sharing memory; instead, share memory by communicating.&lt;/blockquote&gt;
&lt;p&gt;
Mas entre o que se apela e o que se faz vai um grande passo. Por mais que existam canais e de existir o &lt;i&gt;slogan&lt;/i&gt;, continua a ser possível trabalhar com memória partilhada sem qualquer protecção do sistema de tipos. Além disso comprometem-se com uma memória com um espaço global de endereços &lt;em&gt;único&lt;/em&gt;, em contraste com um &lt;a href="http://en.wikipedia.org/wiki/Partitioned_global_address_space"&gt;um espaço global de endereços particionado&lt;/a&gt;, não se preparando para sistemas mais esotéricos com modelos de memória diferentes. Para a omissão de excepções é dada a justificação &lt;a href="http://golang.org/doc/go_lang_faq.html#exceptions"&gt;que não é um problema bem resolvido&lt;/a&gt;, ignorando o bom trabalho desenvolvido na &lt;a href="http://x10.codehaus.org/"&gt;linguagem X10&lt;/a&gt;. Para a concorrência é feito o inverso: albergam ambos os idiomas e promovem timidamente a concorrência por passagem de mensagem.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-7200748815070373455?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Quick update</title><link>http://blog.irrepupavel.com/2009/11/quick-update.html</link><category>mil</category><category>phd</category><category>callas</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Wed, 17 Feb 2010 02:37:23 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-6285026991865394485</guid><description>&lt;p&gt;
Time for a quick recap of what's been life like. I finished my masters on informatics, &lt;a href="http://homepages.lasige.di.fc.ul.pt/~cogumbreiro/cogumbreiro-msc-thesis.pdf"&gt;the thesis is online&lt;/a&gt;. The work is the formalization of a compiler from the &amp;pi;-calculus into a multithreaded &lt;acronym title="Typed Assembly Language"&gt;TAL&lt;/acronym&gt;. I've learned a lot these past two years! Particularly in the value of (provable) specification for an algorithm.
&lt;/p&gt;

&lt;p&gt;On another front I have been working on &lt;a href="http://www.dcc.fc.up.pt/callas/"&gt;Callas&lt;/a&gt; (which needs a big brush up on its site). Once again, I have been defining a translation function, this time from Callas (a functional, declarative language with modules) to a byte-code language based on Java (with some simplifications). I now have a more influent position and am giving some (small) input on the design of the language.
&lt;/p&gt;

&lt;p&gt;Meanwhile work has continued on the &lt;a href="http://gloss.di.fc.ul.pt/mil/"&gt;MIL&lt;/a&gt;. We have released a new version of the interpreter, which includes a deadlock checker. Technically this amounted to integrate the typechecker with a Prolog engine (we are using &lt;a href="http://jlogic.sourceforge.net/"&gt;JLog&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Finally, I am eager for the acceptance of my PhD application in &lt;a href="http://www.di.fc.ul.pt/Informatica/Doutoramento_em_Inform%C3%A1tica"&gt;&lt;acronym title="Faculdade de Ciências da Universidade de Lisboa"&gt;FCUL&lt;/acronym&gt;&lt;/a&gt;. The acceptance process usually takes one month (&lt;em&gt;sigh&lt;/em&gt;), so I should know the results any time soon.&lt;/p&gt;

&lt;p&gt;
All in all things are working out smoothly ;-)
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-6285026991865394485?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description></item><item><title>An applet for MIL and the simply typed π-calculus compiler</title><link>http://blog.irrepupavel.com/2009/07/applet-for-mil-and-simply-typed.html</link><category>pi-to-mil</category><category>mil</category><category>applet</category><category>tutorial</category><category>pi-calculus</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Mon, 23 Aug 2010 21:19:48 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-7710504262323621823</guid><description>&lt;p&gt;
In an effort to showcase my &lt;acronym title="Master of Science"&gt;MSc&lt;/acronym&gt; work, I have developed an applet that contains the &amp;pi;-calculus compiler along with the MIL interpreter. You can try out either MIL our the simply-typed &amp;pi;-calculus and run it online. Our article about &lt;a href="http://dx.doi.org/10.1016/j.entcs.2009.06.004"&gt;compiling the &amp;pi;-calculus into a multithreaded typed assembly language&lt;/a&gt; is an useful reference.&lt;/p&gt;

&lt;p style="text-align:center;"&gt;
&lt;a href="http://gloss.di.fc.ul.pt/mil/applet/"&gt;&lt;img src="http://gloss.di.fc.ul.pt/mil/applet.png" alt="Try MIL and the pi-calculus compiler on-line!" /&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;The &amp;pi;-calculus consists of processes that run concurrently—you may read processes as tasks or threads, although they sit at a much higher level. The simplest process is the inactive one that finishes, we represent it by a zero &lt;code&gt;0&lt;/code&gt;. The basis of the &amp;pi;-calculus is communication; it is so important that the fundamental step of computation is the communication of sequences of values (integers, strings, and channels). Processes synchronize (and communicate) by message-passing, using channels. To send a message &lt;code&gt;10&lt;/code&gt; through a channel &lt;code&gt;x&lt;/code&gt; we write the output process &lt;code&gt;x&amp;lt;10&gt;&lt;/code&gt;. To receive a message through a channel &lt;code&gt;x&lt;/code&gt; and store it in a name &lt;code&gt;y&lt;/code&gt; that is visible in process &lt;code&gt;P&lt;/code&gt; we write the input process &lt;code&gt;x(y).P&lt;/code&gt;, notice that process &lt;code&gt;P&lt;/code&gt; is not a variable, it must be replaced with an actual process, like the inactive process &lt;code&gt;0&lt;/code&gt;. If we want to receive a message repeatedly, like a server does, we just write a bang (&lt;code&gt;!&lt;/code&gt;) in front of an input process, for example &lt;code&gt;!x(y).P&lt;/code&gt;. To execute process &lt;code&gt;P&lt;/code&gt; in parallel with process &lt;code&gt;Q&lt;/code&gt; we write the parallel process &lt;code&gt;P | Q&lt;/code&gt;, or to remove ambiguity we may use parenthesis &lt;code&gt;(P | Q)&lt;/code&gt;. To use a channel &lt;code&gt;x&lt;/code&gt; in a process &lt;code&gt;P&lt;/code&gt;, we must first declare it along with its type &lt;code&gt;T&lt;/code&gt; by writing &lt;code&gt;new x:T P&lt;/code&gt;. A type &lt;code&gt;T&lt;/code&gt; is not a variable, it can be either an integer type &lt;code&gt;int&lt;/code&gt;, a string type &lt;code&gt;str&lt;/code&gt;, or a channel &lt;code&gt;^[T1,...,Tn]&lt;/code&gt; (the parameters ranging from &lt;code&gt;T1,...,Tn&lt;/code&gt; are a possibly empty sequence of types, like the empty channel type &lt;code&gt;^[]&lt;/code&gt; or the channel that communicate two integers &lt;code&gt;^[int,int]&lt;/code&gt;. Channels may themselves send channels, for example channel type &lt;code&gt;^[int,^[int]]&lt;/code&gt; types channels that communicates two values, one of the integer type, another a channel that communicates integers.

&lt;p&gt;A quick example of an echo server:&lt;/p&gt;
&lt;pre&gt;
new echo:^[int,^[int]] (
  !echo(x,y).y&amp;lt;x&gt;
  |
  new print:^[int] (
    !print(m).printInt&amp;lt;m&gt;
    |
    echo&amp;lt;10,print&gt;
  )
)
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-7710504262323621823?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description></item><item><title>“Compiling the π-calculus into a multithreaded typed assembly language” is published</title><link>http://blog.irrepupavel.com/2009/06/compiling-calculus-into-multithreaded.html</link><category>mil</category><category>publication</category><category>pi-calculus</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Wed, 10 Feb 2010 10:39:31 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-5971661989464884540</guid><description>&lt;p&gt;
After one year the article &lt;a href="http://blog.irrepupavel.com/2008/05/accepted-in-places-08.html"&gt;I presented&lt;/a&gt; in &lt;a href="http://places08.di.fc.ul.pt/"&gt;PLACES '08&lt;/a&gt; was published.
&lt;/p&gt;

&lt;cite&gt;
We extend a previous work on a multithreaded typed assembly language (MIL) targeted at shared memory multiprocessors, and describe the design of a type-preserving compiler from the π-calculus into MIL. The language enforces a policy on lock usage through a typing system that also ensures race-freedom for typable programs, while allowing for typing various important concurrency patterns. Our translation to MIL generates code that is then linked to a library supporting a generic unbounded buffer monitor, variant of Hoare's bounded buffer monitor, entirely written in MIL. Such a monitor shields client code (the π-calculus compiler in particular) from the hazardous task of direct lock manipulation, while allowing for the representation of π-calculus channels. The compiler produces type correct MIL programs from type correct source code, generating low-contention cooperative multithreaded programs.
&lt;/cite&gt;

&lt;p&gt;
Tiago Cogumbreiro, Francisco Martins, and Vasco T. Vasconcelos. &lt;a href="http://dx.doi.org/10.1016/j.entcs.2009.06.004"&gt;Compiling the π-calculus into a multithreaded typed assembly language&lt;/a&gt;. &lt;i&gt;ENTCS&lt;/i&gt;, 241:57–84, 2009.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-5971661989464884540?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description></item><item><title>Problemas com acentos usando Latex, Flyspell, ISpell e Emacs</title><link>http://blog.irrepupavel.com/2009/04/problemas-com-acentos-usando-latex.html</link><category>latex</category><category>ispell</category><category>pt</category><category>emacs</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Mon, 06 Apr 2009 10:51:35 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-1623869705989353689</guid><description>&lt;p&gt;
Estive muito tempo com problemas na forma como o Emacs e o ISpell reconheciam as palavras portuguesas. Depois de muito escavar lá encontrei o &lt;a href="http://natura.di.uminho.pt/~jj/pln/dot.emacs"&gt;&lt;code&gt;.emacs&lt;/code&gt;&lt;/a&gt; do &lt;a href="http://natura.di.uminho.pt/~jj/pln/pln.html"&gt;sítio oficial do dicionário português para ISpell&lt;/a&gt;. Para corrigir, coloquem este código no vosso &lt;code&gt;.emacs&lt;/code&gt;:
&lt;/p&gt;

&lt;pre&gt;
(custom-set-variables
   '(ispell-local-dictionary-alist
     (quote (("portugues" "[A-Za-zàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚãõÃÕâêîôûÂÊÎÔÛçÇ]"
                          "[^A-Za-zàèìòùÀÈÌÒÙáéíóúÁÉÍÓÚãõÃÕâêîôûÂÊÎÔÛçÇ]"
                          "[-]" nil nil "~latin1" iso-8859-1)
             ("portutex"  "[A-Za-z\\\\\\\\]"
                          "[^A-Za-z\\\\\\\\]"
                          "[---~`'^{}]" nil nil "~tex" iso-8859-1)))))
&lt;/pre&gt;

&lt;p&gt;Isto é quase &lt;a href="http://www.ascii-art.de/"&gt;arte ASCII&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-1623869705989353689?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Redirecting to an external link/URL in Zope (and Plone)</title><link>http://blog.irrepupavel.com/2009/04/redirecting-to-external-linkurl-in-zope.html</link><category>en</category><category>tips</category><category>plone</category><category>zope</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Wed, 10 Feb 2010 05:42:27 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-5744697008076159738</guid><description>&lt;p&gt;
Go to the &lt;em&gt;Zope Management Interface&lt;/em&gt;. In &lt;a href="http://plone.org/"&gt;Plone&lt;/a&gt; click on Site Setup (on the upper left corner) and then under &lt;em&gt;Plone Configuration&lt;/em&gt; click on &lt;em&gt;Zope Management Interface&lt;/em&gt;. 
&lt;/p&gt;

&lt;p&gt;
Next, create a content &lt;em&gt;Script (Python)&lt;/em&gt; (select it in the drop-down widget in the upper left corner of the page). Select the name of the &lt;strong&gt;link&lt;/strong&gt; of the origin of the redirection and click on &lt;em&gt;Add and Edit&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Add the following content:&lt;/p&gt;
&lt;pre&gt;
# Import a standard function, and get the HTML request and response objects.
from Products.PythonScripts.standard import html_quote
request = container.REQUEST
RESPONSE = request.RESPONSE

#return context.REQUEST.RESPONSE.redirect("http://www.google.com/")
return RESPONSE.redirect("http://www.google.com/")
&lt;/pre&gt;

&lt;p&gt;
This will redirect &lt;code&gt;http://YOURHOSTNAME/foo&lt;/code&gt; (if you create the python script at the root of your Zope Management Interface named &lt;em&gt;foo&lt;/em&gt;) and redirect it to &lt;a href="http://www.google.com/"&gt;http://www.google.com/&lt;/a&gt;. Could be easier (and fully accessible trough Plone's UI).
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-5744697008076159738?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>MiNEMA Winter School 2009</title><link>http://blog.irrepupavel.com/2009/03/minema-winter-school-2009.html</link><category>travel</category><category>sweden</category><category>en</category><category>winter-schools</category><category>wireless sensor networks</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Sun, 08 Mar 2009 16:17:19 PDT</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-4635443669460358219</guid><description>I am going to attend &lt;a href="http://www.cse.chalmers.se/minema2009/"&gt;MiNEMA Winter School&lt;/a&gt;. Great oportunity to learn about &lt;a href="http://en.wikipedia.org/wiki/Wireless_Sensor_Networks"&gt;wireless sensor networks&lt;/a&gt; and to discover &lt;a href="http://en.wikipedia.org/wiki/Gothenburg"&gt;Göteborg&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-4635443669460358219?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>World of Goo</title><link>http://blog.irrepupavel.com/2009/02/world-of-goo.html</link><category>gamming</category><category>en</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Tue, 17 Feb 2009 18:11:08 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-8310578382545799499</guid><description>&lt;p&gt;
I was amazed by the demo and had to buy the full game of &lt;a href="http://www.worldofgoo.com/"&gt;World of Goo&lt;/a&gt; (for Linux). I do not play a game in years, so this was really a urge I could not control ;-)
The game cost me 16 euros.
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-8310578382545799499?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total></item><item><title>Hindley/Milner Type Inference Algorithm implementated in Haskell (untested and naïve)</title><link>http://blog.irrepupavel.com/2009/02/hindleymilner-type-inference-algorithm.html</link><category>haskell</category><category>en</category><category>type inference</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Thu, 11 Nov 2010 12:58:45 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-8920729493622993656</guid><description>&lt;p&gt;
I do not program in Haskell in a couple of years. Today I needed to learn the &lt;a title=" A theory of type polymorphism in programming" href="http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.67.5276"&gt;Hendley/Milner algorithm for type inference&lt;/a&gt; and decided to implement it in Haskell. A far more interesting related blog post is one about &lt;a href="http://www.defmacro.org/ramblings/lisp-in-haskell.html"&gt;“Writing A Lisp Interpreter In Haskell”&lt;/a&gt;, by Slava Akhmechet.
&lt;/p&gt;

&lt;p&gt;
You can grab the (hardly tested) code, released under public domain, in Pastebin at &lt;a href="http://pastebin.com/f7dede189"&gt;http://pastebin.com/f7dede189&lt;/a&gt;. The Source Code Is The Documentation™.
&lt;/p&gt;

&lt;p&gt;I can't stress enough the usefulness of &lt;a href="http://en.wikipedia.org/wiki/Algebraic_data_type"&gt;algebraic data types&lt;/a&gt; and declarative languages for creating compilers. But &lt;i&gt;alas&lt;/i&gt;, I am still working with Java in my research projects.&lt;/p&gt;

&lt;p&gt;
&lt;b&gt;Update:&lt;/b&gt; Because I have somehow broken the indentation, I have taken the chance to re-upload the source code, while cleaning up some code. Added a nice link about interpreter implementation using Haskell.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-8920729493622993656?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">4</thr:total></item><item><title>The π-calculus library chapter and literate programming</title><link>http://blog.irrepupavel.com/2008/12/library-chapter-and-literate.html</link><category>literate programming</category><category>mil</category><category>log</category><category>msc thesis</category><category>en</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Thu, 11 Dec 2008 15:33:02 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-8811500285715667372</guid><description>&lt;p&gt;I finished the &amp;pi;-calculus library implemented in MIL. I started working in the translation chapter. Meanwhile, An explanation I received cleared up some details I was having with programming recursive types in MIL. With the misconception corrected I can now proceed working on the paper.&lt;/p&gt;

&lt;p&gt;For my work on the paper I intend to clean up my pseudo-framework for doing &lt;a href="http://en.wikipedia.org/wiki/Literate_programming"&gt;literate programming&lt;/a&gt;, which enables the library described in the aforementioned chapter to be generated and then type-checked for errors. Make the code free from embarrassing errors.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-8811500285715667372?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>pi2mil, mil, and the thesis</title><link>http://blog.irrepupavel.com/2008/12/pi2mil-mil-and-thesis.html</link><category>pi-to-mil</category><category>mil</category><category>log</category><category>msc thesis</category><category>en</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Wed, 10 Dec 2008 14:30:56 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-7061940201638418305</guid><description>&lt;p&gt;
I reimplemented the compiler from the &amp;pi;-calculus into MIL (in Java). The only part that was not touched was the parsing. It took me two days to rewrite the type-checking and the compiler. My work was basically translating mathematical notation into Java. It is interesting to note how much code was &lt;em&gt;simplified&lt;/em&gt; because the translation was formalized. Looking back, I had an over-engineered compiler. Now I have a much simpler implementation and a proof that it is compiling safely, preserving types.&lt;/p&gt;

&lt;p&gt;After the compiler, I worked on synchronizing the implementation of MIL with the latest paper we have been working on. This amounted to rewriting the pretty-printer and to adding support for some instructions and a few types. The test battery we have implemented helped making sure I wasn't breaking any type-checking rule. There are, however, some problems that need to be solved in implementing some of the new sub-typing rules, notably with recursive types.&lt;/p&gt;

&lt;p&gt;In this last week I have mostly programmed and haven't made significant progress in my thesis. We are working on a paper with a deadline due next week. But since I am waiting for some feedback to continue working on the paper, I have an opening to finish up the chapter on the &amp;pi;-calculus library. I only have half of a section to review to finish the chapter, so I hope I finish it in this week.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-7061940201638418305?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total></item><item><title>Summary of the last week</title><link>http://blog.irrepupavel.com/2008/11/summary-of-last-week.html</link><category>monitors</category><category>mil</category><category>typing systems</category><category>log</category><category>en</category><category>programming languages</category><category>compiler construction</category><category>sablecc</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Thu, 27 Nov 2008 06:54:20 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-301589883938375475</guid><description>&lt;p&gt;
I have been studying &lt;a href="http://en.wikipedia.org/wiki/Monitor_(synchronization)"&gt;monitors&lt;/a&gt; for a section included in the chapter of the &amp;pi;-calculus library.
The obvious references are &lt;a href="http://portal.acm.org/citation.cfm?id=361161"&gt;“Monitors: An Operating System Structuring Concept”&lt;/a&gt; for Hoare-style monitors and 
&lt;a href="http://www.cs.berkeley.edu/~brewer/cs262/Mesa.pdf"&gt;“Experience with Processes and Monitors in Mesa”&lt;/a&gt; for Mesa-style monitors. I also found the chapter &lt;a href="http://www.artima.com/insidejvm/ed2/threadsynch.html"&gt;“Thread Synchronization”&lt;/a&gt; of the book “Inside the Java Virtual Machine” inspiring. My friend Neva made me realize that I was misusing terminology in my introduction to monitors.
&lt;/p&gt;

&lt;p&gt;
After concluding the section I moved along to the section on the implementation of queues in &lt;a href="http://gloss.di.fc.ul.pt/mil"&gt;MIL&lt;/a&gt;. There is a typing rule in MIL that is confusing me. Spent yesterday's afternoon reading &lt;a href="http://books.google.pt/books?id=ti6zoAC9Ph8C&amp;dq=types+and+programming+language&amp;pg=PP1&amp;ots=EzGgzKo-VD&amp;source=bn&amp;sig=7qHj2ez6HD90wfU_pSpaqtVHOuo&amp;hl=pt-PT&amp;sa=X&amp;oi=book_result&amp;resnum=4&amp;ct=result"&gt;“Types and Programming Languages”&lt;/a&gt;, just to understand that I need way more time to understand the chapter about the meta-theory of recursive types. The good part is that I found out that my chapter explaining MIL is very superficial. The bad part is that I have to invest more time to make it deeper. Today I plan on rewriting most of the text included in the queues section.&lt;/p&gt;

&lt;p&gt;
Yesterday I have also worked on a new project (another compiler). We are using &lt;a href="http://sablecc.org/"&gt;SableCC&lt;/a&gt; for the parser and for the &lt;a href="http://en.wikipedia.org/wiki/Abstract_syntax_tree"&gt;AST&lt;/a&gt; creation. The good part of this tool is that it allows for a separation of the AST from the CST, this is specially enticing for people developing languages for calculus, like our group. The shortcoming of this tool is that there is no way to tag the AST with metadata. We need to know the source code location related to an element of the AST. &lt;a href="http://lists.sablecc.org/pipermail/sablecc-user/msg00472.html"&gt;A proposed solution&lt;/a&gt; is to “pollute” the AST with terminal tokens delimiting the location. Tokens, however, do not have a single interface to retrieve the line and column and lack an associated filename.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-301589883938375475?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item><item><title>Web-log as a log</title><link>http://blog.irrepupavel.com/2008/11/web-log-as-log.html</link><category>personal</category><category>homepage</category><category>en</category><author>noreply@blogger.com (Tiago Cogumbreiro)</author><pubDate>Thu, 27 Nov 2008 06:17:21 PST</pubDate><guid isPermaLink="false">tag:blogger.com,1999:blog-29769023.post-784506630247065002</guid><description>The word &lt;em&gt;blog&lt;/em&gt; derives from web log. I am going to try using my blog for its vanilla purpose. I am going to use the label (i.e. tag) &lt;a href="http://blog.irrepupavel.com/search/label/log"&gt;log&lt;/a&gt; for such entries.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/29769023-784506630247065002?l=blog.irrepupavel.com' alt='' /&gt;&lt;/div&gt;</description><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total></item></channel></rss>

