<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Fernando Brito</title>
	<atom:link href="http://dev.fernandobrito.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://dev.fernandobrito.com</link>
	<description>:as =&#62; :developer</description>
	<lastBuildDate>Fri, 11 Mar 2016 13:17:55 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=3.9.40</generator>
	<item>
		<title>Open Data Day 2016: João Pessoa, Brazil</title>
		<link>https://dev.fernandobrito.com/2016/03/open-data-day-2016-joao-pessoa-brazil/</link>
		<comments>https://dev.fernandobrito.com/2016/03/open-data-day-2016-joao-pessoa-brazil/#comments</comments>
		<pubDate>Fri, 11 Mar 2016 13:08:28 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=307</guid>
		<description><![CDATA[Motivation In 2010, the very first edition of the Open Data Day was announced, and João Pessoa was one of the few cities in Brazil to participate. Although we did not have many participants back then, we had good media &#8230; <a href="https://dev.fernandobrito.com/2016/03/open-data-day-2016-joao-pessoa-brazil/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h1>Motivation</h1>
<p>In 2010, the very first edition of the <a title="Open Data Day" href="http://opendataday.org" target="_blank">Open Data Day</a> was announced, and João Pessoa was one of the few cities in Brazil to participate. Although we did not have many participants back then, we had good media coverage and the event made our developers community a little bit stronger.</p>
<p>This year, motivated by some friends, I decided to try to organize another edition of the event.</p>
<h1>Organization</h1>
<p>My plan was to have again a hackathon, like in 2010 and as I did not have much time to spend on the organization itself, I decided to do something modest.</p>
<p>After creating a <a title="ODD JP 2016 Etterpad" href="http://piratepad.net/ZjGOF63Wdk" target="_blank">shared document</a> and a <a title="Facebook event" href="https://www.facebook.com/events/982753488470772/" target="_blank">Facebook event</a>, I sent messages to mailing lists and posted on a few Facebook groups, and soon I had a people registering and proposing ideas on what to do on the event day.</p>
<div id="attachment_313" style="width: 610px" class="wp-caption aligncenter"><a href="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/Cover.png" rel="lightbox[307]" title="One of the images used to promote the event online."><img class="size-medium wp-image-313" src="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/Cover-600x225.png?resize=600%2C225" alt="One of the images used to promote the event online." data-recalc-dims="1" /></a><p class="wp-caption-text">One of the images used to promote the event online</p></div>
<p>A research lab from my university (<a title="UFPB" href="http://www.ufpb.br/" target="_blank">UFPB</a>) contacted me offering help, and we decided to use their lab facilities to host the event. The lab is called <a title="LabTransp" href="http://www.transparencia.pub" target="_blank">Labtransp</a> (Laboratório de Transparência Pública &#8211; Public Transparency Lab) and they provided some help in the organization. A few days later we discovered that there was an energy shutdown planned for the entire campus on the event day, so we had to move the event to the other university campus, which is located just 6 km away from the original place. We thanks the <a title="CI UFPB" href="http://ci.ufpb.br/" target="_blank">Centro de Informática</a> (Informatics Faculty) for offering one of their computer labs for the event.</p>
<p>I also sent several emails to TV news and newspapers, but this year none of them showed interest, except the official university news agency, which posted a nice <a title="UFPB News" href="http://www.ufpb.br/content/evento-na-ufpb-incentiva-transpar%C3%AAncia-na-divulga%C3%A7%C3%A3o-de-dados" target="_blank">announcement</a> on the official university website.</p>
<p>A few days before the event, I received an email from <a title="Open Knowledge" href="https://okfn.org/" target="_blank">Open Knowledge</a> and <a title="ILDA" href="http://idatosabiertos.org/" target="_blank">ILDA</a> (The Latin American Open Data Initiative) stating that my proposal for their <a title="Mini-grant" href="http://blog.okfn.org/2016/01/29/open-data-day-2016-grant/" target="_blank">mini-grant</a> was accepted. Good news, as we were able to provide free snacks for all participants with this money.</p>
<h1>The event</h1>
<p>There were 26 names filled the registration form, but only 13 people appeared. From my previous experience, this 50% no-show rate on free events is already something to expect. Most of the participants were computer science bachelor students (including colleagues of mine), but we also had a professor from Labtransp and an employee from an IT agency from our state (<a title="CODATA" href="http://codata.pb.gov.br/" target="_blank">CODATA</a>) attending the event.</p>
<div id="attachment_317" style="width: 610px" class="wp-caption aligncenter"><a href="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/2-DSCN5717.jpg" rel="lightbox[307]" title="My short presentation about the Open Data Day and Open Data"><img class="size-medium wp-image-317" src="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/2-DSCN5717-600x450.jpg?resize=600%2C450" alt="My short presentation about the Open Data Day and Open Data" data-recalc-dims="1" /></a><p class="wp-caption-text">My short presentation about the Open Data Day and Open Data</p></div>
<p>I started the event with a brief presentation about what the Open Data Day is, what to expect and the schedule for the following hours. Afterwards, we discussed and shared interesting public data sources and formed teams to work together. There was plenty of food and drinks for the participants, who were able to focus on exploring and working with open data.</p>
<div id="attachment_314" style="width: 610px" class="wp-caption aligncenter"><a href="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/10-DSCN57471.jpg" rel="lightbox[307]" title="Thanks to Open Knowledge and ILDA, we were able to provide snacks for the participants"><img class="size-medium wp-image-314" src="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/10-DSCN57471-600x450.jpg?resize=600%2C450" alt="Thanks to Open Knowledge and ILDA, we were able to provide snacks for the participants" data-recalc-dims="1" /></a><p class="wp-caption-text">Thanks to Open Knowledge and ILDA, we were able to provide snacks for the participants</p></div>
<p>One of the teams focused on <a title="Bolsa Família data" href="http://dados.gov.br/dataset?q=bolsa+fam%C3%ADlia" target="_blank">data from Bolsa Família</a>, one of the biggest social welfare programs from Brazil to reduce poverty. Their goal was to cross regional and temporal data from this program with social and economic indicators. Tools such as Pentaho and CartoDB were used.</p>
<p>Another team explored datasets related to consumer complaints, in order to try to find which companies were getting most of the complaints and which regions were most dissatisfied with them. This team used mainly R to explore and process the data and Google Charts to try to create visualizations for it.</p>
<div id="attachment_315" style="width: 610px" class="wp-caption aligncenter"><a href="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/11-DSCN5749.jpg" rel="lightbox[307]" title="Teams working on their projects"><img class="size-medium wp-image-315" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/11-DSCN5749-600x450.jpg?resize=600%2C450" alt="Teams working on their projects" data-recalc-dims="1" /></a><p class="wp-caption-text">Teams working on their projects</p></div>
<p>One individual decided to analyze party affiliations and public payroll data. His goal was to see if affiliating to specific parties would imply in getting fired or getting a public job.</p>
<p>Lastly, my team explored data from João Pessoa&#8217;s City Council. We tried to categorize the bills proposed by each city councilor, as we noticed that many of them were petitions for things such as modifying the name of streets, fixing holes on the street and granting badges and medals to citizens. We developed a scraper (hosted on <a title="GitHub" href="https://github.com/fernandobrito/cmjp_parser" target="_blank">GitHub</a>) to collect the data from the official website and made a brief <a title="Website" href="http://fernandobrito.github.io/cmjp_parser/" target="_blank">website</a> to show this data.</p>
<div id="attachment_316" style="width: 610px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/cmjp_parser.png" rel="lightbox[307]" title="Website developed with the data scraped by our team"><img class="size-medium wp-image-316" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/cmjp_parser-600x291.png?resize=600%2C291" alt="Website developed with the data scraped by our team" data-recalc-dims="1" /></a><p class="wp-caption-text"><a title="CMJP Parser" href="http://fernandobrito.github.io/cmjp_parser/" target="_blank">Website</a> developed with the data scraped by my team</p></div>
<h1>Post-Mortem</h1>
<p>Our main goal was to increase the awareness around open data and to build a local community of developers and enthusiasts. Although we had only 13 participants, this was the first contact of almost all of them with Open Data.</p>
<p>Unfortunately we planned the event from 8am to 1pm (including the initial presentation and time to form teams), but this was clearly not enough to come up with a final product. None of the teams could deliver or show something ready at the end. For the next edition, we plan to allocate more time and start later (9am or 10am). My team continued the development during the following days in order to fully implement our idea.</p>
<p>The event venue (a computer lab in our university) was fine, with enough desks and chairs, datashow and good Internet connection, but getting there by public transport was not that easy. As far as I could notice, all participants arrived by private transport. For the next event, we plan to choose a more central and accessible venue.</p>
<div id="attachment_319" style="width: 610px" class="wp-caption aligncenter"><a href="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/7-DSCN5740.jpg" rel="lightbox[307]" title="Our venue: classroom at a public university where I study"><img class="size-medium wp-image-319" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/7-DSCN5740-600x450.jpg?resize=600%2C450" alt="Our venue: classroom at a public university where I study" data-recalc-dims="1" /></a><p class="wp-caption-text">Our venue: classroom at a public university where I study</p></div>
<p>Finally, we should definitely start the organization a few weeks earlier, so we have more time to get in touch with TV news and newspapers.</p>
<p>Overall, we consider this edition of the event an small but important step in building a stronger open data enthusiasts local community, and we are looking forward the Open Data Day 2017. We would also like to ask other groups and individuals to give it a try in organizing their own Open Data Day edition in the years to come. It takes just a few hours and a couple of email messages to organizing a small edition.</p>
<p>Once again, we thank Labtransp, for helping in the organization, and the Open Knowledge and ILDA for the mini-grant. More pictures can be found in our <a title="Dropbox Folder with more pictures" href="https://www.dropbox.com/sh/u8wrkswfc04hf0w/AADtdBOHxu_RZQS0rxtnkELKa?dl=0" target="_blank">Dropbox folder</a>.</p>
<div id="attachment_321" style="width: 610px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/13-DSCN5753.jpg" rel="lightbox[307]" title="Open Data Day"><img class="size-medium wp-image-321" src="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2016/03/13-DSCN5753-600x450.jpg?resize=600%2C450" alt="Open Data Day" data-recalc-dims="1" /></a><p class="wp-caption-text">Open Data Day João Pessoa 2016</p></div>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2016/03/open-data-day-2016-joao-pessoa-brazil/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data analysis on Mitacs Globalink 2015 projects: Part 2 &#8211; Word Cloud</title>
		<link>https://dev.fernandobrito.com/2014/09/data-analysis-on-mitacs-globalink-2015-projects-part-2/</link>
		<comments>https://dev.fernandobrito.com/2014/09/data-analysis-on-mitacs-globalink-2015-projects-part-2/#comments</comments>
		<pubDate>Sat, 27 Sep 2014 13:50:06 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mitacs]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=284</guid>
		<description><![CDATA[Introduction Mitacs Globalink Research Internships is a project from Mitacs which allows undergraduate students from Brazil, France, China, India, Mexico, Saudi Arabia, Turkey or Vietnam to perform a 3 months internship in some university lab research in Canada. This series of post is a &#8230; <a href="https://dev.fernandobrito.com/2014/09/data-analysis-on-mitacs-globalink-2015-projects-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h2>Introduction</h2>
<p><a title="Mitacs Globalink" href="http://www.mitacs.ca/globalink/information-students/prospective-2015-globalink-students" target="_blank"><em>Mitacs Globalink Research Internships</em></a> is a project from <a title="Mitacs" href="http://www.mitacs.ca/" target="_blank">Mitacs</a> which allows undergraduate students from Brazil, France, China, India, Mexico, Saudi Arabia, Turkey or Vietnam to perform a 3 months internship in some university lab research in Canada.</p>
<p>This series of post is a personal attempt to perform some basic data analysis over projects information, such as projects title and description. Check <a title="Data analysis on Mitacs Globalink 2015 projects: Part 1 – The Data" href="http://dev.fernandobrito.com/2014/08/data-analysis-on-mitacs-globalink-2015-projects-part-1/" target="_blank">Part 1</a> to see my saga on collecting the data.</p>
<h2>Motivation</h2>
<p>First question I wanted to answer was: &#8220;<em>What are most of the projects about?&#8221;.</em> I decided that generating an word cloud over the projects title would be an easy and quick way to get an overview on the keywords and topics used to describe the projects.</p>
<p><span id="more-284"></span></p>
<p>On Part 1 of this series, I posted a link to <a title="Mitacs 2015 Projects' Title" href="https://gist.github.com/anonymous/4a421dd5bf96978332fc" target="_blank">a text file</a> containing, one per line, all projects title, exactly as they were written on Mitacs application platform. This was the data I chose to work with.</p>
<p>I have <a title="Alexandre Duarte" href="http://alexandre.ci.ufpb.br/" target="_blank">a professor</a> that really likes word clouds. He uses it on the first lecture of every course he teaches in order to give his students an overview of what the class is going to be about. I asked him which tool he uses and he recommended me <a title="Wordle" href="http://wordle.net" target="_blank">Wordle.net</a>. Creating a word cloud on this website is as simple as copying and pasting your data and tweaking the colors and fonts.</p>
<p>The first word cloud I generated ended up looking like this:</p>
<div id="attachment_285" style="width: 610px" class="wp-caption aligncenter"><a href="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/wordcloud1.png" rel="lightbox[284]" title="Projects Title Word Cloud 1"><img class="size-medium wp-image-285" src="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/wordcloud1-600x349.png?resize=600%2C349" alt="Projects Title Word Cloud 1" data-recalc-dims="1" /></a><p class="wp-caption-text">Version 1 of projects title word cloud</p></div>
<p>Even this initial version already surprised me. Some words, like &#8220;cancer&#8221;, were totally unexpected to me. However, after a quick glance, I noticed some room for improvements.</p>
<p>Also, it is important to note the importance of looking at the words count before drawing any conclusion. The size of each word is relative to the count of other words, and not to the total count of words. On our example, we may think that hundreds of projects have the word &#8220;development&#8221; on its title, but this is true only for 82 projects of our data, out of 1700+. This show us how heterogeneous our data is.</p>
<p>In other words, a word cloud alone show us only which words appears the most, but not how much they actually appears on our data. This may vary a lot depending on our input.</p>
<h2>Preprocessing</h2>
<p>Wordle already does some kind of preprocessing for us, which is very nice. It removes <a title="Wikipedia - Stop words" href="http://en.wikipedia.org/wiki/Stop_words" target="_blank">stop words</a> (common words, such as &#8220;of&#8221;, &#8220;and&#8221;, &#8220;for&#8221;, etc) and it is case insensitive (&#8220;ANALYSIS&#8221; and &#8220;analysis&#8221; will be grouped).</p>
<p>However, looking at the image above, you may notice we have on the left side, the word &#8220;systems&#8221;, and on the right side, &#8220;system&#8221;. I would like to count them as only one word. As the data is not that big, I could manually &#8220;search and replace&#8221; all the words I would like to group, but this would require me to inspect each generated word cloud and repeat the process many times.</p>
<p>An automatic way to perform this can be done by using a preprocessing technique called <a title="Wikipedia - Stemming" href="http://en.wikipedia.org/wiki/Stemming" target="_blank">stemming</a>, which reduces words to their &#8220;root&#8221; form (stem), removing plurals, conjugations and derivations. Stemming is not present on Wordle, so I had to do this kind of preprocessing on an external tool. For didactic purposes, I used <a title="KNIME" href="http://en.wikipedia.org/wiki/KNIME" target="_blank">KNIME</a>, an open-source data analytic tool which has a graphical user interface.</p>
<p>On KNIME I was able to remove French stop words (as Wordle would allow me to remove either English or French stop words, but not both). This was important because some project titles are in French. Moreover, I applied English stemming. KNIME works with workflows. This is the one I made:</p>
<div id="attachment_288" style="width: 610px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/knime-workflow.png" rel="lightbox[284]" title="My KNIME workflow"><img class="size-medium wp-image-288" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/knime-workflow-600x117.png?resize=600%2C117" alt="My KNIME workflow" data-recalc-dims="1" /></a><p class="wp-caption-text">My KNIME workflow</p></div>
<p>Now that I made the preprocessing I wanted, I returned to Wordle to make a bew word cloud. KNIME is also able to create word clouds, but the layout options offered by Wordle are far more appealing (in my opinion). My the word cloud &#8220;version 2&#8243; looked like this:</p>
<div id="attachment_289" style="width: 610px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/wordcloud2.png" rel="lightbox[284]" title="Version 2 of word cloud: stemming and French stop words removal"><img class="size-medium wp-image-289" src="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/09/wordcloud2-600x311.png?resize=600%2C311" alt="Version 2 of word cloud: stemming and French stop words removal" data-recalc-dims="1" /></a><p class="wp-caption-text">Version 2 of projects title word cloud: stemming and French stop words removal</p></div>
<p>Some words got bigger (like &#8220;system&#8221; and &#8220;model&#8221;), but it is somehow harder to read this word cloud, as it is now made of &#8220;stems&#8221;. Take for example the stem &#8220;applic&#8221;. We are not used to read this &#8220;word&#8221;.</p>
<h2>Conclusion</h2>
<p>So, which version is &#8220;better&#8221;? The first one or the second one? Which one should you use?</p>
<p>Overall, I believe each version has its own value. Applying stemming can reveal some interesting information, but it may also hide some other things. Now both &#8220;mobile&#8221; and &#8220;mobility&#8221; appears as &#8220;mobil&#8221;, even though they may refer to very different things in different contexts.</p>
<p>I would recommend playing will different settings (stemming, no stemming, etc) and comparing all results, instead of just looking for a &#8220;final absolute&#8221; version.</p>
<p>Looking at both the word clouds, I was happy with the results. Stems like &#8220;cancer&#8221;, &#8220;health&#8221;, &#8220;energi&#8221;, &#8220;polymer&#8221; and &#8220;sustain&#8221; helped me understand what kind of projects are on Mitacs this year. I hope you also had the chance to learn something new on this post. On the next post I will try to find which provinces are offering most projects, drawing the results on a map.</p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2014/09/data-analysis-on-mitacs-globalink-2015-projects-part-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Data analysis on Mitacs Globalink 2015 projects: Part 1 &#8211; The Data</title>
		<link>https://dev.fernandobrito.com/2014/08/data-analysis-on-mitacs-globalink-2015-projects-part-1/</link>
		<comments>https://dev.fernandobrito.com/2014/08/data-analysis-on-mitacs-globalink-2015-projects-part-1/#comments</comments>
		<pubDate>Mon, 18 Aug 2014 22:17:04 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[mitacs]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=253</guid>
		<description><![CDATA[Introduction Mitacs Globalink Research Internships is a project from Mitacs which allows undergraduate students from Brazil, France, China, India, Mexico, Saudi Arabia, Turkey or Vietnam to perform a 3 months internship in some university lab research in Canada. I am interested in &#8230; <a href="https://dev.fernandobrito.com/2014/08/data-analysis-on-mitacs-globalink-2015-projects-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<h2>Introduction</h2>
<p><a title="Mitacs Globalink" href="http://www.mitacs.ca/globalink/information-students/prospective-2015-globalink-students" target="_blank"><em>Mitacs Globalink Research Internships</em></a> is a project from <a title="Mitacs" href="http://www.mitacs.ca/" target="_blank">Mitacs</a> which allows undergraduate students from Brazil, France, China, India, Mexico, Saudi Arabia, Turkey or Vietnam to perform a 3 months internship in some university lab research in Canada.</p>
<p>I am interested in taking part of the program, and one of the application process steps is to choose between 3 and 7 projects from their 1.782 projects list (as I write this article). Using their website, you can filter those projects by university, province, language and by keywords.</p>
<h2>Motivation</h2>
<p>I started performing queries with keywords such as &#8220;web&#8221; and other areas I am familiar with, but soon I realized that there were many other cool projects I could also apply to, so I ended up manually looking into all 1.700+ projects title and writing in a text file the ones I should spend more time reading the prerequisites and description.</p>
<div id="attachment_256" style="width: 410px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/globalink_projects.png" rel="lightbox[253]" title="Globalink projects list"><img class="wp-image-256" src="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/globalink_projects-268x300.png?resize=400%2C447" alt="Globalink projects list" data-recalc-dims="1" /></a><p class="wp-caption-text">Mitacs Globalink 2015 projects list.</p></div>
<p>When I was done, I got really curious about the data. &#8220;<em>Which province is offering more projects?&#8221;, &#8220;What is the average amount of projects being offered per professor?</em>&#8220;, &#8220;<em>What would a word cloud with projects titles look like?</em>&#8221;</p>
<p><span id="more-253"></span></p>
<h2>Getting the data</h2>
<p>I could not find any &#8220;export&#8221; link on the page where they list all the projects. I have some experience with web scraping, but unfortunately their platform is made on Flash :(.</p>
<p>How could I get the data I needed? First thought was: &#8220;<em>Hmmm. Maybe it is possible to do some reverse engineering on Flash!</em>&#8220;, but I realized they pull the data asynchronously, as soon as I hit the &#8220;<em>Projects</em>&#8221; page. This data must be coming from somewhere, so I decided to try to monitor the network.</p>
<p>It is important to note that, while the page that loads the Flash component is using HTTPS, the requests made by the application itself are using plain HTTP! This allowed me to see the traffic on Wireshark, for example. I decided, however, to use a &#8220;higher-level&#8221; approach.</p>
<p>On Chrome&#8217;s Developer Tools I was able to find the request I was looking for. Things would have been a lot easier if this data came in plain <em>json</em> or <em>xml</em>, so I would be able to sneak around, but headers informed me they were using &#8220;<em>Content-Type:application/x-amf</em>&#8220;.</p>
<p>I am not familiar with Flash development, so I had no idea what <em>amf</em> was and if it was possible to open it. It turns out that <a title="amf" href="http://en.wikipedia.org/wiki/Action_Message_Format" target="_blank">amf</a> (Action Message Format) &#8220;<em>is a binary format used to serialize object graphs such as ActionScript objects and XML, or send messages between an Adobe Flash client and a remote service</em>&#8221; (source: Wikipedia).</p>
<p>A quick search on Google revealed me lots of tools to decode <em>amf</em>, but none of them worked for this particular file. I ended up trying lots of tools, including: <a title="Charles Proxy" href="http://www.charlesproxy.com/" target="_blank">Charles</a> proxy, a Ruby library (<a title="rocketamf" href="https://github.com/rubyamf/rocketamf" target="_blank">rocketamf</a>), three JavaScript libraries (<a title="JSAMF" href="https://github.com/jamesward/JSAMF" target="_blank">JSAMF</a>, <a title="amf-js" href="https://github.com/infomaniac-amf/js" target="_blank">amf</a>, and <a title="amfjs" href="https://github.com/emilkm/amfjs" target="_blank">amfjs</a>), two python libraries (<a title="pyamf" href="http://www.pyamf.org/" target="_blank">pyamf </a>and <a title="amfast" href="https://code.google.com/p/amfast/" target="_blank">amfast</a>), two Firebug plugins (<a title="AMF Explorer" href="https://addons.mozilla.org/en-us/firefox/addon/amf-explorer/" target="_blank">AMF Explorer</a> and <a title="Flashbug" href="http://blog.coursevector.com/flashbug" target="_blank">Flashbug</a>), two PHP libraries (<a title="AmfPHP" href="http://www.silexlabs.org/amfphp/" target="_blank">Amfphp</a> and <a title="SabreAMF" href="https://github.com/evert/SabreAMF" target="_blank">SabreAMF</a>), a JMeter <a title="JMeter AMF" href="https://github.com/steeltomato/jmeter-amf" target="_blank">plugin</a>, Wireshark, two Fiddler plugins (<a title="AMFParser" href="http://amfparser.codeplex.com/" target="_blank">AMFParser</a> and <a title="Fiddle AMF Parser" href="http://fiddleramfparser.codeplex.com/" target="_blank">Fiddle AMF Parser</a>), <a title="ServiceCapture" href="http://kevinlangdon.com/serviceCapture/" target="_blank">ServiceCapture</a> web proxy, <a title="WebScarab" href="https://www.owasp.org/index.php/WebScarab_Getting_Started" target="_blank">WebScarab</a> web proxy, <a title="minerva" href="http://blog.coursevector.com/minerva" target="_blank">minerva</a>, <a title="FlashDevelop" href="http://www.flashdevelop.org/" target="_blank">FlashDevelop</a> and some others!</p>
<p>For each tool, I had to read how to install it and how to use it. On some libraries, there was no manual, so I had to look directly into their source code or unit tests.</p>
<p>All tools failed to some extent. Almost all of them gave some sort of <em>decoding error</em> with no further details. Some of the libraries were more specific, stating problems with <em>DSQ externalizable class</em>. The only tool that kept my hope was Charles. Charles was able to decode the amf message and show it on their user interface, but there was no way to export the data!</p>
<div id="attachment_258" style="width: 610px" class="wp-caption aligncenter"><a href="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/charles1.png" rel="lightbox[253]" title="Charles proxy showing the decoded amf."><img class="wp-image-258" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/charles1-1024x741.png?resize=600%2C434" alt="Charles proxy showing the decoded amf." data-recalc-dims="1" /></a><p class="wp-caption-text">Charles proxy showing the decoded amf.</p></div>
<p>After almost 8 hours using all the tools mentioned previously, I decided to give a try to something else. On Charles I was able to copy selected elements from the tree, but I had to manually expand the nodes and select them. I spent an additional hour recording macros to expand nodes from Charles, select them and paste in a text file, but Charles trial version would close every 30 minutes, and this would take forever!</p>
<p>It was late in the night, so I decided to throw in the towel. It was time to ask for help from the gods. I posted an <a title="my question on StackOverflow" href="http://stackoverflow.com/questions/25352927/decode-amf-file-with-class-alias" target="_blank">question</a> in StackOverflow.</p>
<p>Next day morning, no answer to my question. I was close to give up. But then, I thought: what if this were an Mitacs project assignment? Would I just give up like that? Of course not!</p>
<p>More research, more tools, and no success.</p>
<p>I was very close to start writing my own amf deserializer, when I found <a title="FlashFirebug" href="https://addons.mozilla.org/en-us/firefox/addon/flashfirebug/" target="_blank">FlashFirebug</a>, a professional tool for debugging Flash applications. The license costs $34.99/yr, but you can get a 2-days trial for $0.50. At this point I thought, &#8220;<em>Why not?</em>&#8221; and paid for the trial version.</p>
<p>The amf decoder, once again, failed. But, messing around, I noticed that FlashFirebug allowed me to inspect the Flash object, just as an HTML page! Soon I found a <em>DataGrid</em> element holding all the data I needed! But how to export this data? The tool also provided me an ActionScript live console. Few minutes on Google and I was able to write my first ever ActionScript snippet: a loop iterating over the data used to fill the projects table!</p>
<div id="attachment_257" style="width: 609px" class="wp-caption aligncenter"><a href="http://i0.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/charles.png" rel="lightbox[253]" title="FlashFirebug ActionScript3 console."><img class="wp-image-257" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2014/08/charles-1024x575.png?resize=599%2C337" alt="FlashFirebug ActionScript3 console." data-recalc-dims="1" /></a><p class="wp-caption-text">FlashFirebug ActionScript3 console.</p></div>
<p>Boy, I was happy! After almost 10h work, I finally had what I needed to <em>start</em> the real work, which is analyzing the data. What for me is usually the most trivial part (getting the data), this time turned out to be a real challenge. A lot was learned during the process, but I am glad it is over.</p>
<p>Coming up, I will try to extract some useful information from all this data.</p>
<h2>Sharing the data</h2>
<p>From the loop written on last screenshot, I was able to generate a <a title="Mitacs Gloablink 2015 projects title" href="https://gist.github.com/anonymous/4a421dd5bf96978332fc" target="_blank">text file with all project titles</a>, one per line. Using <a title="Gist snippet" href="https://gist.github.com/anonymous/43afe2335b432b123532" target="_blank">this</a> code, I was able to generate a <a title="Mitacs 2015 Globalink projects" href="/wp-content/uploads/2014/08/mitacs_2015_projects.xml" target="_blank">XML file with all the information</a> I needed, including project descriptions, university name and professors name.</p>
<p>Just as a reminder: this is data gathered from <a title="Mitacs Student plataform" href="https://lc.mitacs.ca/globalink/" target="_blank">Mitacs Student plataform</a>. You do not even need to log in to see this data. I am just &#8220;reorganizing&#8221; it. Also, this post was written on August 19th 2014. It seems that more projects may have been added to the list afterwards.</p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2014/08/data-analysis-on-mitacs-globalink-2015-projects-part-1/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Analysing a Facebook friendship network</title>
		<link>https://dev.fernandobrito.com/2013/10/analysing-a-facebook-friendship-network/</link>
		<comments>https://dev.fernandobrito.com/2013/10/analysing-a-facebook-friendship-network/#comments</comments>
		<pubDate>Sun, 13 Oct 2013 22:25:02 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Development]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=207</guid>
		<description><![CDATA[I am taking a course on social networks this semester. As our first assignment, the teacher asked us to analyze our Facebook friendship network so we would get used to working with some tools. If you never heard about social &#8230; <a href="https://dev.fernandobrito.com/2013/10/analysing-a-facebook-friendship-network/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I am taking a course on <em>social networks</em> this semester. As our first assignment, the teacher asked us to analyze our Facebook friendship network so we would get used to working with some tools.</p>
<p>If you never heard about <a title="Social networks" href="http://en.wikipedia.org/wiki/Social_network" target="_blank">social networks</a> as a research topic and have no idea on what &#8220;<em>analyze a friendship network</em>&#8221; could possibly mean, take a look on this picture:</p>
<div id="attachment_212" style="width: 310px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/facebook-network.png" rel="lightbox[207]" title="Random picture"><img class="size-medium wp-image-212" alt="Random picture" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/facebook-network-300x300.png?resize=300%2C300" data-recalc-dims="1" /></a><p class="wp-caption-text">Random Facebook friendship network I found on Google. Source: <a title="GriffsGraphs" href="http://griffsgraphs.com/2012/07/02/a-facebook-network/" target="_blank">GriffsGraphs</a>.</p></div>
<p>Here is a small tutorial on how I did my assignment.</p>
<p><span id="more-207"></span></p>
<h2>The data</h2>
<p>First of all, we need to collect the data that will be used on the analysis. There is an app on Facebook that does all the hard work: <a title="netvizz Facebook app" href="https://apps.facebook.com/netvizz/" target="_blank">netvizz</a>. After allowing it to access some of your information, look for a link to a <em>gdf</em> file of your &#8220;<em>personal friend network</em>&#8220;.</p>
<h2>The tool</h2>
<p>Now that we have our raw data, it is time to get our hands dirty. Download the tool <a title="Gephi" href="http://gephi.org" target="_blank">Gephi</a> and import the file you just downloaded. On the import wizard, choose &#8220;<em>Graph Type: Undirected</em>&#8220;, as Facebook friendships are bidirectional. A very boring representation of your friendship network will appear, but fear not!</p>
<p>At this point it would be a good idea read some of the Gephi <a title="Gephi documentation" href="https://gephi.org/users/" target="_blank">documentation</a>. I will quickly report what I did, but by no means you should take it as the best or only way of doing this analysis.</p>
<h2>The numbers</h2>
<p>On the right side of the window, there should be a tab called &#8220;<em>Statistics</em>&#8220;. Run the &#8220;<em>Modularity</em>&#8221; module (!), to use some bad-ass algorithm to detect communities and the &#8220;<em>Avg. Path </em><i>Length</i>&#8221; to find out who plays an important role on your network with respect to connecting different groups. The results of those calculations are stored as attributes on each node (or edge, if it is the case).</p>
<h2>The visualization. Part I: Science</h2>
<p>Time to make your graph look a little bit better. On the left side of the window, use the &#8220;<em>Partition</em>&#8221; tab to color the nodes according to its &#8220;<em>Modularity Class</em>&#8221; and the &#8220;<em>Ranking Tab</em>&#8221; to change its size according to the &#8220;<em>Betweenness centrality</em>&#8220;.</p>
<p>If you are lucky, you should have something that looks like this:</p>
<div id="attachment_208" style="width: 344px" class="wp-caption aligncenter"><a href="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/ugly_graph.png" rel="lightbox[207]" title="Ugly graph"><img class="size-full wp-image-208" alt="Ugly graph" src="http://i1.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/ugly_graph.png?resize=334%2C316" data-recalc-dims="1" /></a><p class="wp-caption-text">Ugly graph</p></div>
<h2>The visualization. Part 2: Art</h2>
<p>So far, things were pretty straightforward. Click here, press this, and so on. Now it is time to unleash your artistic side. Also on the left side, under &#8220;<em>Layout</em>&#8220;, there are different algorithms that will make your nodes literally dance on your screen. Play with all of them until you get something you like, and don&#8217;t forget to use the &#8220;<em>Random Layout</em>&#8221; as a mean of resetting your work.</p>
<p>After you get something nice, you can also use tools to manually move nodes on your graph. There is also a tool to inspect nodes, so you can see the name of the person represented by a specific node. In case you want to show those names on the graph, there is a button on the lower toolbar for that. Moreover, this <a title="Gephi forum" href="http://forum.gephi.org/viewtopic.php?t=1549" target="_blank">page</a> teaches you how to show labels only on some filtered nodes.</p>
<h2>The gran finale</h2>
<p>So far you have been on the <em>Overview</em> mode, which allows you to edit your graph. There is also a <em>Preview</em> mode which lets you export your beautiful graph to an image file.</p>
<p>Here is what I got:</p>
<div id="attachment_211" style="width: 310px" class="wp-caption aligncenter"><a href="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/rede-social.png" rel="lightbox[207]" title="Facebook friendship network"><img class="size-medium wp-image-211" alt="Facebook friendship network" src="http://i2.wp.com/dev.fernandobrito.com/wp-content/uploads/2013/10/rede-social-300x250.png?resize=300%2C250" data-recalc-dims="1" /></a><p class="wp-caption-text">My Facebook friendship network</p></div>
<p>The name of the communities (in Portuguese, sorry), were added manually by me on a image editing software.</p>
<h2>The interpretation</h2>
<p>This graph allows you to easily identify communities among your friendships and see people that play a key role by connecting different communities.</p>
<h2>Bonus: interactive graph on the web</h2>
<p>Gephi lets you export your graph as a <em>gexf</em> file and the javascript library <a title="sigma.js" href="http://sigmajs.org/" target="_blank">sigma.js</a> has a <em>gexf</em> <a title="gexf example" href="http://sigmajs.org/examples/gexf_example.html" target="_blank">parser</a>!</p>
<p>On my first attempt to make it work, Gephi (version 0.8.2) did not add an id to the edges on the exported <em>gexf</em> file, and sigma.js did not like that. To fix this issue, I wrote a small ruby snippet to insert unique id&#8217;s on all edges. The source code is on <a title="Gist" href="https://gist.github.com/fernandobrito/6968034" target="_blank">GitHub</a>.</p>
<p>The complete integration with sigma.js can be found on <a title="JsFiddle" href="http://jsfiddle.net/F84bV/2/" target="_blank">a JsFiddle</a>, embedded below (may take some time to load). And yes, I also noticed some encoding problems on the labels. <img src="http://i1.wp.com/dev.fernandobrito.com/wp-includes/images/smilies/icon_wink.gif?w=800" alt=";)" class="wp-smiley" data-recalc-dims="1" /> </p>
<p><iframe width="100%" height="500" src="http://jsfiddle.net/F84bV/21/embedded/result,js,html,css/" allowfullscreen="allowfullscreen" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2013/10/analysing-a-facebook-friendship-network/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Building your own Lucene Scorer</title>
		<link>https://dev.fernandobrito.com/2012/10/building-your-own-lucene-scorer/</link>
		<comments>https://dev.fernandobrito.com/2012/10/building-your-own-lucene-scorer/#comments</comments>
		<pubDate>Fri, 26 Oct 2012 00:45:40 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[information retrieval]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=142</guid>
		<description><![CDATA[This post is about Apache Lucene, which is a &#8220;high-performance, full-featured text search engine library written entirely in Java&#8221;. If you have no idea on what I am talking about, this tutorial is not for you :). Be advised that &#8230; <a href="https://dev.fernandobrito.com/2012/10/building-your-own-lucene-scorer/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This post is about <a title="Apache Lucene" href="http://lucene.apache.org/core/" target="_blank">Apache Lucene</a>, which is a <em>&#8220;high-performance, full-featured text search engine library written entirely in Java&#8221;</em>. If you have no idea on what I am talking about, this tutorial is not for you :). Be advised that this is my first month using Lucene, so there is still a chance that everything I say here is just plain wrong :P. Also, I am currently using version 3.6.1.</p>
<p>Doing an assignment from my Information Retrieval class I was faced with the problem of creating my own <em>Scorer</em> class on Lucene. When you create a new <em>IndexSearcher</em>, by default Lucene uses <em>DefaultSimilarity</em>, which is actually cosine similarity (in a Vector Space Model) with different weights such as boosts given when indexing, boosts given in the query, tf*idf and document length norm. A description on how it works exactly can be found on <a title="Similarity JavaDoc" href="http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/search/Similarity.html" target="_blank"><em>Similarity</em></a> class documentation and on <a title="Lucene Score" href="http://lucene.apache.org/core/3_6_1/scoring.html" target="_blank">Lucene Score</a> documentation.</p>
<p><span id="more-142"></span></p>
<p>The guys from Lucene have put a lot of effort into finding a good similarity function and their <em>DefaultSimilarity</em> works quite well on most of the cases. However, for one reason or another you may still want to use your own custom function.</p>
<p>When searching on how to do this, all results I found were about customizing the previous similarity function by extending the class and overriding its methods to change (or &#8220;disable&#8221;) some of the weights. Such examples can be found on <a title="LuceneTutorial" href="http://www.lucenetutorial.com/advanced-topics/scoring.html" target="_blank">LuceneTutorial.com</a> and on blog <a title="Custom Lucene Scoring" href="http://blog.architexa.com/2010/12/custom-lucene-scoring/" target="_blank">posts</a> and they all work like this:</p><pre class="crayon-plain-tag">IndexSearcher searcher = new IndexSearcher(reader);

searcher.setSimilarity(new DefaultSimilarity() {
    @Override
    public float computeNorm(String field, FieldInvertState state) {
        return 1.0f;
    }
} );</pre><p>However, I wanted to implement my own simple similarity function totally from scratch. It was not clear to me which single method my class had to implement/override and how I should add it to Lucene&#8217;s workflow.</p>
<p>After spending some hours looking on the internet, I finally found a solution in the book &#8220;Lucene in Action&#8221;, by Erik Hatcher. Do not ask me where I did <a title="Lucene Book" href="http://bit.ly/PTjrbT" target="_blank">find</a> an online copy of book.</p><pre class="crayon-plain-tag">public static class MyOwnScoreQuery extends CustomScoreQuery {
    private Query query;

    public MyOwnScoreQuery(Query query) {
        super(query);
        this.query = query;
    }

    @Override
    public CustomScoreProvider getCustomScoreProvider(final IndexReader reader) {
        return new CustomScoreProvider(reader) {
            @Override
            public float customScore(int doc,
                    float subQueryScore,
                    float valSrcScore) throws IOException {

                // Insert your math here

                return 1f;
            }
        };
    }
}</pre><p>Looking to it right now, it does not sound very complicated. But coming to this only by reading the documentation was impossible for me. As a proof-of-concept I implemented a score function that is just a sum of the frequency of the terms of the query in the document.</p><pre class="crayon-plain-tag">@Override
public CustomScoreProvider getCustomScoreProvider(final IndexReader reader) {
    return new CustomScoreProvider(reader) {
        @Override
        public float customScore(int doc,
                float subQueryScore,
                float valSrcScore) throws IOException {
            TermFreqVector freqVector = reader.getTermFreqVector(doc, "contents");
            int freqs[] = freqVector.getTermFrequencies();

            Set&lt;Term&gt; terms = new HashSet&lt;&gt;();
            query.extractTerms(terms);

            int total = 0;

            for (Term term : terms) {
                int index = freqVector.indexOf(term.text());

                if (index != -1) {
                    total += freqs[index];
                }
            }

            return total;
        }
    };
}</pre><p>Note that I am still verifying the <em>index</em> for -1 (term not found) because by default <em>QueryParser</em> <a title="Lucene Query Parser" href="http://lucene.apache.org/core/3_6_0/api/all/org/apache/lucene/queryParser/QueryParser.html#setDefaultOperator%28org.apache.lucene.queryParser.QueryParser.Operator%29" target="_blank">uses</a> an OR operand, so there is no guarantee that all terms from the query are going to be present in all of our retrieved documents.</p>
<p>Now that you have your own brand-new <em>Scorer</em> class, it is time to use it! Here is small example on how you can apply your new class on your program.</p><pre class="crayon-plain-tag">IndexReader reader = IndexReader.open(FSDirectory.open(new File(INDEX_PATH)));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_36);

QueryParser parser = new QueryParser(Version.LUCENE_36, FIELD, analyzer);

Query query = parser.parse("searching something");

CustomScoreQuery customQuery = new MyOwnScoreQuery(query);

ScoreDoc[] hits = searcher.search(customQuery.createWeight(searcher), null, numHits).scoreDocs;

for (int i = 0; i &lt; hits.length; i++) {
   // iterating over the results
   // hits[i].doc gives you the doc
}</pre><p>As also mentioned in the book, you can use your <em>CustomScoreQuery</em> to apply boosting depending on some rules. This can be done by having queries in a chain:</p><pre class="crayon-plain-tag">QueryParser parser = new QueryParser(Version.LUCENE_36, FIELD, analyzer);
Query q = parser.parse("original query");
Query q2 = new MyOwnScoreQuery(q, ..., ...);</pre><p>The scores obtained from the previous scorers can be obtained with the <em>float subQueryScore</em> that you see in the <em>customScore</em> method that we override, as you can see in its <a title="Lucene Doc" href="http://lucene.apache.org/core/3_6_1/api/all/org/apache/lucene/search/function/CustomScoreProvider.html#customScore%28int,%20float,%20float%29" target="_blank">documentation</a>.</p>
<p>That&#8217;s it! As it took me really long to figure this out I thought it would be a nice idea to share it. Please let me know if this was useful to you or if you find any mistakes on what I have said.</p>
<p><em>PS:</em> Interesting presentation about Lucene that I found while writing this post: <a title="Lucene Basics" href="http://www.slideshare.net/nitin_stephens/lucene-basics" target="_blank">http://www.slideshare.net/nitin_stephens/lucene-basics</a></p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2012/10/building-your-own-lucene-scorer/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zen To Done and me – Part 3</title>
		<link>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/</link>
		<comments>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/#comments</comments>
		<pubDate>Sat, 23 Jun 2012 14:42:40 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=124</guid>
		<description><![CDATA[This is the third (and last) part of my review on the Zen to Done (ZTD) productivity system, where I write about what it means to me and how I think I can make the most out of it. Expect to find a &#8230; <a href="https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is the third (and last) part of my review on the <a title="Zen To Done" href="http://archive.org/details/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta" target="_blank">Zen to Done</a> (ZTD) productivity system, where I write about what it means to me and how I think I can make the most out of it. Expect to find a mix of both the original ZTD habits and my experience applying them. You should read <a title="Zen To Done and me – Part 1" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/">part one</a> and <a title="Zen To Done and me – Part 2" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/">part two</a> before proceeding.</p>
<p><span id="more-124"></span></p>
<h3>7. Review</h3>
<p>On each week you should do a Weekly Review. This is a good time to reflect a little bit and to go over your weekly, monthly and yearly goals and see if you made any progress on them.</p>
<p>The author also ask you to write down your life goals, but I had a hard time trying to figure out what are exactly my life goals. If picking yearly goals is already difficult, think about life goals. I ended up with a rather abstract list that has things like read more, do more physical exercises, spend less time working, practice meditation and so on. A more appropriate name for my list would be Guidelines for Living. However, writing them down and reviewing them every week seems like a great idea!</p>
<p>After reviewing your goals, take some time to organize all the notes you did during the week, to review your calendar, to review your lists and finally, to set the Big Rocks and the Most Important Tasks of the days for the next week. You can find on <a title="ZTD Book" href="http://archive.org/stream/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta/zen_to_done.Leo_Babauta-jorel314#page/n78/mode/1up" target="_blank">page 80</a> a small checklist to help you in your Weekly Review.</p>
<p>Personally, I find this habit very nice. After working and studying during the whole week, spending a small amount of time to review and organize all my tasks feels great. I am trying to wake up early on the Saturdays, take a walk at the beach, take a shower, put some nice music and do my Weekly Review.</p>
<h3>8. Simplify</h3>
<p>Always try to simplify and minimize your to-do lists. Cross out old tasks, delegate some of them when it is possible and keep only what is essential.</p>
<p>Learn to say <em>no</em> in order to reduce your commitments and remember that you can&#8217;t do everything you want at the same time. End your current projects before entering in new ones.</p>
<p>I have to admit that saying <em>no</em> is very hard to me, but it is something that I am getting better. Better saying <em>no</em> at the very beginning than being not able to honor your commitments later.</p>
<h3>9. Set Routines</h3>
<p>This habit is about writing down small tasks that you have to do every day or week, like dishwashing, taking the dog out for a walk, go to the gym, do your Weekly Review, tide your room, etc. Try to have a routine list for your work, for your studies and for your personal life.</p>
<p>In my case, the improvement comes from writing down the tasks. Everything that frees my mind is welcome.</p>
<h3>10. Find Your Passion</h3>
<p>Do what you love. Period. This video may inspire you (<a title="All Work and All Play" href="http://vimeo.com/44124657" target="_blank">All Work and All Play</a>).</p>
<p>If you study something that you dislike or have a job that you hate, it&#8217;s time to rethink. Working (and studying) in the field that I love has always seemed very natural to me, so I have not much to add beside what is written in the ZTD book.</p>
<h3>Conclusion</h3>
<p>That&#8217;s it. In the <a title="The ZTD Book" href="http://archive.org/details/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta" target="_blank">ZTD book</a> you can still find 3 more chapters: A Day with Zen to Done, the ZTD FAQ and Resources. I recommend you reading them.</p>
<p>I&#8217;ve written this series to share my experience with the ZTD methodology, so other people get to know it and to make a personal &#8220;long-term memory&#8221;, so when I forget something I can come back to my posts instead of having to read the whole book again. Moreover, writing down these habits and sharing them stimulates me even more into following it.</p>
<p>Hopefully this can be to other people as useful as it was to me. Feel free to share your productivity tips on the comments.</p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zen To Done and me – Part 2</title>
		<link>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/</link>
		<comments>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/#comments</comments>
		<pubDate>Thu, 07 Jun 2012 13:28:01 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=71</guid>
		<description><![CDATA[This is the second part of my review on the Zen to Done (ZTD) productivity system, where I write about what it means to me and how I think I can make the most out of it. Expect to find a mix &#8230; <a href="https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This is the second part of my review on the <a title="Zen To Done" href="http://archive.org/details/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta" target="_blank">Zen to Done</a> (ZTD) productivity system, where I write about what it means to me and how I think I can make the most out of it. Expect to find a mix of both the original ZTD habits and my experience applying them. You should read <a title="Zen To Done and me – Part 1" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/">part one</a> before proceeding.</p>
<h3><span id="more-71"></span>4. Do</h3>
<p>This is where the magic happens. After all, all those tasks on your to-do list aren&#8217;t going anywhere by themselves.</p>
<p>ZTD gives you some good old advises like eliminating all distractions and interruptions and rewarding yourself. You should check them out at <a title="ZTD Book" href="http://archive.org/stream/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta/zen_to_done.Leo_Babauta-jorel314#page/n36/mode/1up" target="_blank">page 37</a>.</p>
<p>Personally, the most difficult stages to me are <em>starting</em> and <em>keeping focused</em>. Sometimes I had short tasks where I was spending more time between deciding I was going to do it and really starting than on the task itself. This is a bad habit that I am still trying to overcome. Realizing the time that I have been spending with this sort of <em>micro</em> <em>procrastination</em> was my first step. Looking at the positive aspects of a task my also help you starting your tasks.</p>
<p>To minimize distractions, I decided to turn off as many notifications systems as possible, like the ones on my Twitter client (a Google Chrome extension). If are working on a team and really have to keep an instant messaging client opened (GTalk, IRC&#8230;), avoid sharing them with your personal accounts, as you don&#8217;t want to get interrupted by friends and family. I also used to keep my GMail permanently opened as a <em>pinned tab</em> on Chrome, but its flashing started to distract me.</p>
<p>Another important tip is, as a friend told me, keeping the <em>context.</em> If you are working and someone comes to talk with you, write down what the person said and go back to your task as soon as possible. If you notice that the interruption is going to last more than a few minutes, write down instead what exactly you had been doing on your task. Not losing the context can save you some time.</p>
<p>You surely already know that you shouldn&#8217;t be looking your Facebook or Twitter account while you work, but you insist on doing it. Those tips are already a commonplace, however, following them are sometimes quite hard and demands some effort. Police yourself and try to track your distractions.</p>
<h3>5. Simple, Trusted System</h3>
<p>All in all, this habit is about having a very simple to-do list and calendar and making sure that you check it everyday. You may also want to split your list into categories like work, personal and calls to make, so when you want to pick a new task you don&#8217;t get overwhelmed by looking at a huge list.</p>
<p>ZTD book makes it clear that its focus is on the doing, and not on the tools, and gives you some nice recommendations on specific tools and softwares.</p>
<p>Personally, I have been using Remember the Milk, Google Calendar and a small notebook that I always carry with me. This is more a matter of personal taste, so make sure that try different systems in order to find the ones the fits you the best.</p>
<h3>6. Organize</h3>
<p>Getting out a little bit of to-do lists and tasks, this habit is about being organized in your daily life as a whole. You can see it as process that has rules that must be followed in order to work.</p>
<p>One of the biggest signs that you need help is when you notice that all the flat surfaces from your room/office/house are pilled with random papers and objects.</p>
<p>A general thumb rule is <em>&#8220;a place for everything, and everything in its place&#8221;</em>. Your goal is to be able to tell <em>right now</em> where all your things are and to have a system to deal new objects. Do you have a place for your car keys? For your dirty clothes? For your documents (like passport)? You should.</p>
<p>I don&#8217;t have much to tell beside what is written in the ZTD book. Getting organized always seemed very natural to me, but sometimes I keep realizing how awesome it can be. For example when I want to find something that I haven&#8217;t used for years, but when I look for it, it is exactly where it should be.</p>
<h3>What’s next</h3>
<p>On the next part of this post I will write about the last 4 habits: Review, Simplify, Set Routines and Find Your Passion. You can read it <a title="Zen To Done and me – Part 3" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Zen To Done and me &#8211; Part 1</title>
		<link>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/</link>
		<comments>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/#comments</comments>
		<pubDate>Sun, 03 Jun 2012 17:15:54 +0000</pubDate>
		<dc:creator><![CDATA[Fernando Brito]]></dc:creator>
				<category><![CDATA[Productivity]]></category>

		<guid isPermaLink="false">http://dev.fernandobrito.com/?p=49</guid>
		<description><![CDATA[This week I read a post called 6 blog tips for busy academics by Matt Might. It is interesting how I am not even subscribing to his RSS feed but I end up visiting his blog every week or so, mainly &#8230; <a href="https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>This week I read a post called <a title="How to Blog as an Academic" href="http://matt.might.net/articles/how-to-blog-as-an-academic/" target="_blank">6 blog tips for busy academics</a> by <a title="Matt Might" href="http://matt.might.net/" target="_blank">Matt Might</a>. It is interesting how I am not even subscribing to his RSS feed but I end up visiting his blog every week or so, mainly by clicking on links posted on my Twitter timeline. One of my favorites article there is <a title="What CS majors should know" href="http://matt.might.net/articles/what-cs-majors-should-know/" target="_blank">What every CS major should know</a>.</p>
<p>I can pretty much say that his blog tips inspired me into starting a new blog, particularly when he recommends us to &#8220;Blog as long-term memory&#8221;.</p>
<p>Several weeks ago I found the <a title="Zen To Done" href="http://archive.org/details/ZenToDoneTheUltimateSimpleProductivitySystemByLeoBabauta" target="_blank">Zen to Done</a> (ZTD) productivity system. As you can see in the link, the book has 80+ pages, but the pages are small, the font is big and the text is really easy to read. Although I have read most of the book, I wanted to set practical goals and check points to help me measuring what have I successfully incorporated into my routine so far and what do I still want to try out.</p>
<p>So, this post is a personal &#8220;long-term memory&#8221; review of what ZTD means to me and how I think I can make the most out of it. The following text is a mix of both the original ZTD habits and my experience applying them. This post is going to be written in 3 parts (<a title="Zen To Done and me – Part 2" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/">part 2</a>, <a title="Zen To Done and me – Part 3" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-3/">part 3</a>).</p>
<h3><span id="more-49"></span>Introduction and Why ZTD</h3>
<p>Zen To Done is a set of 10 habits to help you get organized and to simplify your life. It started like a mix of Getting Things Done (GTD) and the 7 Habits of Successful People, but with simplicity in mind and focus on doing, instead of on the system.</p>
<p>You should follow only the habits that makes you fell comfortable, and you should pick only one or two at a time.</p>
<h3>1. Collect</h3>
<p>One of the most important habits to me. When you have an idea or a new task to do, you should write things down immediately. When I say immediately, I really mean it. Our brain is already overwhelmed with lots of things, and it can trick us sometimes. When you get back to your home or office, you should transfer your notes to your master to-do list.</p>
<p>This habit is also about centralizing your inboxes and collecting them together (letters, papers from work, university and so on), so your the next habit (processing) can take place.</p>
<p>It may seem too simple or stupid to always carry a small notebook with you, but I have already seen the benefits of doing so. One protip that I can give you is: right before going to bed, write down the tasks that are bothering you (&#8220;tomorrow I must not forget to do this, and this and that&#8221;). This will help you cleaning your head (really important) and won&#8217;t let you forget those tasks.</p>
<h3>2. Process</h3>
<p>So now that you have a <em>single</em> pile with papers on your table, some unread emails on your inbox and some notes and tasks on a small notebook on your pocket, it&#8217;s time to process them. It is important to not let those piles overflow.</p>
<p>As the author says, &#8220;<em>in all cases, don&#8217;t leave the item in your inbox</em>&#8220;. Make quick and immediate decisions. If an item on your inbox requires you to do something, first check if you are the person who should be doing this. If not, delegate it to the right person as soon as possible. If you are, and the task will take 5 minutes or less, do it immediately. If the task demands more time, add it to your to-do list and remove the item from your inbox.</p>
<p>From my personal experience, using your email inbox as a to-do list is not a very good idea. Your goal is to have your inboxes always empty. I used to read an email and then mark it as unread to remember me of doing the tasks that the email required later (even if the task only required some minutes), but this didn&#8217;t work very well for me, probably because I was mixing new unread emails with emails that I had already read but marked as unread.</p>
<p>In one sentence: when you read an email, delegate it, do it right away or create a task on your master to-do list in order to remove this email from your inbox.</p>
<h3>3. Plan</h3>
<p>After collecting papers and emails, processing your inboxes and converting the things you have to do to actual tasks on your to-do list, it&#8217;s time to choose where to start.</p>
<p>Here the author recommends you to pick, at the beginning of the week, the most 4-6 important tasks (named Big Rocks, from the 7 Habits of Highly Effective People) that you want to accomplish this week. Don&#8217;t forget to take at least a task that will help you achieving your yearly goals (more on that later).</p>
<p>Each morning, choose the Most Important Tasks (MIT) of the day (this could include a Big Rock task) and get them done as earlier as possible, so other tasks don&#8217;t pop up before you are able to work on them. When you are done with your the MIT, go to your to-do list and check what you can do next.</p>
<p>Personally, besides the funny names, simply choosing the most important tasks and writing them on a piece of paper that I carry on my pocket throughout the day has helped me a lot. Sometimes I used to had simple tasks like getting a document somewhere on my university campus, but I kept procrastinating it until the day that I had it as a Most Important Task of the day.</p>
<p>Make sure to include your <em>important</em> tasks there and not working on anything else before accomplishing it. Reviewing this list with your completed tasks at the end of the day makes you feel nice.</p>
<h3>What&#8217;s next</h3>
<p>On the next part of this post I write about the next 3 habits: Do, Simple Trusted System and Organize. You can read it <a title="Zen To Done and me – Part 2" href="http://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-2/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://dev.fernandobrito.com/2012/06/zen-to-done-and-me-part-1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
