<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Orestes Carracedo</title>
  <link href="http://blog.orestes.io/atom.xml" rel="self" />
  <link href="http://blog.orestes.io" />
  <updated>2015-02-28T23:01:45+00:00</updated>
  <id>http://blog.orestes.io</id>
  <author>
    <name></name>
    <email>orestes.ca@gmail.com</email>
  </author>
  
  <entry>
    <title>Hardware</title>
    <link href="http://blog.orestes.io/archive/2015/02/28/hardware"/>
    <updated>2015-02-28T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2015/02/28/hardware</id>
    <content type="html">

&lt;p&gt;Being a software developer is nice. Learning something new usually means downloading some SDK, running some new software or writting a different software. But still, the vast majority of written software runs on the same kinds of machines; screens. More often than not, you get to run your software on fancy touchscreens, interact with a mouse and keyboard. I like to break those boundaries and play with stuff that doesn't need a user to fullfill a purpose.&lt;/p&gt;

&lt;p&gt;A few years ago, I bough an Arduino starter kit, and embarked on an the awesome journey to the Internet Of Things&lt;/p&gt;

&lt;iframe width=&quot;560&quot; height=&quot;315&quot; src=&quot;https://www.youtube.com/embed/RtDnTdLKDbM&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;

&lt;&lt;p&gt;This simple experiment doesn't look like much, but to me, it felt incredibly liberating. From then on, sensors, servos and DC motors have made learning really fun.&lt;/p&gt;

&lt;p&gt;If you're looking for a fun hobby that involves programming, I cannot recommend this enough. I recently got a &lt;a href=&quot;http://fritzing.org/shop/starter-kit/&quot; target=&quot;_bnlank&quot;&gt;Fritzing Starter Kit&lt;/a&gt; and I coultn't be happier!&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <title>Learning</title>
    <link href="http://blog.orestes.io/archive/2015/02/15/learning"/>
    <updated>2015-02-15T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2015/02/15/learning</id>
    <content type="html">

&lt;p&gt;I've been reviewing my progress over the past five years in Barcelona and Focus On Emotions. There's a ton of stuff that I've put into practice since I moved here. Most of this would be a bit overkill for simple projects, but I consider these practices are vital for any project involving more than one developer. All of these techniques were put to practice in personal projects first, and then brought into my regular job as Director of Software Development. Having a team to work together through the issues we found implementing these was really helpful.&lt;/p&gt;


&lt;h3&gt;What I've learned&lt;/h3&gt;


&lt;p&gt;&lt;strong&gt;Software Configuration Management&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;We checked every project into Version Control and applied a bunch of SCM related practices. We switched from &lt;strong&gt;Subversion&lt;/strong&gt; to &lt;strong&gt;Git&lt;/strong&gt; in 2011. There were many reasons, easier security handling, speed and Git's decentralized model being some of them. &lt;/p&gt;


&lt;p&gt;We still used a golden repo where every other working copy was pushed to at the end of the day, or when we're kicking off an integration. That repo also pushed the changes to &lt;strong&gt;Bitbucket&lt;/strong&gt; via a the Git &lt;em&gt;post-receive&lt;/em&gt; hook. We've been using Bitbucket as a collaboration and visualization tool rather than a SCM storage service.&lt;/p&gt;


&lt;p&gt;Along the way, we also adopted &lt;strong&gt;&lt;a href=&quot;http://semver.org&quot;&gt;Semver&lt;/a&gt;&lt;/strong&gt; as the sane guidelines for release versioning. Semver adoption is now almost the de-facto standard, at least for Open Source projects.&lt;/p&gt;


&lt;p&gt;We also had a few different strategies to deal with branching. We opted to implement the wildly known &lt;strong&gt;&lt;a href=&quot;http://nvie.com/posts/a-successful-git-branching-model/&quot;&gt;git-flow&lt;/a&gt;&lt;/strong&gt; and I doubt I would've ever need anything more complicated&lt;/p&gt;


&lt;p&gt;The systems we worked on relied heavily on progressive enhancement. Both on the implementation and on the feature releasing cycle. We used a &lt;strong&gt;feature toggling&lt;/strong&gt; approach for every new feature&lt;/p&gt;


&lt;p&gt;For Open Source projects, &lt;a href=&quot;https://github.com/&quot;&gt;GitHub&lt;/a&gt; is typically used as the SCM storage and collaboration platform. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Software Quality Assurance&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Measuring Software Quality in metrics. I'm not talking about code coverage, but about cyclomatic complexity, deep of inheritance tree, object coupling... Most of the metrics were provided by &lt;strong&gt;&lt;a href=&quot;http://pdepend.org/documentation/software-metrics/index.html&quot;&gt;PHP Depend&lt;/a&gt;&lt;/strong&gt;, generated in our build process on &lt;strong&gt;Jenkins&lt;/strong&gt;.&lt;/p&gt;


&lt;p&gt;For Open Source projects, &lt;a href=&quot;https://codeclimate.com&quot;&gt;Code Climate&lt;/a&gt; provides a great service. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Testing&lt;/strong&gt; &lt;/p&gt;


&lt;p&gt;I spent my first years as a developer without writing a single test. The commitment to make code clean, understandable and reliable was only fulfilled when we managed to test every project we started. We did unit testing, end-to-end testing on some of the apps that relied heavily on the user interaction and acceptance testing using &lt;strong&gt;&lt;a href=&quot;http://behat.readthedocs.org/en/v2.5/quick_intro.html&quot;&gt;Behat&lt;/a&gt;&lt;/strong&gt; for BDD. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Continuous Integration&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;We did CI on the &lt;em&gt;development&lt;/em&gt; and &lt;em&gt;master&lt;/em&gt; branches of our apps. We set up a local &lt;strong&gt;&lt;a href=&quot;http://jenkins-ci.org/&quot;&gt;Jenkins&lt;/a&gt;&lt;/strong&gt; server, using a computer monitor with loudspeakers. The monitor would feature a carousel of wall display lists of the jobs, alternating between the development and the stable branches. Different changes of the build states would trigger different sounds. The quick feedback from the CI system made us be more confident in our code than ever. &lt;/p&gt;


&lt;p&gt;Open Source projects usually run their CI in &lt;a href=&quot;https://travis-ci.org/&quot;&gt;Travis CI&lt;/a&gt;&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;DevOps&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;The set of practices meant to easy up and speed the deployment of new versions of our projects.


We switched from manually created VMs in VirtualBox to &lt;strong&gt;&lt;a href=&quot;https://www.vagrantup.com/&quot;&gt;Vagrant&lt;/a&gt;&lt;/strong&gt;-managed VMs, provisioned by &lt;strong&gt;&lt;a href=&quot;https://docs.puppetlabs.com/&quot;&gt;Puppet&lt;/a&gt;&lt;/strong&gt;. Bringing up a new machine to test a new configuration or deploy a different environment for another app took now a couple of minutes, instead of hours (and multiple human errors).&lt;/p&gt;


&lt;p&gt;We also wrote deployment automation tools using &lt;strong&gt;&lt;a href=&quot;http://ant.apache.org/&quot;&gt;Apache ant&lt;/a&gt;&lt;/strong&gt;, then moved to &lt;strong&gt;&lt;a href=&quot;https://www.phing.info/&quot;&gt;Phing&lt;/a&gt;&lt;/strong&gt; then moved to &lt;strong&gt;&lt;a href=&quot;http://gruntjs.com/&quot;&gt;Grunt&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;How I learned&lt;/h3&gt;


&lt;p&gt;Most of this stuff I learned by reading a lot. I've tried to step up my game in these years and I managed to find more sources of knowledge than I could possibly manage.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Sources&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;My primary sources is always the Internet. Sites like &lt;strong&gt;&lt;a href=&quot;https://news.ycombinator.com/&quot;&gt;Hacker News&lt;/a&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;a href=&quot;http://www.reddit.com/&quot;&gt;Reddit&lt;/a&gt;&lt;/strong&gt; and a carefully curated collection of blogs that I read via &lt;strong&gt;&lt;a href=&quot;https://feedly.com/&quot;&gt;Feedly&lt;/a&gt;&lt;/strong&gt;. &lt;strong&gt;&lt;a href=&quot;http://twitter.com&quot;&gt;Twitter&lt;/a&gt;&lt;/strong&gt; is also fantastic, if you follow the active people in your community.&lt;/p&gt;


&lt;p&gt;Podcasts are another great way to stay up to date. They're perfect for commuting.&lt;/p&gt;


&lt;p&gt;Books are fundamental. No matter how insightful a blog post or podcast might be, they always reference written material. There are a lot of must reads in our field, so I started as early as I could.&lt;/p&gt;


&lt;p&gt;Conferences and meetups are perfect for networking, speaking to other developers and share. I've tested the waters myself by giving a couple of talks in the past years and I must say that, even frightening, it's a lot of fun and you get to help out other developers. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Practice&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Thoughtful, carefully prepared practice of everything you learn is critical. It's just not enough to read and vaguely retain the information. To truly understand, we must apply whatever we're learning.&lt;/p&gt;


&lt;blockquote&gt;


&lt;p&gt;Tell me and I forget, teach me and I may remember, involve me and I learn. &lt;/p&gt;


&lt;p&gt;― Benjamin Franklin&lt;/p&gt;


