<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Gabriel Rinaldi]]></title><description><![CDATA[Thoughts, stories and ideas.]]></description><link>http://gabrielrinaldi.me/</link><generator>Ghost 0.7</generator><lastBuildDate>Thu, 17 Dec 2020 07:37:52 GMT</lastBuildDate><atom:link href="http://gabrielrinaldi.me/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Email monster]]></title><description><![CDATA[<p>I hate email.</p>

<p><a href="http://theoatmeal.com/comics/email_monster">Original</a></p>]]></description><link>http://gabrielrinaldi.me/email/</link><guid isPermaLink="false">de371ea0-9cbc-4f45-bded-5375a663ac95</guid><category><![CDATA[format-link]]></category><category><![CDATA[f]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Thu, 04 Dec 2014 05:21:30 GMT</pubDate><content:encoded><![CDATA[<p>I hate email.</p>

<p><a href="http://theoatmeal.com/comics/email_monster">Original</a></p>]]></content:encoded></item><item><title><![CDATA[You Too May Be A Victim Of Developaralysis]]></title><description><![CDATA[<p>Great article, I think it describes well the moment we are living in technology. There are so many distractions that most developers forget about building things and focus too much on language A is better than B.</p>

<p><a href="http://techcrunch.com/2014/10/18/you-too-may-be-a-victim-of-developaralysis">Original</a></p>]]></description><link>http://gabrielrinaldi.me/you-too-may-be-a-victim-of-developaralysis/</link><guid isPermaLink="false">507efc00-0e7d-4c54-b732-58c90054ac41</guid><category><![CDATA[format-link]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Tue, 21 Oct 2014 06:39:41 GMT</pubDate><content:encoded><![CDATA[<p>Great article, I think it describes well the moment we are living in technology. There are so many distractions that most developers forget about building things and focus too much on language A is better than B.</p>

<p><a href="http://techcrunch.com/2014/10/18/you-too-may-be-a-victim-of-developaralysis">Original</a></p>]]></content:encoded></item><item><title><![CDATA[Seth Godin]]></title><description><![CDATA[<p>No is the foundation that we can build our yes on. </p>]]></description><link>http://gabrielrinaldi.me/seth-godin/</link><guid isPermaLink="false">720ef2b0-940e-40fd-bd56-a297433d563c</guid><category><![CDATA[format-quote]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Sat, 21 Jun 2014 11:34:17 GMT</pubDate><content:encoded><![CDATA[<p>No is the foundation that we can build our yes on. </p>]]></content:encoded></item><item><title><![CDATA[How to install JDK 7 on Yosemite (10.10)]]></title><description><![CDATA[<p>To install it follow these steps:</p>

<ol>
<li>Download <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 7</a>  </li>
<li>Open the DMG  </li>
<li>Run <code>pkgutil --expand "/Volumes/JDK 7 Update 60/JDK 7 Update 60.pkg" "/tmp/JDK 7 Update 60.unpkg"</code>  </li>
<li>Go to <code>/tmp/JDK 7 Update 60.unpkg</code>  </li>
<li>Open the Distribution file in your favorite editor (I recommend (Sublime</li></ol>]]></description><link>http://gabrielrinaldi.me/how-to-install-jdk-7-on-yosemite-10-10/</link><guid isPermaLink="false">ddda9711-9ff1-423f-92fb-a3411a16b626</guid><category><![CDATA[yosemite]]></category><category><![CDATA[java]]></category><category><![CDATA[10.10]]></category><category><![CDATA[mac]]></category><category><![CDATA[beta]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Wed, 04 Jun 2014 02:42:55 GMT</pubDate><content:encoded><![CDATA[<p>To install it follow these steps:</p>

