<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Food for the soul…. and for software development.

  var _gaq = _gaq || [];
  _gaq.push([‘_setAccount’, ‘UA-16336645-2’]);
  _gaq.push([‘_trackPageview’]);

  (function() {
    var ga = document.createElement(‘script’); ga.type = ‘text/javascript’; ga.async = true;
    ga.src = (‘https:’ == document.location.protocol ? ‘https://ssl’ : ‘http://www’) + ‘.google-analytics.com/ga.js’;
    var s = document.getElementsByTagName(‘script’)[0]; s.parentNode.insertBefore(ga, s);
  })();</description><title>Holy Caffeine</title><generator>Tumblr (3.0; @y3i12)</generator><link>http://y3i12.tumblr.com/</link><item><title>svn:propset [PreshWiki]</title><description>&lt;div class="posterous_autopost"&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote class="posterous_long_quote"&gt;&lt;h1&gt;&lt;a name="svn_properties_and_keywords"&gt;SVN Properties and keywords&lt;/a&gt;&lt;/h1&gt;  &lt;div class="level1"&gt;    &lt;p&gt;    To set properties use the &lt;code&gt;svn propset&lt;/code&gt; command.  &lt;/p&gt;    &lt;p&gt;  For example,  &lt;/p&gt;  &lt;div class="CodeRay"&gt;  &lt;div class="code"&gt;&lt;div class="CodeRay"&gt; &lt;div class="code"&gt;&lt;pre&gt;svn propset Author 'David Precious'&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;      &lt;/div&gt;    &lt;h2&gt;&lt;a name="svn_keywords"&gt;SVN Keywords&lt;/a&gt;&lt;/h2&gt;  &lt;div class="level2"&gt;    &lt;p&gt;    There are some useful keywords which can be set, the value of which will be substituted for &amp;#8216;tags&amp;#8217; in the file itself.  &lt;/p&gt;    &lt;p&gt;  The keywords are updated when the file is committed to the repository.  &lt;/p&gt;    &lt;p&gt;  Some of the useful ones are:    &lt;/p&gt;  &lt;ul&gt;&lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;$Revision&lt;/code&gt; (or &lt;code&gt;$LastChangedRevision&lt;/code&gt; or &lt;code&gt;$Rev&lt;/code&gt;) which will expand to the revision number the file was last updated in, like: &lt;code&gt;$Revision: 23 $&lt;/code&gt;&lt;/div&gt;  &lt;/li&gt;  &lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;$Id&lt;/code&gt; which will expand to &lt;code&gt;$Id: file.pl 23 2006-0901 13:05:51Z dave $&lt;/code&gt;&lt;/div&gt;  &lt;/li&gt;  &lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;$LastChangedDate&lt;/code&gt;, or &lt;code&gt;$Date&lt;/code&gt; - the date this revision was committed to the repo.&lt;/div&gt;  &lt;/li&gt;  &lt;li class="level1"&gt;&lt;div class="li"&gt; &lt;code&gt;$LastChangedBy&lt;/code&gt;, or &lt;code&gt;$Author&lt;/code&gt; - the name of the person who committed this version to the repo.&lt;/div&gt;  &lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;  To set the keywords which should be replaced, use:  &lt;/p&gt;  &lt;div class="CodeRay"&gt;  &lt;div class="code"&gt;&lt;div class="CodeRay"&gt; &lt;div class="code"&gt;&lt;pre&gt;svn propset svn:keywords 'Id Revision' file.pl&lt;/pre&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;  &lt;/div&gt;      &lt;p&gt;  Unless you use the &lt;code&gt;svn propset&lt;/code&gt; command above, the anchors (e.g. ”&lt;code&gt;$Id&lt;/code&gt;) will *not* be replaced with their value&amp;#8230; SVN will not mess with your file unless you&amp;#8217;ve explicitly told it to.&lt;/p&gt;&lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://wiki.preshweb.co.uk/doku.php?id=svn:propset" target="_blank"&gt;wiki.preshweb.co.uk&lt;/a&gt;&lt;/div&gt; &lt;p&gt;Very useful to print revisions and dates on the log.&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/7893522873</link><guid>http://y3i12.tumblr.com/post/7893522873</guid><pubDate>Thu, 21 Jul 2011 15:56:44 -0300</pubDate></item><item><title>Setup Guides: Installing Elegant Gnome on Ubuntu 10.10</title><description>&lt;div class="posterous_autopost"&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote class="posterous_long_quote"&gt;&lt;h3 class="post-title entry-title"&gt;&lt;a href="http://setupguides.blogspot.com/2010/10/installing-elegant-gnome-on-ubuntu-1010.html" target="_blank"&gt;Installing Elegant Gnome on Ubuntu 10.10&lt;/a&gt;  &lt;/h3&gt;  &lt;div class="post-body entry-content"&gt;  &lt;div&gt;One of my favourite things about Ubuntu is the ability to customize the UI and installing Elegant Gnome is one of the first things I do after a fresh installation.  Elegant Gnome is a theme pack that gives your desktop a very slick look(compared to the default theme) including matching Firefox and Chrome themes and an awesome icon set.&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;table class="tr-caption-container" align="center" style="margin-left: auto; margin-right: auto; text-align: center;"&gt;&lt;tr&gt;&lt;td style="text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_FLRm8Y7bVM0/TLNsAh0M2DI/AAAAAAAAAGI/SxLtJH7oP1k/s1600/Screenshot.png" style="margin-left: auto; margin-right: auto;" target="_blank"&gt;&lt;img src="http://2.bp.blogspot.com/_FLRm8Y7bVM0/TLNsAh0M2DI/AAAAAAAAAGI/SxLtJH7oP1k/s320/Screenshot.png" border="0" height="187" width="320"/&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class="tr-caption" style="text-align: center;"&gt;My netbook with Elegant Gnome showing the nautilus theme, also using Docky&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://setupguides.blogspot.com/2010/10/installing-elegant-gnome-on-ubuntu-1010.html" target="_blank"&gt;setupguides.blogspot.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/7533628182</link><guid>http://y3i12.tumblr.com/post/7533628182</guid><pubDate>Tue, 12 Jul 2011 11:50:00 -0300</pubDate></item><item><title>High Scalability - High Scalability - 35+ Use Cases for Choosing Your Next NoSQL Database</title><description>&lt;div class="posterous_autopost"&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;          &lt;p&gt;&lt;img src="http://farm5.static.flickr.com/4127/5188198566_3fe006d562_m.jpg" height="125" align="RIGHT" alt="" width="125"/&gt;&lt;/p&gt;  &lt;p&gt;We&amp;#8217;ve asked &lt;a href="http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html" target="_blank"&gt;What The Heck Are You Actually Using NoSQL For?&lt;/a&gt;. We&amp;#8217;ve asked &lt;a href="http://highscalability.com/blog/2011/6/15/101-questions-to-ask-when-considering-a-nosql-database.html" target="_blank"&gt;101 Questions To Ask When Considering A NoSQL Database&lt;/a&gt;. We&amp;#8217;ve even had a &lt;a href="http://voltdb.com/resources/webinars-all" target="_blank"&gt;webinar&lt;/a&gt; &lt;a href="http://www.slideshare.net/toddhoffious/what-should-ido-11" target="_blank"&gt;What Should I Do? Choosing SQL, NoSQL or Both for Scalable Web Applications&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Now we get to the point of considering use cases and which systems might be appropriate for those use cases.&lt;/p&gt;  &lt;h3&gt;What are your options?&lt;/h3&gt;  &lt;p&gt;First, let&amp;#8217;s cover what are the various data models. These have been adapted from &lt;a href="http://blogs.neotechnology.com/emil/2009/11/nosql-scaling-to-size-and-scaling-to-complexity.html" target="_blank"&gt;Emil Eifrem&lt;/a&gt; and &lt;a href="http://nosql-database.org/" target="_blank"&gt;NoSQL databases&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Document Databases&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Inspired by Lotus Notes.&lt;/li&gt;  &lt;li&gt;Data model: Collections of documents, which contain key-value collections.&lt;/li&gt;  &lt;li&gt;Example: CouchDB, MongoDB &lt;/li&gt;  &lt;li&gt;Good at: Natural data modeling. Programmer friendly. Rapid development. Web friendly, CRUD.&lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;  &lt;/p&gt;&lt;div&gt;&lt;strong&gt;Graph Databases&lt;/strong&gt;&lt;/div&gt;  &lt;div&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Euler and graph theory.&lt;/li&gt;  &lt;li&gt;Data model: Nodes &amp;amp; relationships, both which can hold key-value pairs&lt;/li&gt;  &lt;li&gt;Example: AllegroGraph, InfoGrid, Neo4j&lt;/li&gt;  &lt;li&gt;Good at:  Rock complicated graph problems. Fast.&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;  &lt;p&gt;  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;div&gt;&lt;strong&gt;Relational Databases&lt;/strong&gt;&lt;/div&gt;  &lt;div&gt;  &lt;ul&gt;&lt;li&gt;Lineage: E. F. Codd in &lt;a href="http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf" target="_blank"&gt;A Relational Model of Data for Large Shared Data Banks&lt;/a&gt;&lt;/li&gt;  &lt;li&gt;Data Model: a set of relations&lt;/li&gt;  &lt;li&gt;Example: VoltDB,  Clustrix, MySQL&lt;/li&gt;  &lt;li&gt;Good at: High performing, scalable OLTP. SQL access. Materialized views. Transactions matter. Programmer friendly transactions.&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;  &lt;p&gt;&lt;strong&gt;Object Oriented Databases&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Graph Database Research&lt;/li&gt;  &lt;li&gt;Data Model: Objects&lt;/li&gt;  &lt;li&gt;Example: Objectivity, Gemstone&lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Key-Value Stores&lt;/strong&gt;&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Amazon&amp;#8217;s &lt;a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html" style="cursor: text;" target="_blank"&gt;Dynamo paper&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Distributed_hash_table" style="cursor: text;" target="_blank"&gt;Distributed HashTables&lt;/a&gt;.&lt;/li&gt;  &lt;li&gt;Data model: A global collection of KV pairs.&lt;/li&gt;  &lt;li&gt;Example: Membase, Riak&lt;/li&gt;  &lt;li&gt;Good at: Handles size well. Processing a constant stream of small reads and writes. Fast. Programmer friendly.&lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;  &lt;/p&gt;&lt;div&gt;&lt;strong&gt;BigTable Clones &lt;/strong&gt;&lt;/div&gt;  &lt;div style="font-weight: normal;"&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Google&amp;#8217;s &lt;a href="http://labs.google.com/papers/bigtable.html" style="cursor: text;" target="_blank"&gt;BigTable paper&lt;/a&gt;.&lt;/li&gt;  &lt;li&gt;Data model: Column family, i.e. a tabular model where each row at least in theory can have an individual configuration of columns.&lt;/li&gt;  &lt;li&gt;Example: HBase, Hypertable, Cassandra&lt;/li&gt;  &lt;li&gt;Goog at: Handles size well. Stream massive write loads. High availability. Multiple-data centers. MapReduce.&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;  &lt;p&gt;  &lt;/p&gt;&lt;p&gt;  &lt;/p&gt;&lt;div&gt;&lt;strong&gt;Data Structure Servers&lt;/strong&gt;&lt;/div&gt;  &lt;div style="font-weight: normal;"&gt;  &lt;ul&gt;&lt;li&gt;Lineage:&amp;#160;?&lt;/li&gt;  &lt;li&gt;Example: Redis&lt;/li&gt;  &lt;li&gt;Data model: Operations over dictionaries, lists, sets and string values.&lt;/li&gt;  &lt;li&gt;Good at: Quirky stuff you never thought of using a database for before.&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;  &lt;p&gt;  &lt;/p&gt;&lt;div&gt;&lt;strong&gt;Grid Databases&lt;/strong&gt;&lt;/div&gt;  &lt;div style="font-weight: normal;"&gt;  &lt;ul&gt;&lt;li&gt;Lineage: Data Grid and Tuple Space research.&lt;/li&gt;  &lt;li&gt;Data Model: Space Based Architecture&lt;/li&gt;  &lt;li&gt;Example: GigaSpaces, Coherence&lt;/li&gt;  &lt;li&gt;Good at: High performance and scalable transaction processing.&lt;/li&gt;  &lt;/ul&gt;&lt;/div&gt;  &lt;h3&gt;What should your application use?&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;Key point is to rethink how your application could work differently in terms of the different data models and the different products. Right data model for the right problem. Right product for the right problem.&lt;/li&gt;  &lt;li&gt;To see what models might help your application take a look at &lt;span style="color: #000000;"&gt;&lt;a href="http://highscalability.com/blog/2010/12/6/what-the-heck-are-you-actually-using-nosql-for.html" target="_blank"&gt;What The Heck Are You Actually Using NoSQL For?&lt;/a&gt;&lt;/span&gt;&lt;span&gt; In this article I tried to pull together a lot of unconventional use cases of the different qualities and features developers have used in building systems. &lt;/span&gt;&lt;/li&gt;  &lt;li&gt;Match what you need to do with these use cases. From there you can backtrack to the products you may want to include in your architecture. NoSQL, SQL, it doesn&amp;#8217;t matter.&lt;/li&gt;  &lt;li&gt;Look at Data Model   Product Features   Your Situation. Products have such different feature sets it&amp;#8217;s almost impossible to recommend by pure data model alone.&lt;/li&gt;  &lt;li&gt;&lt;span&gt;Which option is best is determined by your priorities.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt; If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;strong&gt;complex transactions&lt;/strong&gt; because you can&amp;#8217;t afford to lose data or if you would like a simple transaction programming model then look at a Relational or Grid database.                    &lt;ul&gt;&lt;li&gt;Example: an inventory system that might want full ACID. I was very unhappy when I bought a product and they said later they were out of stock. I did not want a compensated transaction. I wanted my item!&lt;/li&gt;  &lt;/ul&gt;&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;to scale&lt;/strong&gt; then NoSQL or SQL can work. Look for systems that support scale-out, partitioning, live addition and removal of machines, load balancing, automatic sharding and rebalancing, and fault tolerance.&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to &lt;strong&gt;always&lt;/strong&gt; be able to &lt;strong&gt;write&lt;/strong&gt; to a database because you need high availability then look at Bigtable Clones which feature eventual consistency.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to handle lots of &lt;strong&gt;small continuous reads and writes&lt;/strong&gt;, that may be volatile, then look at Document or Key-value or databases offering fast in-memory access. Also consider SSD.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;t&lt;span style="font-family: arial, sans-serif;"&gt;o implement &lt;strong&gt;social network operations&lt;/strong&gt; then you first may want a Graph database or second, a database like Riak that supports relationships. An in- memory &lt;/span&gt;&lt;span style="font-family: arial, sans-serif;"&gt;relational database with simple SQL joins might suffice for small data sets. Redis&amp;#8217; set and list operations could work too.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;span&gt;to operate over a &lt;strong&gt;wide variety &lt;/strong&gt;of&lt;strong&gt; access patterns&lt;/strong&gt; and &lt;strong&gt;data types&lt;/strong&gt; then look at a Document database, they generally are flexible and perform well.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;powerful &lt;strong&gt;offline reporting&lt;/strong&gt; with &lt;strong&gt;large datasets&lt;/strong&gt; then look at Hadoop first and second, products that support MapReduce. Supporting MapReduce isn&amp;#8217;t the same as being good at it.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to &lt;strong&gt;span multiple data-centers&lt;/strong&gt; then look at Bigtable Clones and other products that offer a distributed option that can handle the long latencies and are partition tolerant.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to build &lt;strong&gt;CRUD&lt;/strong&gt; apps then look at a Document database, they make it easy to access complex data without joins. &lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;built-in &lt;strong&gt;search&lt;/strong&gt; then look at Riak.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to operate on &lt;strong&gt;data structures&lt;/strong&gt; like lists, sets, queues, publish-&lt;/span&gt;&lt;span&gt;subscribe&lt;/span&gt;&lt;span&gt; then look at Redis. Useful for distributed locking, capped logs, and a lot more.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;&lt;strong&gt;programmer friendliness&lt;/strong&gt; in the form of programmer friendly data types like JSON, HTTP, REST, Javascript then first look at Document databases and then Key-value Databases.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;&lt;strong&gt;transactions&lt;/strong&gt; combined with &lt;strong&gt;materialized views&lt;/strong&gt; for &lt;strong&gt;real-time&lt;/strong&gt; data feeds then look at VoltDB. Great for data-rollups and time windowing.&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;enterprise level support&lt;/strong&gt; and &lt;strong&gt;SLAs&lt;/strong&gt; then look for a product that makes a point of catering to that market. Membase is an example.&lt;/li&gt;  &lt;li&gt;to log &lt;strong&gt;continuous streams&lt;/strong&gt; of data that may have no consistency guarantees necessary at all then look at Bigtable Clones because they generally work on distributed file systems that can handle a lot of writes.&lt;/li&gt;  &lt;li&gt;to be as &lt;strong&gt;simple as possible&lt;/strong&gt; to operate then look for a hosted or PaaS solution because they will do all the work for you.&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to be sold to &lt;strong&gt;enterprise customers&lt;/strong&gt; then consider a Relational Database because they are used to relational technology.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to&lt;strong&gt; dynamically&lt;/strong&gt; build &lt;strong&gt;r&lt;/strong&gt;&lt;strong&gt;elationships&lt;/strong&gt; between objects that have &lt;strong&gt;dynamic properties&lt;/strong&gt; then consider a Graph Database because often they will not require a schema and models can be built incrementally through programming.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to support &lt;strong&gt;large media&lt;/strong&gt; then look storage services like S3. NoSQL systems tend not to handle large BLOBS, though MongoDB has a file service.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;to &lt;strong&gt;bulk upload&lt;/strong&gt; lots of data quickly and efficiently then look for a product supports that scenario. Most will not because they don&amp;#8217;t support bulk operations.&lt;/li&gt;  &lt;li&gt;an &lt;strong&gt;easier upgrade path&lt;/strong&gt; then use a fluid schema system like a Document Database or a Key-value Database because it supports optional fields, adding fields, and field deletions without the need to build an entire schema migration framework.&lt;/li&gt;  &lt;li&gt;to implement &lt;strong&gt;integrity constraints&lt;/strong&gt; then pick a database that support SQL DDL, implement them in stored procedures, or implement them in application code.&lt;/li&gt;  &lt;li&gt;a very deep join depth the use a Graph Database because they support blisteringly fast navigation between entities.&lt;/li&gt;  &lt;li&gt;&lt;span style="font-family: arial, sans-serif;"&gt;&lt;span&gt;to move &lt;strong&gt;behavior close to the data&lt;/strong&gt; so the data doesn&amp;#8217;t have to be moved over the network then look at stored &lt;/span&gt;&lt;span&gt;procedures&lt;/span&gt;&lt;span&gt; of one kind or another. These can be found in Relational, Grid, Document, and even Key-value databases.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;to &lt;strong&gt;cache or store BLOB data&lt;/strong&gt; then look at a Key-value store. Caching can for bits of web pages, or to save complex objects that were expensive to join in a relational database, to reduce latency, and so on.&lt;/li&gt;  &lt;li&gt;a &lt;strong&gt;proven track record&lt;/strong&gt; like not corrupting data and just generally working then pick an established product and when you hit scaling (or other issues) use on of the common workarounds (scale-up, tuning, memcached, sharding, denormalization, etc).&lt;/li&gt;  &lt;li&gt;&lt;strong&gt;fluid data types&lt;/strong&gt; because your data isn&amp;#8217;t tabular in nature, or requires a flexible number of columns, or has a complex structure, or varies by user (or whatever), then look at Document, Key-value, and Bigtable Clone databases. Each has a lot of flexibility in their data types.&lt;/li&gt;  &lt;li&gt;other business units to &lt;strong&gt;run quick relational queries&lt;/strong&gt; so you don&amp;#8217;t have to reimplement everything then use a database that supports SQL.&lt;/li&gt;  &lt;li&gt;to operate in the cloud and automatically take full advantage of cloud features then we may not be there yet.   &lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;If your application needs&amp;#8230;&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;support for &lt;strong&gt;secondary indexes&lt;/strong&gt; so you can look up data by different keys then look at relational databases and Cassandra&amp;#8217;s new secondary index support.&lt;/li&gt;  &lt;li&gt;&lt;span&gt;creates an &lt;strong&gt;ever-growing set of data&lt;/strong&gt; (really BigData) that rarely gets accessed then look at Bigtable Clone which will spread the data over a distributed file system.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to &lt;strong&gt;integrate with other services&lt;/strong&gt; then check if the database provides some sort of write-&lt;/span&gt;&lt;span&gt;behind&lt;/span&gt;&lt;span&gt; syncing feature so you can capture database changes and feed them into other systems to ensure consistency.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;&lt;strong&gt;fault tolerance&lt;/strong&gt; check how durable writes are in the face power failures, partitions, and other failure scenarios.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to &lt;strong&gt;push&lt;/strong&gt; the &lt;strong&gt;technological&lt;/strong&gt; envelope in a direction nobody seems to be going then build it yourself because that&amp;#8217;s what it takes to be great sometimes.&lt;/span&gt;&lt;/li&gt;  &lt;li&gt;&lt;span&gt;to work on a &lt;strong&gt;mobile platform&lt;/strong&gt; then look at CouchDB/&lt;a href="http://www.couchbase.com/products-and-services/mobile-couchbase" target="_blank"&gt;Mobile couchbase&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;  &lt;/ul&gt;&lt;h3&gt;Which is Better?&lt;/h3&gt;  &lt;ul&gt;&lt;li&gt;Moving for a 25% improvement is probably not a reason to go NoSQL.&lt;/li&gt;  &lt;li&gt;Benchmark relevancy depends on the use case. Does it match your situation(s)?&lt;/li&gt;  &lt;li&gt;Are you a startup that needs to release a product as soon as possible and you are playing around with ideas? Both SQL and NoSQL can make an argument.&lt;/li&gt;  &lt;li&gt;Performance may be equal on one box, but what happens when you need N?&lt;/li&gt;  &lt;li&gt;Everything has problems, if you look at Amazon forums it&amp;#8217;s EBS is slow, or my instances won&amp;#8217;t reply, etc. For GAE it&amp;#8217;s the datastore is slow or X. Every product which people are using will have problems. Are you OK with the problems of the system you&amp;#8217;ve selected?&lt;/li&gt;  &lt;/ul&gt;&lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://highscalability.com/blog/2011/6/20/35-use-cases-for-choosing-your-next-nosql-database.html?utm_source=feedburner&amp;amp;utm_medium=feed&amp;amp;utm_campaign=Feed%3A+HighScalability+%28High+Scalability%29&amp;amp;utm_content=Netvibes" target="_blank"&gt;highscalability.com&lt;/a&gt;&lt;/div&gt; &lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/6732297526</link><guid>http://y3i12.tumblr.com/post/6732297526</guid><pubDate>Mon, 20 Jun 2011 17:21:21 -0300</pubDate></item><item><title>Microjs: Fantastic Micro-Frameworks and Micro-Libraries for Fun and Profit!</title><description>&lt;div class="posterous_autopost"&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;  &lt;p&gt;&lt;strong&gt;&lt;span&gt;Fantastic&lt;/span&gt;&lt;span&gt; Micro&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Frameworks&lt;/span&gt;&lt;span&gt; and&lt;/span&gt;&lt;br/&gt;&lt;span&gt;Micro&lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;Libraries&lt;/span&gt;&lt;span&gt; for&lt;/span&gt;&lt;span&gt; Fun&lt;/span&gt;  &lt;span&gt;and&lt;/span&gt;&lt;span&gt; Profit&lt;/span&gt;&lt;span&gt;!&lt;/span&gt;&lt;/strong&gt;  &lt;/p&gt;  &lt;p&gt;How much library code do you really need — 50K? 100K? 150K? More? How  much of that do you really use?&lt;/p&gt;    &lt;p&gt;Sure, we all love our favorite monolithic frameworks, and sometimes we  even use them fully. But how often do we reach for the ride-on John  Deere tractor with air conditioning and six-speaker sound system, when  a judiciously applied pocketknife would do the trick better, faster,  slicker?&lt;/p&gt;    &lt;p&gt;Micro-frameworks are definitely the pocketknives of the JavaScript  library world: short, sweet, to the point. And at 5k and under,  micro-frameworks are very very portable. A micro-framework does one  thing and one thing only — and does it well. No cruft, no featuritis,  no feature creep, no excess anywhere.&lt;/p&gt;    &lt;p&gt;Microjs.com helps you discover the most compact-but-powerful  microframeworks, and makes it easy for you to pick one that’ll work  for you.&lt;/p&gt;    &lt;p&gt;Want to add your own?  &lt;a href="https://github.com/madrobby/microjs.com" target="_blank"&gt;Fork this site on GitHub&lt;/a&gt;,  add your framework to data.js and submit a pull request.&lt;/p&gt;    &lt;p style="margin-top: 30px;"&gt;  &lt;strong&gt;&lt;span&gt;Can&amp;#8217;t&lt;/span&gt; &lt;span&gt;get&lt;/span&gt; &lt;span&gt;enough&lt;/span&gt;&lt;span&gt;?&lt;/span&gt;&lt;/strong&gt;  &lt;/p&gt;  &lt;p&gt;  &lt;a href="http://140byt.es/" target="_blank"&gt;140byt.es&lt;/a&gt; provides  tweet-sized JavaScript goodness!  &lt;/p&gt;  &lt;/div&gt;&lt;/blockquote&gt;    &lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://microjs.com/" target="_blank"&gt;microjs.com&lt;/a&gt;&lt;/div&gt; &lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/6471330124</link><guid>http://y3i12.tumblr.com/post/6471330124</guid><pubDate>Sun, 12 Jun 2011 21:27:30 -0300</pubDate></item><item><title>Music, please!</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;This is what I always remember when I do think about music - &lt;a href="http://www.youtube.com/watch?v=4h-O1R7iXqk" title="Bingo, Bingo the clowno!" target="_blank"&gt;Bingo, the clown!&lt;/a&gt;. Although I do remember that, I&amp;#8217;ll just post a music made some time ago when I was &amp;#8220;musically active and productive&amp;#8221;.&lt;/p&gt;  &lt;p&gt;Unfortunately the project called &amp;#8220;Int21&amp;#8221; do not exist anymore&amp;#8230; sad&amp;#8230;&lt;/p&gt;  &lt;p&gt;The song name is Ciphian, just because it was composed to a project that used Cipher Game Engine. This project consisted in a electronic visit card for the company that I was working at the time: Eleven Cells.&lt;/p&gt;  &lt;p&gt;The music used in the visit card suffered lots of modifications until it became the version that I&amp;#8217;m posting right now.&lt;/p&gt;&lt;div class="p_embed p_audio_embed"&gt; &lt;a href="http://y3i12.posterous.com/music-please" target="_blank"&gt;&lt;img alt="" src="http://posterous.com/images/filetypes/unknown.png"/&gt;&lt;/a&gt; &lt;div class="p_embed_description"&gt; &lt;span class="p_id3"&gt;int21_-_ciphian_v1.ogg&lt;/span&gt; &lt;a href="http://y3i12.posterous.com/music-please" target="_blank"&gt;Listen on Posterous&lt;/a&gt; &lt;/div&gt; &lt;/div&gt; &lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/6367140743</link><guid>http://y3i12.tumblr.com/post/6367140743</guid><pubDate>Thu, 09 Jun 2011 20:46:17 -0300</pubDate></item><item><title>IPv4 variable reference</title><description>&lt;div class="posterous_autopost"&gt;&lt;div class="posterous_bookmarklet_entry"&gt; &lt;blockquote&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="VARIABLEREFERENCE"&gt;Chapter 3. IPv4 variable reference&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This chapter will go through each and one of the IPv4 variables possible  to set via sysctl or the proc filesystem. You will be provided with a  basic explanation on what behaviour the variable will change and how, as  well as default behaviour, if possible, and what values the variable may  be set to. We will not go into any deeper discussion about why each  variable should be changed unless there are any very normal reasons to  change the values. The structure used within this reference chapter will  follow the same structure as the structure used within ipsysctl structure,  as well as the default ipv4 directory being further structured due to its  large size and mix of many different variables.  &lt;/p&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN234"&gt;3.1. IP Variables&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This list contains all of the variables available in a standard 2.4.x kernel  that pertains to the IP settings. As you will see, there is a huge set of  them, and some should be properly set from the beginning for you, and others  may not be so properly set. Most of them should look quite proper, however,  some do require some extra configuration depending on your needs, but most  should be decently set for you as is.  &lt;/p&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN237"&gt;3.1.1. ip_autoconfig&lt;/a&gt;&lt;/h3&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN240"&gt;3.1.2. ip_default_ttl&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_default_ttl variable tells the kernel what Time To Live to set as  default on packets that leaves this host. This tells how long the packets may  live on the internet before they are dropped. Each time the packet passes a  router, firewall, computer, etcetera, the TTL is decremented with one step.  &lt;/p&gt;&lt;p&gt; The default value for ip_default_ttl is 64, which is a fairly  good TTL which will not cause too much trouble. It is very unlikely to  time out in transit to the host in question. This variable takes an  unsigned integer, but the actual TTL field is only 8 bit long. The value  may in other words be as high as 255 and as low as 0, however 255 could be  considered rude and 0 wouldn&amp;#8217;t leave your computer at all. 64 is a good  value, unless you are trying to connect to computers extremely far away  counted in hops or jumps. These would then time out. As it looks today, I  have pretty much never seen a host that lives more than 30 hops away on  the internet, so I don&amp;#8217;t think there is any need to make this value higher  than the default value for now.  &lt;/p&gt;&lt;p&gt;Setting the TTL to 255 would be considered rude since this would make a  packet live an extremely long time on the internet. If there would be a  glitch in 2 routers, this packet could bounce back and forth for a huge amount  of time, eating away on the bandwidth without any reason at all. Normally,  don&amp;#8217;t set this value higher than 100 or something alike.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN245"&gt;3.1.3. ip_dynaddr&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_dynaddr variable is used to allow a few problems with dynamic  addressing to be fixed. This allows diald oneshot connections to get  established by dynamically changing packet source address, and sockets if  local processes. This option was implemented for TCP diald-box connections and  Masquerading connections. Masquerading will in other words work 100% with this  option, letting Masquerading switch source adress of packets if the boxes own  address change.  &lt;/p&gt;&lt;p&gt;This option takes an integer, but only makes use of 3 possible states, 0, 1 or  2.  &lt;/p&gt;&lt;ul&gt;&lt;li style=""&gt;&lt;p&gt;0 means that this option is turned off, which is also the  default behaviour.&lt;/p&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;p&gt;1 means that the option is enabled and  running.&lt;/p&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;p&gt;Any non 0 or 1 values means that we have  turned on verbose mode, which in turn will add extra debugging messages that  you may use to get things to work properly.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If this variable is turned on and forwarding interface changes, this is what  may happen  &lt;/p&gt;&lt;ul&gt;&lt;li style=""&gt;&lt;p&gt;Socket and packet source address is rewritten on  retransmissions while in SYN_SENT state. This is the diald-box  processes.&lt;/p&gt;&lt;/li&gt;&lt;li style=""&gt;&lt;p&gt;Outbound masqueraded source address changes on  output, when internal host does retransmission, until a packet from the  outside is received by the tunnel.&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is especially helpful for auto-dialup links (diald), where the actual  outgoing address is unknown at the moment the link is going up. This enables  the same, local and masqueraded, connection requests that brought the link up  to actually establish their connections. This means that we will not have to  first issue an connection request just to bring the connection up, and then  have to issue the &amp;#8220;real&amp;#8221; connection request when we have actually established  the connection.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN263"&gt;3.1.4. ip_forward&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_forward variable is used to turn IP forwarding on or off. This means  that we can turn off the functions for forwarding packets between interfaces,  which lets the computer act as a firewall, or router. Note that this is an  extremely important variable for Network Address Translation, firewalling,  routing, masquerading, and all other things where we actually let packets  through the box to another network, as you can understand.  &lt;/p&gt;&lt;p&gt;This is an boolean variable. In other words, it will take a 1 or a 0. The  default value for this variable is 0, or disabled. As you can understand, 0  means disabled and 1 means enabled.  &lt;/p&gt;&lt;p&gt;Note that this is an very special variable since it will reset all  configuration parameters to their default states if it is changed. For a  complete list of the exact states, look closer at &lt;a href="http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/variablereference.html#" target="_top"&gt;RFC1122&lt;/a&gt; for hosts and &lt;a href="http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/variablereference.html#" target="_top"&gt;RFC1812&lt;/a&gt; for routers.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN270"&gt;3.1.5. ip_local_port_range&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_local_port_range variable consists of two integers which tells the  kernel which ports to use for client connections. This means, all connections  going from our box to some other box and where we are the client. The first  port is the lower bound and the second one is the upper bound.  &lt;/p&gt;&lt;p&gt;The default value in this variable depends on how much memory you have. If you  have more than 128 megabytes of physical memory, the lower bound will be 32768  and the upper bound will be 61000. If the computer has less than 128 megabytes  of physical memory, the lower bound will be 1024 and the upper bound will be  4999, or even less.  &lt;/p&gt;&lt;p&gt;This number defines the possible active connections which this system can  issue  simultaneously (ie, at the same time) to other systems that does not support  the TCP extension timestamps.  &lt;/p&gt;&lt;p&gt;If you have tcp_tw_recycle enabled (the default behaviour) range 1024-4999 is  enough to issue up to 2000 connections per second to systems supporting  timestamps. In other words, this should be more than enough for most of us.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN276"&gt;3.1.6. ip_no_pmtu_disc&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_no_pmtu_disc disables PMTU (Path Maximum Transfer Unit) discovery if  enabled. In most cases this is good, so it is per default set to FALSE (ie,  Path Maximum Transfer Unit is used). However, in some cases this is bad and  may lead to broken connectivity. If you are experiencing problems like this,  you should turn this option off and set your MTU to a reasonable value  yourself.  &lt;/p&gt;&lt;p&gt;Do note that MTU and PMTU are two different things. MTU tells the kernel the  maximum transfer unit for our connection, but not over the whole connection  to the other end. PMTU discovery tries to discover the maximum transfer unit  to specific hosts, including all the intermediate hops on the way there.  &lt;/p&gt;&lt;p&gt;The default value is that the ip_no_pmtu_disc is FALSE, as already stated. If  this is set to TRUE, PMTU discovery is turned off. The ip_no_pmtu_disc takes  a boolean value, in other words either an 1 or a 0, where 1 is on and 0 is  off.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN281"&gt;3.1.7. ip_nonlocal_bind&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ip_nonlocal_bind variable allows us to set if local processes should be  able to bind to non-local IP addresses. This could be quite useful, in such  cases where we want specific programs or applications to be able to listen to  non-local IP adresses, such as sniffing for traffic to a specific host  which may commit bad things, etcetera. The variable may, however,  break some applications and they will no longer work.  &lt;/p&gt;&lt;p&gt;The ip_nonlocal_bind variable takes a boolean value which can be set to 1 or  0. If the variable is set to 0, this option is turned off and if it is set to  1 it is turned on. The default value is to turn this option off, or 0 in other  words.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN285"&gt;3.1.8. ipfrag_high_thresh&lt;/a&gt;&lt;/h3&gt;&lt;p&gt; The ipfrag_high_thresh tells the kernel the maximum amount of  memory to use to reassemble IP fragments. When and if the high threshold  is reached, the fragment handler will toss all packets until the memory  usage reaches ipfrag_low_thresh instead. This means that all fragments  that reached us during this time will have to be retransmitted.  &lt;/p&gt;&lt;p&gt;Packets are fragmented if they are too large to pass through a certain  pipe. If they are to large, the box that is trying to transmit them breaks  them down into smaller pieces and send each piece one by one. When these  fragments reaches their destination, they need to be defragmented (ie, put  together again) to be read properly. Note that IP Fragmentation are in  general a good thing, but there are a lot of people that do bad things  with them since fragments are inherently a security problem.  &lt;/p&gt;&lt;p&gt;The ipfrag_high_thresh variable takes an integer value, which would mean 0  through 2147483647 bytes can be assigned to be the upper limit of this  function. The default value is 262144 bytes, or 256 kilobytes, which   should work well in even the most extreme cases.   &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN290"&gt;3.1.9. ipfrag_low_thresh&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;This option has a lot to do with the ipfrag_high_thresh option. The  ipfrag_low_thresh is the lower limit at which packets should start being  assembled again. What this means, all in all, is that our fragmentation  handler has an queue that grows larger the more packets are waiting in the  queue to be defragmentized, when this queue grows to ipfrag_high_thresh byte  size, the fragmentation handler queue will stop queueing any further fragments  until we reach the ipfrag_low_thresh again. This stops our system from being  overloaded with fragmentized packets and may stop certain Denial of Service  attacks.  &lt;/p&gt;&lt;p&gt; This variable takes an integer value between 0 and 2147483647,  and refers to the amount of bytes used at which the fragmentation handler  should resume the receiving of IP fragments again. Per default it is set  to 196608 bytes, or 192 kilobytes which should be a reasonable amount of  memory set aside for this task even in the hardest of attacks. This value  should be lower than ipfrag_high_thresh, or else it will be invalid.  &lt;/p&gt;&lt;/div&gt;&lt;div&gt;&lt;h3&gt;&lt;a name="AEN294"&gt;3.1.10. ipfrag_time&lt;/a&gt;&lt;/h3&gt;&lt;p&gt;The ipfrag_time variable tells the IP fragmentation handler how long to keep  an IP fragment in memory, counted in seconds. This only refers to fragments  that has been impossible to reassemble since fragments that has been assembled  most probably has already been sent on to either the next layer, or to the  next host.  &lt;/p&gt;&lt;p&gt;The ipfrag_time variable takes an integer as its input and the value is  counted as seconds. In other words, if you input 5 to this variable, it counts  as 5 seconds.  &lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div class="posterous_quote_citation"&gt;via &lt;a href="http://www.frozentux.net/ipsysctl-tutorial/chunkyhtml/variablereference.html" target="_blank"&gt;frozentux.net&lt;/a&gt;&lt;/div&gt; &lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/6006180016</link><guid>http://y3i12.tumblr.com/post/6006180016</guid><pubDate>Mon, 30 May 2011 14:36:48 -0300</pubDate></item><item><title>VirtualBox Hell</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;I&amp;#8217;ve been using &lt;a href="http://www.virtualbox.org" target="_blank"&gt;VirtualBox&lt;/a&gt; over the last few weeks and it is really interesting. Just works for testing and some development, but when it was installed on Ubuntu a little ugly message appeared:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Failed to access the usb sybsystem&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Googling around I found a &lt;a href="http://ubuntuforums.org/showthread.php?t=1738206" target="_blank"&gt;very wise post&lt;/a&gt; that make everything work perfectly with just one line of shell:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;if [ "`grep vboxusers /etc/group|grep $USER`" == "" ] ; then sudo usermod -G vboxusers -a $USER ; fi&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;After typing (or pasting) this line, just press enter and type in the sudoer password. It just works =).&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/5235522250</link><guid>http://y3i12.tumblr.com/post/5235522250</guid><pubDate>Fri, 06 May 2011 00:50:16 -0300</pubDate></item><item><title>VirtualBox Hell</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;I&amp;#8217;ve been using &lt;a href="http://www.virtualbox.org" target="_blank"&gt;VirtualBox&lt;/a&gt; over the last few weeks and it is really interesting. Just works for testing and some development, but when it was installed on Ubuntu a little ugly message appeared:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: Verdana, Arial, Tahoma; font-size: 12px;"&gt;Failed to access the usb sybsystem&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Googling around I found a &lt;a href="http://ubuntuforums.org/showthread.php?t=1738206" target="_blank"&gt;very wise post&lt;/a&gt; that make everything work perfectly with just one line of shell:&lt;/p&gt;  &lt;p&gt;&lt;code&gt;if [ "`grep vboxusers /etc/group|grep $USER`" == "" ] ; then sudo usermod -G vboxusers -a $USER ; fi&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;code&gt; &lt;/code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;code&gt;After typing (or pasting) this line, just press enter and type in the sudoer password. It just works =).&lt;/code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;p&gt;&lt;code&gt;&lt;code&gt; &lt;/code&gt;&lt;/code&gt;&lt;/p&gt;  &lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/5235492175</link><guid>http://y3i12.tumblr.com/post/5235492175</guid><pubDate>Fri, 06 May 2011 00:48:53 -0300</pubDate></item><item><title>Ubuntu, Wireless and Flash 10 on 64bit Dell Notebooks</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;Okie dokie. I &amp;#8220;have&amp;#8221; a Dell Vostro 1000 that I use for the work and I decided to install &lt;a href="http://www.xubuntu.org/" target="_blank"&gt;Xubuntu&lt;/a&gt; with &lt;a href="http://www.ubuntu.com/desktop/get-ubuntu/windows-installer" target="_blank"&gt;WUBI&lt;/a&gt; on it. The main instalation was very easy and the &lt;a href="http://www.xubuntu.org/" target="_blank"&gt;Xubuntu&lt;/a&gt; is very lightweight running very well in a &lt;a href="http://en.wikipedia.org/wiki/Sempron" target="_blank"&gt;Sempron&lt;/a&gt; with 1GB of RAM.&lt;/p&gt;  &lt;p&gt;But as expected, nothing is perfect. First problem: the WiFi card didn&amp;#8217;t work. It was a pain in the ass to make this shit work. I needed to &lt;a href="http://ubuntuforums.org/showthread.php?t=297092" target="_blank"&gt;follow a little HowTo&lt;/a&gt; but using &lt;a href="http://ftp.us.dell.com/network/R205204.EXE" target="_blank"&gt;other driver&lt;/a&gt;. It was very difficult to find this HowTo and to find the adequate driver for this damn Notebook.&lt;/p&gt;  &lt;p&gt;The second problem was to put the Flash plugin to work, just because the processor have a kind of 64bit emulation. I needed some research on that and I finally ended up with &lt;a href="http://db.tt/HNZj1yk" target="_blank"&gt;this script&lt;/a&gt;, that I just made some modifications to get the right packages.&lt;/p&gt;  &lt;p&gt;I&amp;#8217;m just posting this because it can help a noob like me.&lt;/p&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/2900575660</link><guid>http://y3i12.tumblr.com/post/2900575660</guid><pubDate>Sun, 23 Jan 2011 20:28:57 -0400</pubDate></item><item><title>Tyrannosaurus Rex</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;Another Paper Craft assembled. This one will be used as decoration at my daughter birthday. It&amp;#8217;s the &lt;a href="http://cp.c-ij.com/en/contents/3149/03320/index.html" target="_blank"&gt;T-Rex from Cannon Creative Park&lt;/a&gt; printed in an A3 Couché 300&amp;#160;mg/m² paper.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/zookAJhqleCHfIaHenACnbbtmGaGHwBcDBkobmACagqgpAcljphagecJjHsb/trex1.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/zookAJhqleCHfIaHenACnbbtmGaGHwBcDBkobmACagqgpAcljphagecJjHsb/trex1.jpg.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/cndIAlicjfJmIFsCnyuDdfCFgnabbigBEDsoeFpsCoohfgdBuacrrljsJwEB/trex2.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/cndIAlicjfJmIFsCnyuDdfCFgnabbigBEDsoeFpsCoohfgdBuacrrljsJwEB/trex2.jpg.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/ddzwythdehaFFqvBuaHJekseqnjcqjsqbnlpJyuarpdthybqFvIatiGtmFFj/trex3.jpg.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-23/ddzwythdehaFFqvBuaHJekseqnjcqjsqbnlpJyuarpdthybqFvIatiGtmFFj/trex3.jpg.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;div&gt;&lt;a href="http://y3i12.posterous.com/tyrannosaurus-rex" target="_blank"&gt;See the full gallery on posterous&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/2900139017</link><guid>http://y3i12.tumblr.com/post/2900139017</guid><pubDate>Sun, 23 Jan 2011 20:01:37 -0400</pubDate></item><item><title>Papercraft and Origami</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;Ok&amp;#8230; My daughter birthday is really near and we&amp;#8217;re starting to plan some decorations for the party and test some things.&lt;/p&gt;  &lt;p&gt;I made two little interesting things a Allosaurus paper craft and a T-Rex origami. I got both from &lt;a href="http://cp.c-ij.com/en/index.html" target="_blank"&gt;Canon Creative Park&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here are some photos of the Allosaurus (I took about five hours to assembly this thing) and one blurred photo of the little T-Rex that was assembled in about 15 min.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/myuonnGIalkEBJAxrjjaxHvClpJpCfneHClwlhovgmnakmdnzrxoBzhGIHqk/DSC09875.JPG.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/myuonnGIalkEBJAxrjjaxHvClpJpCfneHClwlhovgmnakmdnzrxoBzhGIHqk/DSC09875.JPG.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/deJjyqaAIwmvHInDnImDojxhCyjeaztdfcDvjvDJbIjGspaHcIkBvwAgnjjF/DSC09878.JPG.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/deJjyqaAIwmvHInDnImDojxhCyjeaztdfcDvjvDJbIjGspaHcIkBvwAgnjjF/DSC09878.JPG.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/eIyiDAkddaupuvkcflBrffHwrFqoEhqtJEEafjhqbscufvajokvHdvIuuqAF/DSC09879.JPG.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/eIyiDAkddaupuvkcflBrffHwrFqoEhqtJEEafjhqbscufvajokvHdvIuuqAF/DSC09879.JPG.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/CiqaBbjcFBGdoBBtoGocIxIrAEdvcbuhcbaAwDyGraGnxwfnspoktuquEnGo/DSC09880.JPG.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/CiqaBbjcFBGdoBBtoGocIxIrAEdvcbuhcbaAwDyGraGnxwfnspoktuquEnGo/DSC09880.JPG.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;a href="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/dArfnqkCAduAqrBjfydCFrBBHgctfqwBgqzigcBcpbhxHgalApflECgzbdJd/DSC09881.JPG.scaled1000.jpg" target="_blank"&gt;&lt;img src="http://posterous.com/getfile/files.posterous.com/temp-2011-01-13/dArfnqkCAduAqrBjfydCFrBBHgctfqwBgqzigcBcpbhxHgalApflECgzbdJd/DSC09881.JPG.scaled500.jpg" width="500" height="375"/&gt;&lt;/a&gt; &lt;/p&gt;&lt;div&gt;&lt;a href="http://y3i12.posterous.com/papercraft-and-origami" target="_blank"&gt;See and download the full gallery on posterous&lt;/a&gt;&lt;/div&gt;  &lt;p&gt;Assembling the Paper Craft I realized that:&lt;/p&gt;  &lt;ul&gt;&lt;li&gt;If you have thick fingers, you will suffer;&lt;/li&gt;  &lt;li&gt;If you do not follow the instructions, you will suffer;&lt;/li&gt;  &lt;li&gt;If you follow the instructions, you will suffer;&lt;/li&gt;  &lt;li&gt;If you use the wrong paper, you will suffer;&lt;/li&gt;  &lt;li&gt;If your glue doesn&amp;#8217;t dry really fast, you will suffer;&lt;/li&gt;  &lt;li&gt;If your hands shake, you will suffer;&lt;/li&gt;  &lt;li&gt;If you do not have a utility knife and intend to use scissors, you will suffer. &lt;/li&gt;  &lt;/ul&gt;&lt;p&gt;So, pick a Paper Craft and start it right now! Its really funny, time consuming and painful, but it certainly can entertain you a lot!&lt;/p&gt;  &lt;ul&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/2786746230</link><guid>http://y3i12.tumblr.com/post/2786746230</guid><pubDate>Sun, 16 Jan 2011 21:39:49 -0400</pubDate></item><item><title>Changing blogging platform again</title><description>&lt;div class="posterous_autopost"&gt;&lt;p&gt;Well&amp;#8230; my Tumblr was making me sick with the lack of sitemaps. So I decided to give a try on Posterous.&lt;/p&gt;  &lt;p&gt;The dashboard/management panel is a little bit chaotic, compared to the minimalistic interface that Tumblr haves. The good thing is that Posterous have a very useful feature: import posts. The import works very well, so it was really fast to put the blog online and to have a try on &lt;a href="https://www.google.com/webmasters/tools/" target="_blank"&gt;Google Webmasters Tools&lt;/a&gt; and &lt;a href="http://www.google.com/analytics/" target="_blank"&gt;Goolge Analytics&lt;/a&gt; integration. &lt;/p&gt;  &lt;p&gt;To integrate the Google Analytics was realy simple. I just needed to enable the Analytics option in the blog settings and enter the domain ID provided by the Google.&lt;/p&gt;  &lt;p&gt;The Webmaster tools we have to do a little workaround and include the meta information in the theme, by customizing its code, but it is also simple. I discovered it by some spreaded comments on the internet, it works just like the workaround for Tumblr. The Google service just need to see the tag in your site and its done.&lt;/p&gt;  &lt;p&gt;After that I followed some tips that I found in &lt;a href="http://sourcebottle.posterous.com/using-google-xml-sitemaps-with-posterous" target="_blank"&gt;this blog&lt;/a&gt; and used &lt;a href="http://www.xml-sitemaps.com/" target="_blank"&gt;this service&lt;/a&gt; to generate the XML. I just noticed that the XML generation just got the first pages in the blog (main and 10 posts), I should recommend you to generate the sitemap by your own hand.&lt;/p&gt;  &lt;p&gt;It is amazing that the Posterous download also redirects to another page, but somehow the Webmasters Tools parses the XML it normally.&lt;/p&gt;  &lt;p&gt;I believe that I gonna keep with Posterous.&lt;/p&gt;&lt;/div&gt;</description><link>http://y3i12.tumblr.com/post/2626713050</link><guid>http://y3i12.tumblr.com/post/2626713050</guid><pubDate>Thu, 06 Jan 2011 16:55:10 -0400</pubDate></item><item><title>[ cloud overview | get your own cloud ]This is a Tumblr Cloud I...</title><description>&lt;img src="http://25.media.tumblr.com/tumblr_ldsvwg7nGx1qedd0bo1_500.jpg"/&gt;&lt;br/&gt;&lt;br/&gt;&lt;p&gt;&lt;center&gt;[ &lt;a href="http://tumblrcloud.icodeforlove.com/378202/350289" target="_blank"&gt;cloud overview&lt;/a&gt; | &lt;a href="http://tumblrcloud.icodeforlove.com/" target="_blank"&gt;get your own cloud&lt;/a&gt; ]&lt;/center&gt;&lt;br/&gt;&lt;br/&gt;This is a &lt;a href="http://tumblrcloud.icodeforlove.com/378202/350289" target="_blank"&gt;Tumblr Cloud&lt;/a&gt; I generated from my blog posts between Dec 2009 and Dec 2010 containing my top 30 used words.&lt;br/&gt;&lt;br/&gt;Top 1 blogs I reblogged the most:&lt;ul style="text-align: left;"&gt;&lt;li&gt;&lt;a href="http://.tumblr.com" target="_blank"&gt;&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/2407815975</link><guid>http://y3i12.tumblr.com/post/2407815975</guid><pubDate>Tue, 21 Dec 2010 19:00:19 -0400</pubDate><category>tumblrcloud</category></item><item><title>Tumblr Sitemap Compatibilization - #FAIL</title><description>&lt;p&gt;I migrated my blog to Tumblr, it haves more features and its a little bit more flexible than Google Sites and the themes are much more beautiful.&lt;/p&gt;
&lt;p&gt;The Tumblr blogging system just have one huge problem: the sitemap is not compatible with google webmaster tools. It causes some interpretation errors and do not lead to successful indexing of the blog.&lt;/p&gt;
&lt;p&gt;To solve this little issue, I made a little Google Python App to compatibilize the Tumblr sitemap.xml with the standard one generated by Google Sites.&lt;/p&gt;
&lt;p&gt;The source is available &lt;a title="tumblr2goolge source" target="_blank" href="http://db.tt/OJMhsdI"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To make it work you need to use the link of the hosted app: http://y3i12webtools.appspot.com/tumblrtogoogle/convert?sitemap=your_address_comes_here&lt;/p&gt;
&lt;p&gt;For my tumblr account it is: &lt;a href="http://y3i12webtools.appspot.com/tumblrtogoogle/convert?sitemap=http://y3i12.tumblr.com/sitemap.xml" target="_blank"&gt;&lt;a href="http://y3i12webtools.appspot.com/tumblrtogoogle/convert?sitemap=http://y3i12.tumblr.com/sitemap.xml" target="_blank"&gt;http://y3i12webtools.appspot.com/tumblrtogoogle/convert?sitemap=http://y3i12.tumblr.com/sitemap.xml&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ok. Google Webmaster Tools do not allow to insert sitemaps from other sites, so you need to create an alias for it in your Tumblr page.&lt;/p&gt;
&lt;p&gt;To do it, go to your account main screen and click on customize.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ldj9b8t8RY1qe2in3.png" align="middle"/&gt;&lt;/p&gt;
&lt;p&gt;An then go to Page -&amp;gt; Add Page&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ldj9cj7Alh1qe2in3.png"/&gt;&lt;/p&gt;
&lt;p&gt;And in the new window, pick the &amp;#8220;Redirect&amp;#8221; option in &amp;#8220;Page Type&amp;#8221;, paste the conversion URL into the &amp;#8220;Redirect to&amp;#8221; input box (which will be http://y3i12webtools.appspot.com/tumblrtogoogle/convert?sitemap=your_address_comes_here) and in the &amp;#8220;Page URL&amp;#8221; insert &amp;#8220;sitemap&amp;#8221; or something like that - the &amp;#8220;Page URL&amp;#8221; will be the address to put into the sitemap URL in the Webmaster Tools.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_ldj9s0Mcu81qe2in3.png"/&gt;&lt;/p&gt;
&lt;p&gt;If you want some additional info on how configure webmaster tools with Tumblr, &lt;a title="How-to: submit your tumblr blog sitemap to google webmaster tools" target="_blank" href="http://theimpassionedeye.com/post/1518918074/how-to-submit-your-tumblr-blog-sitemap-to-google"&gt;follow this how-to&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;EDIT (2010-12-17):&lt;/p&gt;
&lt;p&gt;Ok&amp;#8230; It doesn&amp;#8217;t work. The Google sitemap bot do not follow the redirect. I need to think something else to redirect the sitemap to the Google pages&lt;/p&gt;
&lt;hr&gt;</description><link>http://y3i12.tumblr.com/post/2338373931</link><guid>http://y3i12.tumblr.com/post/2338373931</guid><pubDate>Thu, 16 Dec 2010 14:34:00 -0400</pubDate></item><item><title>JS1k Xmas Edition - Failed attempt #1</title><description>&lt;p&gt;I&amp;#8217;d post &lt;a title="Snowball" target="_blank" href="http://db.tt/3opEaQr"&gt;this little game&lt;/a&gt; (use arrows to control the snowball) to the &lt;a title="JS1k Xmas Edition" target="_blank" href="http://js1k.com/2010-xmas/"&gt;JS1k Xmas Edition&lt;/a&gt; but due to &lt;a title="Ski Free!" target="_blank" href="http://goo.gl/Q0QwI"&gt;this demo (Ski Free)&lt;/a&gt; I got demotivated.&lt;/p&gt;
&lt;p&gt;Now I need to think something else to code. Darn.&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/2325033476</link><guid>http://y3i12.tumblr.com/post/2325033476</guid><pubDate>Wed, 15 Dec 2010 11:27:56 -0400</pubDate></item><item><title>Partially done migrating</title><description>&lt;p&gt;Okie dokie&amp;#8230; I gonna start using tumblr.&lt;/p&gt;
&lt;p&gt;It haves a different set of features, but it looks like much more interesting than the Google Sites.&lt;/p&gt;
&lt;p&gt;Tumblr have beautifuler themes, more posting features, supports audio and some other fancy stuff. The only thing that I am missing is the feature that allows gadgets to be embedded into the page. I like to use slideshows and presentations into my posts, but I gonna need to make a little turnaround.&lt;/p&gt;
&lt;p&gt;Hail tumblr!&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/1524240702</link><guid>http://y3i12.tumblr.com/post/1524240702</guid><pubDate>Tue, 09 Nov 2010 06:49:35 -0400</pubDate></item><item><title>XPloding Pixels v2 - Browser workaround</title><description>&lt;p&gt;&lt;a target="_blank" href="http://y3i12.tumblr.com/post/1498518835/xploding-pixels-html5-experiment"&gt;The first version of XPloding Pixels&lt;/a&gt; used little squares to disintegrate the image, thats just because the browsers have some cross site requests protection and the HTML5 haves the same protection for loading images. That protections restricts the manipulation and loading of a image from another site. For instance, the script is running from the domain &amp;#8216;dl.dropbox.com&amp;#8217;, so if a load a image from &amp;#8216;sites.google.com&amp;#8217;, the browser will not allow lots of operations on image, including the getImageData that is extremely needed to make this version of the XPloding Pixels to work. &lt;a target="_blank" href="http://dl.dropbox.com/u/8078408/html5/xploding_pixels2/xploding_pixels.html"&gt;This version&lt;/a&gt; manipulates pixel by pixel as &lt;a href="https://sites.google.com/site/holycaffeine/home/code-samples-tests-and-everything/caffo.7z?attredirects=0" target="_blank"&gt;the original version in C++&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://dl.dropbox.com/u/8078408/html5/xploding_pixels2/xploding_pixels.html"&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm4erhRJU1qe2in3.png"/&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As posted in a &lt;a target="_blank" href="http://jsdo.it/paq/vfWd"&gt;little sample&lt;/a&gt; at jsdo.it, the image can be manipulated if its contents are loaded as a base64 stream. But JavaScript will not convert the image to base64, so we need a external application to do it.&lt;/p&gt;
&lt;p&gt;Using the &lt;a target="_blank" href="http://appspot.com"&gt;Google application services&lt;/a&gt;, I wrote a &lt;a target="_blank" href="http://dl.dropbox.com/u/8078408/appspot/to-base64/to_base64.py"&gt;very simple python script to convert web resources to base64 data&lt;/a&gt;. The script downloads the URL inserted in the query string, converts it to base64 and generates the base64 response. The only problem there is the &lt;a target="_blank" href="http://dev.w3.org/2006/waf/access-control/#access-control-allow-origin-response-hea"&gt;Cross-Origin Resource Sharing&lt;/a&gt;. This thing inhibits the usage of scripts in other domains unless the HTTP header contains a &amp;#8216;Access-Control-Allow-Origin&amp;#8217; keyword allowing the specific domain to execute it.&lt;/p&gt;
&lt;p&gt;Using a little &lt;a target="_blank" href="http://uncyclopedia.wikia.com/wiki/Workaround_Oriented_Programming"&gt;WOP&lt;/a&gt; (I am lazy and didn&amp;#8217;t wanted to research how to get the referrer), the origin to be allowed is passed via query string. So the image is acquired using the following address:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;&lt;a href="http://to-base64.appspot.com/encode?allow=http%3A//dl.dropbox.com&amp;amp;address=" target="_blank"&gt;http://to-base64.appspot.com/encode?allow=http%3A//dl.dropbox.com&amp;amp;address=&lt;/a&gt;[url from the text field]&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The response, as mentioned, is the base64 data, that is inserted directly into the image:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;
&lt;p&gt;the_image        = new Image();&lt;br/&gt;the_image.onload = initialize;&lt;br/&gt;the_image.src    = xmlhttp.responseText;&lt;/p&gt;
&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;When the base64 is interpreted it is automatically converted into its binary stream and on the image. Just amazing! Now with that image, all the manipulation can be done.&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/1524088030</link><guid>http://y3i12.tumblr.com/post/1524088030</guid><pubDate>Wed, 03 Nov 2010 15:08:00 -0300</pubDate></item><item><title>Steampunk Homemade Tablet</title><description>&lt;p&gt;Ok, I wont write a lot. Some images can tell more than I could write about it.&lt;/p&gt;
&lt;p&gt;To create that I used a pen-holder, a pen and a $5,00 optical mouse. Works like a lite tablet. Does not detect pressure and have the problem with the axis: rotating the pen causes strange behaviors with the cursor.&lt;/p&gt;
&lt;p&gt;The goot part: cheap and does not need the base. Bad part: Its ugly and uncomfortable.&lt;/p&gt;
&lt;p&gt;Here are some photos.&lt;/p&gt;

&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm48h6hGq1qe2in3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm48ryUc01qe2in3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm491vQu21qe2in3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm49a83Ym1qe2in3.jpg"/&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://media.tumblr.com/tumblr_lbm49jNv9q1qe2in3.jpg"/&gt;&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/1524069192</link><guid>http://y3i12.tumblr.com/post/1524069192</guid><pubDate>Fri, 15 Oct 2010 17:18:00 -0300</pubDate></item><item><title>Neural networks - Lottery results prediction</title><description>&lt;p&gt;First of all, do not even try. It is just a geek and fancy way to generate numbers.&lt;/p&gt;
&lt;p&gt;Last Wednesday, the lottery was accumulated in 115.000.000,00 BRL (about 70.000.000,00 USD) and I needed to have a try.&lt;/p&gt;
&lt;p&gt;Well, I have never played with &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Artificial_neural_network"&gt;Artificial Neural Networks&lt;/a&gt;, and I knew how it worked. So it was time to give a try.&lt;/p&gt;
&lt;h4&gt;For Dummies - Section 1&lt;br/&gt; How Feedforward Artificial Neural Networks works&lt;/h4&gt;
&lt;p&gt;A &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Feedforward_neural_network"&gt;Feedforward NN&lt;/a&gt; (neural network) is a set of valued nodes (normally with values from -1.0 to 1.0), connected to each other. This nodes emulates neurons and its connections, the dendrites (input) and axioms (outputs). The values are the strength of the connection between each neuron.&lt;/p&gt;
&lt;p&gt;When a data is inputed into a dendrite, it will use an activation function to see if that data stimulates the neuron. If the neuron is stimulated, it will send the data to the other neurons (that accumulate the data), modifying its data, according to it own value.&lt;/p&gt;
&lt;p&gt;When the other layers of neurons are queried, they sum the data and apply the same activation function and they keep forwarding the data through the NN as long they are activated by the function.&lt;/p&gt;
&lt;p&gt;As soon the data reaches the &amp;#8216;leaf&amp;#8217; neurons, they gonna magically output the result.&lt;/p&gt;
&lt;p&gt;But wait. How the f*** they learn to output the expected information at the &amp;#8216;leaf&amp;#8217; neurons?&lt;/p&gt;
&lt;p&gt;The NN need to be trained to have the input values transformed as long the information traverses the nodes.&lt;/p&gt;
&lt;h4&gt;For Dummies - Section 2&lt;br/&gt; Supervised Learning and Backpropagation&lt;/h4&gt;
&lt;p&gt;The concept of &lt;a target="_blank" href="http://en.wikipedia.org/wiki/Supervised_learning"&gt;supervised learning&lt;/a&gt; is simple: you have a set of inputs and true results, that used to train the neural network. After training, the NN should be able to mimic the training data for all other inputed data.&lt;/p&gt;
&lt;p&gt;But how it learns? Using &lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Backpropagation" target="_blank"&gt;Backpropagation&lt;/a&gt;&lt;/strong&gt;!&lt;/p&gt;
&lt;p&gt;Backpropagation is the technique used to adjust each node weight/value. The training data is inputted into the NN, activating some nodes and not others. The activated nodes receive the information as it were processing it, BUT, before transmit the information ahead, it adjustes its own value to the new input data, trying approach a litte bit of that result. So the learning should be repeated dozens of times to have an accurate result.&lt;/p&gt;
&lt;h4&gt;What have I done, besides wasting time?&lt;/h4&gt;
&lt;p&gt;First of all, there was a little research on a simple Feedforward Backpropagation NN for python, and I found &lt;a target="_blank" href="http://arctrix.com/nas/python/bpnn.py"&gt;this&lt;/a&gt;! A simple file that can be imported to any project without compilation. It haves a really easy interface and it did not require any previous experience operating NN.&lt;/p&gt;
&lt;p&gt;I got all the lottery results in history of &amp;#8216;Mega Sena&amp;#8217; (a Brazilian lottery), and trained the network.&lt;/p&gt;
&lt;p&gt;The input was the raffle sequential number, and the output should be the winning numbers. The training consisted in 100 repetitions of 1119 raffles and their winning numbers. &lt;/p&gt;
&lt;p&gt;But the Feedforward NN just accepts numbers ranging from -1.0 to 1.0, then the sequential numbers were normalized ranging from 0.0 and 1.0, but the 1.0 corresponded to the raffle to be predicted: 1220. The drawn numbers also were normalized, transforming the values that ranged from 1 to 60 in values ranging from 0.0 to 1.0. The normalization is a simple process to &lt;strong&gt;this&lt;/strong&gt; problem.&lt;/p&gt;
&lt;p&gt;After the normalization, the data is used as input data to do the supervised training. After trained, theoretically was just to put the input data (raffle sequential number) as 1220 and the NN output would be the winning numbers for the next raffle!&lt;/p&gt;
&lt;p&gt;But it didn&amp;#8217;t worked out.&lt;/p&gt;
&lt;h4&gt;Why the attempt failed?&lt;/h4&gt;
&lt;p&gt;The answer is simple: the results are random.&lt;/p&gt;
&lt;p&gt;All types of NN are used to learn and follow patterns. But lottery results doesn&amp;#8217;t have a pattern, they are completely random. If a Neural Network could learn that easily, someone around the world would have discovered a mathematical formula to predict the lottery raffles.&lt;/p&gt;
&lt;p&gt;Anyway, the experiment was really fun, and you can download it &lt;a href="https://sites.google.com/site/holycaffeine/home/caffeine-consequences/neuralnetworks-lotteryresultsprediction/NN-lottery.7z?attredirects=0" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/1517775503</link><guid>http://y3i12.tumblr.com/post/1517775503</guid><pubDate>Sat, 09 Oct 2010 11:38:00 -0300</pubDate></item><item><title>Wavy Waves (JS1k) - How it works</title><description>&lt;p&gt;Ok, after submitting &lt;a target="_blank" href="http://js1k.com/demos#id415"&gt;this&lt;/a&gt; script, will be nice if I explain how the &lt;a target="_blank" href="http://dl.dropbox.com/u/8078408/html5/WavyWaves.htm"&gt;Wavy Waves Mesmerizer&lt;/a&gt; works&amp;#8230;&lt;/p&gt;
&lt;p&gt;Lets start from the beginning: the global variables.&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;var doc = document;&lt;/code&gt;&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;span&gt;var canvas = doc.getElementById( &amp;#8216;c&amp;#8217; );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var context = canvas.getContext( &amp;#8216;2d&amp;#8217; );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var width = canvas.width = window.innerWidth - 21;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var height = canvas.height = window.innerHeight - 21;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var max_particles = width * height / 810;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var particles = [];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var math = Math;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var rnd = math.random;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var max = math.max;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var min = math.min;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var i = 0;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var functions = [&amp;#8216;sin&amp;#8217;,&amp;#8217;cos&amp;#8217;,&amp;#8217;tan&amp;#8217;];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var fnx = math[&amp;#8216;sin&amp;#8217;];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var fny = math[&amp;#8216;sin&amp;#8217;];&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The code above declares everything that will be needed by the script to run. As the script will be minified, some things are done just for the &lt;em&gt;minification&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;In the first line, the doc var is created just to avoid references to the word &amp;#8216;document&amp;#8217; that is too long. The minifier will change the name from doc to something like a, so this also leaves a hint for the minifier.&lt;/p&gt;
&lt;p&gt;In the second and third line the script acquires the canvas and the context respectively. And on fourth and fifth lines the width and height are set.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;max_particles&lt;/code&gt; variable uses a magic number to make the quantity of particles comfortable. This number can be increased or decreased according to your will. Right below a follows the declaration of a empty array, that will host all the particles responsible to draw the screen. All the following lines are for hints for minification - the most important is that methods can be called using subscripting (eg.: &lt;code&gt;Math['sin'](10);&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;On the next two instructions, the on-click-function-randomizing-callback and the background color are set:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;doc.onmousedown = function() &lt;/span&gt;&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  fnx = math[functions[( rnd() * functions.length ) | 0 ] ];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  fny = math[functions[( rnd() * functions.length ) | 0 ] ];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;};&lt;br/&gt;&lt;/span&gt;&lt;span&gt;doc.bgColor = &amp;#8216;#000&amp;#8217;;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Oh&amp;#8230; ok&amp;#8230; what is that &lt;code&gt;|0&lt;/code&gt; making there? This instruction truncates the number to its integer part. So if my random index is 1.6646, it will be evaluated to 1! Impressive! If you prefer, you can use the double-binary-negation technique to achieve the same result: &lt;/p&gt;
&lt;p&gt;&lt;span&gt;( ~~( 1.6646 ) ) == ( 1.6646 | 0 ) == Math.floor( 1.6646 )&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;After the boring initialization, we get some more boring initialization&amp;#8230; Lets put the particles to fly:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;while ( particles.length &amp;lt; max_particles )&lt;/span&gt;&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  particles.push( { x: ( rnd() * width ) | 0, y: ( rnd() * height ) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;| 0, vx: 0, vy: 0 });&lt;br/&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This loop create max_particles particles containing x and y attributes, distributed randomly across the canvas. The particles also retains their velocities with vx and vy attributes.&lt;/p&gt;
&lt;p&gt;The functions that controls the particle movement are fixed as follows.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;function x_movement_fn( particle )&lt;/span&gt;&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  return fnx( particle.y / 25 ) - 0.5;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;}&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&lt;br/&gt;function y_movement_fn( particle )&lt;br/&gt;&lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  return fny( particle.x / 25 ) - 0.5;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It was coded this way to allow the easy replacement of the movement function. Both functions should return the velocity for the x and y axis, calculated using whatever is wanted.&lt;/p&gt;
&lt;p&gt;Now lets see the soul of the wavemaker, the update function.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;function update( )&lt;/span&gt;&lt;span&gt; &lt;br/&gt;&lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  var p = particles[ i ];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  // updates the velocity&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  p.vy = y_movement_fn( p );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  p.vx = x_movement_fn( p );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  // updates the position&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  p.x += p.vx;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  p.y += p.vy;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  // check the boundaries&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  if ( p.x &amp;lt; 0 )  &lt;br/&gt;&lt;/span&gt;&lt;span&gt;  {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    p.x = width + p.x;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  }&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  else if ( p.x &amp;gt;= width )&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    p.x -= width;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  }&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  if ( p.y &amp;lt; 0 )&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    p.y = height + p.y;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  }&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  else if ( p.y &amp;gt;= height )&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    p.y -= height;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  }&lt;br/&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;It is ridiculous, but this function just updates the position summing the velocities to their position and recalculate their positions, respecting the screen boundaries.&lt;/p&gt;
&lt;p&gt;The body of the mesmerizer, the draw function:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;function draw( )&lt;br/&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  var p = particles[ i ];&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  var c = &amp;#8216;rgb(&amp;#8217; + clamp_str( p.x / width )+ &amp;#8216;,&amp;#8217; + clamp_str( p.vx &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;* p.vx + p.vy * p.vy ) + ',' + clamp_str( p.y / height ) +')';&lt;br/&gt;  context.fillStyle = c;&lt;br/&gt;  context.beginPath();&lt;br/&gt;  context.arc( p.x, p.y, 5 / max( ( p.vx * p.vx + p.vy * p.vy ),&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; 0.5 ), 0, 2 * math.PI, 0 );&lt;br/&gt;  context.closePath();&lt;br/&gt;  context.fill();&lt;br/&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; &lt;/code&gt;&lt;/p&gt;
&lt;p&gt;The draw function draws circles in the position of each particle. The size is affected by its speed: as faster its goes, smaller it is - this is what &lt;code&gt;5 / max( ( p.vx * p.vx + p.vy * p.vy ), 0.5 )&lt;/code&gt; says.&lt;/p&gt;
&lt;p&gt;But before drawing the circle, the fillStyle is set, composing the color with formulas based on the coordinates of the particles. This color setting uses the clamp_str() function.&lt;/p&gt;
&lt;p&gt;&lt;span&gt;function clamp_str( v )&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;{&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;return ( min( max( v, 0 ), 1 ) * 255 ) | 0;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;This function just ensures that the input floating number is between 0.0 and 1.0 and that it results in a integer value ranging from 0 to 255, keeping its proportions.&lt;/p&gt;
&lt;p&gt;The final touch is putting the pieces together, the timer to run it all:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;setInterval(&lt;/span&gt;&lt;span&gt; &lt;br/&gt;  function()&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;context.fillStyle = &amp;#8216;rgba(0,0,0,0.01)&amp;#8217;;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;  &lt;/span&gt;context.fillRect( 0, 0, width, height );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    for ( i = 0; i &amp;lt; max_particles; i++ )&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    {&lt;br/&gt;&lt;/span&gt;&lt;span&gt;      update( );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;      draw( );&lt;br/&gt;&lt;/span&gt;&lt;span&gt;    }&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  },&lt;br/&gt;&lt;/span&gt;&lt;span&gt;  10&lt;br/&gt;&lt;/span&gt;&lt;span&gt;) &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;The interval calls a fill rect which have a ridiculous alpha of 0,01&amp;#8230; why? The low alpha allows the trails of the particles. If the alpha is 1, the user would see only some balls changing sizes and walking across the screen - this is what makes it to be beautiful, just forget about the rest. =)&lt;/p&gt;
&lt;p&gt;After clearing the screen, the particles are updated and drawn.&lt;/p&gt;
&lt;p&gt;Ok! Nice! You got 1927 bytes of code. so what?&lt;/p&gt;
&lt;p&gt;You have three choices:&lt;/p&gt;
&lt;p&gt;You can polish the bits and bytes;&lt;/p&gt;
&lt;p&gt;Use a JavaScript minifier/compiler;&lt;/p&gt;
&lt;p&gt;Use a JavaScript minifiercompiler and polish the bits and bytes;&lt;/p&gt;
&lt;p&gt;My pick was the second one. I used the Closure Compiler service to do the job (and I will make some optimizations on the generated code). It reduced the 1927 bytes to 819. I believe that it can get better, but not on a automated system.&lt;/p&gt;
&lt;p&gt;Here is the final code:&lt;/p&gt;
&lt;p&gt;&lt;span&gt;var b=document,c=b.getElementById(&amp;#8220;c&amp;#8221;),d=c.getContext(&amp;#8220;2d&amp;#8221;),e=c.width=&lt;br/&gt;&lt;/span&gt;&lt;span&gt;window.innerWidth-21,f=c.height=window.innerHeight-&lt;br/&gt;&lt;/span&gt;&lt;span&gt;21,g=e*f/810,h=[],i=Math,j=i.random,k=i.max,l=i.min,m=0,n=[&amp;#8220;sin&amp;#8221;,&lt;br/&gt;&lt;/span&gt;&lt;span&gt;&amp;#8220;cos&amp;#8221;,&amp;#8221;tan&amp;#8221;],o=i.sin,p=i.sin;b.onmousedown=function(){o=i[n[j()*&lt;br/&gt;&lt;/span&gt;&lt;span&gt;n.length|0]];p=i[n[j()*n.length|0]]};for(b.bgColor=&amp;#8221;#000&amp;#8221;;h.length&amp;lt;&lt;br/&gt;&lt;/span&gt;&lt;span&gt;g;)h.push({x:j()*e|0,y:j()*f|0,a:0,b:0});setInterval(function(){&lt;br/&gt;&lt;/span&gt;&lt;span&gt;d.fillStyle=&amp;#8221;rgba(0,0,0,0.01)&amp;#8221;;d.fillRect(0,0,e,f);for(m=0;m&amp;lt;g;m++){&lt;br/&gt;&lt;/span&gt;&lt;span&gt;var a=h[m];a.b=p(a.x/25)-0.5;a.a=o(a.y/25)-&lt;br/&gt;&lt;/span&gt;&lt;span&gt;0.5;a.x+=a.a;a.y+=a.b;if(a.x&amp;lt;0)a.x=e+a.x;else if(a.x&amp;gt;=e)a.x-&lt;br/&gt;&lt;/span&gt;&lt;span&gt;=e;if(a.y&amp;lt;0)a.y=f+a.y;else if(a.y&amp;gt;=f)a.y-=f;a=h[m];var &lt;br/&gt;&lt;/span&gt;&lt;span&gt;q=&amp;#8221;rgb(&amp;#8220;+(l(k(a.x/e,0),1)*255|0)+&amp;#8221;,&amp;#8221;+(l(k(a.a*a.a+a.b*a.b,0),1)*255|0&lt;br/&gt;&lt;/span&gt;&lt;span&gt;)+&amp;#8221;,&amp;#8221;+(l(k(a.y/f,0),1)*255|0)+&amp;#8221;)&amp;#8221;;d.fillStyle=q;d.beginPath();d.arc(a&lt;br/&gt;&lt;/span&gt;&lt;span&gt;.x,a.y,5/k(a.a*a.a+a.b*a.b,0.5),0,2*i.PI,0);d.closePath();d.fill()}},&lt;br/&gt;&lt;/span&gt;&lt;span&gt;10);&lt;/span&gt;&lt;/p&gt;</description><link>http://y3i12.tumblr.com/post/1515305314</link><guid>http://y3i12.tumblr.com/post/1515305314</guid><pubDate>Thu, 07 Oct 2010 23:03:00 -0300</pubDate></item></channel></rss>