&lt;/blockquote&gt;


&lt;p&gt;Pet projects are a great way to practice. they work out even better if you collaborate with others. One of the potential pitfalls of pet projects is taking things too seriously. Remember, you're learning, getting better at something specific. The goal isn't for your pet project to be popular, grow into a company and get bought by Google. You're just learning, take it easy. Usually, it doesn't even matter if your pet project sees the light and gets released into the public. Keep in mind though that having a long list of unfinished &lt;em&gt;ideas&lt;/em&gt; can be demoralizing. In time, I learned to downsize the complexity of my ideas and only released small things that I was ok with.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Empathy&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Put yourself in the position of the rest of your team. Try to think like they think, to understand their problems and help them.&lt;/p&gt;


&lt;p&gt;I've always liked to know as much as possible about the platform running my software. When I started as a freelance software developer, my websites and webapps where running in a shared hosting environment. The amount of problems and frustration made me realize how hard it is to be a good Systems Administrator. I moved all my clients into VMs. This meant I was now doing Systems Administration too, but it provided me with a ton of learning experiences.&lt;/p&gt;


&lt;p&gt;The same goes for frontend development, mobile, etc...&lt;/p&gt;


&lt;h3&gt;What I still have to learn&lt;/h3&gt;


&lt;p&gt;&lt;strong&gt;Continuous deployment&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;I've never had the opportunity to work in a project when I could release as often as we made changes. I'm looking forward to doing so.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Test-Driven Development&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;It's easier said than done. TDD requires a certain level of work stability, self-discipline and focus I've just never been able to find. I'm making an effort to change this. &lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Domain-Driven Development&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Such a huge topic. Digging into DDD feels like going down the rabbit hole. This paradigm could very well be as big as the &lt;strong&gt;Agile&lt;/strong&gt; methodologies have been.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;Mobility&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;Even though we worked in a few Mobile projects, all of them where part of the Digital Signage platform we built. I'd love to work on a project where the mobile client is the main focus.&lt;/p&gt;


&lt;p&gt;&lt;strong&gt;High scalability&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;None of the projects I've worked have reached the numbers that high traffic systems support nowadays. Millions of daily active users. That's a whole new level, and I want to reach that.&lt;/p&gt;



</content>
  </entry>
  
  <entry>
    <title>Leaving Focus On Emotions</title>
    <link href="http://blog.orestes.io/archive/2015/01/31/leaving-focus-on-emotions"/>
    <updated>2015-01-31T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2015/01/31/leaving-focus-on-emotions</id>
    <content type="html">

&lt;p&gt;Not that long ago I wrote about the beginning of a new chapter. Well, that was a short chapter. In hindsight, I guess I was trying to motivate myself and push through the merger. In the end, I wasn't able to make it. I don't see myself in the new project and I decided to leave before taking on a vital project that's coming up next.&lt;/p&gt;

&lt;p&gt;I'm writing this sitting at the cafe in the OVD Asturias airport. Javier Morales and I have been delegating our tasks to the Software Development team based of Gijón. We're closing up the Software Development Department in Barcelona, everything will be moved up here.&lt;/p&gt;

&lt;p&gt;It's been a rough two weeks. We had an awful weather and we barely did anything besides coming and going from the hotel to the office. The other team is absorbing all the knowledge pretty well and we're confident they'll be able to maintain our software for however long the company decides to keep it running.&lt;/p&gt;

&lt;p&gt;In my time at Focus On Emotions, my team grew an shrunk as the circumstances provided. Overall, I'm very satisfied with our work here and I'd like to take a moment thank everyone who has been part of the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/virfaure&quot;&gt;Virginie Faure&lt;/a&gt;&lt;/strong&gt; worked with us at the very beginning of our product development. She wrote part of the core of our CMS and she moved in the blurry line that divides frontend and backend developers. She had a knack for interface and visual design and shaped the look and feel of our products.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/spenya&quot;&gt;Sergi Penya&lt;/a&gt;&lt;/strong&gt; helped us quite a bit as a consultant. Most of our early interactivity projects where outsourced to him.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/vgrdominik&quot;&gt;Valentí Gamez&lt;/a&gt;&lt;/strong&gt; wasn't even 20 years old when he joined Focus On Emotions. He took care of the CMS maintenance role and helped us tremendously when migrating our website to Twig.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/teknik_tdr&quot;&gt;Xavier Rubio&lt;/a&gt;&lt;/strong&gt; helped us as an external consultant. He's truly one of the most fearless developers I know. Through the years, Xavi helped us on electronics, backend, fronted and a myriad of other aspects of our software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/dimaslz&quot;&gt;Dimas López&lt;/a&gt;&lt;/strong&gt; came in to be the solid third dev on our team. We've been friends for many years but couldn't quite find the right opportunity to work together. In our time working together he absorbed all the knowledge like a sponge. It's been great seen him progress as fast and as far as he has now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/elecash&quot;&gt;Raúl Jimenez&lt;/a&gt;&lt;/strong&gt; consulted for us for almost two years. His work on our template engine made us one of the best solutions in the marked.&lt;/p&gt;

&lt;p&gt;I'd like to give an special mention to &lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://twitter.com/javi_moralesf&quot;&gt;Javier Morales&lt;/a&gt;&lt;/strong&gt;. He's been the most important part of the Software Development team for quite a while now. He's evolved into a serious Senior Developer, capable of chewing anything you throw at him. Without him, Focus On Emotions would've never been as successful as it got to be.&lt;/p&gt;

&lt;p&gt;Thank you guys sharing your time with me. I'm really grateful I had your help through this years.&lt;/p&gt;

&lt;p&gt;&lt;img  class=&quot;img-polaroid&quot;  src=&quot;http://blog.orestes.io/media/2015/01/31/leaving-focusonemotions.png&quot; alt=&quot;Leaving Focus On Emotions&quot; /&gt;&lt;/p&gt;

</content>
  </entry>
  
  <entry>
    <title>Facebook Hacker Cup</title>
    <link href="http://blog.orestes.io/archive/2015/01/14/faceook-hacker-cup"/>
    <updated>2015-01-14T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2015/01/14/faceook-hacker-cup</id>
    <content type="html">

&lt;p&gt;
I've been entering Facebook's Hacker Cup for a few years now. Some years I've gotten past a couple of rounds, others I haven't done so well. Anyways, I really like participating and I decided to share my setup.
&lt;/p&gt;

&lt;p&gt;I use the same structure for every problem so I can be more efficient. Every problem:&lt;/p&gt;

&lt;ul class=&quot;task-list&quot;&gt;
&lt;li&gt;Is in a directory named using the point value and the problem name, like &lt;strong&gt;30 Balanced smileys&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Contains a readme file with the full description of the problem.&lt;/li&gt;
&lt;li&gt;Contains an &lt;code&gt;example&lt;/code&gt; directory with the input and output files provided in the problem description.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;data&lt;/code&gt; directory contains the generated input provided for the submission.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;generated&lt;/code&gt; directory contains the output generated for the submission.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;The tight loop&lt;/h4&gt;

&lt;p&gt;I'm using the simplest quickest feedback loop I could come up with:&lt;/p&gt;

&lt;ol class=&quot;task-list&quot;&gt;
&lt;li&gt;Run the program piping in the input from the example file and piping out the output to an output file.&lt;/li&gt;
&lt;li&gt;Diff the generated output file against the expected output file.&lt;/li&gt;
&lt;li&gt;Repeat&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;An example using php: &lt;/p&gt;

&lt;pre&gt;&lt;code&gt;watch -n 1 &quot;php solve.php &amp;lt; example/input.txt &amp;gt; output.txt &amp;amp;&amp;amp; diff example/output.txt output.txt&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;Using python:&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;watch -n 1 &quot;python solve.py &amp;lt; example/input.txt &amp;gt; output.txt &amp;amp;&amp;amp; diff example/output.txt output.txt&quot;
&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;I usually have this running in a session, and code in a different one. I like running the code very second and not relying on file watchers&lt;/p&gt;
&lt;p&gt;&lt;p&gt;&lt;img src=&quot;http://blog.orestes.io/media/2015/01/14/solving.png&quot;&gt;&lt;/p&gt;

&lt;h4&gt;What I often do wrong&lt;/h4&gt;
&lt;p&gt;This time I entered the qualifying round the last day. I ignored my calendar events for the day when I shouldn't. As a result, I entered the round feeling in a hurry and didn't concentrate as much as I should've.&lt;/p&gt;
&lt;p&gt;In past editions I've overlooked the constraints and tested the code using simple scenarios. The problem comes when the generated input hits the constraint limits and my code is not optimized at all, taking a lot of time to perform the calculations and making me fail the problem.&lt;/p&gt;
&lt;p&gt;Another mistake I made was preparing only one problem. Chances are I'm going to be fail to think about every scenario and fail the problem. Solving (or at least trying to) all the round's problems should always be the way to participate.&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links&lt;/strong&gt;:
&lt;ul&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://github.com/orestes/facebook-hacker-cup&quot;&gt;orestes/facebook-hacker-cup&lt;/a&gt; on GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Shortcuts</title>
    <link href="http://blog.orestes.io/archive/2014/12/31/shortcuts"/>
    <updated>2014-12-31T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2014/12/31/shortcuts</id>
    <content type="html">