<ol>
<li>Download <a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 7</a>  </li>
<li>Open the DMG  </li>
<li>Run <code>pkgutil --expand "/Volumes/JDK 7 Update 60/JDK 7 Update 60.pkg" "/tmp/JDK 7 Update 60.unpkg"</code>  </li>
<li>Go to <code>/tmp/JDK 7 Update 60.unpkg</code>  </li>
<li>Open the Distribution file in your favorite editor (I recommend (Sublime Text)[http://www.sublimetext.com])  </li>
<li>Change the function <code>pm_install_check()</code> to always return <code>true</code>  </li>
<li>Run <code>pkgutil --flatten "/tmp/JDK 7 Update 60.unpkg" "/tmp/JDK 7 Update 60.pkg"</code>  </li>
<li>Run <code>open "/tmp/JDK 7 Update 60.pkg"</code></li>
</ol>

<p>The installer should skip the OS version check and you should be able to install without any problems.</p>]]></content:encoded></item><item><title><![CDATA[Garrick van Buren]]></title><description><![CDATA[<p>You don’t need a new tool. You need to commit to getting more out of the ones you have.</p>]]></description><link>http://gabrielrinaldi.me/garrick-van-buren/</link><guid isPermaLink="false">958e54ec-e80f-4674-a42d-dd3caca6d58b</guid><category><![CDATA[format-quote]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Fri, 25 Apr 2014 05:53:59 GMT</pubDate><content:encoded><![CDATA[<p>You don’t need a new tool. You need to commit to getting more out of the ones you have.</p>]]></content:encoded></item><item><title><![CDATA[How to use Sublime Text to edit files over SSH]]></title><description><![CDATA[<p>One of the things that I missed when swithcing from <a href="https://github.com/textmate/textmate">Textmate</a> to <a href="http://www.sublimetext.com">Sublime Text</a> was rmate, the CLI to open files in the server your are logged in over SSH in you local editor. Since I'm too lazy to learn advanced editing in <a href="http://www.vim.org">vim</a> I started searching for an alternative,</p>]]></description><link>http://gabrielrinaldi.me/how-to-use-sublime-text-to-edit-files-over-ssh/</link><guid isPermaLink="false">40d5f905-ea1f-41be-b383-611176396268</guid><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Mon, 21 Apr 2014 15:15:49 GMT</pubDate><content:encoded><![CDATA[<p>One of the things that I missed when swithcing from <a href="https://github.com/textmate/textmate">Textmate</a> to <a href="http://www.sublimetext.com">Sublime Text</a> was rmate, the CLI to open files in the server your are logged in over SSH in you local editor. Since I'm too lazy to learn advanced editing in <a href="http://www.vim.org">vim</a> I started searching for an alternative, and the good news is that it exists. </p>

<p>The first step is install <a href="https://github.com/henrikpersson/rsub">rsub</a> on Sublime Text, it's available on <a href="http://wbond.net/sublime_packages/package_control">Package Control</a>. Then you should change you <code>~/.ssh/config</code> to forward the port that you'll be using to your local machine:</p>

<pre><code>Host my_server
  Hostname 123.45.67.89
  RemoteForward 52698 127.0.0.1:52698
</code></pre>

<p>Once that is done, log into your server (<code>ssh my_server</code>) e download rmate (yes, the same one we would use for Textmate) there: <code>curl https://raw.github.com/aurora/rmate/master/rmate &gt; rsubl</code>. The last step is to move it to the bin volder and give it execution permission. In order to do that run the following:</p>

<ul>
<li><code>sudo mv rsubl /usr/local/bin</code></li>
<li><code>sudo chmod +x /usr/local/bin/rsubl</code></li>
</ul>

<p>From now on, as long as you have Sublime Text open in your computer, just run <code>rsubl file.rb</code> and it will open the file in your editor. Change it and that's it, every save on that file will auto save it remotely. It also supports <code>sudo</code>, so you can change your config files directly in Sublime Text.</p>

<p><em>Don't forgert to open the port in your firewall if you are using one.</em></p>]]></content:encoded></item><item><title><![CDATA[How to fix performance problems when using NSDateFormatter]]></title><description><![CDATA[<p>Unfortunately the majority of web services return dates in the <strong>ISO-8601</strong> format and not in <em>time interval</em>. So to parse the date we end up using <strong>NSDateFormatter</strong> which is extremely slow at doing that.</p>

