<?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:blogger='http://schemas.google.com/blogger/2008' 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-29769023</id><updated>2013-05-27T11:37:52.206Z</updated><category term='lighttpd'/><category term='continuous integration'/><category term='documentation'/><category term='summer-schools'/><category term='movies'/><category term='gadgets'/><category term='bug'/><category term='books'/><category term='David Gemmell'/><category term='latex'/><category term='epiphany'/><category term='pygtk'/><category term='type inference'/><category term='fonts'/><category term='maven'/><category term='printing'/><category term='projects'/><category term='msc thesis'/><category term='open source'/><category term='applet'/><category term='dvd'/><category term='mugshot'/><category term='win32'/><category term='bazaar'/><category term='interpreters'/><category term='firefox'/><category term='povray'/><category term='travel'/><category term='accessibility'/><category term='homepage'/><category term='monitors'/><category term='css'/><category term='linux review'/><category term='webdruid'/><category term='tips'/><category term='spam'/><category term='rss'/><category term='haskell'/><category term='azores'/><category term='serpentine'/><category term='fcul'/><category term='eclipse'/><category term='launchpad'/><category term='webdev'/><category term='typed assembly'/><category term='nonsense'/><category term='bdd'/><category term='pi-to-mil'/><category term='site generator'/><category term='review'/><category term='work'/><category term='opera'/><category term='rant'/><category term='laptop'/><category term='notes'/><category term='micro blogging'/><category term='meego'/><category term='literate programming'/><category term='cv'/><category term='java'/><category term='refactoring'/><category term='textile'/><category term='talk'/><category term='pt'/><category term='opencl'/><category term='CVS'/><category term='berlios'/><category term='mil'/><category term='notebooks'/><category term='priberam'/><category term='django'/><category term='flashplayer'/><category term='bash'/><category term='newsgroups'/><category term='links'/><category term='dvdauthor'/><category term='concurrency'/><category term='pdf'/><category term='rest'/><category term='movie'/><category term='ispell'/><category term='tidy'/><category term='cps'/><category term='xpdf'/><category term='kpdf'/><category term='html'/><category term='ddclient'/><category term='sweden'/><category term='network'/><category term='moo'/><category term='fun'/><category term='feedburner'/><category term='wireless sensor networks'/><category term='ubuntu'/><category term='release'/><category term='window manager'/><category term='blogging'/><category term='nvidia'/><category term='compiler'/><category term='svn'/><category term='google'/><category term='subversion'/><category term='articles'/><category term='cedega'/><category term='pulse audio'/><category term='transtec'/><category term='podcast'/><category term='design patterns'/><category term='pida'/><category term='winter-schools'/><category term='en'/><category term='decorator'/><category term='feisty'/><category term='social'/><category term='sip'/><category term='fedora'/><category term='sablecc'/><category term='tumblr'/><category term='opentype'/><category term='tovid'/><category term='Allan Poe'/><category term='help'/><category term='gnome'/><category term='web presence'/><category term='evince'/><category term='ratpoison'/><category term='phd'/><category term='gamming'/><category term='sound'/><category term='opensource'/><category term='python'/><category term='sushi'/><category term='proofs'/><category term='cocomment'/><category term='zope'/><category term='09F911029D74E35BD84156C5635688C0'/><category term='tdd'/><category term='code'/><category term='compiz'/><category term='programming languages'/><category term='pandoc'/><category term='okular'/><category term='social network'/><category term='pi-calculus'/><category term='friends'/><category term='paper'/><category term='linux'/><category term='lg'/><category term='Alan Moore'/><category term='del.icio.us'/><category term='xetex'/><category term='emacs'/><category term='citations'/><category term='personal'/><category term='Debian'/><category term='howto'/><category term='tutorial'/><category term='culture'/><category term='callas'/><category term='gtk'/><category term='multicore'/><category term='music'/><category term='typing systems'/><category term='nouveau'/><category term='go'/><category term='kde'/><category term='marilyn manson'/><category term='xorg'/><category term='pattern matching'/><category term='bluetooth'/><category term='recipe'/><category term='plone'/><category term='adblock'/><category term='ion'/><category term='blogger'/><category term='speedtouch suite'/><category term='compiler construction'/><category term='web2.0'/><category term='totem'/><category term='couchsurfing'/><category term='konqueror'/><category term='log'/><category term='source code'/><category term='mind hacks'/><category term='phd thesis'/><category term='publication'/><category term='xelatex'/><category term='android x86'/><category term='virtualmachines'/><category term='gmail'/><title type='text'>Tiago, O Irrepupável</title><subtitle type='html'>Tiago Cogumbreiro loves to talk about Python, GNOME, web development, and Open Source; with a bit of nonsense here and there.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/posts/full'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/full'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/full?start-index=26&amp;max-results=25'/><author><name>Tiago Cogumbreiro</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>148</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-29769023.post-1983227228456113156</id><published>2012-02-03T17:01:00.000-01:00</published><updated>2012-02-03T17:04:14.405-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='social network'/><category scheme='http://www.blogger.com/atom/ns#' term='personal'/><category scheme='http://www.blogger.com/atom/ns#' term='homepage'/><category scheme='http://www.blogger.com/atom/ns#' term='web presence'/><title type='text'>Rethinking my online presence</title><content type='html'>I have started blogging a bit more than 10 years ago (wow!). The motivation was simple. I was&amp;nbsp;using Linux and to&amp;nbsp;connect to the internet with &lt;a href="http://speedtouch.sourceforge.net/"&gt;the ADSL modem I was using at the time&lt;/a&gt;&amp;nbsp;was not simple, so I wanted to help others in performing this very specific task. Although this was not my first web presence—my first trial was just an exercise of technology—, this was my first maintained effort and that is running up until now.&lt;br /&gt;
&lt;br /&gt;
Ten years ago the web was different, less crowded and not so personal. The extensive use of nicknames gave us masks that protected our identity and boosted our authenticity. Now we have services like Facebook that allow tracing back all the way back to our inception. With the web culture imposing an open kimono policy, I feel the pressure to have a tight control over what I say. Or rather, the medium (service) I am using for communication has a big weight on what I say and how I say it. For example, I prefer to use email over Facebook for private communications.&lt;br /&gt;
&lt;br /&gt;
While Facebook made being online simpler (forget classic blogs!), Google+ made us think about our audience. I think Google+'s approach failed because it did not aim high enough. We are different &lt;a href="http://en.wikipedia.org/wiki/Persona"&gt;personas&lt;/a&gt;&amp;nbsp;to different groups of people. Not only do we want to control the group of people receiving a message, but we also want to have a different &lt;i&gt;profile&lt;/i&gt;&amp;nbsp;to different groups of people. Until then, I will have multiple email accounts and multiple "social profiles."&lt;br /&gt;
&lt;br /&gt;
Where I store my data became important. The&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Megaupload"&gt;Megaupload case&lt;/a&gt;&amp;nbsp;pointed out that we should think about to what laws our data is subject to.&amp;nbsp;Projects like &lt;a href="http://diasporaproject.org/"&gt;Diaspora*&lt;/a&gt;&amp;nbsp;are the natural reaction to this, an evolution over Facebook and Google+ as we know them. The integration among these services, however, is limited, to say the least, and that hinders the adoption of new services.&lt;br /&gt;
&lt;br /&gt;
To wrap this up, this blog mutated into something less personal and more work-related, where I share about my research, technology-related musings, and my latest open source hacks. As for other more personal-level topics, they became disassociated with this presence right here, and can now be found in services like Facebook and Tumblr. Which reminds me, I need to update my homepage.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/1983227228456113156/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=1983227228456113156' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1983227228456113156'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1983227228456113156'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2012/02/rethinking-my-online-presence.html' title='Rethinking my online presence'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-5798956029112470761</id><published>2012-01-30T16:39:00.000-01:00</published><updated>2012-01-30T16:39:09.008-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='howto'/><category scheme='http://www.blogger.com/atom/ns#' term='bazaar'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='svn'/><title type='text'>On using Bazaar to access a Subversion repository</title><content type='html'>I really like &lt;a href="http://bazaar.canonical.com/"&gt;Bazaar&lt;/a&gt;'s intuitive (CLI) interface and workflow. Things tend to Just Work™. I've even been using Bazaar to operate with an &lt;a href="http://subversion.tigris.org/"&gt;SVN&lt;/a&gt; backend. The &lt;a href="http://bibletime.info/"&gt;BibleTime&lt;/a&gt; developers created &lt;a href="http://devel.bibletime.info/wiki/BazaarWithSvn"&gt;an amazing resource to introduce the concept, and help out avoiding the common pitfalls&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/5798956029112470761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=5798956029112470761' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5798956029112470761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5798956029112470761'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2012/01/on-using-bazaar-to-access-subversion.html' title='On using Bazaar to access a Subversion repository'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-9216333340272167722</id><published>2011-12-03T09:21:00.001-01:00</published><updated>2011-12-03T09:25:02.396-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>GNOME Pages mockups</title><content type='html'>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;.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/9216333340272167722/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=9216333340272167722' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/9216333340272167722'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/9216333340272167722'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/12/gnome-pages-mockups.html' title='GNOME Pages mockups'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-2909791709834909832</id><published>2011-12-02T16:48:00.001-01:00</published><updated>2011-12-02T16:50:19.198-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='proofs'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>Proof Wiki</title><content type='html'>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.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/2909791709834909832/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=2909791709834909832' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/2909791709834909832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/2909791709834909832'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/12/proof-wiki.html' title='Proof Wiki'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-2648929695969699192</id><published>2011-11-30T19:56:00.001-01:00</published><updated>2011-12-03T08:45:15.182-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='android x86'/><title type='text'>Android 4.0 (ICS) for x86 released!</title><content type='html'>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;.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/2648929695969699192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=2648929695969699192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/2648929695969699192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/2648929695969699192'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/11/android-40-ics-for-x86-released.html' title='Android 4.0 (ICS) for x86 released!'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-3108425928518283836</id><published>2011-10-10T12:39:00.000Z</published><updated>2011-10-10T12:39:18.405Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='site generator'/><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='homepage'/><category scheme='http://www.blogger.com/atom/ns#' term='citations'/><category scheme='http://www.blogger.com/atom/ns#' term='pandoc'/><title type='text'>Zotero to help me research, Pandoc to power my website</title><content type='html'>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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/3108425928518283836/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=3108425928518283836' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/3108425928518283836'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/3108425928518283836'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/10/zotero-to-help-me-research-pandoc-to.html' title='Zotero to help me research, Pandoc to power my website'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-9073327170414867017</id><published>2011-09-19T09:37:00.001Z</published><updated>2011-09-21T10:46:08.721Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='phd thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><title type='text'>PhD dissertation tips and some relevant PhD thesis</title><content type='html'>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;
</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/9073327170414867017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=9073327170414867017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/9073327170414867017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/9073327170414867017'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/09/phd-dissertation-tips-and-some-relevant.html' title='PhD dissertation tips and some relevant PhD thesis'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-1386275994447346077</id><published>2011-09-18T22:52:00.000Z</published><updated>2011-09-19T08:33:24.107Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xetex'/><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='phd thesis'/><title type='text'>PhD thesis templates (LaTeX and XeTeX)</title><content type='html'>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;
</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/1386275994447346077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=1386275994447346077' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1386275994447346077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1386275994447346077'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/09/phd-templates-latex-and-xetex.html' title='PhD thesis templates (LaTeX and XeTeX)'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>1</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-4076279426661826141</id><published>2011-09-18T22:47:00.001Z</published><updated>2011-10-04T14:14:30.820Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xelatex'/><category scheme='http://www.blogger.com/atom/ns#' term='xetex'/><category scheme='http://www.blogger.com/atom/ns#' term='opentype'/><category scheme='http://www.blogger.com/atom/ns#' term='fonts'/><title type='text'>Some links on XeTeX, OpenType fonts</title><content type='html'>&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;
</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/4076279426661826141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=4076279426661826141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4076279426661826141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4076279426661826141'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/09/some-links-on-xetex-opentype-fonts.html' title='Some links on XeTeX, OpenType fonts'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-1124331783354523378</id><published>2011-09-18T22:21:00.002Z</published><updated>2011-09-18T22:28:08.792Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='xelatex'/><category scheme='http://www.blogger.com/atom/ns#' term='xetex'/><category scheme='http://www.blogger.com/atom/ns#' term='fedora'/><title type='text'>XeTeX on Fedora 15</title><content type='html'>&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;
</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/1124331783354523378/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=1124331783354523378' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1124331783354523378'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1124331783354523378'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/09/xetex-on-fedora-15.html' title='XeTeX on Fedora 15'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-5756706911788626040</id><published>2011-07-29T09:22:00.001Z</published><updated>2011-07-29T09:24:45.013Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><title type='text'>Java 7 brings you fork/join, phasers</title><content type='html'>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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/5756706911788626040/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=5756706911788626040' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5756706911788626040'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5756706911788626040'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2011/07/java-7-brings-you-forkjoin-phasers.html' title='Java 7 brings you fork/join, phasers'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-8292320736103046637</id><published>2010-05-28T14:05:00.004Z</published><updated>2010-11-22T20:13:31.745-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='meego'/><category scheme='http://www.blogger.com/atom/ns#' term='linux review'/><title type='text'>MeeGo really fast review</title><content type='html'>&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;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8292320736103046637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8292320736103046637'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2010/05/meego-really-fast-review.html' title='MeeGo really fast review'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-425094850628415171</id><published>2010-05-24T13:53:00.005Z</published><updated>2010-11-23T20:17:35.786-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><title type='text'>Learn you a Haskell for great good</title><content type='html'>Just stumbled upon &lt;a href="http://learnyouahaskell.com/"&gt;Learn you a Haskell for great good&lt;/a&gt;. Looks funny.</content><link rel='related' href='http://learnyouahaskell.com/' title='Learn you a Haskell for great good'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/425094850628415171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/425094850628415171'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2010/05/learn-you-haskell-for-great-good.html' title='Learn you a Haskell for great good'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-4955203240993233811</id><published>2010-01-03T03:58:00.003-01:00</published><updated>2010-02-02T08:19:27.782-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='multicore'/><category scheme='http://www.blogger.com/atom/ns#' term='opencl'/><title type='text'>OpenCL review</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/4955203240993233811/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=4955203240993233811' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4955203240993233811'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4955203240993233811'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2010/01/opencl-review.html' title='OpenCL review'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-7200748815070373455</id><published>2009-12-03T16:19:00.007-01:00</published><updated>2010-02-16T20:26:37.962-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='go'/><category scheme='http://www.blogger.com/atom/ns#' term='google'/><title type='text'>Revisão da linguagem Go</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/7200748815070373455/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=7200748815070373455' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7200748815070373455'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7200748815070373455'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/12/revisao-da-linguagem-go.html' title='Revisão da linguagem Go'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>3</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-6285026991865394485</id><published>2009-11-16T09:08:00.003-01:00</published><updated>2010-02-17T09:37:23.674-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mil'/><category scheme='http://www.blogger.com/atom/ns#' term='phd'/><category scheme='http://www.blogger.com/atom/ns#' term='callas'/><title type='text'>Quick update</title><content type='html'>&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;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/6285026991865394485'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/6285026991865394485'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/11/quick-update.html' title='Quick update'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-7710504262323621823</id><published>2009-07-02T10:47:00.006Z</published><updated>2010-08-24T04:19:48.242Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='pi-to-mil'/><category scheme='http://www.blogger.com/atom/ns#' term='mil'/><category scheme='http://www.blogger.com/atom/ns#' term='applet'/><category scheme='http://www.blogger.com/atom/ns#' term='tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='pi-calculus'/><title type='text'>An applet for MIL and the simply typed π-calculus compiler</title><content type='html'>&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;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7710504262323621823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7710504262323621823'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/07/applet-for-mil-and-simply-typed.html' title='An applet for MIL and the simply typed &amp;pi;-calculus compiler'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-5971661989464884540</id><published>2009-06-23T09:56:00.004Z</published><updated>2010-02-10T17:39:31.256-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mil'/><category scheme='http://www.blogger.com/atom/ns#' term='publication'/><category scheme='http://www.blogger.com/atom/ns#' term='pi-calculus'/><title type='text'>“Compiling the π-calculus into a multithreaded typed assembly language” is published</title><content type='html'>&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;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5971661989464884540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5971661989464884540'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/06/compiling-calculus-into-multithreaded.html' title='“Compiling the π-calculus into a multithreaded typed assembly language” is published'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-1623869705989353689</id><published>2009-04-06T17:45:00.002Z</published><updated>2009-04-06T17:51:35.081Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='latex'/><category scheme='http://www.blogger.com/atom/ns#' term='ispell'/><category scheme='http://www.blogger.com/atom/ns#' term='pt'/><category scheme='http://www.blogger.com/atom/ns#' term='emacs'/><title type='text'>Problemas com acentos usando Latex, Flyspell, ISpell e Emacs</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/1623869705989353689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=1623869705989353689' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1623869705989353689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/1623869705989353689'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/04/problemas-com-acentos-usando-latex.html' title='Problemas com acentos usando Latex, Flyspell, ISpell e Emacs'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>1</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-5744697008076159738</id><published>2009-04-01T22:18:00.003Z</published><updated>2010-02-10T12:42:27.714-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><category scheme='http://www.blogger.com/atom/ns#' term='zope'/><title type='text'>Redirecting to an external link/URL in Zope (and Plone)</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/5744697008076159738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=5744697008076159738' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5744697008076159738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/5744697008076159738'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/04/redirecting-to-external-linkurl-in-zope.html' title='Redirecting to an external link/URL in Zope (and Plone)'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-4635443669460358219</id><published>2009-03-08T22:10:00.002-01:00</published><updated>2009-03-08T22:17:19.125-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='travel'/><category scheme='http://www.blogger.com/atom/ns#' term='sweden'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='winter-schools'/><category scheme='http://www.blogger.com/atom/ns#' term='wireless sensor networks'/><title type='text'>MiNEMA Winter School 2009</title><content type='html'>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;.</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/4635443669460358219/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=4635443669460358219' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4635443669460358219'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/4635443669460358219'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/03/minema-winter-school-2009.html' title='MiNEMA Winter School 2009'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>1</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-8310578382545799499</id><published>2009-02-18T01:08:00.002-01:00</published><updated>2009-02-18T01:11:08.838-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gamming'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>World of Goo</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/8310578382545799499/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=8310578382545799499' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8310578382545799499'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8310578382545799499'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/02/world-of-goo.html' title='World of Goo'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>3</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-8920729493622993656</id><published>2009-02-04T01:21:00.007-01:00</published><updated>2010-11-11T19:58:45.172-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='haskell'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><category scheme='http://www.blogger.com/atom/ns#' term='type inference'/><title type='text'>Hindley/Milner Type Inference Algorithm implementated in Haskell (untested and naïve)</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/8920729493622993656/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=8920729493622993656' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8920729493622993656'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8920729493622993656'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2009/02/hindleymilner-type-inference-algorithm.html' title='Hindley/Milner Type Inference Algorithm implementated in Haskell (untested and naïve)'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>4</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-8811500285715667372</id><published>2008-12-11T22:12:00.004-01:00</published><updated>2008-12-11T22:33:02.212-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='literate programming'/><category scheme='http://www.blogger.com/atom/ns#' term='mil'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='msc thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>The π-calculus library chapter and literate programming</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/8811500285715667372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=8811500285715667372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8811500285715667372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/8811500285715667372'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2008/12/library-chapter-and-literate.html' title='The &amp;pi;-calculus library chapter and literate programming'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry><entry><id>tag:blogger.com,1999:blog-29769023.post-7061940201638418305</id><published>2008-12-10T21:11:00.004-01:00</published><updated>2008-12-10T21:30:56.182-01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pi-to-mil'/><category scheme='http://www.blogger.com/atom/ns#' term='mil'/><category scheme='http://www.blogger.com/atom/ns#' term='log'/><category scheme='http://www.blogger.com/atom/ns#' term='msc thesis'/><category scheme='http://www.blogger.com/atom/ns#' term='en'/><title type='text'>pi2mil, mil, and the thesis</title><content type='html'>&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;</content><link rel='replies' type='application/atom+xml' href='http://irrepupavel.blogspot.com/feeds/7061940201638418305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=29769023&amp;postID=7061940201638418305' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7061940201638418305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/29769023/posts/default/7061940201638418305'/><link rel='alternate' type='text/html' href='http://irrepupavel.blogspot.com/2008/12/pi2mil-mil-and-thesis.html' title='pi2mil, mil, and the thesis'/><author><name>Tiago Cogumbreiro</name><uri>https://plus.google.com/100559830383303199758</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='//lh5.googleusercontent.com/-XT0z1TN2428/AAAAAAAAAAI/AAAAAAAACrk/senB5nfAMP4/s512-c/photo.jpg'/></author><thr:total>0</thr:total><gd:extendedProperty name='commentSource' value='1'/><gd:extendedProperty name='commentModerationMode' value='FILTERED_POSTMOD'/></entry></feed>