&lt;p&gt;
I love shortcuts. Specifically, keyboard shortcuts. Quick keystrokes that invoke
 commands and menu options. I couldn't live without them. But that's me. It seems
 normal that  people don't use them at all save for &lt;code&gt;CTRL+C&lt;/code&gt; and 
&lt;code&gt;CTRL+V&lt;/code&gt;.
&lt;/p&gt;

&lt;p&gt;
One of the main goals as developers is automating repetitive and error-prone 
tasks. There's very few things that can get as repetitive as clicking OK 
or Cancel on dialogs, checking boxes or navigating between form fields. And yet,
 very few people use &lt;code&gt;Tab&lt;/code&gt; or &lt;code&gt;Shift+Tab&lt;/code&gt; to navigate 
between form fields, &lt;code&gt;Space&lt;/code&gt; to check checkboxes and 
&lt;code&gt;Enter&lt;/code&gt; or &lt;code&gt;Escape&lt;/code&gt; to accept o dismiss dialogs. I can 
totally understand that the average computer user won't get used to this, but 
I can't respect a developer that doesn't know his tools. And that doesn't mean
 you have to be an Emacs guru, but regardless of your tool of choice, you 
better show me your skills when I'm interviewing you.
&lt;/p&gt;

&lt;p&gt;That's what 
this is all about; mastering your tools. I don't care that much about the particular
tool as long as you prove that you know it inside out. I'm not the only one who thinks on 
this vein. I recently read &lt;a target=&quot;_blank&quot; href=&quot;http://www.nicolasbize.com/blog/the-best-ide-in-the-world/&quot;&gt;the best IDE in the world&lt;/a&gt; by Nichas Bize and I found myself bobbing my head in agreement all along.
&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links&lt;/strong&gt;:
&lt;ul&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.nicolasbize.com/blog/the-best-ide-in-the-world/&quot;&gt;The Best IDE in the World&lt;/a&gt; by Nicolas Bize.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>A new chapter</title>
    <link href="http://blog.orestes.io/archive/2014/11/30/a-new-chapter"/>
    <updated>2014-11-30T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2014/11/30/a-new-chapter</id>
    <content type="html">

&lt;p&gt;In 2010 I had been working on public administration projects for two years. For me Tenerife was a great place
    to live for a while, but not to stay forever, let alone to stay for work. There simply was no tech job market. When
    I got fed up, I decided to move and leave the island (there's a LOST pun in here somewhere) looking for something
    better. I teamed up with a coworker, we quit together and moved to Barcelona.
&lt;/p&gt;

&lt;p&gt;I was amazed by the quality and quantity of job offers there where. I chose to join Focus On Emotions, a promising
    Digital Signage company. I knew nothing about this sector but it looked fascinating. The first thing that
    comes to my mind when I think of Times Square in NY or Shibuya in Tokyo is that look that reminds me of Blade
    Runner.&lt;/p&gt;

&lt;img class=&quot;img-polaroid&quot; src=&quot;http://blog.orestes.io/media/2014/11/30/shibuya.jpg&quot;
     alt=&quot;&amp;quot;Shibuya from Hikarie&amp;quot; by Héctor García&quot;
     title=&quot;&amp;quot;Shibuya from Hikarie&amp;quot; by Héctor García&quot;
        /&gt;
&lt;p&gt;CC Photo by Héctor García. &lt;a target=&quot;_blank&quot;
                                 href=&quot;https://www.flickr.com/photos/torek/15264227496/in/photolist-pfRa39-7TKr9h-HrtDH-inWRPW-5kuKZ4-cdTiqE-5cdtvi-inWZdw-iyXVWn-ea12mj-aw8RoL-e1jiho-dKENXd-6XFaKC-j27tx9-8tV8Vs-cVezQC-6e5r3A-ibfyDi-7gXHWz-8SpVMR-34qbfS-nifc3n-5VsrUv-5hsde8-rhJc6-hWLXbV-8TRRDN-cdTivS-8eSLJR-9LyinQ-inWQWo-hyU89m-afz7cC-idpkmf-jWGns-8KGyAT-5vJBua-nwcFZ7-huviDC-hP94bC-4BwDTh-pc8oTx-6okMkj-4Qguzx-G9dqW-cyQVa-7xhnjX-hjBE9c-hyGEAk/&quot;&gt;Shibuya
    from Hikarie on Flickr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's the mesmerizing collection of ad displays covering the buildings. With this
    expectations in mind it's fair to say I was a little excited about getting to work with that kind of tech. One of
    the drawbacks of being a backend software developer is that your work doesn't get noticed by the general population.
    I was eager to work on something I could walk by, point to and say, &quot;Hey, see that cool multimedia 6x4 videowall
    over there? Yeah, that's running software I wrote&quot;.&lt;/p&gt;

&lt;img class=&quot;img-polaroid&quot; src=&quot;http://blog.orestes.io/media/2014/11/30/times_square.jpg&quot;
     alt=&quot;&amp;quot;Times Square2&amp;quot; by Javier Gutierrez Acedo&quot;
     title=&quot;&amp;quot;Times Square2&amp;quot; by Javier Gutierrez Acedo&quot;
        /&gt;
&lt;p&gt;
    CC Photo by Javier Gutierrez Acedo &lt;a target=&quot;_blank&quot;
                                          href=&quot;https://www.flickr.com/photos/javigutierrez/3220157727/in/photolist-oj38Az-o3YogS-oELR7x-6S7cwS-cpfoc5-bsoJQA-o3a2R7-o39zqm-dWuWy8-6H8nQw-5ZmE6P-px9Gfm-6BiHpw-o3YDuX-6y1SbN-5Uy9GP-k93AN-hjfpAt-6DLMQF-omq3t6-7s6Abe-o3a83E-ocHnLL-dkvmgE-ad1aem-9ETLDZ-bvAVqW-nDPmxa-oHq4bD-pdYb4-CY3vu-afJkXD-oiJ5aM-dnmkmB-3V4U7q-ah6TGT-ah9GLy-j3ecJy-7jezJs-o3XKsc-gKEPui-cFAJPA-kVnuvZ-4YwpJp-7aS7KQ-8z2xFX-6AxZiG-eWCo9T-b56qg4-5tAQ3A&quot;&gt;Times
    Square2 on Flickr&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I started working there there was no Software Development department, almost everything was being outsourced.
    We used Digital Signage software licensed from our competitors. I was tasked with the creation of the Software
    Development team, it was going to be the challenge I was looking for. In the following years, I devoted my heart and
    soul to my role. I did everything from candidate screening, to training to architecture design. We managed to
    recover a few projects that were on the verge of failure. We developed our own Digital Signage player, our own CMS
    and CDN platform, adding features that none of our competitors had, integrating with third party services and
    steadily delivering project after project. Our department became the backbone of the company, we were able to secure
    bigger projects and clients and keep growing technologically.&lt;/p&gt;

&lt;p&gt;
    &lt;img class=&quot;img-polaroid use-right&quot; src=&quot;http://blog.orestes.io/media/2014/11/30/focusonemotions.png&quot; alt=&quot;Focus on Emotions&quot;
         title=&quot;Focus on Emotions&quot;/&gt; Almost five years, 85+ repos, 6 team mates and a whole lot of projects later, I
    feel really proud of our team. We've worked on so many different things it doesn't compare to any other job I've
    had. We've done electronics integration, developed the first Digital Signage platform based on
    Android and we're now finishing the Digital Signage integration for ThyssenKrupp. I never thought I would see my
    software running inside an elevator! Thorough this years we've managed to be up-to-date as much as we could. We
    got some certifications, we attended a whole lot of conferences, meetups and user group talks, we even got our
    feet wet and presented some of our projects to our peers. It was a never-ending learning experience that we're
    committed to keep going.
&lt;/p&gt;

&lt;p&gt;
    In June 2014 we were bought by one of our competitors, Altabox. Together we're a bigger company, a bigger team
    which can tackle bigger problems and keep growing internationally. I feel like the hard work we've put into our
    software paid off. We now we are bigger, we have more resources, more interesting projects and a longer road ahead
    of us.
&lt;/p&gt;

&lt;p&gt;Company culture is one of those things most of the small companies can't offer. Having to companies merge into one is
    no easy task, so they flew us from Barcelona to Gijón for a two-day corporate retreat. Meeting our new co-workers in
    an informal setting was a nice experience. You get to know the people you work with in a more personal level. You
    don't see positions and responsibilities, you see new friends.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-polaroid use-left&quot; src=&quot;http://blog.orestes.io/media/2014/11/30/altabox.png&quot; alt=&quot;Altabox&quot;
        title=&quot;Altabox&quot;/&gt;After a couple of hours of corporate presentations we had lunch together. We mixed a bit, had some good laughs, there
    was some &lt;em&gt;impromptu&lt;/em&gt; performance by one of the most artistic team members, Dimas, and everyone seemed to be
    enjoying themselves. After lunch, we toured Altabox's facilities. The first thing that hit me when we were going to
    the Gijón office is that we now took up a whole bus. That's the first time I thought &quot;wow, this is really happening,
    we're this big now&quot;. Altabox is located in an impressive museum at &quot;Laboral Centro de Arte y de Creación Industrial&quot;
    and getting to the office is pretty much like going through a labyrinth. The upside is that you get a tour of the
    museum and get to look a newer cool stuff every time the exhibition changes. When we got to the offices we joked
    about the cable mess and how it felt like we were already home. The office was a nice open concept but what stuck
    with me was this huge black chalkboard spanning an entire wall. Oh, how badly I wish to have something like that in
    Barcelona...&lt;/p&gt;



&lt;p&gt;No corporate retreat would be done without at least one team building exercise so that's where we were taken next.
    When we stepped out of the bus into a TV studio I was baffled. Turns out the exercise was to make a movie/TV
    segment. This was an actual TV set so it was fun to play with the cameras, the boom mic and getting to sit in the
    interview sofa. We split up in two groups and had a blast acting up roles and recording the whole thing. We had a
    tour of the sound control and editing rooms where they explained a bit how the modern TV world worked. It was really
    interesting. The whole exercise was was really fun and I feel that we got along pretty well.&lt;/p&gt;

&lt;p&gt;The day ended after having dinner together and partying until late. Our hosts where really nice, took us to a few
    different spots and we had a lot of fun together. Flying back to Barcelona the next day I was pretty happy about the
    future of the company.&lt;/p&gt;

&lt;img class=&quot;img-polaroid&quot; src=&quot;http://blog.orestes.io/media/2014/11/30/altabox-focusonemotions.jpg&quot; alt=&quot;&quot;/&gt;

&lt;p&gt;
    We're now ~35 people, we manage
    thousands of displays across tens of countries and we're only getting bigger. This is the start of a new chapter.
    It's our
    job to start building up this new company. The Software Development team just doubled its numbers but we
    still have to overcome the difficulties of remote collaboration. There's a ton of work ahead, a long list of
    challenging projects and deadlines but now there's more of us, and we're ready :)