<p>But there is a way for you to improve date parsing performance, you can use the</p>]]></description><link>http://gabrielrinaldi.me/how-to-fix-performance-problems-when-using-nsdateformatter/</link><guid isPermaLink="false">e70dbdfe-0f1b-465a-ae57-ac1a5046817b</guid><category><![CDATA[osx]]></category><category><![CDATA[ios]]></category><category><![CDATA[performance]]></category><category><![CDATA[sqlite]]></category><category><![CDATA[nsdateformatter]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Thu, 17 Apr 2014 04:02:35 GMT</pubDate><content:encoded><![CDATA[<p>Unfortunately the majority of web services return dates in the <strong>ISO-8601</strong> format and not in <em>time interval</em>. So to parse the date we end up using <strong>NSDateFormatter</strong> which is extremely slow at doing that.</p>

<p>But there is a way for you to improve date parsing performance, you can use the <strong>SQLite</strong> library to make the conversion. You may have to write a few more lines to get the same result, but the performance gain is totally worth it. </p>

<p>Let's take this date as an example: <code>2013-09-07T23:45:00Z</code>, if you want to convert that to <em>time interval</em> you could do this:</p>

<pre><code>sqlite&gt; SELECT strftime("%s", "2013-09-07T23:45:00Z");
1378597500
</code></pre>

<p>We can achieve the same result on <strong>iOS</strong> using the following code:</p>

<pre><code>sqlite3_stmt *statement = NULL;
sqlite3_prepare_v2(db, "SELECT strftime('%s', ?);", -1, &amp;statement, NULL);

sqlite3_bind_text(statement, 1, [dateString UTF8String], -1, SQLITE_STATIC);
sqlite3_step(statement);
sqlite3_int64 interval = sqlite3_column_int64(statement, 0);
NSDate *date = [NSDate dateWithTimeIntervalSince1970:interval];
</code></pre>

<p>If you want to compare the results, Anurag Mishradid a script to demonstrate <a href="https://gist.github.com/AnuragMishra/6474321">this</a>. In his tests the performance gain was 1400%, or from 106 seconds to just 7. </p>

<p>If you want to read more on how <strong>SQLite</strong> parses the date in it's <strong>C</strong> lirabry you can go <a href="http://www.sqlite.org/src/doc/trunk/src/date.c">here</a>.</p>]]></content:encoded></item><item><title><![CDATA[iOS app versioning with git tag]]></title><description><![CDATA[<p>Wouldn't it be great if your iOS or OS X projects just take their version and build number automatically from git? Well, it can!</p>

<p>Using a script in your build phase, you can run a shell script to determine the version number and inject this into the Info.plist of</p>]]></description><link>http://gabrielrinaldi.me/ios-app-versioning-with-git-tag/</link><guid isPermaLink="false">6e2e95fe-bf6c-48cb-b0f4-1940891bd4a5</guid><category><![CDATA[osx]]></category><category><![CDATA[xcode]]></category><category><![CDATA[ios]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Mon, 14 Apr 2014 00:24:15 GMT</pubDate><content:encoded><![CDATA[<p>Wouldn't it be great if your iOS or OS X projects just take their version and build number automatically from git? Well, it can!</p>

<p>Using a script in your build phase, you can run a shell script to determine the version number and inject this into the Info.plist of a build. </p>

<p>It will change your plist based on the last git tag that you have. If that is the current SHA it will show the version as <code>0.9.2</code>, otherwise it will show how many commits since the last tag and the short version of the current SHA (<code>0.9.2-2-d955863</code>).</p>

<p>If you have uncommited changes (besides the plist) it will add a <code>-dirty</code> tag to the end of the version.</p>

<p>It will also update the build number with the number of commits in that branch, because of that remember to always release your builds from the same branch to prevent duplicated build numbers.</p>

<p>The last thing it will do is adding a GitSHA to your plist, I think that's very usefull when submitting bug reports from within the app.</p>

<p>You can add this script as a build phase in your Xcode project:</p>

