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

<channel>
	<title>Softcore software development</title>
	<atom:link href="http://tea.cesaroliveira.net/feed" rel="self" type="application/rss+xml" />
	<link>http://tea.cesaroliveira.net</link>
	<description>It&#039;s all about the cycles</description>
	<lastBuildDate>Tue, 24 Jan 2012 04:31:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A breakdown of building Firefox</title>
		<link>http://tea.cesaroliveira.net/archives/389</link>
		<comments>http://tea.cesaroliveira.net/archives/389#comments</comments>
		<pubDate>Tue, 24 Jan 2012 04:31:50 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[build]]></category>
		<category><![CDATA[bungineer]]></category>
		<category><![CDATA[firefox]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=389</guid>
		<description><![CDATA[John Ford posted an interesting post on improving the build times of mac minis. This largely turned out to be a hardware solution (spend enough money on solid state drives and more cores and things are likely to improve). But that is expensive. What is interesting to me though is the build times. 2 hours [...]]]></description>
			<content:encoded><![CDATA[<p>John Ford posted an interesting post on <a href="http://blog.johnford.info/new-mac-builders-ssds-j-settings/" onclick="pageTracker._trackPageview('/outgoing/blog.johnford.info/new-mac-builders-ssds-j-settings/?referer=');">improving the build times of mac minis</a>. This largely turned out to be a hardware solution (spend enough money on solid state drives and more cores and things are likely to improve). But that is expensive. What is interesting to me though is the build times. 2 hours for a dual core set-up?</p>
<p>For a long time the only really thing you can do is pass -jN. -j merely parallelized the process. It was a good idea to have -j2 even on a single core just so that the CPU was busy doing something. That was often the weak point, you just couldn&#8217;t compile fast enough.</p>
<p>Of course, now we have dual-tri-quad cores, so now it wasn&#8217;t how fast you can compile but how fast you can write to disk. Solid state drives can help close that gap.</p>
<p>But Firefox is a huge project. At some point the cost of hardware to compile it in 10 seconds is just too significant, even for <a href="http://blog.mozilla.com/blog/2011/12/20/mozilla-and-google-sign-new-agreement-for-default-search-in-firefox/" onclick="pageTracker._trackPageview('/outgoing/blog.mozilla.com/blog/2011/12/20/mozilla-and-google-sign-new-agreement-for-default-search-in-firefox/?referer=');">Mozilla with it&#8217;s fancy new Google-deal</a>.</p>
<p>I wondered where the build was spending most of its time. I couldn&#8217;t find anything to profile make (at least not through the man page, and the name is not google friendly, and people don&#8217;t call it gmake anymore <img src='http://tea.cesaroliveira.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). Since what I want to do is pretty simple, I downloaded the source and made a few changes to log the <a href="http://pubs.opengroup.org/onlinepubs/009604499/functions/time.html" onclick="pageTracker._trackPageview('/outgoing/pubs.opengroup.org/onlinepubs/009604499/functions/time.html?referer=');">seconds since epoch</a> when we enter/leave a directory. A crappy python script later, and here is the broken results:</p>
<p>Total time for accessible is 77 seconds. Project was entered 3 times<br />
Total time for b2g is 0 seconds. Project was entered 0 times<br />
Total time for browser is 13 seconds. Project was entered 3 times<br />
Total time for build is 0 seconds. Project was entered 3 times<br />
Total time for caps is 6 seconds. Project was entered 3 times<br />
Total time for chrome is 6 seconds. Project was entered 3 times<br />
Total time for config is 0 seconds. Project was entered 3 times<br />
Total time for content is 572 seconds. Project was entered 3 times<br />
Total time for db/sqlite3/src is 7 seconds. Project was entered 3 times<br />
Total time for dbm is 0 seconds. Project was entered 0 times<br />
Total time for docshell is 16 seconds. Project was entered 3 times<br />
Total time for dom is 223 seconds. Project was entered 3 times<br />
Total time for editor is 56 seconds. Project was entered 3 times<br />
Total time for embedding is 23 seconds. Project was entered 3 times<br />
Total time for gfx is 106 seconds. Project was entered 3 times<br />
Total time for hal is 6 seconds. Project was entered 3 times<br />
Total time for image is 18 seconds. Project was entered 3 times<br />
Total time for intl is 31 seconds. Project was entered 3 times<br />
Total time for ipc is 186 seconds. Project was entered 3 times<br />
Total time for js/ductwork/debugger is 1 seconds. Project was entered 3 times<br />
Total time for js/examples is 0 seconds. Project was entered 0 times<br />
Total time for js/ipc is 3 seconds. Project was entered 3 times<br />
Total time for js/jsd is 3 seconds. Project was entered 3 times<br />
Total time for js/public is 0 seconds. Project was entered 0 times<br />
Total time for js/src is 17 seconds. Project was entered 4 times<br />
Total time for js/xpconnect is 61 seconds. Project was entered 3 times<br />
Total time for layout is 378 seconds. Project was entered 3 times<br />
Total time for media/libjpeg is 3 seconds. Project was entered 3 times<br />
Total time for media/libnestegg is 0 seconds. Project was entered 3 times<br />
Total time for media/libogg is 1 seconds. Project was entered 3 times<br />
Total time for media/libpng is 1 seconds. Project was entered 3 times<br />
Total time for media/libsydneyaudio is 0 seconds. Project was entered 3 times<br />
Total time for media/libtheora is 2 seconds. Project was entered 3 times<br />
Total time for media/libtremor is 0 seconds. Project was entered 0 times<br />
Total time for media/libvorbis is 2 seconds. Project was entered 3 times<br />
Total time for media/libvpx is 3 seconds. Project was entered 3 times<br />
Total time for memory/jemalloc is 0 seconds. Project was entered 3 times<br />
Total time for memory/mozalloc is 0 seconds. Project was entered 3 times<br />
Total time for mfbt is 0 seconds. Project was entered 3 times<br />
Total time for mobile is 0 seconds. Project was entered 0 times<br />
Total time for modules/freetype2 is 0 seconds. Project was entered 0 times<br />
Total time for modules/libbz2 is 1 seconds. Project was entered 3 times<br />
Total time for modules/libjar is 6 seconds. Project was entered 3 times<br />
Total time for modules/libmar is 1 seconds. Project was entered 3 times<br />
Total time for modules/libpref is 7 seconds. Project was entered 3 times<br />
Total time for modules/zlib is 1 seconds. Project was entered 3 times<br />
Total time for mozglue is 0 seconds. Project was entered 3 times<br />
Total time for netwerk is 126 seconds. Project was entered 3 times<br />
Total time for nsprpub is 2 seconds. Project was entered 2 times<br />
Total time for other-licenses is 0 seconds. Project was entered 0 times<br />
Total time for parser is 29 seconds. Project was entered 3 times<br />
Total time for probes is 0 seconds. Project was entered 3 times<br />
Total time for profile is 3 seconds. Project was entered 3 times<br />
Total time for rdf is 14 seconds. Project was entered 3 times<br />
Total time for security/coreconf is 0 seconds. Project was entered 0 times<br />
Total time for security/dbm is 0 seconds. Project was entered 0 times<br />
Total time for security/manager is 109 seconds. Project was entered 3 times<br />
Total time for security/nss/lib is 0 seconds. Project was entered 0 times<br />
Total time for services is 2 seconds. Project was entered 3 times<br />
Total time for startupcache is 3 seconds. Project was entered 3 times<br />
Total time for storage is 28 seconds. Project was entered 3 times<br />
Total time for testing is 0 seconds. Project was entered 0 times<br />
Total time for toolkit is 88 seconds. Project was entered 3 times<br />
Total time for tools is 0 seconds. Project was entered 0 times<br />
Total time for uriloader is 19 seconds. Project was entered 3 times<br />
Total time for view is 2 seconds. Project was entered 3 times<br />
Total time for widget is 40 seconds. Project was entered 3 times<br />
Total time for xpcom is 85 seconds. Project was entered 3 times<br />
Total time for xpfe/appshell is 8 seconds. Project was entered 3 times<br />
Total time for xpfe/components is 3 seconds. Project was entered 3 times<br />
Total time for xpfe/test is 0 seconds. Project was entered 0 times<br />
Total time for xulrunner is 0 seconds. Project was entered 0 times<br />
The total time calculated is 2398</p>
<p>The total time is off. Firstly, you&#8217;ll see NSS is not being tracked. What usually happens is that the Makefile is generated in the object directory. In the case of NSS, it comes with a Makefile already. This is breaking my script, but it takes approx. 72 seconds.</p>
<p>Secondly, The totally time since I ran &#8220;make -f client.mk build&#8221; is approx 2662 seconds. Even factoring in the NSS time, that still leaves 3 minutes unaccounted for. So I still might be missing some projects. Part of that time was spent traversing the tree and running configure.</p>
<p>In the past, when we only had single-core computers, we tried fixing the problem by using tools like distcc to distribute the load to slave machines. With multi-core machines, this is less and less ideal since the overhead is quite substantial (a preprocessed file would go through and object files come back). However, I wonder if we can achieve better build times by distributing projects across machines. That would present some challenges (like dependencies), but it might give better results.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/389/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Waking up your computer at a certain time</title>
		<link>http://tea.cesaroliveira.net/archives/379</link>
		<comments>http://tea.cesaroliveira.net/archives/379#comments</comments>
		<pubDate>Fri, 23 Dec 2011 04:39:09 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Living]]></category>
		<category><![CDATA[alarm]]></category>
		<category><![CDATA[audio]]></category>
		<category><![CDATA[sleep]]></category>

		<guid isPermaLink="false">http://cdolivei.webfactional.com/?p=379</guid>
		<description><![CDATA[The goal of my alarm clock website was to actually be my alarm clock. For this to happen, I thought I would need to have my computer running all night long which seemed like a waste of electricity. It turns out, you can schedule your computer to wake up at a certain time by using [...]]]></description>
			<content:encoded><![CDATA[<p>The goal of my <a href="http://sunshine.cesaroliveira.net/" onclick="pageTracker._trackPageview('/outgoing/sunshine.cesaroliveira.net/?referer=');">alarm clock website</a> was to actually be my alarm clock. For this to happen, I thought I would need to have my computer running all night long which seemed like a waste of electricity. It turns out, you can schedule your computer to <a href="http://www.vistax64.com/tutorials/166809-task-scheduler-wake-up-computer.html" onclick="pageTracker._trackPageview('/outgoing/www.vistax64.com/tutorials/166809-task-scheduler-wake-up-computer.html?referer=');">wake up at a certain time by using the task scheduler</a>.</p>
<p>So now I have it wake the computer up at 7:50 so that in 5 minutes it can play the <a href="http://en.wikipedia.org/wiki/Nightingale" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Nightingale?referer=');">nightingales</a> before playing the <a href="http://soundcloud.com/dubology-2/dubology-good-morning-dub" onclick="pageTracker._trackPageview('/outgoing/soundcloud.com/dubology-2/dubology-good-morning-dub?referer=');">Good Morning Dub</a>. One issue though is that Windows will go back to sleep in 2 minutes. You can <a href="http://www.vistax64.com/tutorials/171042-sleep-return-timeout-unattended-wake-up.html" onclick="pageTracker._trackPageview('/outgoing/www.vistax64.com/tutorials/171042-sleep-return-timeout-unattended-wake-up.html?referer=');">modify that using a registry key</a> so that it will have enough time to play the music.</p>
<p>Now while the alarm clock website is accomplishing the task of waking me up at the right time, it doesn&#8217;t do a very good job of keeping me awake. Maybe I need to make an interactive component to shut off the alarm <img src='http://tea.cesaroliveira.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/379/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Image prefetching</title>
		<link>http://tea.cesaroliveira.net/archives/371</link>
		<comments>http://tea.cesaroliveira.net/archives/371#comments</comments>
		<pubDate>Thu, 01 Dec 2011 05:45:59 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[cache]]></category>
		<category><![CDATA[derp]]></category>
		<category><![CDATA[prefetch]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=371</guid>
		<description><![CDATA[As part of a personal website I am doing, I transition between several large (1920 pixels wide) images. It is beneficial for me to do two things : Cache the images so they don&#8217;t keep taking up my bandwidth Prefetch the images so that a noticeable lag isn&#8217;t taking place while the image loads. Caching [...]]]></description>
			<content:encoded><![CDATA[<p>As part of a personal website I am doing, I transition between several large (1920 pixels wide) images. It is beneficial for me to do two things :</p>
<ol>
<li>Cache the images so they don&#8217;t keep taking up my bandwidth</li>
<li>Prefetch the images so that a noticeable lag isn&#8217;t taking place while the image loads.</li>
</ol>
<p>Caching is a bit tricky. While I want the names to stay consistant, I also want to be able to change the images at anytime. What I want is the browser to cache <a href="http://kittenwar.com/c_images/2008/08/06/162954.2.jpg" onclick="pageTracker._trackPageview('/outgoing/kittenwar.com/c_images/2008/08/06/162954.2.jpg?referer=');">kitten.jpg</a> until next year, or until I decide that I want a different kitten image and it should pick the new <a href="http://kittenwar.com/c_images/2006/08/10/84180.1.jpg" onclick="pageTracker._trackPageview('/outgoing/kittenwar.com/c_images/2006/08/10/84180.1.jpg?referer=');">kitten.jpg</a> (almost) immediately.</p>
<p>I have seen this problem solved in <a href="http://rubyonrails.org/" onclick="pageTracker._trackPageview('/outgoing/rubyonrails.org/?referer=');">Ruby on Rails</a>. What they did is append some query string identifier as part of the image. So instead of retrieving kitten.jpg, you would retrieve kitten.jpg?mittens. When the image changed, so did the identifier to something like kitten.jpg?bucket. This lets you cache aggressively, while still being able to change the image fairly regularly. (I am aware of other headers such as Last-Modified that might be a better solution. But from my understanding that only works with documents and not images. If an image is cached, the browser will use it until it expires as opposed to doing a HEAD request to see whether the Last-Modified date changed. I could be wrong about this).</p>
<p>I decided to do something similar, in that the md5 of the file will be appended.</p>
<p>The other thing I was missing was prefetching. I understand I could easily do this by hiding a bunch of images in the HTML page, or dynamically creating an Image object and setting the source. But this is 2011 dammit. We have standards that were promised, and behold <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#link-type-prefetch" onclick="pageTracker._trackPageview('/outgoing/www.whatwg.org/specs/web-apps/current-work/multipage/links.html_link-type-prefetch?referer=');">link prefetching</a>! It turns out only Mozilla and Webkit support this, which is lame. But that&#8217;s fine considering this website is only for my use.</p>
<p>I put in a pretch link using this method and used Firebug&#8217;s net panel to see whether it was working. And apparently it didn&#8217;t. I found out much later on that Firebug doesn&#8217;t capture it. You have to look at the server&#8217;s access log so see whether the image was retrieved.</p>
<p>Next, I checked out <a href="https://developer.mozilla.org/en/Link_prefetching_FAQ" onclick="pageTracker._trackPageview('/outgoing/developer.mozilla.org/en/Link_prefetching_FAQ?referer=');">Mozilla link prefetching FAQ</a>, which informed me that URLS with query strings are not prefetched. I found out much later that this is a lie (<a href="https://developer.mozilla.org/index.php?title=en/Link_prefetching_FAQ&#038;action=diff&#038;revision=27&#038;diff=28" onclick="pageTracker._trackPageview('/outgoing/developer.mozilla.org/index.php?title=en/Link_prefetching_FAQ_038_action=diff_038_revision=27_038_diff=28&amp;referer=');">and removed it</a>). This was actually fixed back in <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=185692" onclick="pageTracker._trackPageview('/outgoing/bugzilla.mozilla.org/show_bug.cgi?id=185692&amp;referer=');">2003</a> by someone who also thought it was stupid.</p>
<p>So here I am, also at 01:00. Reheated a plate of pasta and now enjoying some lukewarm soup. I promised myself yesterday I would be in bed by 23:00 at the latest. Tomorrow will be unpleasant, but at least this feels accomplishing.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/371/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sharing a django project</title>
		<link>http://tea.cesaroliveira.net/archives/363</link>
		<comments>http://tea.cesaroliveira.net/archives/363#comments</comments>
		<pubDate>Wed, 30 Nov 2011 02:29:53 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[django]]></category>
		<category><![CDATA[mess]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=363</guid>
		<description><![CDATA[I have been working on a Django application for a few weeks and want to put it on my website. Tom suggested that I put it on bitbucket as a private repository and then pull it from my server since there is no direct way to pull it from my computer. I&#8217;ve decided to just [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working on a Django application for a few weeks and want to put it on my website. <a href="http://blog.tom.aratyn.name/" onclick="pageTracker._trackPageview('/outgoing/blog.tom.aratyn.name/?referer=');">Tom</a> suggested that I put it on bitbucket as a private repository and then pull it from my server since there is no direct way to pull it from my computer.</p>
<p>I&#8217;ve decided to just zip up the thing and ftp it. But I found it interesting that Django projects are actually not trivial to share. For example, what files would you include?</p>
<p>It actually seems like you are not supposed to share settings.py (nor manage.py, or urls.py really. These are auto-generated for you). At least, the secret_key should be secret. But you also have a bunch of settings such as database information that should not be public either. If you change the file, any version control system will declare it as a changed file. If you .(git|hg)ignore it, what happens if you need to add a new setting to settings.py?</p>
<p>So I thought maybe you share django apps instead of the project? That&#8217;s stupid. My project has templates, static files. Are those supposed to be a separate project?</p>
<p>So it looks like a fucking mess and I&#8217;m zipping this shit up and calling it a day.</p>
<p>After seeing what <a href="https://github.com/jbalogh/zamboni/commit/f5588504343d80c3ceead07c69f7867a51c05788#diff-1" onclick="pageTracker._trackPageview('/outgoing/github.com/jbalogh/zamboni/commit/f5588504343d80c3ceead07c69f7867a51c05788_diff-1?referer=');">Zamboni does</a>, it appears they modified the manage.py to load a settings_local.py file instead of settings. So you would copy settings.py to settings.local.py and use it. That&#8217;s actually a pretty good idea.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/363/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flash, Silverlight, and the future of the web</title>
		<link>http://tea.cesaroliveira.net/archives/349</link>
		<comments>http://tea.cesaroliveira.net/archives/349#comments</comments>
		<pubDate>Wed, 23 Nov 2011 03:35:01 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[plugins]]></category>
		<category><![CDATA[silverlight]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=349</guid>
		<description><![CDATA[The big news today (November 9th) is the announcement that adobe will be halting development for flash on mobile devices and the rumor that Microsoft may end development of Silverlight in the near future. Many people have hailed it as a major victory for the web, largely to the wide adoption of HTML5 by browser [...]]]></description>
			<content:encoded><![CDATA[<p>The big news today (November 9th) is the announcement that adobe will be halting development for <a href="blogs.adobe.com/conversations/2011/11/flash-focus.html">flash on mobile devices</a> and the rumor that Microsoft may end <a href="http://www.theverge.com/2011/11/9/2548975/microsoft-may-halt-development-work-on-silverlight-after-next-release" onclick="pageTracker._trackPageview('/outgoing/www.theverge.com/2011/11/9/2548975/microsoft-may-halt-development-work-on-silverlight-after-next-release?referer=');">development of Silverlight</a> in the near future. Many people have hailed it as a major victory for the web, largely to the wide adoption of HTML5 by browser vendors. Robert O&#8217;Callahan, speaking for himself and not for Mozilla of course, suggested that this could <a href="http://robert.ocallahan.org/2011/11/end-of-plugins.html" onclick="pageTracker._trackPageview('/outgoing/robert.ocallahan.org/2011/11/end-of-plugins.html?referer=');">spell the end for NPAPI</a>. I find myself feeling pretty conflicted about this. While I finally think it&#8217;s about time we move certain functions out of flash and into the browser, I am concerned about the impact of this and the possibility of NPAPI removal.</p>
<blockquote><p>Down with the system, long live the system!</p></blockquote>
<p>One of the great joys of Firefox is that if you don&#8217;t like something, you can change it (for the most part). This was mainly done through extensions. Don&#8217;t like the default developer tools? <a href="http://getfirebug.com/" onclick="pageTracker._trackPageview('/outgoing/getfirebug.com/?referer=');">Get something better</a>! Concerned about privacy? <a href="https://addons.mozilla.org/en-US/firefox/addon/certificate-patrol/" onclick="pageTracker._trackPageview('/outgoing/addons.mozilla.org/en-US/firefox/addon/certificate-patrol/?referer=');">You&#8217;re in luck</a>! You did not need someone&#8217;s blessing or permission, you could just write it. Sometimes an extension is not ideal. I don&#8217;t believe you can override C++ components in Firefox, and you might have limitations to the functionality you can override depending on the browser.</p>
<p>For many browsers, you could write a <a href="https://developer.mozilla.org/En/Plugins" onclick="pageTracker._trackPageview('/outgoing/developer.mozilla.org/En/Plugins?referer=');">NPAPI plugin</a>. The benefit of this is that Flash was able to do so many things that has really only been possible in the last 3 years or so. Canvas, video, audio, offline storage was never possible without Flash when I started college. And yet it has so much influence because we knew what was possible and what was important.</p>
<p>We are slowly replacing Flash sure. Even the <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=692955" onclick="pageTracker._trackPageview('/outgoing/bugzilla.mozilla.org/show_bug.cgi?id=692955&amp;referer=');">webcam</a> might one day exist on the desktop. But you can&#8217;t have a API and a spec for everything. You just cannot satisfy everyone&#8217;s requirements. You can advocate, but the eventual decision will lie in the hands of browser vendors. Having the web compete with itself is not ideal, and we see that when you have to encode a video twice for everyone to play it.</p>
<p>Which is why I having a plugin service is important, and removing it is a step back. It&#8217;s not pleasant or perfect, but if it makes a web competitive outside of browser vendors, I think it&#8217;s worth it.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/349/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Keeping your address updated</title>
		<link>http://tea.cesaroliveira.net/archives/340</link>
		<comments>http://tea.cesaroliveira.net/archives/340#comments</comments>
		<pubDate>Wed, 19 Oct 2011 03:34:19 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Living]]></category>
		<category><![CDATA[frustration]]></category>
		<category><![CDATA[microblog]]></category>
		<category><![CDATA[moving]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=340</guid>
		<description><![CDATA[As someone who has moved about 3 times in 8 months, I have unfortunately discovered the pains of changing addresses across the broad spectrum of services I am using. I have been thinking lately of something to make this a smaller headache. Much like OpenID makes logging in a more pleasant experience. But the challenge [...]]]></description>
			<content:encoded><![CDATA[<p>As someone who has moved about 3 times in 8 months, I have unfortunately discovered the pains of changing addresses across the broad spectrum of services I am using. I have been thinking lately of something to make this a smaller headache. Much like <a href="http://openid.net/" onclick="pageTracker._trackPageview('/outgoing/openid.net/?referer=');">OpenID</a> makes logging in a more pleasant experience.</p>
<p>But the challenge really is &#8211; will anyone use it? And how do I convince people this is a good idea? Maybe good ideas do not need convincing, they just need creating.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/340/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Finding new music</title>
		<link>http://tea.cesaroliveira.net/archives/324</link>
		<comments>http://tea.cesaroliveira.net/archives/324#comments</comments>
		<pubDate>Wed, 19 Oct 2011 03:20:39 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[beatport]]></category>
		<category><![CDATA[genres]]></category>
		<category><![CDATA[music]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=324</guid>
		<description><![CDATA[There are several tools to help people discover new music. Two off the top of my head are iTune&#8217;s Genius and Beatport&#8217;s BeatBot. I have not tried Genius, but I have tried BeatBot. It is a hit or miss feature, with greater emphasis on the miss. Understandably advising on something as complex as musical tastes [...]]]></description>
			<content:encoded><![CDATA[<p>There are several tools to help people discover new music. Two off the top of my head are <a href="http://en.wikipedia.org/wiki/ITunes#Genius" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/ITunes_Genius?referer=');">iTune&#8217;s Genius</a> and <a href="http://www.beatportal.com/feed/item/introducing-beatports-beatbot/" onclick="pageTracker._trackPageview('/outgoing/www.beatportal.com/feed/item/introducing-beatports-beatbot/?referer=');">Beatport&#8217;s BeatBot</a>. I have not tried Genius, but I have tried BeatBot. It is a hit or miss feature, with greater emphasis on the miss. Understandably advising on something as complex as musical tastes is no easy task &#8211; and probably dangerous.</p>
<p>Genres in particular are very fluid. Even though we have <a href="http://en.wikipedia.org/wiki/List_of_music_styles" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/List_of_music_styles?referer=');">hundreds of genres and sub-genres</a>, it is not uncommon for there to be ambiguities and mixes of several types of genres. It took me a while to discover the difference between trance and house music, and even today it puzzles me. A lot of the blame is due to mislabelling or generalizing of artists and albums but that is another topic.</p>
<p>Musical preferences is also very different between people who like even the same genre of music, because the genre itself has changed and evolved. If you listen to <a href="http://www.youtube.com/watch?v=vQ3kdCN9jec" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=vQ3kdCN9jec&amp;referer=');">early dubstep (Girl from Codeine City by L-Wiz)</a> and <a href="http://www.youtube.com/watch?v=-acaGwNN85o&#038;feature=player_embedded" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=-acaGwNN85o_038_feature=player_embedded&amp;referer=');">more recent dubstep (Game Time by Zomboy)</a> tracks, they are two different sounds. Though, I&#8217;m fairly sure each classifies as their own sub-genre by now.</p>
<p>When you try to mix these two algorithmically, the results do not hold great promise. At least, in my case. If you ever listen to <a href="http://www.beatport.com/artist/tsubaki/149282" onclick="pageTracker._trackPageview('/outgoing/www.beatport.com/artist/tsubaki/149282?referer=');">tsubaki</a>, his sound is pretty unique. Beatbot will return some reggae (getting warmer), hip hop (colder), and dubstep (colder). Nothing of which sounds comparable.</p>
<p>Recently though, I found <a href="http://soundcloud.com/tsubaki_dubtech" onclick="pageTracker._trackPageview('/outgoing/soundcloud.com/tsubaki_dubtech?referer=');">tsubaki on soundcloud</a>. More importantly, soundcloud lets you see what other artists that artist is following. And I now found another artist that makes similar music &#8211; <a href="http://soundcloud.com/dubsalon" onclick="pageTracker._trackPageview('/outgoing/soundcloud.com/dubsalon?referer=');">dubsalon</a>. So here we have the artist recommending (or at least, listening) to another artist.</p>
<p>This is something that I think we should take advantage of, if not already (which I think we do not). This information is a bit more difficult to harvest, but might be more useful.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/324/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Thoughts on Rails</title>
		<link>http://tea.cesaroliveira.net/archives/319</link>
		<comments>http://tea.cesaroliveira.net/archives/319#comments</comments>
		<pubDate>Fri, 09 Sep 2011 01:30:16 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[programming]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=319</guid>
		<description><![CDATA[I have been working the past few weeks on Ruby on Rails web development framework. My experience with Ruby is minimal, so there was a large amount of learning and re-learning that was required. Working on it full-time for the past week or two, I reflected on some of the pros and cons of the [...]]]></description>
			<content:encoded><![CDATA[<p>I have been working the past few weeks on <a href="http://rubyonrails.org/" onclick="pageTracker._trackPageview('/outgoing/rubyonrails.org/?referer=');">Ruby on Rails</a> web development framework. My experience with Ruby is minimal, so there was a large amount of learning and re-learning that was required. Working on it full-time for the past week or two, I reflected on some of the pros and cons of the language and framework:</p>
<ul>
<li>Ruby blocks are *fantastic*. If you ever had to work with generating XML, I highly suggest <a href="http://nokogiri.org/" onclick="pageTracker._trackPageview('/outgoing/nokogiri.org/?referer=');">Nokogiri</a> to generate and parse XML documents. XPATH? Yes please! (Ok, XML sucks but when you have to use it, this library makes it painless)</li>
<li>Rails has a ton of shortcuts that make development easier. They have a ton of <a href="http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html" onclick="pageTracker._trackPageview('/outgoing/api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html?referer=');">HTML helpers</a> to auto-generate HTML. The framework takes some getting used, but it works quite well.</li>
<li>Rails expects you to develop a certain way. IMO, this a very negative attribute until you get used to it. Your controllers names MUST be plural (cashiers, merchants, etc). Your models MUST be singular (cashier, merchant, etc). Breaking the rules leads to frustration and headache.</li>
<li>Rails expects you to build a certain way. In my application, I did not need to use a database (everything is done using a REST service). But Rails makes this difficult to do.</li>
<li>The Rails installation procedure is easy, but a bit too easy <img src='http://tea.cesaroliveira.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  I managed to screw up a few times (shame on me) and just did <code>gem install rails</code>. That will install the latest Ruby on Rails on your machine. The problem is when I had to move my code to the server. Between development, rails went up a few versions (from 3.0.x to 3.1.x) and a lot of stuff broke. I wish at the time I knew I can install a specific version. Which leads me to&#8230;</li>
<li>Rails is difficult to update. Well, so are most frameworks. I think we need to get better at this developers&#8230;</li>
</ul>
<p>It is difficult to say whether I enjoy Rails or <a href="https://www.djangoproject.com/" onclick="pageTracker._trackPageview('/outgoing/www.djangoproject.com/?referer=');">Django</a>. I am definitely more comfortable with Django, but it is great getting to know both. I am still a newbie at Rails, so hopefully things get easier as I do more work on this.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/319/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WIND away is horseshit</title>
		<link>http://tea.cesaroliveira.net/archives/315</link>
		<comments>http://tea.cesaroliveira.net/archives/315#comments</comments>
		<pubDate>Sun, 28 Aug 2011 19:46:51 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=315</guid>
		<description><![CDATA[I recently had a problem with my WIND account. I was being charged data that I could not figure out where it was coming from. I had a social blackberry which allows unlimited Facebook/BBM/twitter which I use. When I try to access a website, my blackberry will stop me saying that I do not have [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had a problem with my <a href="http://www.windmobile.ca" onclick="pageTracker._trackPageview('/outgoing/www.windmobile.ca?referer=');">WIND</a> account. I was being charged data that I could not figure out where it was coming from. I had a social blackberry which allows unlimited Facebook/BBM/twitter which I use. When I try to access a website, my blackberry will stop me saying that I do not have a data plan.</p>
<p>I went to the WIND store and complained. They offered a solution where all data that was not covered under the plan would be disabled. That was an ideal solution, so I accepted it. I had to call customer service if I wanted to dispute the data charges.</p>
<p>A week later and I was still being charged data. I called them up to dispute the charges. After talking to a representative (two actually. The first one I lost connection with), it turns out that I was accessing data on a <a href="http://www.windmobile.ca/en/pages/storesandcoverage.aspx" onclick="pageTracker._trackPageview('/outgoing/www.windmobile.ca/en/pages/storesandcoverage.aspx?referer=');">WIND away zone</a>. The horseshit term they use when you are outside their network coverage.</p>
<p>I live/work/play in downtown Toronto&#8230;</p>
<p>The last data charge was around 8pm. That was about the time I was exiting the YMCA&#8230; in downtown Toronto.</p>
<p>If you check their coverage map, downtown Toronto saturated as a WIND Home zone. I was apparently hitting a WIND Away zone.</p>
<p>This isn&#8217;t unheard of, nor unique to WIND. A friend complained that Fido once charged him an obscene amount because he was hitting a US tower while in Victoria BC. Oh yes, that will be quite a bit of roaming.</p>
<p>I was refunded $2 as a one time good gesture. Because I switched numbers when I went to the WIND store, they could not refund me the amount from my previous number. It was a net loss of $14 on WIND&#8217;s crappy network coverage. The only solution they offer is to call WIND and have them remove any WIND away coverage. This is not ideal in the situation that I am in one of WIND&#8217;s away zone and I will need to use my phone in an (non-911) emergency. So I would have to remember to call and re-enable it. Very inconvenient. In fact, the correct solution is for WIND to deliver the coverage they promise. Maybe they should learn a thing or two from Verizon: </p>
<p><a href="http://youtu.be/OPwPo-IAQ-E" onclick="pageTracker._trackPageview('/outgoing/youtu.be/OPwPo-IAQ-E?referer=');">http://youtu.be/OPwPo-IAQ-E</a></p>
<p>I hope that network coverage improves. The offer really good rates, but at a major cost of reliability and coverage. I will be with them for at least the next few months until I can get my phone unlocked. Let&#8217;s see if I stick with them in the long run.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/315/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Beatport and Beatport5</title>
		<link>http://tea.cesaroliveira.net/archives/301</link>
		<comments>http://tea.cesaroliveira.net/archives/301#comments</comments>
		<pubDate>Mon, 22 Aug 2011 04:10:15 +0000</pubDate>
		<dc:creator>Cesar</dc:creator>
				<category><![CDATA[beatport5]]></category>
		<category><![CDATA[beatport]]></category>
		<category><![CDATA[html5]]></category>

		<guid isPermaLink="false">http://tea.cesaroliveira.net/?p=301</guid>
		<description><![CDATA[Beatport has recently unveiled their HTML version of their website. They then proceeded to launch a quasi job recruitment video explaining the benefits of the new website. Some of the points are valid (the site load time has really improved), but other points are really stretched or moot or misleading. For example they made a [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://beatport.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/beatport.com/?referer=');">Beatport</a> has <a href="https://twitter.com/#!/beatport/status/91603983810039808" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/beatport/status/91603983810039808?referer=');">recently</a> unveiled their HTML version of their website. They then proceeded to launch a <a href="http://www.youtube.com/watch?v=dNVjf8nOtMM" target="_blank" onclick="pageTracker._trackPageview('/outgoing/www.youtube.com/watch?v=dNVjf8nOtMM&amp;referer=');">quasi job recruitment video explaining the benefits of the new website</a>. Some of the points are valid (the site load time has really improved), but other points are really stretched or moot or misleading. For example they made a point of the new website containing the <acronym title="Beats per Minute">BPM</acronym> of a track. That&#8217;s just silly because their <a href="http://api.beatport.com/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/api.beatport.com/?referer=');">API</a> has that information, so there is no technical reason why they cannot have it on their flash website. Interestingly, the BPM only appears on the JSON version of the API and not the XML version and that&#8217;s just terrible. I expected more from people sporting impressive facial hair.</p>
<p>Overall I do like their new website. It is fast, clean, <a href="https://twitter.com/#!/Quextal/status/91867897806327809" target="_blank" onclick="pageTracker._trackPageview('/outgoing/twitter.com/_/Quextal/status/91867897806327809?referer=');">hackable</a>. I thought they were using the audio tag and doing some neat stuff to get the <a href="http://en.wikipedia.org/wiki/Waveform" target="_blank" onclick="pageTracker._trackPageview('/outgoing/en.wikipedia.org/wiki/Waveform?referer=');">waveform</a> but it turned out that was an image and they are still using flash. Which is probably the wisest thing to do but not very HTML5ish <img src='http://tea.cesaroliveira.net/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Having a HTML version of the website was also something I thought would be an interesting project (back when they only had a flash-only site). A few weeks ago, I decided to do one anyways, and launched <a href="http://beatport5.cesaroliveira.net/" target="_blank" onclick="pageTracker._trackPageview('/outgoing/beatport5.cesaroliveira.net/?referer=');">beatport5</a> &#8211; a HTML5 version of the website (I may end up renaming it). It has a few caveats:</p>
<ul>
<li>It&#8217;s pretty much not optimized for screens with a resolution under 1920&#215;1080 oops</li>
<li>It works best in Gecko browsers, needs improvement for webkit, and pretty terrible under trident browsers. Don&#8217;t even ask about anything under IE8</li>
<li>The playlist is not working yet</li>
<li>The search functionality is very simple. You can search for tracks, releases, artists or a global search. But you are not able to search for x track by y artist.</li>
<li>The landing page needs improvements</li>
<li>I am not working on this full-time</li>
</ul>
<p>Some interesting stuff:</p>
<ul>
<li>We both use DOM local storage. They seems to use it for their playlist queue. Neat!</li>
</ul>
<p>Some wishlist that I need to put on their mailing list:</p>
<ol>
<li>I would like to avoid hitting my server, so it would be great if their website enabled <a href="https://developer.mozilla.org/En/HTTP_access_control" target="_blank" onclick="pageTracker._trackPageview('/outgoing/developer.mozilla.org/En/HTTP_access_control?referer=');">HTTP access controls</a> for their API and mp3 files</li>
<li>Maybe a way to add stuff to their shopping cart?</li>
<li>There&#8217;s more but I&#8217;m drawing a blank&#8230;</li>
</ol>
<p>I haven&#8217;t really worked in what value I would add that isn&#8217;t already in the beatport site. I would like to incorporate the <a href="http://tea.cesaroliveira.net/archives/256">beatport flac converter</a> somehow. Likely anything meaningful I want to do would have to stored on my server. One experiment I would like to attempt is a way to discover music, much like the beatbot, but maybe less like it, and more awesome.</p>
<p>Why release this now? Release early, release often! It&#8217;s not complete, but I hope to spend time on it and be useful to me and others as well. My main concern right now is making this work cross-browser. Next is screen resolution fix, and an appropriate landing page.</p>
]]></content:encoded>
			<wfw:commentRss>http://tea.cesaroliveira.net/archives/301/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