&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links&lt;/strong&gt;:
&lt;ul&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot;
           href=&quot;https://www.flickr.com/photos/torek/15264227496/in/photolist-pfRa39-7TKr9h-HrtDH-inWRPW-5kuKZ4-cdTiqE-5cdtvi-inWZdw-iyXVWn-ea12mj-aw8RoL-e1jiho-dKENXd-6XFaKC-j27tx9-8tV8Vs-cVezQC-6e5r3A-ibfyDi-7gXHWz-8SpVMR-34qbfS-nifc3n-5VsrUv-5hsde8-rhJc6-hWLXbV-8TRRDN-cdTivS-8eSLJR-9LyinQ-inWQWo-hyU89m-afz7cC-idpkmf-jWGns-8KGyAT-5vJBua-nwcFZ7-huviDC-hP94bC-4BwDTh-pc8oTx-6okMkj-4Qguzx-G9dqW-cyQVa-7xhnjX-hjBE9c-hyGEAk/&quot;&gt;
        &amp;quot;Shibuya from Hikarie&amp;quot; by Héctor García on Flickr&lt;/a&gt;.
    &lt;/li&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot;
           href=&quot;https://www.flickr.com/photos/javigutierrez/3220157727/in/photolist-oj38Az-o3YogS-oELR7x-6S7cwS-cpfoc5-bsoJQA-o3a2R7-o39zqm-dWuWy8-6H8nQw-5ZmE6P-px9Gfm-6BiHpw-o3YDuX-6y1SbN-5Uy9GP-k93AN-hjfpAt-6DLMQF-omq3t6-7s6Abe-o3a83E-ocHnLL-dkvmgE-ad1aem-9ETLDZ-bvAVqW-nDPmxa-oHq4bD-pdYb4-CY3vu-afJkXD-oiJ5aM-dnmkmB-3V4U7q-ah6TGT-ah9GLy-j3ecJy-7jezJs-o3XKsc-gKEPui-cFAJPA-kVnuvZ-4YwpJp-7aS7KQ-8z2xFX-6AxZiG-eWCo9T-b56qg4-5tAQ3A&quot;&gt;
        &amp;quot;Times Square2&amp;quot; by Javier Gutierrez Acedo on Flickr&lt;/a&gt;.
    &lt;/li&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.focusonemotions.com&quot;&gt;Focus On Emotions&lt;/a&gt;.&lt;/li&gt;
    &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.altabox.net&quot;&gt;Altabox&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Controlling a USB-RLY02 relay module over USB using C#, JavaScript and ActiveX</title>
    <link href="http://blog.orestes.io/archive/2013/07/21/javascript-activex-led"/>
    <updated>2013-07-21T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2013/07/21/javascript-activex-led</id>
    <content type="html">
&lt;p&gt;It was 2010 when we got some projects at &lt;strong&gt;&lt;a href=&quot;http://focusonemotions.com&quot; target=&quot;_blank&quot;&gt;Focus On
Emotions&lt;/a&gt;&lt;/strong&gt; from &lt;strong&gt;Ikea&lt;/strong&gt;. Among the challenging stuff we did for them
there was a project for automating the process of the users registering for a credit card.
The final product was a digital user stall/kiosk with an interactive touch screen a physical keyboard and mouse. This project needed
a couple of tricky features: &lt;strong&gt;ID verification&lt;/strong&gt; and &lt;strong&gt;bank authorization&lt;/strong&gt;.
&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-polaroid&quot; src=&quot;http://blog.orestes.io/media/2013/07/21/16_ikea.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;This was not our first rodeo and we had another public
&lt;a target=&quot;_blank&quot; href=&quot;http://w110.bcn.cat/portal/site/Ajuntament/menuitem.38c1cee3a16e78f040f740f7a2ef8a0c/?vgnextoid=0023204c1a071310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=0023204c1a071310VgnVCM10000074fea8c0RCRD&amp;lang=ca_ES&quot;&gt;kiosk/stall project for &lt;strong&gt;the city hall, Ajuntament de Barcelona&lt;/strong&gt;&lt;/a&gt; which allow citizens to do paperwork. They were challenging because we had to integrate lots
of different providers, but we didn't manage any banking data so this was new to us. These projects had been running
smoothly for years and we've got some recognition from them.
&lt;img class=&quot;img-polaroid use-left inside-text&quot; src=&quot;http://blog.orestes.io/media/2013/07/21/quioscmp.jpg&quot; width=&quot;23%&quot;/&gt;
&lt;/p&gt;

&lt;p&gt;A couple of weeks after the project's launch we had gotten many reports of users being disoriented when following
the process. One of the steps required the users to physically place their ID form on a small flatbed scanner
for validation. Even though the physical space was an obvious empty box the users didn't realise that was where
they were supposed to place their ID.&lt;/p&gt;

&lt;p&gt;The client asked us to modify the kiosk structure, add a LED stripe around the empty box and have it blink when the
users got to the ID validation step. We had to give it a little thought before coming up with a solution because we
had a tricky problem: &lt;strong&gt;hardware access was impossible&lt;/strong&gt;. The whole application was written
in Java, HTML and JavaScript,and it ran as a served web app inside a secured environment using
&lt;a target=&quot;_blank&quot; href=&quot;http://www.sitekiosk.com/&quot;&gt;SiteKiosk&lt;/a&gt;. This was
great for pushing software changes to the multiple kiosks installed for the project as well as for interacting with
the bank's backoffice services in a secured environment (server-side). The manufacturer for the ID scanner had
provided the dev team with an API that used ActiveX and JavaScript to control their hardware, so we followed that
idea: we had to develop our own ActiveX control to activate the LED stripe whenever we needed to.&lt;/p&gt;

&lt;p&gt;We bought a simple relay board with an USB interface and started working on it. This relay board was great
because it had two different relays that you could control independently. Each relay had a tiny onboard LED indicating
its state. You can find it on &lt;strong&gt;RobotShop&lt;/strong&gt;,
&lt;a target=&quot;_blank&quot; href=&quot;http://www.robotshop.com/productinfo.aspx?pc=RB-Dev-35&quot;&gt;here&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-polaroid use-right&quot; src=&quot;http://www.robotshop.com/content/images/devantech-2-channel-usb-relay-large.jpg&quot; width=&quot;23%&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;
I got a hold of the &lt;a target=&quot;_blank&quot; href=&quot;http://www.robotshop.com/content/PDF/usb-rly02-2-relay-outputs-at-16a-usb-rly02.pdf&quot;&gt;controller's specification&lt;/a&gt; [&lt;a href=&quot;http://blog.orestes.io/media/2013/07/21/usb-rly02-2-relay-outputs-at-16a-usb-rly02.pdf&quot;&gt;mirror&lt;/a&gt;] and wrote a simple
program to control it over USB by sending the byte-encoded messages for each action (open/close relay 1/2). It consisted
of a minimal Windows Forms interface with a few buttons to open/close the USB port and switching on/off the relays.
When I was sure I could make it work, I wrote a small function library and compiled it as an ActiveX:&lt;br/&gt;
&lt;code&gt;csc /t:library USBLEDControllerLib.cs&lt;/code&gt;&lt;/br&gt;
To make it available for Internet Explorer, the DLL had to be registered:&lt;br/&gt;
&lt;code&gt;regasm /tlb /codebase USBLEDControllerLib.dll&lt;/code&gt;&lt;/br&gt;
Both &lt;code&gt;regasm&lt;/code&gt; and &lt;code&gt;csc&lt;/code&gt; are provided by .NET Framework 2. in my case, It was already installed on
&lt;code&gt;%WINDIR%\Microsoft.NET\Framework&lt;/code&gt;
&lt;/p&gt;