<pre><code># Update build version with number of commits
BUILD_NUMBER=$(git rev-list HEAD | wc -l | tr -d ' ')

# Set git SHA for this build
GIT_SHA=$(git rev-parse --short HEAD)

# Update version string with build number
LINES_CHANGED=$(git status --porcelain | wc -l | tr -d ' ')
PLIST_CHANGED=$(git status --porcelain | grep "${INFOPLIST_FILE}" | wc -l | tr -d ' ')
if [ "$LINES_CHANGED" == "1" -a "$PLIST_CHANGED" == "1" ]; then
    GIT_RELEASE_VERSION=$(git describe --tags --always)
else
    GIT_RELEASE_VERSION=$(git describe --tags --always --dirty)
fi

# Update plist with new values
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString ${GIT_RELEASE_VERSION#*v}" "${PROJECT_DIR}/${INFOPLIST_FILE}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $BUILD_NUMBER" "${PROJECT_DIR}/${INFOPLIST_FILE}"
/usr/libexec/PlistBuddy -c "Set :GitSHA $GIT_SHA" "${PROJECT_DIR}/${INFOPLIST_FILE}"
</code></pre>

<p>If you don't want to change your plist you can change only the product plist by replacing the last lines with this:</p>

<pre><code>defaults write "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*}" "CFBundleShortVersionString" "${GIT_RELEASE_VERSION#*v}"
defaults write "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*}" "CFBundleVersion" "${BUILD_NUMBER}"
defaults write "${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH%.*}" "GitSHA" "${GIT_SHA}"
</code></pre>]]></content:encoded></item><item><title><![CDATA[How the heartbleed bug works]]></title><description><![CDATA[<p>Very well explained :) </p>

<p><a href="http://xkcd.com/1354/">View</a></p>]]></description><link>http://gabrielrinaldi.me/how-the-heartbleed-bug-works/</link><guid isPermaLink="false">cde1e3c0-089d-47fb-b156-b2b6814494f8</guid><category><![CDATA[format-link]]></category><category><![CDATA[comic]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Fri, 11 Apr 2014 19:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Very well explained :) </p>

<p><a href="http://xkcd.com/1354/">View</a></p>]]></content:encoded></item><item><title><![CDATA[Evolution of the F1 Car]]></title><description><![CDATA[<p>Evolution of the F1 Car <a href="http://gnr.me/tqQs">http://gnr.me/tqQs</a></p>]]></description><link>http://gabrielrinaldi.me/evolution-of-the-f1-car/</link><guid isPermaLink="false">d3730870-7312-46f2-a237-efadc3240db5</guid><category><![CDATA[format-tweet]]></category><category><![CDATA[f1]]></category><category><![CDATA[video]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Mon, 16 Dec 2013 20:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Evolution of the F1 Car <a href="http://gnr.me/tqQs">http://gnr.me/tqQs</a></p>]]></content:encoded></item><item><title><![CDATA[Ellen Johnson Sirleaf]]></title><description><![CDATA[<p>If your dreams do not scare you, they are not big enough</p>]]></description><link>http://gabrielrinaldi.me/ellen-johnson-sirleaf/</link><guid isPermaLink="false">d4b5936a-407b-413c-acf3-9ffc58d8447e</guid><category><![CDATA[format-quote]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Sun, 15 Dec 2013 20:00:00 GMT</pubDate><content:encoded><![CDATA[<p>If your dreams do not scare you, they are not big enough</p>]]></content:encoded></item><item><title><![CDATA[It’s amazing how Apple loves details]]></title><description><![CDATA[<p>It’s amazing how Apple loves details <a href="http://gnr.me/Wc2d">http://gnr.me/Wc2d</a></p>]]></description><link>http://gabrielrinaldi.me/its-amazing-how-apple-loves-details/</link><guid isPermaLink="false">8e1151df-7041-4521-8422-ad0e9e7587c4</guid><category><![CDATA[format-tweet]]></category><category><![CDATA[apple]]></category><category><![CDATA[font]]></category><category><![CDATA[design]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Fri, 01 Nov 2013 19:00:00 GMT</pubDate><content:encoded><![CDATA[<p>It’s amazing how Apple loves details <a href="http://gnr.me/Wc2d">http://gnr.me/Wc2d</a></p>]]></content:encoded></item><item><title><![CDATA[Android’s Market Share Is Literally A Joke]]></title><description><![CDATA[<p>For I long time I wanted to write about this but was too lazy to do it. I am glad some one did it, and in a better way than what I would have done.</p>

<p><a href="http://techpinions.com/androids-market-share-is-literally-a-joke">Read it here</a></p>]]></description><link>http://gabrielrinaldi.me/androids-market-share-is-literally-a-joke/</link><guid isPermaLink="false">0efa531c-ad73-4295-bad3-bfff0643c8ed</guid><category><![CDATA[format-link]]></category><category><![CDATA[research]]></category><category><![CDATA[android]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Mon, 27 May 2013 19:00:00 GMT</pubDate><content:encoded><![CDATA[<p>For I long time I wanted to write about this but was too lazy to do it. I am glad some one did it, and in a better way than what I would have done.</p>