&lt;p&gt;To invoke the ActiveX control we use the full classname, including namespace.&lt;/p&gt;
&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-javascript&quot; data-lang=&quot;javascript&quot;&gt;&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;controller&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;ActiveXObject&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;FOE.USBLEDControllerLib&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;kd&quot;&gt;var&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;controller&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;getFirmwareVersion&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;();&lt;/span&gt;
&lt;span class=&quot;nx&quot;&gt;console&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nx&quot;&gt;log&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;'Running FOE USB LED Controller version '&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;nx&quot;&gt;version&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The simple ActiveX control would trigger a security warning on IE. We suppressed this warning by implementing
a few visible COM methods flagged as &lt;code&gt;[Serializable, ComVisible(true)]&lt;/code&gt; which come from the
&lt;code&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/aa751977(v=vs.85).aspx&quot;&gt;IObjectSafety&lt;/a&gt;&lt;/code&gt;
interface. This told IE it could trust our library.&lt;/p&gt;

&lt;p&gt;The controller for the board had a limited set of functions so we had to extend them for our project. I added
a couple of threaded functions to start/stop blinking the LEDs synchronously, stopping/starting only one of them
and have the other synchronize on start, etc... Even though we had very little time and a lot of pressure I think
it was a fun project. You can see the PoC in the video below. You click a button on a webpage and a LED lights up.
Neat! I love the clicking sound from the relays, so mechanical :D&lt;/p&gt;

&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/4uKpX1BUNq4&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links&lt;/strong&gt;:
    &lt;ul&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://w110.bcn.cat/portal/site/Ajuntament/menuitem.38c1cee3a16e78f040f740f7a2ef8a0c/?vgnextoid=0023204c1a071310VgnVCM10000074fea8c0RCRD&amp;vgnextchannel=0023204c1a071310VgnVCM10000074fea8c0RCRD&amp;lang=en_GB&quot;&gt;Procedures and services stalls&lt;/a&gt; at &lt;strong&gt;BCN.cat&lt;/strong&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://msdn.microsoft.com/en-us/library/aa751977(v=vs.85).aspx&quot;&gt;Safe Initialization and Scripting for ActiveX Controls&lt;/a&gt; on &lt;strong&gt;MSDN&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://focusonemotions.com/web/en/projects.html/sector_publico_sectores&quot;&gt;Public Sector clients&lt;/a&gt; at &lt;strong&gt;Focus On Emotions&lt;/strong&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.robotshop.com/productinfo.aspx?pc=RB-Dev-35&quot;&gt;Devantech 2 Channel USB Relay&lt;/a&gt; at &lt;strong&gt;RobotShop&lt;/strong&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.robotshop.com/content/PDF/usb-rly02-2-relay-outputs-at-16a-usb-rly02.pdf&quot;&gt;USB-RLY02 module specification&lt;/a&gt; at &lt;strong&gt;RobotShop&lt;/strong&gt;. [&lt;a href=&quot;http://blog.orestes.io/media/2013/07/21/usb-rly02-2-relay-outputs-at-16a-usb-rly02.pdf&quot;&gt;mirror&lt;/a&gt;]&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Migrating from Wordpress to Jekyll on GitHub Pages</title>
    <link href="http://blog.orestes.io/archive/2013/06/09/migrating-from-wordpress-jekyll-github-pages"/>
    <updated>2013-06-09T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2013/06/09/migrating-from-wordpress-jekyll-github-pages</id>
    <content type="html">&lt;p&gt;Besides my writing skills, my problem with blogging was the software I was using, &lt;strong&gt;Wordpress&lt;/strong&gt;. I found it slow, heavy and often insecure. I didn’t want my server exploding whenever I got a traffic spike, I didn’t want upgrading my WP modules and being worried about security issues. It was kind of hard to get it to look the way I wanted it. I wrote a custom theme but I wasn’t really satisfied with it, so I bought a one which looked cool, but I still wasn’t happy with my blog because it wasn’t “mine”.&lt;/p&gt;

&lt;p&gt;I wanted a static blog website that I could code and style the way I wanted, without restrictions. I wouldn’t have to worry about security since it would be static and would have no user input, search or comment features. I didn’t want to give up comments so I checked &lt;strong&gt;Disqus&lt;/strong&gt;, whichs a really good commenting platform that you can embed anywhere without having to worry about security or performance issues. Disqus is a seamless iframe whith a lot of clever programming inside. &lt;strong&gt;Ben Vinegar&lt;/strong&gt;, gave a great talk about it in 2012: &lt;a href=&quot;http://www.youtube.com/watch?v=gQCm8VYn93Y&quot;&gt;Seamless iframes: The future, today!&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Regarding the traffic spikes and server resources, I decided I’d move the blog out of my lab hosting (which is a tiny virtual machine) into somewhere that could serve static sites and I only had to worry about bandwith costs,&lt;/p&gt;

&lt;p&gt;I started researching about scaffolding tools and generators for static websites. I had used stuff like &lt;strong&gt;yeoman&lt;/strong&gt; that worked reat for getting something started quickly, but it was more aimed at apps than static websites and I’d still have to do a lot of the work.&lt;/p&gt;

&lt;p&gt;Then I found about &lt;strong&gt;GitHub Pages&lt;/strong&gt; and &lt;strong&gt;Jekyll&lt;/strong&gt;, and they turned out to be the perfect solution for me. &lt;strong&gt;Jekyll&lt;/strong&gt; is a blog-aware static website generator written in Ruby by &lt;a href=&quot;http://tom.preston-werner.com/&quot;&gt;&lt;strong&gt;Tom Preston-Werner&lt;/strong&gt;&lt;/a&gt;. It’s easy to get started with and powerful enough to let you add your own plugins and teach it new tricks. &lt;strong&gt;GitHub Pages&lt;/strong&gt; allows you to serve static content from your GitHub repositories without any setup&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The pros Jekyll on GitHub Pages&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It’s already blog-aware, so it has a notion of posts, categories, tags and a timeline.&lt;/li&gt;

&lt;li&gt;I can version my posts and contents using a CVS I love (git)&lt;/li&gt;

&lt;li&gt;I can &lt;em&gt;easily&lt;/em&gt; share the source code for my blog&lt;/li&gt;

&lt;li&gt;I don’t have to worry about hosting&lt;/li&gt;

&lt;li&gt;I can still use any domain name I own&lt;/li&gt;

&lt;li&gt;It provides higher geek factor than having a WP blog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub crashes every once in a while and maybe GH Pages comes down with it&lt;/li&gt;
&lt;/ul&gt;

&lt;h5 id=&quot;working_with_github_pages&quot;&gt;Working with GitHub Pages&lt;/h5&gt;

&lt;p&gt;GitHub Pages are divided into user pages and project pages. The only thing you have to do is create a &lt;code&gt;gh-pages&lt;/code&gt; branch on your repository. Whatever you push to the branch will be served on your project page at &lt;code&gt;http://username.github.com/repository-name&lt;/code&gt;. If you push a Jekyll site, GitHub Pages will actually build the site for you and serve that instead of the Jekyll source.&lt;/p&gt;

&lt;h5 id=&quot;working_with_jekyll&quot;&gt;Working with Jekyll&lt;/h5&gt;

&lt;p&gt;You create a new site running &lt;code&gt;jekyll new PATH&lt;/code&gt; which creates a bare minimum site config and layouts.&lt;/p&gt;

&lt;p&gt;To create the extra tag and category index, as well as the archived month pages, I had to extend the same classes: &lt;code&gt;Jekyll::Page&lt;/code&gt; and &lt;code&gt;Jekyll:Generator&lt;/code&gt;. The method is pretty straightforward:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a class that inherits from &lt;code&gt;Jekyll:Page&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;In the page class, implement the &lt;code&gt;initialise&lt;/code&gt; method&lt;/li&gt;

&lt;li&gt;In the &lt;code&gt;initialise&lt;/code&gt; method, call &lt;code&gt;self.process(@name)&lt;/code&gt; and &lt;code&gt;self.read_yaml&lt;/code&gt; to get the contents of the layout&lt;/li&gt;

&lt;li&gt;Add to the &lt;code&gt;site.data&lt;/code&gt; Hash any data you want to expose to the page&lt;/li&gt;

&lt;li&gt;Create a class that inherits from &lt;code&gt;Jekyll:Generator&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;Implement the &lt;code&gt;generate(site)&lt;/code&gt; method which adds instances of the custom page to the &lt;code&gt;site.pages&lt;/code&gt; Array&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I generated the monthly archive by iterating over the &lt;code&gt;site.posts&lt;/code&gt; Array and analysing the dates. To generate the sidebar menu that displays the year/month list I needed to have an index to iterate over, so I coded my plugin &lt;code&gt;archive_helper&lt;/code&gt;. What I did was:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Inherit from &lt;code&gt;Jekyll::Site&lt;/code&gt;,&lt;/li&gt;

&lt;li&gt;Made an alias of the original &lt;code&gt;site_payload&lt;/code&gt;&lt;/li&gt;

&lt;li&gt;In my &lt;code&gt;site_payload&lt;/code&gt; method, called the original &lt;code&gt;site_payload&lt;/code&gt; and get the returned data.&lt;/li&gt;

&lt;li&gt;Added to &lt;code&gt;site.data&lt;/code&gt; Hash the indexes created from the posts’ dates.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The plugins to generate the tag and a category pages were already provided in the &lt;a href=&quot;http://jekyllrb.com/docs/plugins/&quot;&gt;Jekyll plugin docs&lt;/a&gt; so I didn’t need to do any extra work.&lt;/p&gt;

&lt;p&gt;You can get the source code for my plugins and all of this blog &lt;a href=&quot;https://github.com/orestes/blog.orestes.io&quot;&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h5 id=&quot;deploying_the_site&quot;&gt;Deploying the site&lt;/h5&gt;

&lt;p&gt;The problem I had with my plugins is that GitHub pages builds the Jekyll sites using the &lt;code&gt;--safe&lt;/code&gt; switch, which disables them. The alternative is to push your source code to the &lt;code&gt;master&lt;/code&gt; branch and your generated site files to the &lt;code&gt;gh-pages&lt;/code&gt; branch. I didn’t want to do it manually every time I updated the source, so I wrote a little &lt;code&gt;post-commit&lt;/code&gt; hook that generates the site, wipes the &lt;code&gt;gh-pages&lt;/code&gt; branch and pushes the freshly generated site to the &lt;code&gt;gh-pages&lt;/code&gt; branch.&lt;/p&gt;

&lt;h5 id=&quot;using_a_custom_domain_name&quot;&gt;Using a custom domain name&lt;/h5&gt;

&lt;p&gt;Everything gets served from &lt;code&gt;http://username.github.com/repository-name&lt;/code&gt;. Having a good grasp of the HTTP
protocol is crucial for a web developer, and I think we should also know at least a little about the DNS protocol. I
wanted to host my blog under &lt;code&gt;blog.orestes.io&lt;/code&gt;, so I got to my DNS panel on my domain registrar and added
a new &lt;code&gt;CNAME&lt;/code&gt; DNS entry for &lt;code&gt;orestes.io&lt;/code&gt; with the name was &lt;code&gt;blog&lt;/code&gt; and the value
&lt;code&gt;orestes.github.com&lt;/code&gt;. A &lt;strong&gt;CNAME&lt;/strong&gt; is a &lt;strong&gt;Canonical Name&lt;/strong&gt; entry, which tells
DNS clients asking where &lt;code&gt;blog.orestes.io&lt;/code&gt; is, to ask instead for &lt;code&gt;orestes.github.io&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Let’s check what’s going on with my domain name using nslookup.&lt;/p&gt;

&lt;pre&gt;&lt;code&gt;$ nslookup blog.orestes.io
Server:		8.8.8.8
Address:	8.8.8.8#53

Non-authoritative answer:
blog.orestes.io	canonical name = orestes.github.io.
orestes.github.io	canonical name = github.map.fastly.net.
Name:	github.map.fastly.net
Address: 103.245.223.196&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;On the output above you can see how everything is being redirected to github.map.fastly.net&lt;/p&gt;

&lt;p&gt;When you finally get to the HTTP server behind &lt;code&gt;github.map.fastly.net&lt;/code&gt;, it checks the HTTP 1.1 “Host” header, which is sent by the browser and will contain the value &lt;code&gt;blog.orestes.io&lt;/code&gt;. Then the GH Pages takes a look under the user’s projects and their /CNAME files to check if any of this projects is assigned to this domain. If there is, you get the static site, if there isn’t, a 404 error.&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links:&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a href=&quot;https://github.com/orestes/blog.orestes.io&quot;&gt;Source code&lt;/a&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://jekyllrb.com/&quot;&gt;Jekyll docs&lt;/a&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;https://help.github.com/categories/20/articles&quot;&gt;GitHub Pages help&lt;/a&gt;.&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;http://tom.preston-werner.com/2008/11/17/blogging-like-a-hacker.html&quot;&gt;“Blogging like a Hacker”&lt;/a&gt; by Tom Preston-Werner.&lt;/li&gt;
&lt;/ul&gt;</content>
  </entry>
  
  <entry>
    <title>Breaking the 1000ms Time to Glass Mobile Barrier</title>
    <link href="http://blog.orestes.io/archive/2013/04/10/breaking-the-1000ms-time-to-glass-mobile-barrier"/>
    <updated>2013-04-10T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2013/04/10/breaking-the-1000ms-time-to-glass-mobile-barrier</id>
    <content type="html">&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/Il4swGfTOSM?feature=oembed&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;A great talk by &lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.igvita.com/&quot;&gt;Ilya Grigorik&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links:&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;
            &lt;a href=&quot;http://www.appliness.com/ilya-grigorik/&quot; target=&quot;_blank&quot;&gt;Interview with Ilya Grigorik&lt;/a&gt; on &lt;strong&gt;Applines&lt;/strong&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=Il4swGfTOSM&quot;&gt;Breaking the 1000ms Time to Glass Mobile Barrier&lt;/a&gt; on &lt;strong&gt;YouTube&lt;/strong&gt;.&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>What is "Niantic Project"?</title>
    <link href="http://blog.orestes.io/archive/2012/12/10/what-is-niantic-project"/>
    <updated>2012-12-10T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/12/10/what-is-niantic-project</id>
    <content type="html">

&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/Ss-Z-QjFUio&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p class=&quot;update&quot;&gt;This was posted about a month after the launch of &lt;a href=&quot;http://ingress.com&quot; target=&quot;_blank&quot;&gt;Ingress&lt;/a&gt;, an
Augmented Reality game by Google. In the beginning you could only be invited by someone working on the game, so
we had to post ingress stories, artwork, articles, whatever we could to get attention from them and receive an
invitation to play. Today is much easier to get invited,
you can just go to &lt;a href=&quot;http://ingress.com&quot; target=&quot;_blank&quot;&gt;ingress.com&lt;/a&gt; and request an invitation.
It's really fun!&lt;/p&gt;

&lt;p&gt;Ok, I have to tell you about this. I was looking for information about &quot;Ingress&quot; which is some kind of game a few
people are playing but nobody seems to know how to get access to. I was browsing around and found out about something
called &quot;Niantic Project&quot;. Apparently there's something big going on and only a handful of people and aware of it,
the ones playing Ingress. &lt;/p&gt;
&lt;p&gt;I found a few cool pictures while googling around and I wanted to save some for later, but I accidentally saved this
one as a .html file and that's when things got weird.&lt;/p&gt;

&lt;p&gt;&lt;img class=&quot;img-polaroid&quot; src=&quot;http://blog.orestes.io/media/2012/12/10/niantic-930x454.jpg&quot; alt=&quot;&quot;/&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try and do it yourself.&lt;/strong&gt; Save this image to your local disk, and rename it to from &lt;code&gt;.jpg&lt;/code&gt;
to &lt;code&gt;.html&lt;/code&gt;. When you open it in your browser, it will look almost the same, but you'll notice that your
browser's background is now black, and the image has a weird green border around it, something it didn't have before.
If you move your mouse over the image, you're going to find a mysterious text that leads to a strange website. I don't
know who exactly created that webpage, but there's a ton of info on there.&lt;/p&gt;

&lt;p&gt;Why whould somedy hide something inside an image?&lt;br/&gt;
What are they hiding from us?&lt;br/&gt;
What is &quot;Niantic Project&quot;?&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links:&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.nianticproject.com/&quot;&gt;Niantic Project&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://ingress.com&quot;&gt;Ingress&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>GOTO Aarhus 2012 playlist</title>
    <link href="http://blog.orestes.io/archive/2012/12/06/goto-conference-playlist"/>
    <updated>2012-12-06T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/12/06/goto-conference-playlist</id>
    <content type="html">&lt;p class=&quot;update&quot;&gt;&lt;strong&gt;Update july 2013: &lt;/strong&gt;Jez's talk has been deleted :(&lt;/p&gt;
&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot;height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/2jt-up0a4JY?fs=1&amp;feature=embed&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;The playlist rom the recent GOTO Aarhus 2012 has been published on YouTube.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://continuousdelivery.com/&quot;&gt;Jez Humble&lt;/a&gt;&lt;/strong&gt;'s &quot;Implementing Continuous Delivery&quot; where he talks about the organisational problems, mistakes
and misconceptions that come up when trying to implement &lt;strong&gt;Continuous Delivery&lt;/strong&gt; has been one of my favourites.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href=&quot;http://www.youtube.com/playlist?list=PLEx5khR4g7PJmH05qNUmmo8WzSSaJIzLj&quot; target=&quot;_blank&quot;&gt;GOTO Aarhus 2012 playlist&lt;/a&gt; on &lt;strong&gt;YouTube&lt;/strong&gt; (79 videos, 53 hours)
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>HTML5DevConf 2012 playlist</title>
    <link href="http://blog.orestes.io/archive/2012/11/21/html5devconf-2012-playlist"/>
    <updated>2012-11-21T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/11/21/html5devconf-2012-playlist</id>
    <content type="html">&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/gQCm8VYn93Y&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;http://benv.ca/&quot; target=&quot;_blank&quot;&gt;Ben Vinegar&lt;/a&gt;&lt;/strong&gt;'s talk &lt;em&gt;Seamless iFrames: The Future, Today!&lt;/em&gt; was very interesting.&lt;/p&gt;