<p><a href="http://techpinions.com/androids-market-share-is-literally-a-joke">Read it here</a></p>]]></content:encoded></item><item><title><![CDATA[Take Five - Retina tweek]]></title><description><![CDATA[<p>Buying a Retina MacBook Pro was an easy decision. It's fast, it's light, it has crisp pixels...</p>

<p>Well, that last part is almos true. The problem is that lots of developers have not updated their software to support the new screen from Apple.</p>

<p>So from time to time I have</p>]]></description><link>http://gabrielrinaldi.me/take-five-retina-tweek/</link><guid isPermaLink="false">6c9a64c8-3cab-43de-a65e-25df7e8a7548</guid><category><![CDATA[retina]]></category><category><![CDATA[take five]]></category><category><![CDATA[hack]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Mon, 05 Nov 2012 20:00:00 GMT</pubDate><content:encoded><![CDATA[<p>Buying a Retina MacBook Pro was an easy decision. It's fast, it's light, it has crisp pixels...</p>

<p>Well, that last part is almos true. The problem is that lots of developers have not updated their software to support the new screen from Apple.</p>

<p>So from time to time I have to "hack" some of my apps to make the icon look good again, specially the ones that sits in my top bar.</p>

<p>If you use <a href="http://takefiveapp.com/mac">Take Five</a> but can't stand all the blurriness like me, try replacing this images (and adding new ones) in the app package.</p>

<p><a href="http://gnr.me/c1OW">Download</a></p>]]></content:encoded></item><item><title><![CDATA[Fast emoji access]]></title><description><![CDATA[<p>One of the things Apple added to iOS 6 is the ability to add Emojis without any hacks and custom shortcuts to most used words.</p>

<p>With that in mind I decided to combine this together and I created my own list of Emoji shortcuts.</p>

<p>Here it is:</p>

<p><img src="http://gabrielrinaldi.me/content/images/2014/Apr/emoji.jpg" alt="Screenshot"></p>]]></description><link>http://gabrielrinaldi.me/fast-emoji-access/</link><guid isPermaLink="false">6b22ca0f-eaa0-46fa-91bc-48e6c25293bb</guid><category><![CDATA[ios]]></category><category><![CDATA[emoji]]></category><dc:creator><![CDATA[Gabriel Rinaldi]]></dc:creator><pubDate>Sun, 04 Nov 2012 20:00:00 GMT</pubDate><content:encoded><![CDATA[<p>One of the things Apple added to iOS 6 is the ability to add Emojis without any hacks and custom shortcuts to most used words.</p>

<p>With that in mind I decided to combine this together and I created my own list of Emoji shortcuts.</p>

<p>Here it is:</p>

<p><img src="http://gabrielrinaldi.me/content/images/2014/Apr/emoji.jpg" alt="Screenshot"></p>]]></content:encoded></item></channel></rss>