&lt;p class=&quot;update&quot;&gt;This was a WordPress blog until I switched to &lt;strong&gt;Jekyll &lt;/strong&gt; and started using &lt;strong&gt;Disqus&lt;/strong&gt; for the comments and I must say I love it.&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href=&quot;http://www.youtube.com/playlist?list=PLAIXSzgkhDs7gu24tYyS432v4AGZwPc8I&quot; target=&quot;_blank&quot;&gt;HTML5DevConf 2012 playlist&lt;/a&gt; on &lt;strong&gt;YouTube&lt;/strong&gt; (60 videos, 30 hours).&lt;br/&gt;
&lt;strong&gt;Via&lt;/strong&gt;: &lt;a href=&quot;http://html5weekly.com/&quot; target=&quot;_blank&quot;&gt;HTML5 Weekly&lt;/a&gt;
&lt;/p&gt;
</content>
  </entry>
  
  <entry>
    <title>Why programmers work at night: the book</title>
    <link href="http://blog.orestes.io/archive/2012/11/17/why-programmers-work-at-night-the-book"/>
    <updated>2012-11-17T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/11/17/why-programmers-work-at-night-the-book</id>
    <content type="html">&lt;p&gt; Programmer &lt;a target=&quot;_blank&quot; href=&quot;http://swizec.com/&quot;&gt;&lt;strong&gt;Swizec Teller&lt;/strong&gt;&lt;/a&gt;  and author of the (now)
famous blog post &lt;a href=&quot;http://swizec.com/blog/why-programmers-work-at-night/swizec/3198&quot; target=&quot;_blank&quot;&gt;&quot;Why programmers work
at night&quot;&lt;/a&gt; has started a project on Leanpub to publish &lt;a target=&quot;_blank&quot; href=&quot;https://leanpub.com/nightowls/&quot;&gt;a book about
programmers&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;[...] In December 2011 I wrote down a bunch of assumptions about Why programmers work at night (&lt;a
target=&quot;_blank&quot; href=&quot;http://swizec.com/blog/why-programmers-work-at-night/swizec/3198&quot;&gt;link&lt;/a&gt;) in a blogpost. I
wrote it because I got tired of being called a lazy slob for waking up at 11am every day.

After 4000 tweets, 10000 likes and many emails I didn't feel alone anymore.

The most surprising feedback were emails along the lines of &quot;Oh man! I finally understand my husband, thanks so much
for writing this!&quot;. And it is because of those that I have finally decided to write a short ebook.

In the book I'm going to:
&lt;ul&gt;
	&lt;li&gt;Show fellow night-time programmers (and others!) that they are not alone&lt;/li&gt;
	&lt;li&gt;Give practical tips on living with your friendly neighborhood programmer&lt;/li&gt;
	&lt;li&gt;Support my original hypotheses by interviewing cool programmers&lt;/li&gt;
	&lt;li&gt;Explore the modern trend of super early wakeruppers who approach the night time from the other end&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;p&gt;So if you're a programmer that feels missunderstood on your late nights of happy coding, maybe this book will be an
ideal gift for your roomies, girlfriend, boyfriend, parents or even for your boss.&lt;/p&gt;

&lt;strong&gt;Link&lt;/strong&gt;: &lt;a target=&quot;_blank&quot; href=&quot;https://leanpub.com/nightowls&quot;&gt;Why programmers work at night: the book&lt;/a&gt;
</content>
  </entry>
  
  <entry>
    <title>Petr Mitrichev</title>
    <link href="http://blog.orestes.io/archive/2012/11/16/petr-mitrichev"/>
    <updated>2012-11-16T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/11/16/petr-mitrichev</id>
    <content type="html">&lt;p&gt;I first learned about &lt;strong&gt;Petr Mitrichev&lt;/strong&gt; the past year when he won 2011's Facebook Hacker Cup. He's a Google developer
leading the current competitive programming challenges. He also keeps an interesting blog at
&lt;a  target=&quot;_blank&quot; href=&quot;http://petr-mitrichev.blogspot.com&quot;&gt;petr-mitrichev.blogspot.com&lt;/a&gt; where he talks
about algorithms and sometimes challenges his readers with some problems.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.technologyreview.com&quot; target=&quot;_blank&quot;&gt;MIT's Technology Review&lt;/a&gt; has a nice introductory
&lt;a href=&quot;http://www.technologyreview.com/news/428610/in-the-olympics-of-algorithms-a-russian-keeps-winning-gold/&quot;&gt;article&lt;/a&gt;
about him.&lt;/p&gt;

&lt;p&gt;I also found some interesting reading material if you're into competitive programming.
&lt;a href=&quot;http://codeforces.com/blog/entry/70&quot;&gt;Codeforces&lt;/a&gt; has a great post about Sao Paulo Training Camp 2010
containing his solutions to problems and some video explanations.
&lt;/p&gt;

&lt;p class=&quot;update&quot;&gt;&lt;strong&gt;Update March 2013&lt;/strong&gt;: He came up on top at 2013's Facebook Hacker Cup as well. This is guy is amazing :)&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links&lt;/strong&gt;:
    &lt;ul&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.technologyreview.com/news/428610/in-the-olympics-of-algorithms-a-russian-keeps-winning-gold/&quot;&gt;MIT's Technology review article about Petr Mitrichev&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://petr-mitrichev.blogspot.com&quot;&gt;Petr Mitrichev's blog&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;https://www.facebook.com/hackercup&quot;&gt;Facebook Hacker Cup&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://codeforces.com/blog/entry/70/&quot;&gt;Petr Mitrichev, Last 3 days in Sao Paulo Training Camp 2010&lt;/a&gt; at &lt;strong&gt;Codeforces&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>NFC Bootcamp Barcelona 2012</title>
    <link href="http://blog.orestes.io/archive/2012/11/14/nfc-bootcamp-barcelona"/>
    <updated>2012-11-14T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/11/14/nfc-bootcamp-barcelona</id>
    <content type="html">

&lt;p style=&quot;text-align: center&quot;&gt;
    &lt;img src=&quot;http://blog.orestes.io/media/2012/11/14/smart-city-expo.png&quot; alt=&quot;Barcelona Smart City Expo World Congress 2012&quot; title=&quot;Barcelona Smart City Expo World Congress 2012&quot; width=&quot;295&quot; /&gt;
    &lt;img src=&quot;http://blog.orestes.io/media/2012/11/14/nfc-bootcamp.png&quot; alt=&quot;NFC Bootcamp&quot; title=&quot;NFC Bootcamp&quot; width=&quot;300&quot; /&gt;
&lt;/p&gt;

&lt;p&gt;The &lt;a href=&quot;https://www.nfcbootcamp.com/event-registration/?ee=22&quot;&gt;NFC Bootcamp Barcelona 2012&lt;/a&gt; was held as
part of the &lt;a href=&quot;http://www.smartcityexpo.com/&quot; title=&quot; Smart City Expo World Congress 2012&quot; target=&quot;_blank&quot;&gt;Smart
City Expo World Congress 2012&lt;/a&gt; at the &lt;a href=&quot;http://www.firabcn.es/en/venues_granvia&quot; title=&quot;Fira Gran Via Convention Center&quot; target=&quot;_blank&quot;&gt;Fira
Gran Via Convention Center&lt;/a&gt; in &lt;strong&gt;Barcelona&lt;/strong&gt;.
We had some problems when trying to get our accreditations
at the entrance but with a little help from the organisation we managed to finally get inside.&lt;/p&gt;

&lt;p&gt;We met &lt;strong&gt;Robert Sabella&lt;/strong&gt; from
&lt;a href=&quot;http://www.otatraining.com/&quot; title=&quot;OTA Training&quot; target=&quot;_blank&quot;&gt;OTA Training&lt;/a&gt; and we chatted for a bit
while we waited for others to arrive. Rob started the day by introducing NFC and the
work the &lt;a href=&quot;http://www.nfcbootcamp.com/&quot; title=&quot;NFC Bootcamp&quot; target=&quot;_blank&quot;&gt;NFC Bootcamp&lt;/a&gt; has being doing
for the past year.&lt;/p&gt;

&lt;p&gt;Bastien Latge from &lt;a href=&quot;http://www.insidesecure.com/&quot; title=&quot;INSIDE Secure&quot; target=&quot;_blank&quot;&gt;INSIDE Secure&lt;/a&gt;
followed up with a more in depth talk about the key players in an NFC Ecosystem and underlined some of the most
common problems and situations companies deploying NFC solutions encounter the most. He talked about the NFC parts,
specially the &lt;strong&gt;Secure Element&lt;/strong&gt; and the different implementations and security measures implemented in
them. He also talked briefly about the hardware which provides NFC capabilities for mobile phones without
built-in NFC tech.&lt;/p&gt;

&lt;p&gt;
&lt;img src=&quot;http://blog.orestes.io/media/2012/11/14/typo.jpg&quot; class=&quot;img-polaroid use-left&quot; alt=&quot;The accreditation&quot; title=&quot;The accreditation&quot; /&gt;
Just before lunch, we met Stéphane Doutriaux from
&lt;a href=&quot;http://www.poken.com/&quot; title=&quot;Poken&quot; target=&quot;_blank&quot;&gt;Poken&lt;/a&gt;. He made a brief introduction about
&lt;strong&gt;Poken&lt;/strong&gt; with a video. Afterwards we all got our own pokens and did a little tour of the reception
area and the schedule wall poster, poking along the way and getting comfortable with the devices.&lt;/p&gt;

&lt;p&gt;After lunch, &lt;strong&gt;Gloria Lozano &lt;/strong&gt; from &lt;a href=&quot;http://ta.bcntouch.com/&quot; title=&quot;BCN Touch&quot; target=&quot;_blank&quot;&gt;BCN Touch&lt;/a&gt;
gave her talk, focusing on use cases and their projects from the last past years.&lt;/p&gt;

&lt;p&gt;Then Stéphane came back to talk a bit more about the marketing and user experience side of NFC and how he thinks
we should put the most of our efforts in providing some value rather than some technology, and use NFC as a means
and not as a goal.&lt;/p&gt;

&lt;p&gt;At the beginning of day 2, we got a USB NFC reader and different cards with different NFC chips in them and Bastien
finished his talk about the players in the NFC environment.

&lt;p&gt;Then we met &lt;strong&gt;Fernando Cejas&lt;/strong&gt;, a mobile developer based in Barcelona, working for
&lt;a href=&quot;http://flomio.com/&quot;&gt;Flomio&lt;/a&gt;. He's also de organiser of the &lt;strong&gt;Google Developers Group Barcelona&lt;/strong&gt;.
His talk was going to be more focused on de technical/developer side of NFC but due to the majority of the assistants
being not so technical that part was skipped. Bummer.&lt;/p&gt;

&lt;p&gt;
    &lt;img src=&quot;http://blog.orestes.io/media/2012/11/14/evil-robot.jpg&quot; alt=&quot;&quot; title=&quot;The Fernando-bot&quot; class=&quot;img-polaroid use-left&quot;/&gt;
    Before lunch, we went for a walk around the Smart City Expo and Fernando was captured by an evil robot.
    After we rescued him, Fernando gave a more technical explanation of the NFC components, the different NDEF
    well known formats and the read/writing permissions.
    He also talked about the idea of &quot;cloud tags&quot;, &lt;strong&gt;flomio&lt;/strong&gt;, the
    &lt;a href=&quot;http://www.kickstarter.com/projects/flomio/flojack-nfc-for-ipad-and-iphone&quot;&gt;FloJack&lt;/a&gt; to provide NFC for
    iphone/ipad devices and other solution prototypes they had researched using other tech such as the
    &lt;a href=&quot;http://www.raspberrypi.org/&quot;&gt;Raspberry Pi&lt;/a&gt; and the &lt;a href=&quot;http://en.wikipedia.org/wiki/GuruPlug&quot;&gt;GuruPlug&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
    Then Stéphane came back and we participated in a workshop with Poken and their partner tools. We created a campaign
    and linked a Poken Tag using the NFC Reader/Writer. We also learned a bit more about the technology used in Poken.
    The Poken tags use the same technology as the regular Pokens.
    &lt;img src=&quot;http://blog.orestes.io/media/2012/11/14/poken-tag.jpg&quot; alt=&quot;Poken Tag&quot; title=&quot;Poken Tag&quot; class=&quot;img-polaroid use-right&quot;/&gt;
    They use a &lt;strong&gt;Swatch&lt;/strong&gt; licensed
    chip with added NFC capabilities and a full USB stack,powered by a 9 volt battery that lasts about two years.
    Everything is encased in silicon so its fairly resistant, and of course, it's sticky. Poken Tags have to be
    activated using an NFC writer and power themselves off when they are stacked or they detect too much inference
    to not drain the battery.
&lt;/p&gt;

&lt;p&gt;
    We all got an NFC Bootcamp completion certificate on behalf of OTA Training and the
    &lt;a href=&quot;http://aenfc.com&quot;&gt;AENFC&lt;/a&gt; and we took some pictures. It was a great experience and I'm sure both
    speakers and attendees will keep in touch with each other.
&lt;/p&gt;

&lt;p&gt;&lt;iframe width=&quot;500&quot; height=&quot;281&quot; src=&quot;http://www.youtube.com/embed/Pa_VbD-1QS0?fs=1&amp;feature=oembed&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p&gt;
    &lt;strong&gt;Links:&lt;/strong&gt;
    &lt;ul&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.developer.nokia.com/Community/Wiki/Understanding_NFC_Data_Exchange_Format_(NDEF)_messages&quot;&gt;Understanding NFC NDEF messages&lt;/a&gt; at &lt;strong&gt;Nokia Developer&lt;/strong&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=IEHs7Llsb9Q&quot;&gt;Poken - Collect People, Places and Things&lt;/a&gt; on &lt;strong&gt;YouTUbe&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Let Silex Wrap Your Legacy PHP Application</title>
    <link href="http://blog.orestes.io/archive/2012/07/01/let-silex-wrap-your-legacy-php-application"/>
    <updated>2012-07-01T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/07/01/let-silex-wrap-your-legacy-php-application</id>
    <content type="html">&lt;p&gt;PHP + Symfony developer &lt;a href=&quot;http://php-and-symfony.matthiasnoback.nl&quot; target=&quot;_blank&quot;&gt;Matthias Noback&lt;/a&gt; has
written a really nice article about the use of Silex on outdated PHP projects. If you've been looking forward to
migrate/redo some of your old projects using Symfony components, this may be worth reading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href=&quot;http://php-and-symfony.matthiasnoback.nl/2012/06/let-silex-wrap-your-legacy-php-application-and-add-twig-for-templating/&quot; target=&quot;_blank&quot;&gt;Let Silex Wrap Your Legacy PHP Application (and add Twig for templating)&lt;/a&gt;&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Fluent 2012 playlist</title>
    <link href="http://blog.orestes.io/archive/2012/06/06/fluent-2012-playlist"/>
    <updated>2012-06-06T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/06/06/fluent-2012-playlist</id>
    <content type="html">&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot;height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/f7AU2Ozu8eo&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;JavaScript development workflow of 2013&lt;/em&gt; by &lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://www.paulirish.com/&quot;&gt;Paul Irish&lt;/a&gt;&lt;/strong&gt; was amazing!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Link&lt;/strong&gt;: &lt;a href=&quot;http://www.youtube.com/playlist?list=PL75AC4484E6866741&quot;&gt;Fluent 2012 playlist&lt;/a&gt; on &lt;strong&gt;YouTube&lt;/strong&gt; (58 videos, 5 hours).&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Learning to love JavaScript</title>
    <link href="http://blog.orestes.io/archive/2012/04/30/learning-to-love-javascript"/>
    <updated>2012-04-30T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2012/04/30/learning-to-love-javascript</id>
    <content type="html">&lt;p&gt;&lt;iframe style=&quot;width: 100%&quot; width=&quot;100%&quot; height=&quot;315&quot; src=&quot;http://www.youtube.com/embed/seX7jYI96GE&quot; frameborder=&quot;0&quot; allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;I really liked &lt;em&gt;Learning to love JavaScript&lt;/em&gt; by &lt;strong&gt;&lt;a target=&quot;_blank&quot; href=&quot;http://infrequently.org&quot;&gt;Alex Russell&lt;/a&gt;&lt;/strong&gt; at &lt;strong&gt;Google IO 2011&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;
&lt;strong&gt;Link&lt;/strong&gt;: &lt;a target=&quot;_blank&quot; href=&quot;http://www.youtube.com/watch?v=seX7jYI96GE&quot;&gt;Google I/O 2011: Learning to Love JavaScript&lt;/a&gt; on &lt;strong&gt;YouTube&lt;/strong&gt;.
&lt;/p&gt;</content>
  </entry>
  
  <entry>
    <title>Why programmers work at night</title>
    <link href="http://blog.orestes.io/archive/2011/12/18/why-programmers-work-at-night"/>
    <updated>2011-12-18T00:00:00+00:00</updated>
    <id>http://blog.orestes.io/archive/2011/12/18/why-programmers-work-at-night</id>
    <content type="html">&lt;p&gt;I just read an excelent article by &lt;a target=&quot;_blank&quot; href=&quot;http://swizec.com/&quot;&gt;&lt;strong&gt;Swizec Teller&lt;/strong&gt;&lt;/a&gt; about
the reasons &lt;a target=&quot;_blank&quot; href=&quot;http://swizec.com/blog/why-programmers-work-at-night/swizec/3198&quot;&gt;some programmers
do their best work late at night&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I couldn't agree more with the author. The past year I stayed late at the office a lot of times doing a lot of good
work. This year not so much because my girlfriend moved in with me, so I've gotten some rest from that but I kind of
miss it too. When we were working on &lt;a href=&quot;http://blog.orestes.io/tag/aura&quot;&gt;Aura&lt;/a&gt;, we would work until very late and wake
up for lunch almost every day.&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Link&lt;/strong&gt;: &lt;a target=&quot;_blank&quot; href=&quot;http://swizec.com/blog/why-programmers-work-at-night/swizec/3198&quot;&gt;Why programmers work at night&lt;/a&gt;
&lt;/p&gt;
</content>
  </entry>
  
</feed>