<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><!-- generator="wordpress/2.0.4" --><rss 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/" version="2.0">

<channel>
	<title>s/earch/</title>
	<link>http://blog.tquadrado.com</link>
	<description>Web tech in life</description>
	<pubDate>Fri, 10 Feb 2012 14:05:16 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.4</generator>
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/pedro_mg" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="pedro_mg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Manage URI Query params in Ruby</title>
		<link>http://blog.tquadrado.com/2012/manage-uri-query-params-in-ruby-2/</link>
		<comments>http://blog.tquadrado.com/2012/manage-uri-query-params-in-ruby-2/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 22:53:29 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2012/manage-uri-query-params-in-ruby-2/</guid>
		<description><![CDATA[
How to programatically remove a Query parameter from an URI String in Ruby.
For the following URI:
http://example.com/resource?param1=1&#038;param2=2&#038;offset=3
If one wants to remove the &#8220;offset&#8221; parameter, the following may help.
Having:
query = &#8220;param1=1&#038;param2=2&#038;offset=3&#8243;

unless query.empty?
&#160;&#160;# build an Hash based on the query string
&#160;&#160;# we want to build {"param1"=>"1", "param2"=>"2", "offset"=>"3"}
&#160;&#160;temp_params = {}
&#160;&#160;query.split(&#8221;&#038;&#8221;).each {&#124;v&#124; temp_params.merge!(Hash[*v.split(&#8221;=&#8221;)]) unless (v.split(&#8221;=&#8221;).count < 2)}
&#160;&#160;# remove the [...]]]></description>
			<content:encoded><![CDATA[
<p>How to programatically remove a Query parameter from an URI String in Ruby.<br />
For the following URI:</p>
<p>http://example.com/resource?param1=1&#038;param2=2&#038;offset=3</p>
<p>If one wants to remove the &#8220;offset&#8221; parameter, the following may help.</p>
<p>Having:<br />
query = &#8220;param1=1&#038;param2=2&#038;offset=3&#8243;</p>
<p><code><br />
unless query.empty?<br />
&nbsp;&nbsp;<coderesult># build an Hash based on the query string</coderesult><br />
&nbsp;&nbsp;<coderesult># we want to build {"param1"=>"1", "param2"=>"2", "offset"=>"3"}</coderesult><br />
&nbsp;&nbsp;temp_params = {}<br />
&nbsp;&nbsp;query.split(&#8221;&#038;&#8221;).each {|v| temp_params.merge!(Hash[*v.split(&#8221;=&#8221;)]) unless (v.split(&#8221;=&#8221;).count < 2)}<br />
&nbsp;&nbsp;<coderesult># remove the offset parameter </coderesult><br />
&nbsp;&nbsp;temp_params.delete(&#8221;offset&#8221;)<br />
&nbsp;&nbsp;<coderesult># convert the Hash back to a String</coderesult><br />
&nbsp;&nbsp;new_query = temp_params.map{|k,v| &#8220;#{k}=#{v}&#8221;}.join(&#8221;&#038;&#8221;)<br />
end<br />
</code></p>
<p>EDIT: if a left side only param exists, it will be removed. Something like param2 in:<br />
http://example.com/resource?param1=1&#038;param2=&#038;offset=3</p>
<p>As a Gist:<br />
<script src="https://gist.github.com/1788371.js?file=gistfile1.rb"></script></p>
<p></p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2012/manage-uri-query-params-in-ruby-2/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>PostgreSQL custom Restore</title>
		<link>http://blog.tquadrado.com/2011/postgresql-custom-restore/</link>
		<comments>http://blog.tquadrado.com/2011/postgresql-custom-restore/#comments</comments>
		<pubDate>Wed, 07 Dec 2011 16:42:06 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>ubuntu</category>
	<category>unix</category>
	<category>postgres</category>
	<category>postgresql</category>
	<category>database</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/postgresql-custom-restore/</guid>
		<description><![CDATA[
On dumping and restoring PostgreSQL databases, there may be the case for restoring selected tables from a global db dump.
For this to happen one needs to have the right options when dumping the data.
pg_dump
$ pg_dump -Fc -U username database_name > db_dump
Now, we have a &#8220;restore customizable&#8221; compressed dump of the database.
From the postgres documentation:
&#160;&#160;-F format
&#160;&#160;&#8211;format=format
&#160;&#160;&#160;&#160;Selects [...]]]></description>
			<content:encoded><![CDATA[<p>
On dumping and restoring PostgreSQL databases, there may be the case for restoring selected tables from a global db dump.<br />
For this to happen one needs to have the right options when dumping the data.</p>
<p><strong>pg_dump</strong></p>
<p><code>$ pg_dump -Fc -U username database_name > db_dump</code></p>
<p>Now, we have a &#8220;restore customizable&#8221; compressed dump of the database.<br />
From the <a href="http://www.postgresql.org/docs/9.1/static/app-pgdump.html" title="PostgreSQL pg_dump">postgres documentation</a>:</p>
<p><i>&nbsp;&nbsp;-F format</i><br />
<i>&nbsp;&nbsp;&#8211;format=format</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;Selects the format of the output. format can be one of the following:</i></p>
<p><i>&nbsp;&nbsp;&nbsp;&nbsp;c</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;custom</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Output a custom-format archive suitable for input into pg_restore.</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Together with the directory output format, this is the most flexible</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;output format in that it allows manual selection and reordering of</i><br />
<i>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;archived items during restore. This format is also compressed by default.</i></p>
<p><strong>pg_restore</strong></p>
<p>To reorder database items, it is first necessary to dump the table of contents of the archive into a detailed file. This file will allow us to make a custom restore of the items (tables, etc) that we need.</p>
<p><code>$ pg_restore -l db_dump > db.list </code></p>
<p>Open the db.list file in your favorite editor (Vim) and proceed to comment or delete the lines of the item that you do not want to be restored.<br />
From the <a href="http://www.postgresql.org/docs/9.1/static/app-pgrestore.html" title="PostgreSQL pg_restore">postgres documentation</a> there is a good example I changed here to comply with the previous dump:</p>
<p>;<br />
; Archive created at Wed Dec  7 15:26:56 2011<br />
;     dbname: database_name<br />
;     TOC Entries: 306<br />
;     Compression: -1<br />
;     Dump Version: 1.12-0<br />
;     Format: CUSTOM<br />
;     Integer: 4 bytes<br />
;     Offset: 8 bytes<br />
;     Dumped from database version: 9.1.1<br />
;     Dumped by pg_dump version: 9.1.1<br />
;<br />
;<br />
; Selected TOC Entries:<br />
;<br />
3; 2615 2200 SCHEMA - public pasha<br />
1861; 0 0 COMMENT - SCHEMA public pasha<br />
1862; 0 0 ACL - public pasha<br />
317; 1247 17715 TYPE public composite pasha<br />
319; 1247 25899 DOMAIN public domain0 pasha<br />
&#8230;</p>
<p>One can carefully edit the file. Semicolons start a comment, and the numbers at the start of lines refer to the internal archive ID assigned to each item. Lines in the file can be commented out, deleted, and reordered. According to the example, one could edit this section of the file:</p>
<p>10; 145433 TABLE map_resolutions postgres<br />
;2; 145344 TABLE species postgres<br />
;4; 145359 TABLE nt_header postgres<br />
6; 145402 TABLE species_records postgres<br />
;8; 145416 TABLE ss_old postgres</p>
<p>This way, table species will no be restored, neither nt_header and ss_old.<br />
If one try this, will see all the items like index information, relations, keys, etc.</p>
<p>After all set, one can restore the selected items from the dumped database:</p>
<p><code>$ pg_restore -L db.list db_dump </code></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/postgresql-custom-restore/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Convert SQL Server database to PostgreSQL via CSV</title>
		<link>http://blog.tquadrado.com/2011/convert-sql-server-database-to-postgresql-via-csv/</link>
		<comments>http://blog.tquadrado.com/2011/convert-sql-server-database-to-postgresql-via-csv/#comments</comments>
		<pubDate>Thu, 01 Dec 2011 23:31:49 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>shell</category>
	<category>windows</category>
	<category>unix</category>
	<category>postgres</category>
	<category>postgresql</category>
	<category>database</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/convert-sql-server-database-to-postgresql-via-csv/</guid>
		<description><![CDATA[
Needed to convert a client Microsoft SQLSERVER database to our PostgreSQL database server.
Lots of tables, severall Gigabytes of data.

In Windows:


open the SQL Server administration console for the databae and do a DIR > tables.txt to get a file with all the table names;
remove all the tables you will not be needing from the file;
now to [...]]]></description>
			<content:encoded><![CDATA[<p>
Needed to convert a client Microsoft SQLSERVER database to our PostgreSQL database server.<br />
Lots of tables, severall Gigabytes of data.</p>
<p />
<strong>In Windows</strong>:<br />
</p>
<ul>
<li>open the SQL Server administration console for the databae and do a DIR > tables.txt to get a file with all the table names;</li>
<li>remove all the tables you will not be needing from the file;</li>
<li>now to export all the tables data to their files with a one-liner:
<p><code>FOR /F %A IN ('type tables.txt') DO bcp "dbo.%A" out "d:\export\path\%A.csv" -S SERVERNAME\SQLSERVEREXPRESS -d "databasename" -U SERVERNAME\username -C RAW -T -c -t "\t" -r "\n"</code></p>
<li>Notice the column separator set to TAB \t, and row separator to newline \n;</li>
<li>Codepage set to RAW (this is an ISO8859-1);</li>
<li>This is done on a local machine so using a trusted connection;</li>
<li>This line is executed in the Windows console (terminal);</li>
<li>Mind that the tables.txt needs to have only the table names per line. I removed the &#8220;dbo.&#8221; prefix in the file, so had to include it in the parameter in &#8220;dbo.%A&#8221; parameter, because I want the CSV files not to have the dbo. prefix;</li>
<li>So in short, the tables.txt file is iterated, each line containing a table name being passed in the %A variables, so that <code><italic>bcp</italic></code> command creates the CSV file.</li>
</ul>
<p />
<strong>In Linux</strong>:<br />
</p>
<ul>
<li>copy the previously exported data files folder to the linux machine;</li>
<li>verify the file encoding <code>$ file -bi filename.csv</code></li>
<li>convert all the folder CSV files from ISO8859-1 charset to UTF-8 if needed: <code>$ recode ISO8859-1..UTF-8 *.csv</code></li>
<li>now because I need to have the data validated and reassociated, I have Ruby scripts to perform the import, using Datamapper ORM. One can use the CSV class to proceed and then do whatever needs with the data. In this example I get the data into an Hash:</li>
<p><code></p>
<p>fx_tip = "./../exported_data/some_table.csv"<br />
h_tip  = Hash.new<br />
CSV.foreach(fx_tip, {:col_sep => "\t", :headers => false}) do |f|<br />
&nbsp;&nbsp;h_tip.merge!(f[0] => f[1])<br />
end<br />
puts h_tip.to_yaml<br />
</code>
</ul>
<p />
You can even specify a manual Query to export the SQL Server data, using:<br />
<code>FOR /F %A IN ('type tables.txt') DO sqlcmd -E -S SERVERNAME\SQLSERVEREXPRESS -d database -o %A -s ";" -W  -Q "SELECT TOP 100 * FROM dbo.%A WHERE someting"</code></p>
<p />
If your case is simpler and you need to make a straight port, you can export the SQL statements from SQL Server and then on Postgres something like:<br />
<code>COPY tablename FROM '/tmp/table.data' WITH DELIMITER ',';</code></p>
<p />
Used Tools:<br />
<a href="http://www.microsoft.com/sqlserver" title="Microsoft SQL Server">Microsoft SQL SERVER</a><br />
<a href="http://windows.microsoft.com/en-US/windows7/products/home" title="Microsoft Windows 7">Microsoft Windows 7</a><br />
<a href="http://www.postgresql.org/" title="PostgreSQL">PostgreSQL</a><br />
<a href="http://www.ubuntu.com/" title="Ubuntu Linux">Ubuntu Linux</a><br />
<a href="http://www.ruby-lang.org/en/" title="Ruby Language">Ruby Language</a></p>
<p></p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/convert-sql-server-database-to-postgresql-via-csv/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>the R from K&amp;R</title>
		<link>http://blog.tquadrado.com/2011/229/</link>
		<comments>http://blog.tquadrado.com/2011/229/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 19:06:01 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>code</category>
	<category>c</category>
	<category>unix</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/229/</guid>
		<description><![CDATA[&#8220;Ritchie was best known as the creator of the C programming language and a key developer of the Unix operating system, and as co-author of the definitive book on C, The C Programming Language, commonly referred to as K&#038;R (in reference to the authors Kernighan and Ritchie).&#8221;
Farewell Dennis Ritchie, your work changed my life.
C &#124; [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Ritchie was best known as the creator of the C programming language and a key developer of the Unix operating system, and as co-author of the definitive book on C, The C Programming Language, commonly referred to as K&#038;R (in reference to the authors Kernighan and Ritchie).&#8221;</p>
<p>Farewell <a title="Dennis Ritchie" href="http://en.wikipedia.org/wiki/Dennis_Ritchie">Dennis Ritchie</a>, your work changed my life.</p>
<p><strong>C</strong> | <strong>Unix</strong></p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/229/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>“Stay Hungry, Stay Foolish”</title>
		<link>http://blog.tquadrado.com/2011/stay-hungry-stay-foolish/</link>
		<comments>http://blog.tquadrado.com/2011/stay-hungry-stay-foolish/#comments</comments>
		<pubDate>Thu, 06 Oct 2011 19:00:59 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>tech</category>
	<category>apple</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/stay-hungry-stay-foolish/</guid>
		<description><![CDATA[Dear Steve, its not easy to &#8220;Stay Hungry. Stay Foolish&#8221;&#8230; damn, it isn&#8217;t. It&#8217;s not even fun most of the time. But when it is, it certainly rocks and pays up connecting all the dots left behind. Rest in peace.
Steve Jobs
]]></description>
			<content:encoded><![CDATA[<p>Dear Steve, its not easy to &#8220;Stay Hungry. Stay Foolish&#8221;&#8230; damn, it isn&#8217;t. It&#8217;s not even fun most of the time. But when it is, it certainly rocks and pays up connecting all the dots left behind. Rest in peace.</p>
<p><a href="http://www.apple.com/stevejobs" title="Steve Jobs Apple page...">Steve Jobs</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/stay-hungry-stay-foolish/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>jQuery.data vs jQuery.fn.data performance</title>
		<link>http://blog.tquadrado.com/2011/jquerydata-vs-jqueryfndata-performance/</link>
		<comments>http://blog.tquadrado.com/2011/jquerydata-vs-jqueryfndata-performance/#comments</comments>
		<pubDate>Sat, 09 Jul 2011 16:55:48 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/jquerydata-vs-jqueryfndata-performance/</guid>
		<description><![CDATA[jQuery.data( element,key,value )
&#8220;Store arbitrary data associated with the specified element. Returns the value that was set&#8221;
.data( key,value )
&#8220;Store arbitrary data associated with the matched elements.&#8221;
Performance difference: on this jsPerf test the last is about 84% slower.
So instead of:
$('#element').data('type', 'critical')
prefer:
jQuery.data('#element', 'type', 'critical')
(tested on Google Chrome 12.0.742 browser)

]]></description>
			<content:encoded><![CDATA[<p><code>jQuery.data( element,key,value )</code><br />
&#8220;Store arbitrary data associated with the specified element. Returns the value that was set&#8221;</p>
<p><code>.data( key,value )</code><br />
&#8220;Store arbitrary data associated with the matched elements.&#8221;</p>
<p>Performance difference: on <a href="http://jsperf.com/jquery-data-vs-jqueryselection-data/11" title="jsPerf data() test">this jsPerf test</a> the last is about 84% slower.</p>
<p>So instead of:<br />
<code>$('#element').data('type', 'critical')</code><br />
prefer:<br />
<code>jQuery.data('#element', 'type', 'critical')</code></p>
<p>(tested on <a href="http://www.google.com/chrome/" title="Google Chrome">Google Chrome</a> 12.0.742 browser)
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/jquerydata-vs-jqueryfndata-performance/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>on client-side Cache, Sinatra and Conditional GET’s</title>
		<link>http://blog.tquadrado.com/2011/on-client-side-cache-sinatra-and-conditional-gets/</link>
		<comments>http://blog.tquadrado.com/2011/on-client-side-cache-sinatra-and-conditional-gets/#comments</comments>
		<pubDate>Fri, 01 Jul 2011 01:18:13 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/on-client-side-cache-sinatra-and-conditional-gets/</guid>
		<description><![CDATA[After re-reading Google Code - Page Speed - Optimize Caching section, I began implementing it on the Sinatra app part of our eClinic.Pro system. Later, after having it working, I found out that Sinatra has this amazing helper:

# File 'lib/sinatra/base.rb', line 290
def last_modified(time)
  return unless time
  time = time_for time
  response[&#8217;Last-Modified&#8217;] = time.httpdate
  # compare based on seconds since [...]]]></description>
			<content:encoded><![CDATA[<p>After re-reading Google Code - Page Speed - <a href="http://code.google.com/speed/page-speed/docs/caching.html" title="Google Code Page Speed">Optimize Caching</a> section, I began implementing it on the Sinatra app part of our eClinic.Pro system. Later, after having it working, I found out that Sinatra has this amazing helper:<br />
<code><br />
<coderesult># File 'lib/sinatra/base.rb', line 290</coderesult></p>
<p>def last_modified(time)<br />
  return unless time<br />
  time = time_for time<br />
  response[&#8217;Last-Modified&#8217;] = time.httpdate<br />
  <coderesult># compare based on seconds since epoch</coderesult><br />
  halt 304 if Time.httpdate(env[&#8217;HTTP_IF_MODIFIED_SINCE&#8217;]).to_i >= time.to_i<br />
rescue ArgumentError<br />
end<br />
</code></p>
<p>Commited the code with a farewell <strong>git commit -am &#8220;Awesome handmade conditional GET to leverage client caching&#8221;</strong>, pushed it and refactored it to use the instance method <code>last_modified(timestamp)</code>, just to commit it again.</p>
<p>Combine this with a <strong>before filter</strong>, like:<br />
<code><br />
before do<br />
  <coderesult># set to rfc maximum because db_version will handle expiry date</coderesult><br />
  cache_control :public, :max_age => 31536000<br />
  <coderesult># get the database version time stamp</coderesult><br />
  db_version = Admin.first.created_at<br />
  <coderesult># now if db_version is more recent then last_modified will send a :halt 304 Not Modified as response.</coderesult><br />
  last_modified db_version<br />
  <coderesult># ... and if not, proceed here to the request route...</coderesult><br />
end<br />
</code></p>
<p>In short, the client (browser) issues a request for some content via a URI to the server. The server receives the request and checks the Request Headers to see if a <strong>If-Modified-Since</strong> directive is defined. If not, a <code>response['Last-Modified']</code> header is set to the current time and the execution flow will proceed to the Sinatra app request route to deliver a response [no client local caching scenario]. Yet, this timestamp will be used by the client (browser) cache manager to store it locally, together with the response payload, <strong>building a client-side local cache for this resource</strong>. Now, if there is another client request, to the same URI, this time a If-Modified-Since Request Header will be sent along the request. The server will catch it and compare to an expiry date, in this case, the <italic>db_version</italic>. Since it is lower than, the server will stop the execution flow and send a <strong>304 Not Modified status response</strong>. The &#8220;Conditional GET&#8221; technique name is because the GET request had an &#8220;interruption&#8221; based on conditions defined by HTTP Headers. Now, the client receiving this response will get the local storage cached content and deliver it as response. For the Sinatra app, the router was not even touched.</p>
<p>Acording to Google, using both <strong>Cache-Control: max-age</strong> and <strong>Last-Modified</strong> headers, or even Etag if necessary, instructs the browser to load previously downloaded resources from local disk rather than over the network. This is client (browser) caching. </p>
<p>Based on the documentation it is redundant to specify both Expires and Cache-Control: max-age, or to specify both Last-Modified and ETag. It makes note to use the <strong>Cache control: public</strong> directive to enable HTTPS caching for Firefox.</p>
<p>This allows the browser to efficiently update its cached resources by issuing conditional GET requests when the user explicitly reloads the page. Conditional GETs don&#8217;t return the full response unless the resource has changed at the server, and thus have lower latency than full GETs. </p>
<p>For this, I set the server to dispatch a <strong>304 Not Modified</strong> response to the browser so that is gets the local cached content and presents it as the result of the request, with a:<br />
<code><br />
Request Method: GET<br />
Status Code: 304 Not Modified<br />
</code></p>
<p>This is quite important since I&#8217;m requesting <italic>readonly</italic> JSON content that takes about 3 seconds<br />
to be fetched, and the result of this is 13 miliseconds response time. Local content. The payload is considerable, about 136KB of JSON response for one of the areas. Adding up that for one of the pages I&#8217;m loading 3 payloads of these via jQuery, the main server Merb app is now feeling quite lighter due to this <a href="http://blog.tquadrado.com/2011/jquery-and-jsonp/" title="application decoupling">recent decoupling</a>. <strong>This means lower CPU utilization, database access, bandwith and time to respond</strong>. </p>
<p>Combining this with application server caching, response times get quite improved.</p>
<p><coderesult>Before client (browser) local caching</coderesult>:<br />
<a href="http://www.flickr.com/photos/keynote/5889141197/" title="before Conditional GET by pedro mg, on Flickr"><img src="http://farm6.static.flickr.com/5119/5889141197_285d1e1b27_z.jpg" width="640" height="127" alt="before Conditional GET"></a></p>
<p><coderesult>After client (browser) local caching</coderesult>:<br />
<a href="http://www.flickr.com/photos/keynote/5889711650/" title="after Conditional GET by pedro mg, on Flickr"><img src="http://farm6.static.flickr.com/5262/5889711650_1708147405_z.jpg" width="640" height="127" alt="after Conditional GET"></a></p>
<p>Final Notes:<br />
- Github SinatraRb documentation for <a href="http://rdoc.info/github/sinatra/sinatra/master/Sinatra/Helpers#last_modified-instance_method" title="Github Sinatra last_modified source">(Object) last_modified(time)</a>;<br />
- Google Code <a href="http://code.google.com/speed/page-speed/docs/caching.html" title="Google Page Speed Optimize Caching" >Optimize Caching page</a>;<br />
- HTTP Headers on <a href="http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requests" title="Wikipedia HTTP Request Headers">Wikipedia</a>;<br />
- Google Chrome is an amazing browser to develop on, using the <a href="http://code.google.com/chrome/devtools/docs/overview.html" title="Google Chrome Developer Tools">Developer Tools</a>;<br />
- still got to <a href="http://twitter.com/#!/pedro_mg/status/86572338962903040" title="pedro mg's twitter">detect a &#8220;typo&#8221;</a> on Google Code documentation.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/on-client-side-cache-sinatra-and-conditional-gets/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>jQuery and JSONP</title>
		<link>http://blog.tquadrado.com/2011/jquery-and-jsonp/</link>
		<comments>http://blog.tquadrado.com/2011/jquery-and-jsonp/#comments</comments>
		<pubDate>Tue, 28 Jun 2011 23:55:20 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/2011/jquery-and-jsonp/</guid>
		<description><![CDATA[For the sake of application decoupling on one of the Merb web apps we&#8217;re working on, we identified the separation of  blocks that shouldn&#8217;t depend on each other, with the advantage of having fewer dependencies, and lower the risk of malfunction in one part of a system when the other part is changed.
So a [...]]]></description>
			<content:encoded><![CDATA[<p>For the sake of application decoupling on one of the <a href="https://github.com/merb/merb" title="Merb Framework">Merb</a> web apps we&#8217;re working on, we identified the separation of  blocks that shouldn&#8217;t depend on each other, with the advantage of having fewer dependencies, and lower the risk of malfunction in one part of a system when the other part is changed.</p>
<p>So a <a href="https://github.com/sinatra/sinatra/" title="Ruby Sinatra Framework">Sinatra</a> web app was built on another server/port, with a simple yet effective control panel for internal management and an API to generate JSON responses.</p>
<p>Some requests to that Sinatra app API are being made via <a href="http://jquery.com/" title="jQuery JavaScript Library">jQuery</a> originating on the Merb application. This represents a problem. Even if in the same server, but with a different port. The browser security model tells us that XMLHttpRequest, frames, etc. <strong>must have the same domain</strong> in order to communicate. Makes sense for security reasons, but at the same time distributed services feel the pain.</p>
<p>For production we use a server side proxy so that the request comes from the client to our (origin) domain and is dispatched to the Sinatra app on a port or server/port combination. But in development we use another technique to get around the same origin browser policy.</p>
<p>That&#8217;s where JSONP (JSON with Padding) makes its debut. jQuery > 1.5 brought some new features like the ability to control the callback configuration. If we specify an <strong>ajax call/request</strong> with <code>dataType: "jsonp"</code>, jQuery adds a parameter to our request, with the standard name &#8220;callback&#8221;. That parameter name will be used as a function name to process data.</p>
<p>Callback function name can be overridden using the jsonp parameter, something like <code>jsonp: 'onJSONLoad'</code>. That will result in the callback parameter name change. So, we&#8217;d get <code>http://new.server:port/service/parameter?onJSONLoad=</code> followed by an unique stamp that jQuery creates for the request.</p>
<p>One of the advantages of controlling the callback parameter is related to better browser caching of GET requests, since it is set to false as default for &#8216;jsonp&#8217; dataType ajax requests.</p>
<p>All the above in the client. What about the server ? Mind that the request is getting a new parameter. For the Sinatra app, we had to change the final response. So, based on the fact of the appearance of a callback parameter:</p>
<p><code>callback = params.delete('callback')</code><br />
and in the end of the action:<br />
<code>final_response(callback, response)</code><br />
with response being a well formed JSON object.</p>
<p>For the final_response method, we have:<br />
<code><br />
def final_response( callback, res)<br />
  if callback<br />
    content_type :js<br />
    response = "#{callback}(#{res})"<br />
  else<br />
    content_type :json<br />
    response = res<br />
  end<br />
  response<br />
end<br />
</code><br />
This will make the necessary adjustment to the response for the case of cross domain requests or same (origin) domain requests.</p>
<p>So a simple jQuery function would be like:</p>
<p><code><br />
$("#ep_search_medics").click(function() {<br />
  $.ajax({<br />
    type: 'get',<br />
    dataType: 'jsonp',<br />
    url: 'http://localhost:4567/dcipt/rosuvast',<br />
    success: function(data) { $("#ep_search_results_nr").html(data.count); },<br />
    error: function() { console.log("Error"); }<br />
  });<br />
  return false;<br />
});<br />
</code></p>
<p>Final Notes:<br />
- one can read more at the excellent <a href="http://api.jquery.com/jQuery.ajax/" title="jQuery AJAX documentation">jQuery page for ajax requests</a>;<br />
- be very confident on your <a href="http://www.json.org/" title="JSON page">JSON</a> response. One can test for JSON validation in <a href="http://jsonlint.com/" title="JSONLint validator">JSONLint</a>;<br />
- Google Chrome is an amazing browser to develop on, using the <a href="http://code.google.com/chrome/devtools/docs/overview.html" title="Google Chrome Developer Tools">Developer Tools</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2011/jquery-and-jsonp/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>DataMapper update_or_create</title>
		<link>http://blog.tquadrado.com/2010/datamapper-update_or_create/</link>
		<comments>http://blog.tquadrado.com/2010/datamapper-update_or_create/#comments</comments>
		<pubDate>Wed, 13 Oct 2010 18:38:52 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>merb</category>
	<category>datamapper</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=219</guid>
		<description><![CDATA[
Source code: git repository at github
DataMapper has a defined method named first_or_create, very explicit name, that takes a condition and attributes as params. Its source code defined in dm-core-1.0.2/lib/dm-core/model.rb is:
def first_or_create(conditions = {}, attributes = {})
  first(conditions) &#124;&#124; create(conditions.merge(attributes))
end
What is does is simply find the first resource by conditions, or create a new resource with the [...]]]></description>
			<content:encoded><![CDATA[
<p>Source code: <a href="http://github.com/pedromg/dm-core-update_or_create" title="update_or_create method">git repository at github</a></p>
<p><a href="http://datamapper.org" title="DataMapper website">DataMapper</a> has a <a href="http://rubydoc.info/gems/dm-core/1.0.2/frames" title="DataMapper API documentation">defined method</a> named <code>first_or_create</code>, very explicit name, that takes a condition and attributes as params. Its source code defined in dm-core-1.0.2/lib/dm-core/model.rb is:</p>
<p><code>def first_or_create(conditions = {}, attributes = {})<br />
  first(conditions) || create(conditions.merge(attributes))<br />
end</code></p>
<p>What is does is simply find the first resource by conditions, or create a new resource with the attributes if none found. This always returns an instance of the resource found or created.</p>
<p>It became handy to create an update_or_create method, so I created:<br />
<code>module DataMapper<br />
  module Model<br />
    def update_or_create(conditions = {}, attributes = {}, merger = true)<br />
      (first(conditions) &#038;&#038; first(conditions).update(attributes)) || create(merger ? (conditions.merge(attributes)) : attributes )<br />
    end<br />
  end # Module Model<br />
end # Module DataMapper</code></p>
<p>There are differences to consider, like the <code>merger</code> param and the returned <a href="http://ruby-doc.org/core/classes/TrueClass.html" title="Ruby TrueClass documentation">TrueClass</a> bool upon update (and not an instance of the resource).</p>
<p>I found a <code>merger</code> param necessary because of the <code>Serial</code> type of properties. In the implementation of <code>first_or_create</code> method if we specify a Serial property as a search condition and the search has no success, then the conditions will be merged with the attributes and the Serial +1 will not be taken in account. Thus, in this implementation setting <code>merger</code> to false, search conditions will not be merged. Some examples:</p>
<p><code>Article.update_or_create({:id => 10}, {:name => "Spirou meet Franquin"})</code><br />
If Article with &#8216;id&#8217; 10 exists then it will receive a new name<br />
<coderesult>=> true</coderesult><br />
If Article with &#8216;id&#8217; 10 doesn&#8217;t exist, it will be created with {:id => 10, :name => &#8220;Spirou meet Franquin&#8221;}<br />
<coderesult>=> #[Article @id=10 @name="Spirou meet Franquin" @date=#[Date: 4910965/2,0,2299161] @updated_on=#[Date: 4910965/2,0,2299161]]</coderesult></p>
<p><code>Article.update_or_create({:id => 123}, {:name => "Fantasio meet Franquin}, false)</code><br />
If Article with &#8216;id&#8217; 123 doesn&#8217;t exist, it will be created with {:name => &#8220;Fantasio meet Franquin&#8221;} and a self sequential id:<br />
<coderesult>=> #[Article @id=240 @name="Fantasio meet Franquin" @date=#[Date: 4910965/2,0,2299161] @updated_on=#[Date: 4910965/2,0,2299161]]</coderesult></p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
<p>EDIT: new implementation to always get a DataMapper Object:<br />
<script src="https://gist.github.com/1090142.js?file=gistfile1.rb"></script>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2010/datamapper-update_or_create/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>install PostgreSQL in Mac OSX via Homebrew</title>
		<link>http://blog.tquadrado.com/2010/install-postgresql-in-mac-osx-via-homebrew/</link>
		<comments>http://blog.tquadrado.com/2010/install-postgresql-in-mac-osx-via-homebrew/#comments</comments>
		<pubDate>Wed, 10 Mar 2010 11:15:28 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>tech</category>
	<category>apple</category>
	<category>ruby</category>
	<category>code</category>
	<category>git</category>
	<category>github</category>
	<category>gist</category>
	<category>osx</category>
	<category>unix</category>
	<category>postgres</category>
	<category>postgresql</category>
	<category>datamapper</category>
	<category>database</category>
	<category>dbms</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=215</guid>
		<description><![CDATA[
Apple OSX Snow Leopard
System Version:	Mac OS X 10.6.2
Kernel Version:	Darwin 10.2.0
Install notes for PosgreSQL 8.4 install using the great
Homebrew by Adam Vandenberg.
Run the author&#8217;s installation script, and that&#8217;s it. Try:
$ brew help
$ brew search postgresql
$ sudo brew install postgresql
==> Summary
/usr/local/Cellar/postgresql/8.4.2: 2297 files, 31M, built in 3.3 minutes
$ brew info postgresql
postgresql 8.4.2
My advice ? Use Homebrew. True [...]]]></description>
			<content:encoded><![CDATA[<p>
<strong>Apple OSX Snow Leopard</strong><br />
System Version:	Mac OS X 10.6.2<br />
Kernel Version:	Darwin 10.2.0</p>
<p>Install notes for <a title="PostgreSQL homepage" href="http://www.postgresql.org">PosgreSQL</a> 8.4 install using the great<br />
<a href="http://github.com/mxcl/homebrew" title="Homebrew">Homebrew</a> by <a href="http://twitter.com/flangy" title="Homebrew author Adam Vandenberg">Adam Vandenberg</a>.</p>
<p>Run the author&#8217;s <a href="http://gist.github.com/323731" title="install script">installation script</a>, and that&#8217;s it. Try:<br />
<code>$ brew help</code><br />
<code>$ brew search postgresql</code><br />
<code>$ sudo brew install postgresql</code><br />
<coderesult>==> Summary<br />
/usr/local/Cellar/postgresql/8.4.2: 2297 files, 31M, built in 3.3 minutes<coderesult><br />
<code>$ brew info postgresql</code><br />
<coderesult>postgresql 8.4.2</coderesult></p>
<p>My advice ? Use <a href="http://github.com/mxcl/homebrew" title="Homebrew">Homebrew</a>. True UNIX tool!</p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2010/install-postgresql-in-mac-osx-via-homebrew/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>install do_postgres on OSX Leopard</title>
		<link>http://blog.tquadrado.com/2010/install-do_postgres-on-osx-leopard/</link>
		<comments>http://blog.tquadrado.com/2010/install-do_postgres-on-osx-leopard/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 07:24:21 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>os</category>
	<category>ubuntu</category>
	<category>apple</category>
	<category>ruby</category>
	<category>code</category>
	<category>debian</category>
	<category>vimblog.vim</category>
	<category>vimblog</category>
	<category>merb</category>
	<category>osx</category>
	<category>postgres</category>
	<category>postgresql</category>
	<category>datamapper</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=214</guid>
		<description><![CDATA[Install notes for Datamapper do_postgres driver ruby gem on severall operating systems:
Apple OSX Snow Leopard
System Version:	Mac OS X 10.6.2
Kernel Version:	Darwin 10.2.0
(No Macports; No Homebrew)
PosgreSQL 8.4
I wanted to have PosgreSQL server working on the mac so that development is easier.
There is a .dmg package from the guys at EnterpriseDB that is a single click install. Check [...]]]></description>
			<content:encoded><![CDATA[<p>Install notes for <a title="Datamapper homepage" href="http://www.datamapper.org">Datamapper</a> <code>do_postgres</code> driver ruby gem on severall operating systems:</p>
<p><strong>Apple OSX Snow Leopard</strong><br />
System Version:	Mac OS X 10.6.2<br />
Kernel Version:	Darwin 10.2.0<br />
(No Macports; No Homebrew)</p>
<p><a title="PostgreSQL homepage" href="http://www.postgresql.org">PosgreSQL</a> 8.4</p>
<p>I wanted to have <a title="PostgreSQL homepage" href="http://www.postgresql.org">PosgreSQL</a> server working on the mac so that development is easier.<br />
There is a .dmg package from the guys at <a title="EnterpriseDB" href="http://www.enterprisedb.com/">EnterpriseDB</a> that is a single click install. Check it at their <a href="http://www.enterprisedb.com/products/download.do">downloads</a> page. Get it. Install it. Everything goes into:</p>
<p>/Library/PostgreSQL/8.4</p>
<p>Now to install the <code>do_postgres</code> gem, I had to set the $PATH to:</p>
<p><code>$ export PATH=$PATH:/Library/PostgreSQL/8.4/bin</code></p>
<p>Now, installing the gem from <a title="Rubygems homepage" href="http://rubygems.org">rubygems.org</a> should work:</p>
<p><code>$ gem install do_postgres</code><br />
or<br />
<code>sudo env ARCHFLAGS='-arch i386' gem install do_postgres</code></p>
<p>Remember in OSX where your gems are installed, with or without root access using:</p>
<p><code>$ gem environment</code></p>
<p><strong>Debian 5.0 Lenny</strong></p>
<p>I have <a title="PostgreSQL homepage" href="http://www.postgresql.org">PosgreSQL</a> 8.3 on my <a title="Debian homepage" href="http://www.debian.org">Debian</a> servers, from the repositories. To install the <code>do_postgres</code> gem, you must get the header files for libpq5 (PostgreSQL library):</p>
<p><code>$ sudo apt-get install libpq_dev<br />
$ sudo gem install do_postgres</code></p>
<p><strong>Ubuntu 9.10 Karmic Koala</strong></p>
<p>I have <a title="PostgreSQL homepage" href="http://www.postgresql.org">PosgreSQL</a> 8.4 on my <a title="Ubuntu homepage" href="http://www.ubuntu.com">Ubuntu</a> servers, from the repositories. To install the <code>do_postgres</code> gem, you must get the header files for libpq5 (PostgreSQL library):</p>
<p><code>$ sudo apt-get install libpq_dev<br />
$ sudo gem install do_postgres</code></p>
<div align="right">(blogged from <a title="Vimblog at vim.org" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim</a>)</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2010/install-do_postgres-on-osx-leopard/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Gemcutter indexing ruby gems</title>
		<link>http://blog.tquadrado.com/2009/gemcutter-indexing-ruby-gems/</link>
		<comments>http://blog.tquadrado.com/2009/gemcutter-indexing-ruby-gems/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 21:29:09 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>ruby</category>
	<category>standards</category>
	<category>code</category>
	<category>rubyforge</category>
	<category>open source</category>
	<category>merb</category>
	<category>gemcutter</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=213</guid>
		<description><![CDATA[Date: Sat, 21 Nov 2009 22:15:15 -0500 (EST)
From: noreply@rubyforge.org
To: me@mydomain.com
Subject: [RubyForge] Gem index has been shut down
Hello -
You&#8217;re receiving this email because you&#8217;re a RubyForge project admin and a recent change robably affects you.
A few days ago we repointed gems.rubyforge.org to the gemcutter.org box.  This means that Nick Quaranto&#8217;s excellent gemcutter app is now [...]]]></description>
			<content:encoded><![CDATA[<p>Date: Sat, 21 Nov 2009 22:15:15 -0500 (EST)<br />
From: noreply@rubyforge.org<br />
To: me@mydomain.com<br />
Subject: [RubyForge] Gem index has been shut down</p>
<p>Hello -</p>
<p>You&#8217;re receiving this email because you&#8217;re a RubyForge project admin and a recent change robably affects you.<br />
A few days ago we repointed gems.rubyforge.org to the gemcutter.org box.  This means that Nick Quaranto&#8217;s excellent gemcutter app is now indexing and serving all the gems - so rather than having two gem indexes, we now have one.  As a consequence of this, when you release files to RubyForge you will probably also want to do a &#8220;gem push&#8221; to get them onto gemcutter and into the main gem index.</p>
<p>Note that you can continue to release gems (and other files) at RubyForge; it&#8217;s just that gems won&#8217;t utomatically make it into the main gem index.</p>
<p>Yours,</p>
<p>The RubyForge support team<br />
http://rubyforge.org/projects/support/
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/gemcutter-indexing-ruby-gems/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>next week… Codebits</title>
		<link>http://blog.tquadrado.com/2009/next-week-codebits/</link>
		<comments>http://blog.tquadrado.com/2009/next-week-codebits/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 18:03:10 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>culture</category>
	<category>digital-life</category>
	<category>standards</category>
	<category>code</category>
	<category>open source</category>
	<category>web 2.0</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=212</guid>
		<description><![CDATA[its next week, yet fun starts much sooner; conference; talks; code; lisbon; 3day => codebits
Just like last year a lot of hacks and experiments are expected.
Kudos to the SAPO team, the organisers, to build up such an impressive event.

]]></description>
			<content:encoded><![CDATA[<p>its next week, yet fun starts <a href="http://codebits.eu/s/blog/5fc7e5123ff2012611801fef6246496e" title="quiz 5 win">much sooner</a>; conference; talks; code; lisbon; 3day => <a href="http://codebits.eu" title="CodeBits">codebits</a></p>
<p>Just like <a href="http://www.flickr.com/photos/ndantas/3043438572/" title="at codebits 08">last year</a> a lot of hacks and experiments are expected.</p>
<p>Kudos to the <a href="http://www.sapo.pt" title="SAPO online">SAPO</a> team, the organisers, to build up such an impressive event.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/next-week-codebits/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Revision Control Software workshop</title>
		<link>http://blog.tquadrado.com/2009/revision-control-software-workshop/</link>
		<comments>http://blog.tquadrado.com/2009/revision-control-software-workshop/#comments</comments>
		<pubDate>Mon, 23 Nov 2009 17:31:02 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>log</category>
	<category>linux</category>
	<category>code</category>
	<category>open source</category>
	<category>git</category>
	<category>github</category>
	<category>unix</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=211</guid>
		<description><![CDATA[Last saturday the local Linux group, PortoLinux had a meeting at the engineering faculty of Porto University to discuss about usage of diferent SCM&#8217;s. 
Main systems covered, centralized vs distributed:
- Subversion
- Git
It was a good tech event, spent a good time there.
Some photos here.

]]></description>
			<content:encoded><![CDATA[<p>Last saturday the local Linux group, <a href="http://portolinux.org/doku.php" title="PortoLinux website">PortoLinux</a> had a meeting at the engineering faculty of Porto University to discuss about usage of diferent <a href="http://en.wikipedia.org/wiki/Revision_control" title="source control management">SCM</a>&#8217;s. </p>
<p>Main systems covered, centralized vs distributed:<br />
- <a href="http://en.wikipedia.org/wiki/Subversion_(software)" title="Subversion centralized SCM in Wikipedia">Subversion</a><br />
- <a href="http://en.wikipedia.org/wiki/Git_(software)" title="Git distributed SCM in Wikipedia">Git</a></p>
<p>It was a good tech event, spent a <a href="http://portolinux.org/gallery2/main.php?g2_itemId=1449" title="me @ scm event">good time</a> there.<br />
Some <a href="http://portolinux.org/gallery2/main.php?g2_itemId=1203" title="pictures of the SCM event">photos here</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/revision-control-software-workshop/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Tokyo products new site</title>
		<link>http://blog.tquadrado.com/2009/tokyo-products-new-site/</link>
		<comments>http://blog.tquadrado.com/2009/tokyo-products-new-site/#comments</comments>
		<pubDate>Mon, 31 Aug 2009 16:54:01 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=210</guid>
		<description><![CDATA[&#8220;By: Mikio Hirabayashi - 2009-08-31 13:22
BTW, the project site of Tokyo products have been moved onto my own server.
http://1978th.net/
Though it has not been completed yet, I&#8217;ll write more English information about Tokyo products.&#8221; 
So, to get the latest, head there.

]]></description>
			<content:encoded><![CDATA[<p><em>&#8220;By: Mikio Hirabayashi - 2009-08-31 13:22</em></p>
<p><em>BTW, the project site of Tokyo products have been moved onto my own server.<br />
<a target="_blank" href="http://1978th.net/">http://1978th.net/</a><br />
Though it has not been completed yet, I&#8217;ll write more English information about Tokyo products.&#8221; </em></p>
<p>So, to get the latest, head there.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/tokyo-products-new-site/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>sdef - scripting definition files</title>
		<link>http://blog.tquadrado.com/2009/sdef-scripting-definition-files/</link>
		<comments>http://blog.tquadrado.com/2009/sdef-scripting-definition-files/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 00:47:21 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>ruby</category>
	<category>code</category>
	<category>osx</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=209</guid>
		<description><![CDATA[
Scripting definition files (sdefs) are XML files that describe everything
about an application scripting interface: terminology, implementation
information, and complete documentation.  Applications may incorporate
them to define their own scriptability, and scripting clients such as
AppleScript and Scripting Bridge read them to determine what operations
an application supports.
man sdef
]]></description>
			<content:encoded><![CDATA[
<p>Scripting definition files (sdefs) are XML files that describe everything<br />
about an application scripting interface: terminology, implementation<br />
information, and complete documentation.  Applications may incorporate<br />
them to define their own scriptability, and scripting clients such as<br />
AppleScript and Scripting Bridge read them to determine what operations<br />
an application supports.</p>
<p><code>man sdef</code></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/sdef-scripting-definition-files/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Graph Database Neo4j</title>
		<link>http://blog.tquadrado.com/2009/graph-database-neo4j/</link>
		<comments>http://blog.tquadrado.com/2009/graph-database-neo4j/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 22:52:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=208</guid>
		<description><![CDATA[
&#8220;Neo4j is a graph database. It is an embedded, disk-based, fully transactional Java persistence engine that stores data structured in graphs rather than in tables. A graph (mathematical lingo for a network) is a flexible data structure that allows a more agile and rapid style of development.&#8221;
From the site:

graph-oriented model for flexible data representation;
graph network [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8220;<a href="http://neo4j.org" title="Neo4j graph database website">Neo4j</a> is a graph database. It is an embedded, disk-based, fully transactional Java persistence engine that stores data structured in <a href="http://en.wikipedia.org/wiki/Graph_(data_structure)" title="Graph (data structure)">graphs</a> rather than in tables. A <a href="http://en.wikipedia.org/wiki/Graph_theory" title="Graph theory">graph</a> (mathematical lingo for a network) is a flexible data structure that allows a more agile and rapid style of development.&#8221;</p>
<p>From the site:</p>
<ul>
<li>graph-oriented model for flexible data representation;</li>
<li>graph network consisting of nodes, relationships and properties;</li>
<li>highly scalable to bilions of nodes/rels/props; </li>
<li>can be sharded to scale out across multiple machines;</li>
<li>hi-speed traversals in the node space;</li>
<li>small footprint (500k jar)</li>
<li>ACID transactions;</li>
<li>robust persistence;</li>
<li>concurrency control;</li>
<li><a href="http://api.neo4j.org/current/" title="Neo4j API">API</a>;</li>
<li><a href="http://neo4j.rubyforge.org/" title="Neo4j.rb API">Neo4j.rb</a>, JRuby API;</li>
<li><a href="http://lucene.apache.org/java/docs/index.html" title="Lucene">Lucene</a> for quering and indexing.</li>
</ul>
<p>Neo4j is released under a <a href="http://www.fsf.org/licensing/licenses/agpl-3.0.html" titl="AGPL3.0">GNU Affero General Public License</a>, so read carefully. There&#8217;s a price table for commercial products that includes severall support levels.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/graph-database-neo4j/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>tokyo cabinet</title>
		<link>http://blog.tquadrado.com/2009/tokyo-cabinet/</link>
		<comments>http://blog.tquadrado.com/2009/tokyo-cabinet/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 03:37:41 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>tokyocabinet</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=207</guid>
		<description><![CDATA[
Interesting article with links from Ilya Grigorik about Tokyo Cabinet, Tokyo Tyrant (remote network access to the DB, via a rest_client p.ex.) and the &#8220;magnifique&#8221; Lua programming language, integrated for the ease of creation of user _designed functions into the server. A question I asked is the ability, or lack, of dinamically feed the server [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.igvita.com/2009/07/13/extending-tokyo-cabinet-db-with-lua/" title="Extending Tokyo Cabinet with Lua">Interesting article</a> with links from <a href="http://www.igvita.com" title="Ilya's blog">Ilya Grigorik</a> about Tokyo Cabinet, Tokyo Tyrant (remote network access to the DB, via a rest_client p.ex.) and the &#8220;magnifique&#8221; <a href="http://www.lua.org/" title="Lua computer programming language">Lua</a> programming language, integrated for the ease of creation of user _designed functions into the server. A question I asked is the ability, or lack, of dinamically feed the server with extensions, without the need for restarts (updates, etc).</p>
<p>Not to miss this article too: <a href="http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/" title="Ilya's article">Tokyo Cabinet: Beyond Key-Value Store</a></p>
<p>Tokyo Cabinet <a href="http://tokyocabinet.sourceforge.net/index.html" title="Tokyo Cabinet">starts here</a> with a nice presentation from its creator, another Japanese developer <a href="http://alpha.mixi.co.jp/blog/?author=3" title="Mikio's blog">Mikio Hirabayashi</a>.</p>
<p>Ruby, Perl, Python et_al bindings available.</p>
<p>I tell you, &#8220;it&#8217;s <code>Big in Japan</code>&#8221;</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/tokyo-cabinet/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>vimblog.vim on MacVim</title>
		<link>http://blog.tquadrado.com/2009/vimblogvim-on-macvim/</link>
		<comments>http://blog.tquadrado.com/2009/vimblogvim-on-macvim/#comments</comments>
		<pubDate>Sat, 06 Jun 2009 15:52:15 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>vim</category>
	<category>vimblog</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=206</guid>
		<description><![CDATA[
I was contacted via Twitter for some support on getting vimblog.vim to work on MacVim, on Mac OSX Leopard. The unique problem is that it must be compiled with Ruby interpreter support. So here is a quick guide to do it, building from Macvim git repository:
# select a folder where to build the aplication on [...]]]></description>
			<content:encoded><![CDATA[
<p>I was contacted via <a href="http://www.twitter.com/pedro_mg" title="my twitter accont">Twitter</a> for some support on getting <a href="http://blog.tquadrado.com/?page_id=146" title="vimblog with links to vim.org and github">vimblog.vim</a> to work on <a href="http://code.google.com/p/macvim/" title="">MacVim</a>, on <a href="http://www.apple.com/macosx/" title="Mac OS X Leopard">Mac OSX</a> Leopard. The unique problem is that it must be compiled with <a href="http://www.ruby-lang.org/en/" title="Ruby language">Ruby</a> interpreter support. So here is a quick guide to do it, building from <a href="http://code.google.com/p/macvim/wiki/Building?tm=4" title="building macvim on OSX">Macvim</a> git repository:</p>
<p># select a folder where to build the aplication on your area:<br />
<code>cd to_your_workingspace_apps_folder</code><br />
# get (clone) MacVim from its MacVim.git repository:<br />
<code>$ git clone git://repo.or.cz/MacVim.git</code><br />
<code>$ cd MacVim</code><br />
<code>$ cd src</code><br />
# now let us configure it for macvim gui and for +Ruby (I&#8217;ll add +Python and +Perl) support:<br />
<code>$./configure --enable-gui=macvim --enable-rubyinterp --enable-perlinterp --enable-pythoninterp </code><br />
<code>$ make</code><br />
# Success ? Let&#8217;s build the MacVim.app<br />
<code>$ cd MacVim</code><br />
<code>$ xcodebuild</code><br />
# Sucess ? Let&#8217;s try it&#8230;<br />
<code>$ open build/Release/MacVim.app</code><br />
# now lets copy vimblog to $HOME<br />
<code>$ cp $HOME/Downloads/vimblog.vim $HOME/.vim/plugin</code><br />
# insert your credentials<br />
# now test the existence of the script. Run MacVim and execute<br />
<code>:B + TAB</code><br />
# you shoud get code completion for the Blog command.<br />
# get the 10 most recent articles<br />
<code>:Blog rp</code></p>
<p>if you get problems, before another build, do a:<br />
<code>$ make distclean</code></p>
<p>Screenshots: <img alt="jump to flickr " title="jump to flickr" src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3601304652/" title="macvim screenshot">macvim window</a>  <img alt="jump to flickr " title="jump to flickr" src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3600082221/" title="macvim screenshot">building space</a>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/vimblogvim-on-macvim/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>mac mini 09</title>
		<link>http://blog.tquadrado.com/2009/mac-mini-09/</link>
		<comments>http://blog.tquadrado.com/2009/mac-mini-09/#comments</comments>
		<pubDate>Tue, 12 May 2009 10:09:46 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>digital-life</category>
	<category>apple</category>
	<category>Flickr</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=205</guid>
		<description><![CDATA[
The new Mac Mini arrived today.
Still in the box:
Some pics    here,  here and  here
]]></description>
			<content:encoded><![CDATA[
<p>The new <a href="http://www.apple.com/macmini" title="mac mini">Mac Mini</a> arrived today.<br />
Still in the box:<br />
Some pics   <img alt="jump to flickr " title="jump to flickr" src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3525087863/" title="mini@home">here</a>, <img alt="jump to flickr " title="jump to flickr" src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3525087881/" title="mini@home">here</a> and <img alt="jump to flickr " title="jump to flickr" src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3525087873/" title="mini@home">here</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/mac-mini-09/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Sun.com privacy…</title>
		<link>http://blog.tquadrado.com/2009/suncom-privacy/</link>
		<comments>http://blog.tquadrado.com/2009/suncom-privacy/#comments</comments>
		<pubDate>Thu, 09 Apr 2009 23:30:27 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=204</guid>
		<description><![CDATA[
I subscrived to some mail publications from Sun Microsystems. After that, one gets the usual validation e-mail.
This one states:
&#8220;Dear Sun Community Member,
Thank you for subscribing to the following Sun Microsystems eNewsletter(s)/notifications:
[&#8230;]
Sun respects your email privacy and security.  In order to start receiving these publications, you must first confirm your subscriptions. Please click on the [...]]]></description>
			<content:encoded><![CDATA[<p>
I subscrived to some mail publications from <a href="http://www.sun.com" title="Sun.com website">Sun Microsystems</a>. After that, one gets the usual validation e-mail.<br />
This one states:</p>
<p><i>&#8220;Dear Sun Community Member,</p>
<p>Thank you for subscribing to the following Sun Microsystems eNewsletter(s)/notifications:<br />
[&#8230;]<br />
Sun respects your email privacy and security.  In order to start receiving these publications, you must first confirm your subscriptions. Please click on the url below to activate your subscription(s): <code>https://subscriptions.sun.com/sunmailapi/Optin?id=999999999</code><br />
Thank you for subscribing. We hope you find the information to be valuable.&#8221;</i></p>
<p>The problem here is that the confirmation URL query is nothing but a (*not* garbled) sequential ID. Altering the ID from the link, all the other subscrivers e-mail starts poping-up, and more, they get activated if not done yet.<br />
So, the above &#8220;Sun respects your email privacy and security&#8221; isn&#8217;t quite as should be.</p>
<p>With a simple script, one can get all the Sun.com subscrivers. I can see a spammer doing a:<br />
&#8220;Dear Sun.com subscriver, we are partnering with Sun.com to sell you this lovely vacuum cleaner.&#8221;</p>
<p>Dear <a href="http://www.sun.com" title="Sun.com website">Sun</a>, prevent us from buying lovely vacuum cleaners, fixing these vulnerabilities.<br />
TY.</p>
<p><strong>Update:</strong> Less than 24h later, Sun contacted me and fixed (the e-mail adress obfuscation, yet one can still approve other confirmations randomly) it. Well done.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/suncom-privacy/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Mozilla Bespin</title>
		<link>http://blog.tquadrado.com/2009/mozilla-bespin/</link>
		<comments>http://blog.tquadrado.com/2009/mozilla-bespin/#comments</comments>
		<pubDate>Thu, 19 Feb 2009 19:46:07 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=203</guid>
		<description><![CDATA[
&#8220;Bespin proposes an open extensible web-based framework for code editing that aims to increase developer productivity, enable compelling user experiences, and promote the use of open standards.&#8221;
one can read this here.
Bespin&#8217;s initial prototype includes support for very basic features, but one can easily notice its power. Its all drawn in the canvas, every character, cursor [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8220;Bespin proposes an open extensible web-based framework for code editing that aims to increase developer productivity, enable compelling user experiences, and promote the use of open standards.&#8221;</p>
<p>one can read this <a href="http://labs.mozilla.com/projects/bespin/" title="Mozilla Labs Developer tools: Bespin">here</a>.<br />
<a href="http://bespin.mozilla.com/" title="Bespin">Bespin</a>&#8217;s initial prototype includes support for very basic features, but one can easily notice its power. Its all drawn in the <a href="http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html" title="HTML 5 Canvas">canvas</a>, every character, cursor blinks, scroll bars, text selection, etc. As a <a href="http://www.vim.org" title="Vim">Vim</a> user, I immediatly thought of Vim <a href="https://bespin.mozilla.com/docs/#code/commandline/commands.js" title="Bespin.Commands">commands/keybindings</a> in Bespin. Even the simpler and most generally used ones. Not even asking for .vim power scripting ability. And that is a feature any one of us* can write as soon as Bespin coders release a good API. And it is already <a href="http://groups.google.com/group/bespin/msg/241ccda4fb978fd3" title="Bespin groups">in the air</a>. Neat.</p>
<p>By the way, <a href="http://bespin.googlegroups.com/web/Bespin.Dashboard_Project.png?gda=04Af804AAAAhbtt17gjDEXgND__RTrgq-q6L3iXTV2trd55eWBgDDPZrcxf_aE2H27xxR3GUKa95CKUrtFrf9Lx0w-KK7UPd47Cl1bPl-23V2XOW7kn5sQ" title="Bespin mockup">look.at.this.mockup.</a>&#8230;</p>
<p>The collaborative coding feature isn&#8217;t active yet, but if one can give instant editing access to a file for a &#8220;check this class&#8221;, that&#8217;s going to probably replace lots of gists, pasties, etc, on a coder2coder basis.<br />
Code repository access via Dashboard ? Yes please.</p>
<p>I have no doubts, this is going to be a very usable product, for this little I&#8217;ve seen. The look&#8217;n'feel seems great (even if I had no repeat-key <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> )</p>
<p>* floss</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/mozilla-bespin/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>on work…</title>
		<link>http://blog.tquadrado.com/2009/on-work/</link>
		<comments>http://blog.tquadrado.com/2009/on-work/#comments</comments>
		<pubDate>Thu, 15 Jan 2009 02:27:22 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>rss</category>
	<category>linux</category>
	<category>os</category>
	<category>ubuntu</category>
	<category>ruby</category>
	<category>standards</category>
	<category>vim</category>
	<category>gvim</category>
	<category>s3</category>
	<category>ec2</category>
	<category>mac osx</category>
	<category>debian</category>
	<category>mvc</category>
	<category>rspec</category>
	<category>TODO</category>
	<category>git</category>
	<category>github</category>
	<category>vimblog.vim</category>
	<category>vimblog</category>
	<category>merb</category>
	<category>couchdb</category>
	<category>aws</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=202</guid>
		<description><![CDATA[3 or 4 new projects ahead.
One of them will be  CouchDB and Merb (no DataMapper, no ActiveRecord). The db schema is modeled by each user and upon criteria decisions.
All of them Git managed, as been doing for the last year.
Served by a Debian based Linux distro, coded under Debian, UNR (my lovely little netbook), and [...]]]></description>
			<content:encoded><![CDATA[<p>3 or 4 new projects ahead.</p>
<p>One of them will be  <a title="The CouchDB Project" target="_blank" href="http://couchdb.apache.org/">CouchDB</a> and <a target="_blank" title="Merb framework" href="http://merbivore.com/">Merb</a> (no DataMapper, no ActiveRecord). The db schema is modeled by each user and upon criteria decisions.<br />
All of them <a target="_blank" title="Git" href="http://git-scm.com/">Git</a> managed, as been doing for the last year.<br />
Served by a <a target="_blank" title="Debian GNU/Linux" href="http://www.debian.org">Debian</a> based <a target="_blank" title="Linux" href="http://www.linux.org/">Linux</a> distro, coded under Debian, <a target="_blank" title="Ubuntu Netbook Remix" href="http://www.canonical.com/projects/ubuntu/nbr">UNR</a> (my lovely little netbook), and OSX,  mainly in<a target="_blank" title="Ruby language" href="http://www.ruby-lang.org"> Ruby</a> 1.8.7. Production server structure not defined yet but development phase will be Mongrel. May implement a very simple queuing system for a specific need.<br />
Very likely use of <a title="Amazon Web Services" target="_blank" href="http://aws.amazon.com/">AWS</a> (not <a target="_blank" title="AWS SimpleDB" href="http://aws.amazon.com/simpledb/">SimpleDB</a>) for the sake of _simplicity_ .<br />
Editor ? <a target="_blank" title="Vim editor" href="http://www.vim.org/">Vim</a>.</p>
<p>None of this is of great interest for the project itself of course. I&#8217;ll be queuing 2 or 3 of them, in paralel with the main one. As in everything, time management is almost everything to GTD. Must. repeat. this. always.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2009/on-work/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>CouchDB Implementation</title>
		<link>http://blog.tquadrado.com/2008/couchdb-implementation/</link>
		<comments>http://blog.tquadrado.com/2008/couchdb-implementation/#comments</comments>
		<pubDate>Fri, 21 Nov 2008 02:37:38 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=197</guid>
		<description><![CDATA[&#8230; just marking this CouchDB Implementation technical post from Ricky Ho here to read tomorrow while hacking on my new Aspire One. Basically, Ricky&#8217;s posts are almost all a must_read.

]]></description>
			<content:encoded><![CDATA[<p>&#8230; just marking this <a title="CouchDB Implementation" href="http://horicky.blogspot.com/2008/10/couchdb-implementation.html">CouchDB Implementation</a> technical post from <a title="Ricky Ho's blog" href="http://horicky.blogspot.com/">Ricky Ho</a> here to read tomorrow while hacking on my new <a title="Aspire One" href="http://www.aspireone.com/">Aspire One</a>. Basically, Ricky&#8217;s posts are almost all a must_read.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/couchdb-implementation/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Gist from Vim</title>
		<link>http://blog.tquadrado.com/2008/gist-from-vim/</link>
		<comments>http://blog.tquadrado.com/2008/gist-from-vim/#comments</comments>
		<pubDate>Thu, 20 Nov 2008 19:59:32 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
	<category>vim</category>
	<category>git</category>
	<category>github</category>
	<category>gist</category>
	<category>vimblog.vim</category>
	<category>vimblog</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=196</guid>
		<description><![CDATA[
Some things are pure smartness: Gist integrated with Vim by the use of vimscript for gist by Yasuhiro Matsumoto.
For reference:
:[from],[to] Gist -p  # post lines (from, to) to gist privatelly
:[from],[to] Gist     # post lines (from, to) to public gist
:Gist [xxxxx]         # edit [...]]]></description>
			<content:encoded><![CDATA[
<p>Some things are pure smartness: <a href="http://gist.github.com/" title="gist.github">Gist</a> integrated with <a href="http://www.vim.org" title="Vim">Vim</a> by the use of <a href="http://www.vim.org/scripts/script.php?script_id=2423" title="vimscript for gist">vimscript for gist</a> by <a href="http://mattn.kaoriya.net/" title="Yasuhiro Matsumoto (jp)">Yasuhiro Matsumoto</a>.</p>
<p>For reference:<br />
:[from],[to] Gist -p  # post lines (from, to) to gist privatelly<br />
:[from],[to] Gist     # post lines (from, to) to public gist<br />
:Gist [xxxxx]         # edit gist xxxxx<br />
:Gist -l              # lists my gists<br />
:Gist -k              # lits gists from all</p>
<p>I used <a href="http://blog.dixo.net/about/" title="Paul Dixon">Paul Dixon</a>&#8217;s <a href="http://pastebin.com/" title="paste bin">Paste bin</a> when needed, specially by its simple interface and good highlighting features. Very good. But Gist makes me able to store my gists on my own account. <img alt="jump to flickr " title="jump to flickr " src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a href="http://www.flickr.com/photos/keynote/3046246687/" title="screenshot">Quite nice</a>.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/gist-from-vim/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Mitch Altmann at Codebits</title>
		<link>http://blog.tquadrado.com/2008/mitch-altmann-at-codebits/</link>
		<comments>http://blog.tquadrado.com/2008/mitch-altmann-at-codebits/#comments</comments>
		<pubDate>Mon, 17 Nov 2008 03:47:43 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=195</guid>
		<description><![CDATA[
During the three days of Codebits where our minds are focused on hacking code, learning, networking, coding, eating pizza, creating ideas and implementing them, I had the pleasure to meet and talk to Mitch Altman.
Mitch invents and hacks the coolest things.
Here at Make Magazine, you can see how his BrainMachine is built, and using it [...]]]></description>
			<content:encoded><![CDATA[<p>
During the three days of <a href="http://codebits.sapo.pt" title="SAPO Codebits 2008">Codebits</a> where our minds are focused on hacking code, learning, networking, coding, eating pizza, creating ideas and implementing them, I had the pleasure to meet and talk to <a href="http://en.wikipedia.org/wiki/Mitch_Altman" title="Mitch Altman">Mitch Altman</a>.</p>
<p>Mitch invents and hacks the <a href="http://www.tvbgone.com/cfe_mfaire.php" title="cool hardware hacks">coolest things</a>.<br />
Here at <a href="http://makezine.com/10/brainwave/" title="Make Magazine BrainMachine">Make Magazine</a>, you can see how his BrainMachine is built, and using it is quite an experience&#8230;</p>
<p>Yet, my favourite one is the Trippy RGB Waves (<a href="http://www.tvbgone.com/mfaire/rgbwaves/TrippyRGBwaveSchematic.jpg" title="schematic">schematic</a>, <a href="http://www.youtube.com/watch?v=MGG8JH8itwE" title="youtube video">video</a>, <a href="http://flickr.com/photos/maltman23/sets/72157607051145319/" title="flickr photos">photos</a>). </p>
<p>Like Mitch said, imagine a Trippy RGB full wall, how cool would it be walking by!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/mitch-altmann-at-codebits/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>on Paul Graham’s Bad Economy post</title>
		<link>http://blog.tquadrado.com/2008/on-paul-grahams-bad-economy-post/</link>
		<comments>http://blog.tquadrado.com/2008/on-paul-grahams-bad-economy-post/#comments</comments>
		<pubDate>Fri, 17 Oct 2008 21:40:00 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=194</guid>
		<description><![CDATA[
Paul Graham&#8217;s gluing the recession factor with lack of competition, investor semi-blindness, operating cheaply and time is [always] now. While evidence is a virtue, this is !new.
:note for non-programmers: &#8216;!&#8217; as an alias for &#8216;not&#8217;
[update]
This slideshare leaked from, as stated, a Sequoia Capital presentation is worth to look at.

]]></description>
			<content:encoded><![CDATA[<p>
<a ref="http://ycombinator.com/" title="YCombinator's founder">Paul Graham</a>&#8217;s gluing the recession factor with lack of competition, investor semi-blindness, operating cheaply and time is [always] now. While evidence is a virtue, <a href="http://www.paulgraham.com/badeconomy.html" title="Paul Graham - Why to Start a Startup in a Bad Economy">this is</a> !new.</p>
<p>:note for non-programmers: &#8216;!&#8217; as an alias for &#8216;not&#8217;</p>
<p>[update]<br />
<a href="http://www.slideshare.net/eldon/sequoia-capital-on-startups-and-the-economic-downturn-presentation" title="Sequoia VC slideshow presentation">This slideshare</a> leaked from, as stated, a <a href="http://www.sequoiacap.com/" title="Sequoia Capital">Sequoia Capital</a> presentation is worth to look at.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/on-paul-grahams-bad-economy-post/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>github repo’s update</title>
		<link>http://blog.tquadrado.com/2008/github-repos-update/</link>
		<comments>http://blog.tquadrado.com/2008/github-repos-update/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 03:11:15 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
	<category>git</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=193</guid>
		<description><![CDATA[Updated my github.com source code repo account.
]]></description>
			<content:encoded><![CDATA[<p>Updated <a href="http://github.com/pedromg" title="pedro mg source code repo">my github.com source code repo account</a>.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/github-repos-update/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Disparition de Guy Decoux</title>
		<link>http://blog.tquadrado.com/2008/disparition-de-guy-decoux/</link>
		<comments>http://blog.tquadrado.com/2008/disparition-de-guy-decoux/#comments</comments>
		<pubDate>Thu, 25 Sep 2008 18:54:07 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>life</category>
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=192</guid>
		<description><![CDATA[This is a small post to remember a great ruby programmer.
Ruby France announced Guy Decoux &#8220;disparition&#8221;:
&#8220;He was part of the generation of developers who switched from Perl to Ruby in the 90s. While his mastering of Perl was already great, his knowledge about Ruby was so deep and impressive that a lot of Rubyists would [...]]]></description>
			<content:encoded><![CDATA[<p>This is a small post to remember a great ruby programmer.<br />
<a title="Ruby France" href="http://www.rubyfrance.org">Ruby France</a> announced <a title="Guy Decoux's death" href="http://www.rubyfrance.org/articles/2008/09/25/disparition-de-guy-decoux">Guy Decoux &#8220;disparition&#8221;</a>:</p>
<p>&#8220;He was part of the generation of developers who switched from Perl to Ruby in the 90s. While his mastering of Perl was already great, his knowledge about Ruby was so deep and impressive that a lot of Rubyists would have been very happy to have the same one.&#8221;</p>
<p><a href="http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/315920">Announcement at ruby-talk</a> where we can see lots of appreciation and recognition for Guy&#8217;s work.</p>
<p>_why has a <a title="_why's recognition to Guy's work" href="http://hackety.org/2008/09/25/legendNeverToBeSolved.html">wonderfull post</a> and drawing at <a title="Hackety.org" href="http://hackety.org/about/">Hackety.org</a>.<br />
The following paragraph from _why&#8217;s post:<br />
&#8220;You’ll hear a lot of people say that we didn’t know who he was. That no one met him. But we all read alot of his code. And clearly that was how he wanted us to know him. Think of how that stands in such sharp contrast to the self-advertisement and vanity journalism of the Web today. We knew him, just not in the way we’re used to.&#8221;</p>
<p>Guy&#8217;s work in ruby-core libs lives inside the machines we daily operate.<br />
Goodbye Guy Decoux.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/disparition-de-guy-decoux/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>fragment identifiers</title>
		<link>http://blog.tquadrado.com/2008/fragment-identifiers/</link>
		<comments>http://blog.tquadrado.com/2008/fragment-identifiers/#comments</comments>
		<pubDate>Fri, 13 Jun 2008 01:12:51 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>mvc</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=186</guid>
		<description><![CDATA[
Q: how in Routes/Markaby do we implement fragment identifiers # as in www.foo.bar/pedro#here, for named anchor jumps ?
H(int): is it necessary to parse the controller ?
H(int): can a regexp solve it ? &#8216;/foo/(\w+)#(\w+)&#8217; doesn&#8217;t&#8230;
A: &#8230;

]]></description>
			<content:encoded><![CDATA[
<p>Q: how in Routes/Markaby do we implement fragment identifiers # as in www.foo.bar/pedro#here, for named anchor jumps ?<br />
H(int): is it necessary to parse the controller ?<br />
H(int): can a regexp solve it ? &#8216;/foo/(\w+)#(\w+)&#8217; doesn&#8217;t&#8230;<br />
A: &#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/fragment-identifiers/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>AR::migrations</title>
		<link>http://blog.tquadrado.com/2008/armigrations/</link>
		<comments>http://blog.tquadrado.com/2008/armigrations/#comments</comments>
		<pubDate>Mon, 09 Jun 2008 21:46:58 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>camping</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=187</guid>
		<description><![CDATA[
ActiveRecord database schema migration info is stored in the main database, so that if one needs to manually hack a migration (fastforward/rewind), just update TABLENAME_schema_infos column &#8216;version&#8217; to a new value and manually change your schema. Next &#8216;boot&#8217; may generate (or not) new migrations.
riverside=# select * from foobar_schema_infos;
id &#124; version
&#8212;+&#8212;&#8212;&#8212;
1  &#124;    [...]]]></description>
			<content:encoded><![CDATA[<p>
ActiveRecord database schema migration info is stored in the main database, so that if one needs to manually hack a migration (fastforward/rewind), just update TABLENAME_schema_infos column &#8216;version&#8217; to a new value and manually change your schema. Next &#8216;boot&#8217; may generate (or not) new migrations.</p>
<p><code>riverside=# select * from foobar_schema_infos;</code><br />
id | version<br />
&#8212;+&#8212;&#8212;&#8212;<br />
1  |     1.4<br />
(1 row)</p>
<p>In a self note, forget not to set option :id => false on join tables for has_and_belongs_to_many relations.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/armigrations/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>god.pt</title>
		<link>http://blog.tquadrado.com/2008/godpt/</link>
		<comments>http://blog.tquadrado.com/2008/godpt/#comments</comments>
		<pubDate>Fri, 06 Jun 2008 02:52:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=185</guid>
		<description><![CDATA[
god.pt is well described here, @ karlus. We and some more fine guys will be focusing on Gathering of Developers in our city, Porto::Portugal::Europe. We&#8217;ll be doing presentations (mostly but not only technical ones), debating ideas, working together hopefully on projects, networking and building business (well, one of the first meetings was partially dedicated to [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.god.pt" title="gathering of developers">god.pt</a> is well described <a href="http://blog.karlus.net/archives/2008/06/05/1962/" title="Carlos Andrade's blog">here</a>, @ karlus. We and some more fine guys will be focusing on Gathering of Developers in our city, Porto::Portugal::Europe. We&#8217;ll be doing presentations (mostly but not only technical ones), debating ideas, working together hopefully on projects, networking and building business (well, one of the first meetings was partially dedicated to push <a href="http://nunodantas.com/blog/" title="Nuno Dantas">Nuno</a> sysadminin&#8217; skills to start a &#8220;pro&#8221; hosting company). Barcamp, First Tuesday, TechMeet, we&#8217;ll be having a bit of &#8216;em all.</p>
<p>The starting group talks Python (<a href="http://mariz.org/" title="Nuno Mariz">Nuno</a>), Ruby (me and <a href="http://mywheel.net/blogpt/" title="Mario Lopes">Mario</a>), media and communication (<a href="http://carlosduarte.org/" title="Carlos Duarte">Carlos</a>), Php (and domain registering savoir-faire <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  <a href="http://blog.karlus.net" title="Carlos Andrade">Karlus</a>), and guess what: we&#8217;re all on Twitter, like <a href="http://www.twitter.com/godevel" title="godevel">godevel</a> is.</p>
<p>The developers part of GOD isn&#8217;t restricted to code_monkeys. We speak business, startup&#8217;ing, venture capital, economy, talks (long or lightning), beer, unix, languages, hw, sw, media, web, web, web, servers, life, laptops, frameworks, gossip, gadgets, working environments, projects, code, code, scripts, threads, scaling, architectures. We&#8217;ll be focusing less on ideas, more on work. Implementations. On doing it.</p>
<p>I look forward a code_day in wich we&#8217;ll be coding for ourselves/others under a strong networking environment, during wich <a href="http://perl.plover.com/lightning-talks.html" title="lightning talks">lightning-talks</a> will hopefully rise.</p>
<p>More to come soon&#8230;<br />
As for now, I&#8217;m fighting threads and forks in Ruby&#8230;</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/godpt/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>class Monstar</title>
		<link>http://blog.tquadrado.com/2008/class-monstar/</link>
		<comments>http://blog.tquadrado.com/2008/class-monstar/#comments</comments>
		<pubDate>Thu, 05 Jun 2008 16:25:26 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=188</guid>
		<description><![CDATA[I recently had to move from using FastCGI on Camping Ruby framework, to sweet Mongrel because of getting too much 500 HTTP errors under some load tests. Yes irc::zimbatm, me too.
When on FastCGI behing Lighttpd, upon each request, the code is loaded so after changing its source, it gets updated.
Now, under development, Mongrel(s), behind the [...]]]></description>
			<content:encoded><![CDATA[<p>I recently had to move from using FastCGI on Camping Ruby framework, to sweet Mongrel because of getting too much 500 HTTP errors under some load tests. Yes irc::zimbatm, me too.<br />
When on FastCGI behing Lighttpd, upon each request, the code is loaded so after changing its source, it gets updated.</p>
<p>Now, under development, Mongrel(s), behind the same Lighttpd frontend, need to be restarted upon source code changes in the models, views, controllers or helpers (yet not CSS files, since they are taken care by lighty). Instead of moving to the xterm, kill the process and restart it i decided to automate it.<br />
Since i was disconnected from the webz, I&#8217;ve done this script to detect file changes from a pre-specified array of files, monitored under a certain interval in seconds, with an action to start, kill, and restart an app (in my case, a Mongreled Camping web app).</p>
<p>Problem: Threads<br />
Solution: Process::fork</p>
<p>The app load (in this case I load/execute ruby scripts) is done via <code>Process::fork</code>. A new process starts up each time this method is fired up upon a <code>File.open(f, 'r').ctime</code> change:</p>
<p><code>def load_app<br />
&nbsp;</code><code>&nbsp;</code><code>@pid = Process.fork { load(@app) }<br />
end</code></p>
<p>Before loading up a new updated instance of the app, the previous one must be terminated. Threads behaviour was problematic because of the thread tree termination in time. This is well done, in a safe mode, with <code>Process::kill(signal, pid)</code> and <code>Process::wait(pid)</code> that waits the pid process termination, essential in the case of Mongrel server.</p>
<p><code>def kill_app<br />
</code><code>&nbsp;</code><code>&nbsp;</code><code>Process.kill("KILL", @pid)<br />
</code><code>&nbsp;</code><code>&nbsp;</code><code>Process.wait(@pid)<br />
end</code></p>
<p>As one can see <img title="jump to flickr " alt="jump to flickr " src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a title="processes list" href="http://www.flickr.com/photos/keynote/2600917810/">in this screenshot</a> the main app process holds on while the child, in this case our Mongrel&#8217;ed Camping web app, is terminated and created a new one. <img title="jump to flickr " alt="jump to flickr " src="http://blog.tquadrado.com/wp-content/uploads/source/img/flickr10.png" /> <a title="xterms" href="http://www.flickr.com/photos/keynote/2600917806">Verbose mode</a> to assert its behaviour. Suits this specific need.</p>
<p>This is very usefull to make tests (Test::Unit:TestCase) run automatically upon source changes (will get to an Autotest clone).</p>
<p>Changing from <code>load(@app)</code> to <code>system(@app)</code>, one can get any command be executed. ftp, cp, etc&#8230;</p>
<p>The script is here do <a title="monstar.rb github" target="_blank" href="http://github.com/pedromg/monstar.rb">download</a> under a Ruby License.</p>
<p><code>Usage: monstar [options]<br />
-a, --app SCRIPT.RB,PARAMS,...<br />
-i, --interval VAL<br />
-f, --files FILE,FILE1,...<br />
-h, --help</code>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/class-monstar/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>2008 ACM-ICPC Programming Results</title>
		<link>http://blog.tquadrado.com/2008/2008-acm-icpc-programming-results/</link>
		<comments>http://blog.tquadrado.com/2008/2008-acm-icpc-programming-results/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 08:05:31 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
	<category>c</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=184</guid>
		<description><![CDATA[Draft configuration for the programming environment at 2008 ACM-ICPC World Finals.
&#8220;Pascal has been dropped as a World Finals Language&#8221;&#8230; I miss Delphi (Object Pascal)
Look at the final results.
Now lets see 2007 standings.
Geo pattern ?

]]></description>
			<content:encoded><![CDATA[<p><a title="progr. environm." href="http://icpc.baylor.edu/systems/finals/">Draft configuration</a> for the programming environment at 2008 ACM-ICPC World Finals.<br />
<em>&#8220;Pascal has been dropped as a World Finals Language&#8221;</em>&#8230; I miss Delphi (Object Pascal)</p>
<p>Look at the <a title="ACM-ICPC finals results" href="http://icpc.baylor.edu/icpc/Finals/v2/default.asp?page=results">final results</a>.<br />
Now lets see <a title="2007 results" href="http://icpc.baylor.edu/icpc/finals/Results-2007/standings-2007.htm">2007 standings</a>.</p>
<p>Geo pattern ?
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/2008-acm-icpc-programming-results/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>blog with Vim script</title>
		<link>http://blog.tquadrado.com/2008/blog-with-vim-script/</link>
		<comments>http://blog.tquadrado.com/2008/blog-with-vim-script/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 17:22:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>vi</category>
	<category>vim</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=183</guid>
		<description><![CDATA[
&#8230; after severall exchanged emails between me and Andrei Thorp about the Vim blogging ruby script, we made some changes. So instead of the initial test for Vim compiled with +ruby message s:ErrMsg, we now have an echo.
Andrei&#8217;s git (yep, they are git fans too, git rocks!) commit was calling another Vim from his machine. [...]]]></description>
			<content:encoded><![CDATA[
<p>&#8230; after severall exchanged emails between me and <a title="Andrei blog" href="http://garoth.com/">Andrei Thorp</a> about the <a title="blog with vim" href="http://www.vim.org/scripts/script.php?script_id=2030">Vim blogging ruby script</a>, we made some changes. So instead of the initial test for Vim compiled with +ruby message <code>s:ErrMsg</code>, we now have an <code>echo</code>.</p>
<p>Andrei&#8217;s git (yep, they are <a title="git dscm" href="http://git.or.cz/">git</a> fans too, git rocks!) commit was calling another Vim from his machine. That was not a +ruby vim. So an error was fired upon git commits. Now we fixed it. This is now, <a href="http://www.vim.org/scripts/script.php?script_id=2030" title="vim script">vimblog 1.1</a>. Thanks Andrei.</p>
<p><a title="open source initiative" href="http://www.opensource.org/">Open Source++</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/blog-with-vim-script/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Rubinius documentation</title>
		<link>http://blog.tquadrado.com/2008/rubinius-documentation/</link>
		<comments>http://blog.tquadrado.com/2008/rubinius-documentation/#comments</comments>
		<pubDate>Tue, 08 Apr 2008 00:36:08 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=182</guid>
		<description><![CDATA[self note for a nice read: Introduction to the Rubinius compiler
]]></description>
			<content:encoded><![CDATA[<p>self note for a nice read: <a href="http://rubini.us/rbx_documentation/introduction-to-the-compiler/" title="rubinius inners">Introduction to the Rubinius compiler</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/rubinius-documentation/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Shoes.rb on Github</title>
		<link>http://blog.tquadrado.com/2008/shoesrb-on-github/</link>
		<comments>http://blog.tquadrado.com/2008/shoesrb-on-github/#comments</comments>
		<pubDate>Fri, 04 Apr 2008 02:31:53 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>git</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=179</guid>
		<description><![CDATA[
_why posted in Shoes mailinglist that he will be moving source code to Github.com. Since I am using Git for some months, this is good news.
In short, Shoes.rb repository:
http://github.com/why/shoes
You can clone the repository with:
git clone git://github.com/why/shoes.git
Ditz, (&#8220;a simple, light-weight distributed issue tracker designed to work with distributed version control systems like darcs and git&#8221;) will [...]]]></description>
			<content:encoded><![CDATA[<p>
<a title="_why's repo" href="http://code.whytheluckystiff.net/">_why</a> posted in <a title="Shoes.rb" href="http://code.whytheluckystiff.net/shoes/">Shoes</a> mailinglist that he will be moving source code to <a title="Github website" href="http://www.github.com">Github.com</a>. Since I am using <a title="Git website" href="http://git.or.cz/">Git</a> for some months, this is good news.</p>
<p>In short, Shoes.rb repository:<br />
<code>http://github.com/why/shoes</code><br />
You can clone the repository with:<br />
<code>git clone git://github.com/why/shoes.git</code></p>
<p><a title="Ditz distributed issue tracker" href="http://ditz.rubyforge.org/">Ditz</a>, (<em>&#8220;a simple, light-weight distributed issue tracker designed to work with distributed version control systems like darcs and git&#8221;</em>) will be used as an issue tracker. The YAML database file is included in the commits, since it becomes a project source file. Its <a title="Ruby website" href="http://www.ruby-lang.org">Ruby</a> coded and produces quite nice <a title="Ditz html sample page" href="http://ditz.rubyforge.org/ditz/">HTML pages</a>.</p>
<p>&#8230;nice move _why</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/shoesrb-on-github/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>the spirit that lives in the computer</title>
		<link>http://blog.tquadrado.com/2008/the-spirit-that-lives-in-the-computer/</link>
		<comments>http://blog.tquadrado.com/2008/the-spirit-that-lives-in-the-computer/#comments</comments>
		<pubDate>Wed, 02 Apr 2008 02:50:46 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
	<category>book</category>
	<category>MIT</category>
	<category>TOREAD</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=177</guid>
		<description><![CDATA[
&#8220;We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8220;We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells.&#8221;</p>
<p><a href="http://mitpress.mit.edu/sicp/full-text/book/book.html" title="SICP book">“Structure and Interpretation of Computer Programs”</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/the-spirit-that-lives-in-the-computer/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Twittershoes: programming in Shoes.rb</title>
		<link>http://blog.tquadrado.com/2008/programming-in-shoesrb/</link>
		<comments>http://blog.tquadrado.com/2008/programming-in-shoesrb/#comments</comments>
		<pubDate>Fri, 22 Feb 2008 02:48:35 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>ruby</category>
	<category>code</category>
	<category>twitter</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=176</guid>
		<description><![CDATA[
I have to share this piece of code, wich results look indeed nice. You&#8217;ll see in the next blog post&#8230;

def string_alert
&#160;&#160;c = (LIMIT-@iSay.text.length)
&#160;&#160;@remaining.style :stroke => "#3276BA"
&#160;&#160;c > 10 ? (@remaining.style :stroke => orange) : (@remaining.style :stroke => red) if (c < 21)
&#160;&#160;c > 0 ? &#8220;#{c.to_s} chars&#8221; : &#8220;Too Long!&#8221;
end

[update]: Twittershoes.rb is born: screenshot here

]]></description>
			<content:encoded><![CDATA[
<p>I have to share this piece of code, wich results look indeed nice. You&#8217;ll see in the next blog post&#8230;<br />
<code><br />
def string_alert<br />
&nbsp;&nbsp;c = (LIMIT-@iSay.text.length)<br />
&nbsp;&nbsp;@remaining.style :stroke => "#3276BA"<br />
&nbsp;&nbsp;c > 10 ? (@remaining.style :stroke => orange) : (@remaining.style :stroke => red) if (c < 21)<br />
&nbsp;&nbsp;c > 0 ? &#8220;#{c.to_s} chars&#8221; : &#8220;Too Long!&#8221;<br />
end<br />
</code></p>
<p>[update]: Twittershoes.rb is born: <a href="http://www.flickr.com/photos/keynote/2283418380/" title="Twittershoes screenshot">screenshot here</a>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/programming-in-shoesrb/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>first repo at github.com</title>
		<link>http://blog.tquadrado.com/2008/githubcom-on/</link>
		<comments>http://blog.tquadrado.com/2008/githubcom-on/#comments</comments>
		<pubDate>Fri, 15 Feb 2008 16:53:15 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>code</category>
	<category>git</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=175</guid>
		<description><![CDATA[
&#8230; just got my github.com invitation and proceeded to the registration.
They say its free while in Beta. Hosted in Engine Yard.
I created my first repo there, and the design seems clear, simple, effective.
Info is presented clearly, and i enjoyed the way they went after the creation of my repo, showing &#8220;Next Steps&#8221;. Nice.
I&#8217;ll work there [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8230; just got my <a href="https://github.com/" title="github">github.com</a> invitation and proceeded to the registration.<br />
They say its free while in Beta. Hosted in <a href="http://engineyard.com/" title="Engine Yard">Engine Yard</a>.<br />
I created my first repo there, and the design seems clear, simple, effective.<br />
Info is presented clearly, and i enjoyed the way they went after the creation of my repo, showing &#8220;Next Steps&#8221;. Nice.</p>
<p>I&#8217;ll work there for this project.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/githubcom-on/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>pg_upgradecluster 8.2 main</title>
		<link>http://blog.tquadrado.com/2008/pg_upgradecluster-82-main/</link>
		<comments>http://blog.tquadrado.com/2008/pg_upgradecluster-82-main/#comments</comments>
		<pubDate>Tue, 12 Feb 2008 03:10:57 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>postgres</category>
	<category>postgresql</category>
	<category>database</category>
	<category>dbms</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=174</guid>
		<description><![CDATA[
PostgreSQL 8.3 is here. After apt-get&#8217;ing it, the upgrade didn&#8217;t move the 8.2 cluster up. Having 8.2 running in a custom port, made 8.3 go use the standard 5432 port.
8.3 created a main cluster.
Check ports:
$ sudo netstat -anput &#124; grep postgres
Check wich configuration files and wich versions are running:
$ ps -Af &#124; grep postgres
pg_upgradecluster when [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://www.postgresql.org/about/news.918" title="postgresql 8.3 release">PostgreSQL 8.3 is here</a>. After apt-get&#8217;ing it, the upgrade didn&#8217;t move the 8.2 cluster up. Having 8.2 running in a custom port, made 8.3 go use the standard 5432 port.<br />
8.3 created a main cluster.</p>
<p>Check ports:<br />
<code>$ sudo netstat -anput | grep postgres</code></p>
<p>Check wich configuration files and wich versions are running:<br />
<code>$ ps -Af | grep postgres</code></p>
<p><code>pg_upgradecluster</code> when upgrading the existing PostgreSQL cluster, will check ports of the new and old version (check both 8.2 and <code>/etc/postgresql/8.3/main$ grep 'port' postgresql.conf</code>), and make the newer version use the older version&#8217;s port number. Then the older version will use an available port number. This keeps the original Port # in use.</p>
<p>Stop and drop the newly created 8.3 main cluster:<br />
<code>$ sudo pg_dropcluster --stop 8.3 main</code></p>
<p>Time to upgrade the 8.2 main cluster to 8.3<br />
<code>$ sudo pg_upgradecluster 8.2 main</code></p>
<p>After checking everything is ok we could remove the older cluster:<br />
<code>$ sudo pg_dropcluster --stop 8.2 main</code></p>
<p>and &#8220;apt-get remove&#8221; the 8.2 version.</p>
<p>docs:<br />
$ man pg_dropcluster<br />
$ man pg_upgradecluster</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/pg_upgradecluster-82-main/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>JSON Ruby and Smallr API</title>
		<link>http://blog.tquadrado.com/2008/json-ruby-and-smallr-api/</link>
		<comments>http://blog.tquadrado.com/2008/json-ruby-and-smallr-api/#comments</comments>
		<pubDate>Mon, 04 Feb 2008 00:32:25 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=173</guid>
		<description><![CDATA[
Nuno&#8217;s smallr.net API talks JSON. So what about accessing it with Ruby ?
Well, quite easy thanks to Florian&#8217;s JSON implementation for Ruby. So:
$ sudo gem install json_pure
Now, just need some attention on the use of the address / (slash) just after json and before the query, or you&#8217;ll get a HTTP 301 Status Code.
Code follows:
require [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://mariz.org/">Nuno</a>&#8217;s <a href="http://smallr.net/api/" title="smallr.net api">smallr.net API</a> talks JSON. So what about accessing it with Ruby ?<br />
Well, quite easy thanks to <a href="http://json.rubyforge.org/" title="JSON implementation for Ruby">Florian&#8217;s JSON implementation for Ruby</a>. So:</p>
<p><code>$ sudo gem install json_pure</code></p>
<p>Now, just need some attention on the use of the address / (slash) just after json and before the query, or you&#8217;ll get a HTTP 301 Status Code.<br />
Code follows:</p>
<p><code>require 'rubygems'<br />
require 'net/http'<br />
require 'json/pure'</code></p>
<p><code>url = 'http://www.google.pt/search?q=json+ruby'<br />
escaped_url = URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))<br />
call = Net::HTTP.get_response(URI.parse("http://smallr.net/json/?url=#{escaped_url}"))<br />
res = JSON.parse(call.body)</code></p>
<p><code>puts res['status']</code> # ok<br />
<code>puts res['url']</code> # http://smallr.net/925</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/json-ruby-and-smallr-api/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>on URI Ruby escaping</title>
		<link>http://blog.tquadrado.com/2008/on-uri-ruby-escaping/</link>
		<comments>http://blog.tquadrado.com/2008/on-uri-ruby-escaping/#comments</comments>
		<pubDate>Sun, 03 Feb 2008 23:06:55 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=172</guid>
		<description><![CDATA[
URI.escape method with no options doesn&#8217;t provide a trully good escape, and i just noticed it upon the need to access an API.

url = 'http://www.ruby-lang.org'
bad = URI.escape(url)
good = URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))

The difference is:

bad  => "http://www.ruby-lang.org"
good => "http%3A%2F%2Fwww.ruby-lang.org"

(via snippets.dzone => Matt Zukowski)
]]></description>
			<content:encoded><![CDATA[
<p>URI.escape method with no options doesn&#8217;t provide a trully good escape, and i just noticed it upon the need to access an API.<br />
<code><br />
url = 'http://www.ruby-lang.org'<br />
bad = URI.escape(url)<br />
good = URI.escape(url, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))<br />
</code><br />
The difference is:<br />
<code><br />
bad  => "http://www.ruby-lang.org"<br />
good => "http%3A%2F%2Fwww.ruby-lang.org"<br />
</code></p>
<p>(via <a href="http://snippets.dzone.com/posts/show/1260" title="URI encoding in Ruby">snippets.dzone</a> => <a href="http://blog.roughest.net/" title="Matt Zukowski blog">Matt Zukowski</a>)</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/on-uri-ruby-escaping/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>The Ruby Programming Language</title>
		<link>http://blog.tquadrado.com/2008/the-ruby-programming-language/</link>
		<comments>http://blog.tquadrado.com/2008/the-ruby-programming-language/#comments</comments>
		<pubDate>Wed, 30 Jan 2008 00:51:22 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=171</guid>
		<description><![CDATA[
&#8230; next buy.
&#8220;Bestselling author David Flanagan teams up with Ruby creator Yukihiro "Matz" Matsumoto and writer/cartoonist/programmer why the lucky stiff to bring you the authoritative guide to Ruby. Covering versions 1.9 and 1.8, this book helps you learn Ruby&#8217;s lexical structure, primary expressions, conditionals, syntax, classes, the data it manipulates, and more. For experienced programmers [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8230; next <a href="http://www.oreilly.com/catalog/9780596516178/" title="The Ruby Programming Language">buy</a>.</p>
<p>&#8220;Bestselling author <code>David Flanagan</code> teams up with Ruby creator <code>Yukihiro "Matz" Matsumoto</code> and writer/cartoonist/programmer <code>why the lucky stiff</code> to bring you the authoritative guide to Ruby. Covering versions 1.9 and 1.8, this book helps you learn Ruby&#8217;s lexical structure, primary expressions, conditionals, syntax, classes, the data it manipulates, and more. <code>For experienced programmers who want to look at this language in depth, this guide is invaluable</code>.&#8221;</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/the-ruby-programming-language/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>flash-like implementation</title>
		<link>http://blog.tquadrado.com/2008/flash-like-implementation/</link>
		<comments>http://blog.tquadrado.com/2008/flash-like-implementation/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 21:56:16 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>camping</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=170</guid>
		<description><![CDATA[
Flash is a Ruby on Rails method to show (mainly warning/error) messages. Camping has no such method, so i implemented an approach for error messages. The thing is, after a post method in the controller, the redirect creates a new instance for the controller, loosing the class instance variables set before.
So, after talking a bit [...]]]></description>
			<content:encoded><![CDATA[
<p>Flash is a Ruby on Rails method to show (mainly warning/error) messages. Camping has no such method, so i implemented an approach for error messages. The thing is, after a <code>post</code> method in the <code>controller</code>, the <code>redirect</code> creates a new instance for the controller, loosing the <del>class</del> instance variables set before.<br />
So, after talking a bit with Zimbatm at #camping, we setup what could be a good solution: to use the <code>@state</code> session variable.</p>
<p></code>@state.error = &#8216;The unit is still operational, Dave. But it will fail within seventy-two hours&#8217;</code></p>
<p>The variable is cleared on the View layout method. Flash means just it. Show and clear. The layout code includes:</p>
<p><code>div(:class => 'error') { p @state.error.to_s; @state.error = ''; } unless @state.error.blank?</code></p>
<p>and the CSS <code>.error</code> class wraps the message inside a lightred box with a nice solid red border (say RoR?).</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2008/flash-like-implementation/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Camping on IRB</title>
		<link>http://blog.tquadrado.com/2007/camping-on-irb/</link>
		<comments>http://blog.tquadrado.com/2007/camping-on-irb/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 06:32:47 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
	<category>camping</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=169</guid>
		<description><![CDATA[
IRB is a great tool. What about testing parts of a Camping app in IRB (meaning App::Models module) ? Just require the app, but do not forget to establish the (in case of using it) ActiveRecord connection, that problably is specified in dispatch.rb
Try this, using _Why&#8217;s Blog webapp example:

$ cd /path/to/blog/app
$ irb
irb(main):001:0> require 'rubygems'
irb(main):002:0> require [...]]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://en.wikipedia.org/wiki/Interactive_Ruby_Shell" title="Interactive Ruby">IRB</a> is a great tool. What about testing parts of a Camping app in IRB (meaning App::Models module) ? Just <b>require</b> the app, but do not forget to establish the (in case of using it) ActiveRecord connection, that problably is specified in <b>dispatch.rb</b><br />
Try this, using <a href="http://whytheluckystiff.net/" title="WhytheLuckyStiff's homepage">_Why</a>&#8217;s Blog webapp example:<br />
<code><br />
$ cd /path/to/blog/app<br />
$ irb<br />
irb(main):001:0> require 'rubygems'<br />
irb(main):002:0> require 'blog'<br />
irb(main):003:0> Camping::Models::Base.establish_connection :adapter => 'postgresql', :host => 'trees', :port => 54321,  :database => 'beautifull', :username => 'green', :password => 'forest'<br />
irb(main):004:0> Blog::Models::Post.find(1)<br />
</code><br />
Answers from lines:<br />
[#3] => #< ActiveRecord::Base::ConnectionSpecification:0xb77499a8 @adapter_method="postgresql_connection", @config={:host=>&#8220;trees&#8221;, :password=>&#8221;forest&#8221;, :port=>54321, :database=>&#8221;beautifull&#8221;, :adapter=>&#8221;postgresql&#8221;, :username=>&#8221;green&#8221;}><br />
[#4] => #< Blog::Models::Post:0xb7736e5c @attributes={"body"=>&#8220;&#8230; this is the first post on Why&#8217;s blog web app for testing Camping functionalities. \r\n\r\nIts cool. It&#8217;s Ruby. Its Lighttpd. Its Postgres (well, at least in my implementation) via Active Record.\r\n\r\nCamping(TM) of WhyTheLuckyStiff&#8221;, &#8220;title&#8221;=>&#8221;camping is fine&#8221;, &#8220;id&#8221;=>&#8221;1&#8243;, &#8220;user_id&#8221;=>&#8221;1&#8243;}></p>
<p>[#4] is the first row from postgres &#8216;beautifull&#8217; database &#8216;blog_posts&#8217; table. Fetched via ActiveRecord, via Blog::Models module, via Blog Camping app.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/camping-on-irb/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>ActiveRecord connection adapters</title>
		<link>http://blog.tquadrado.com/2007/activerecord-connection-adapters/</link>
		<comments>http://blog.tquadrado.com/2007/activerecord-connection-adapters/#comments</comments>
		<pubDate>Sat, 22 Dec 2007 02:21:37 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=168</guid>
		<description><![CDATA[
&#8230;because of Camping::Models I&#8217;m using ActiveRecord Ruby implementation gem. Because source code is pretty well documented I maintain an opened xterm to check how things are done. Since I&#8217;m not using SQLite but PostgreSQL, i had to dig for the other parameters for the connection and I noticed AR has now connectors for severall DMBS:
$ [...]]]></description>
			<content:encoded><![CDATA[
<p>&#8230;because of Camping::Models I&#8217;m using <a href="http://ar.rubyonrails.com/" title="RoR AR implementation">ActiveRecord</a> Ruby implementation <a href="http://rubyforge.org/projects/rubygems/" title="RubyGems">gem</a>. Because source code is pretty well documented I maintain an opened xterm to check how things are done. Since I&#8217;m not using <a href="http://www.sqlite.org/" title="SQLite homepage">SQLite</a> but <a href="http://www.postgresql.org/" title="PostgreSQL homepage">PostgreSQL</a>, i had to dig for the other parameters for the connection and I noticed AR has now connectors for severall DMBS:</p>
<p><code>$ cat /var/lib/gems/1.8/gems/activerecord-1.15.3/lib/active_record.rb</code><br />
[&#8230;]<br />
<code>unless defined?(RAILS_CONNECTION_ADAPTERS)<br />
&nbsp;&nbsp;RAILS_CONNECTION_ADAPTERS = %w( mysql postgresql sqlite firebird sqlserver db2 oracle sybase openbase frontbase )<br />
end</code><br />
[&#8230;]</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/activerecord-connection-adapters/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>… on git</title>
		<link>http://blog.tquadrado.com/2007/on-git/</link>
		<comments>http://blog.tquadrado.com/2007/on-git/#comments</comments>
		<pubDate>Sun, 09 Dec 2007 09:27:12 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>code</category>
	<category>git</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=167</guid>
		<description><![CDATA[Melo will be focusing on git
Once you get used to git, you won&#8217;t be needing &#8220;anything else&#8221; to maintain your code. Git is gaining more and more traction, now that bigger (distributed) projects (or parts of them) are running away from other scm&#8217;s into this one (Gnome ?, Kde, &#8230;). CVS, SVN user base is [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Melo' notes" target="_blank" href="http://www.simplicidade.org/notes">Melo</a> will be focusing on <a title="git" target="_blank" href="http://git.or.cz/">git</a></p>
<p>Once you get used to <a title="man git" target="_blank" href="http://kernel.org/pub/software/scm/git/docs/v1.3.3/git.html">git</a>, you won&#8217;t be needing &#8220;anything else&#8221; to maintain your code. Git is gaining more and more traction, now that bigger (distributed) projects (or parts of them) are running away from other scm&#8217;s into this one (<a title="Gnome on git ?" target="_blank" href="http://live.gnome.org/DistributedSCM">Gnome</a> ?, Kde, &#8230;). CVS, SVN user base is still huge, though. From the questions at <a title="Google Tech Talks" target="_blank" href="http://research.google.com/video.html">Google Tech Talks</a>, seems that Google has a very centralized &#038;&#038; protected development environment, wich is not that strange attending to their business core and innovative material under maintenance/production (they shut the camera/video down sometimes due to their non disclosure politics). That kind of environment, generally speaking, seems to fit for git usage, since it does ssh and its built-in cryptographic authentication of history ensures revisions purity.<br />
He added a <a title="Randal Schwartz's homepage" target="_blank" href="http://www.stonehenge.com/merlyn/">Randal</a> <a title="Randal Schwartz at O'Reilly" target="_blank" href="http://www.oreillynet.com/pub/au/335">Schwartz</a> <a title="Randal Schwartz on git" target="_blank" href="http://video.google.com/videoplay?docid=-1019966410726538802&#038;q=git&#038;total=10723&#038;start=0&#038;num=10&#038;so=0&#038;type=search&#038;plindex=4">video</a> also at Google, in addition to the <a title="Linus Torvalds homepage!! heh :)" target="_blank" href="http://www.kernel.org/">Linus</a> one i referred <a title="linus on git" href="http://blog.tquadrado.com/?p=155">here</a> a while ago (the last time i saw Randal, he was talking about the wonders of Smalltalk at #git <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  in a very interesting debate)</p>
<p>[append]<br />
<a target="_blank" title="pfig git screencast" href="http://pfig.livejournal.com/190990.html">pfig</a> first-try screencast on git. well done.<br />
[append]<br />
to wrap up, this <a title="Git on Twit" target="_blank" href="http://twit.tv/floss19">podcast</a>, on <a title="FLOSS Weekly" target="_blank" href="http://twit.tv/FLOSS">Floss</a> (not that) Weekly, a talk between the gitster (maintainer) <a title="Junio Hamano, Git maintainer" target="_blank" href="http://gitster.livejournal.com/">Junio Hamano</a>, <a title="Leo Laporte, Chief Twit" target="_blank" href="http://leoville.com/">Leo Laporte</a> and <a title="Randal Schwartz" target="_blank" href="http://www.stonehenge.com/merlyn/">Randal</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/on-git/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>msg upload to gmail ruby class (imap)</title>
		<link>http://blog.tquadrado.com/2007/msg-upload-to-gmail-ruby-class-imap/</link>
		<comments>http://blog.tquadrado.com/2007/msg-upload-to-gmail-ruby-class-imap/#comments</comments>
		<pubDate>Tue, 04 Dec 2007 03:39:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>google</category>
	<category>gmail</category>
	<category>mail</category>
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=166</guid>
		<description><![CDATA[&#8230; moving to Google Hosted (Google Apps), there was the need to upload some thousands of e-mail messages. Since they were (mt) MediaTemple Berkeley mbox stores, i scp&#8217;d them locally (backup) and them imported them into Evolution local folders.
The problem was the copy/move to the google hosted imap mail server. Evolution couldn&#8217;t finish the task [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; moving to Google Hosted (<a title="Google Apps for Your Domain" href="https://www.google.com/a/">Google Apps</a>), there was the need to upload some thousands of e-mail messages. Since they were <a title="(mt)" href="http://mediatemple.net/">(mt) MediaTemple</a> Berkeley mbox stores, i scp&#8217;d them locally (backup) and them imported them into Evolution local folders.<br />
The problem was the copy/move to the google hosted imap mail server. <a title="Gnome Evolution" href="http://www.gnome.org/projects/evolution/">Evolution</a> couldn&#8217;t finish the task on severall tries. Mozilla Iceape (<a title="Mozilla Seamonkey" href="http://www.seamonkey-project.org/">Seamonkey</a>) had a similar behaviour, suffering from server disconnects, thus stopping the operation. Because i had severall folders, the task needed lot&#8217;s of attention, and i wanted the machine to do it all by itself&#8230;</p>
<p>Solution: let&#8217;s code !! What response is the server sending&#8230; ?</p>
<p><a title="Shugo Maeda's blog" href="http://blog.shugo.net/">Shugo Maeda</a>&#8217;s Ruby <a title="ruby net/imap.rb" href="http://ruby-doc.org/stdlib/libdoc/net/imap/rdoc/classes/Net/IMAP.html">net/imap.rb class (stdlib)</a> is simple and trusty.<br />
Not wasting lots of time in it, i made a new class with the following usage, to send specified mbox file mail messages to a gmail (google hosted) account:</p>
<p><code>$ ./2gmail.rb MBOXFILE GMAILFOLDER [STARTINGMESSAGE]</code></p>
<p>If GMAILFOLDER doesn&#8217;t exist, gets created (i prefered messages in temporary folders) upthere.<br />
If it breaks, you can:</p>
<p><code>$ tail 2Gmail.log</code></p>
<p>to see the last message sent, and restart the process in that message. I could have threaded the whole thing, but this is done just once, so lets keep in focus&#8230;<br />
Usual problems during the tests, msg headers/body separation, timestamps, etc&#8230;<br />
<a title="class Mail" href="http://ruby-doc.org/stdlib/libdoc/mailread/rdoc/classes/Mail.html">Class Mail</a> in mailread.rb does a great job creating an Hash for the Message Headers. Sweet&#8230;</p>
<p>Everything is logged, so that it&#8217;s easy to &#8216;grep&#8217; for errors in the 2Gmail.log file.<br />
I had one only problem on a message with a 25MB attachment (gmail didn&#8217;t accept it).<br />
All the messages are now up there, nobody knows for certain where (EU ? US ? both ?&#8230;)</p>
<p>The code needs one or two more Exception Handling, but it works very well. I had 6 <a title="xterm is in wikipedia too..." href="http://en.wikipedia.org/wiki/Xterm">xterm</a>&#8217;s uploading at the same time. And yes, I could have openned 6 tabs in <a title="love the latest Gnome" href="http://www.gnome.org/start/2.20/notes/en/">Gnome</a> Terminal since we have them for ages, Mr. <a title="Mac OSX 10.5" href="http://www.apple.com/macosx/technology/unix.html">Leopard</a> ones! Hey, we can even detach Tabs to independent Terminal windows via drag-n-drop (like in Epiphany, way way long ago&#8230; way&#8230;)</p>
<p>There are some thousands more messages to be uploaded, from ancient backups&#8230; maybe next week.</p>
<p>Operation screenshot: <a title="2gmail.rb screenshot" href="http://www.flickr.com/photos/keynote/2079979360/"> at Flickr as usual</a><br />
Wanna try ? <a title="2gmail.rb ruby script" href="http://blog.tquadrado.com/wp-content/uploads/source/2gmail.rb">Get it here</a> (ready for Debian &#038; Ubuntu. For other distros, check line 1 or just prepend ruby interpreter on call)</p>
<p><code>$ chmod u+x 2gmail.rb</code><br />
<code>$ ./2gmail.rb MBOXFILE GMAILFOLDER [STARTINGMESSAGE]</code>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/msg-upload-to-gmail-ruby-class-imap/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>self link notes for Camping mcfrmwrk</title>
		<link>http://blog.tquadrado.com/2007/self-link-notes-for-camping-mcfrmwrk/</link>
		<comments>http://blog.tquadrado.com/2007/self-link-notes-for-camping-mcfrmwrk/#comments</comments>
		<pubDate>Sat, 10 Nov 2007 20:22:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>code</category>
	<category>camping</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=165</guid>
		<description><![CDATA[
Marking Database Versions example. (class ActiveRecord::Migration)
Sessions in Camping.
Parasite: Turning Rails into a Camping factory.
Camping Server for Lighttpd configurations.
Mounting Camping apps as subdomains.
]]></description>
			<content:encoded><![CDATA[
<p>Marking Database Versions <a href="http://code.whytheluckystiff.net/camping/wiki/MarkingYourDatabaseVersions" title="AR DB versioning">example</a>. (class ActiveRecord::<a href="http://ar.rubyonrails.org/classes/ActiveRecord/Migration.html" title="ActiveRecord::Migration">Migration</a>)<br />
<a href="http://code.whytheluckystiff.net/camping/wiki/CampingSessions" title="Camping::Session">Sessions</a> in Camping.<br />
<a href="http://parasite.rubyforge.org/" title="Parasite">Parasite</a>: Turning Rails into a Camping factory.<br />
Camping Server for <a href="http://code.whytheluckystiff.net/camping/wiki/TheCampingServerForLighttpd" title="lighty confs">Lighttpd configurations</a>.<br />
Mounting Camping apps as <a href="http://code.whytheluckystiff.net/camping/wiki/CampingOnSiteFive" title="site5 confs example">subdomains</a>.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/self-link-notes-for-camping-mcfrmwrk/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>more BDD and RSpec…</title>
		<link>http://blog.tquadrado.com/2007/more-bdd-and-rspec/</link>
		<comments>http://blog.tquadrado.com/2007/more-bdd-and-rspec/#comments</comments>
		<pubDate>Sun, 04 Nov 2007 19:34:44 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=163</guid>
		<description><![CDATA[
&#8220;RSpec is a framework which provides programmers with a Domain Specific Language to describe the behaviour of Ruby code with readable, executable examples that guide you in the design process and serve well as both documentation and tests.&#8221;
&#8230;in RSpec
This is, RSpec is a state of mind in Ruby, represented in a DSL (Domain Specific Language [...]]]></description>
			<content:encoded><![CDATA[<p>
<cite>&#8220;RSpec is a framework which provides programmers with a Domain Specific Language to describe the behaviour of Ruby code with readable, executable examples that guide you in the design process and serve well as both documentation and tests.&#8221;</cite><br />
&#8230;in <a title="RSPec on Rubyforge" href="http://rspec.rubyforge.org/">RSpec</a></p>
<p>This is, RSpec is a state of mind in Ruby, represented in a DSL (<a title="DSL" href="http://en.wikipedia.org/wiki/Domain-specific_programming_language">Domain Specific Language</a> for Behaviour Driven Development (<a title="BDD wiki" href="http://behaviour-driven.org/">BDD</a>). It deals with expressing desired behaviours when building applications, creating the specifications and writing the code to match them.<br />
Create examples for what the application should do, and build the code. Add another example, write more code, refactor it if necessary, and:</p>
<p><code>$/var/lib/gems/1.8/bin/spec app_spec.rb --format specdoc</code><br />
RSpec <a title="rspec documentation" href="http://rspec.rubyforge.org/rdoc/index.html">rdoc</a><br />
RSpec <a title="rspec website" href="http://rspec.rubyforge.org/documentation/index.html">documentation</a></p>
<p>This is a work in progress but means a refactor on the way to think about developing&#8230;<br />
Example: For us to be able to drive a car:<br />
- it should have fuel;<br />
- its battery should be charged;<br />
- it should have at least 4 tyres (optimally a spare one), with the right pressure;<br />
- &#8230;</p>
<p><code> require 'car'<br />
describe Car do<br />
&nbsp;&nbsp;  before(:each) do<br />
&nbsp;&nbsp;&nbsp;&nbsp;   @car = Car.new<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
 &nbsp;&nbsp; it "should not be out of fuel" do<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   @car.should_not be_fuel(0)<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
 &nbsp;&nbsp; it "should have a charged battery" do<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   @car.batt(0.6).should be_close(1, 0.5)<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
 &nbsp;&nbsp; it "should have at least 4 tyres" do<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   @car.should have_at_least(4).tyres<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
 &nbsp;&nbsp; after(:each) do<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   @car = nil<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
end<br />
</code></p>
<p>Now, in car.rb:<br /> <br />
<code>class Car<br />
&nbsp;<br />
 &nbsp;&nbsp; def fuel?(qt)<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   qt > 0<br />
  &nbsp;&nbsp;end<br />
&nbsp;<br />
 &nbsp;&nbsp; def batt(amp)<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   @amp = amp<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
 &nbsp;&nbsp; def tyres<br />
 &nbsp;&nbsp;&nbsp;&nbsp;   { 'fr' => 2.1, 'fl' => 2.1, 'rr' => 2.0, 'rl' => 2.0, 's' => 2.1 }<br />
 &nbsp;&nbsp; end<br />
&nbsp;<br />
end<br />
</code><br />
Ok, running this small spec:</p>
<p><code>$ /var/lib/gems/1.8/bin/spec car_spec.rb --format specdoc<br />
&nbsp;<br />
Car<br />
- should not be out of fuel<br />
- should have a charged battery<br />
- should have at least 4 tyres<br />
&nbsp;<br />
Finished in 0.014326 seconds<br />
3 examples, 0 failures</code></p>
<p>Now, what about using BDD RSpec module with Camping&#8230; ?</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/more-bdd-and-rspec/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>next is… Camping MVC microframework</title>
		<link>http://blog.tquadrado.com/2007/next-is-camping-mvc-microframework/</link>
		<comments>http://blog.tquadrado.com/2007/next-is-camping-mvc-microframework/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 04:48:37 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>perl</category>
	<category>code</category>
	<category>camping</category>
	<category>mvc</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=161</guid>
		<description><![CDATA[
&#8230;next in line are 3 web apps that will me made entirely in Ruby with the help of Why&#8217;s very light yet functional Camping, the 4 Kbyte microframework.
Camping lacks things, and its Markaby is a bit slow compared to RoR&#8217;s Erb, but the approach taken by _Why looks very interesting for its simplicity.
I changed the [...]]]></description>
			<content:encoded><![CDATA[
<p>&#8230;next in line are 3 web apps that will me made entirely in Ruby with the help of <a title="Whytheluckystiff code page" href="http://code.whytheluckystiff.net/">Why&#8217;s</a> very light yet functional <a title="Camping webpage" href="http://code.whytheluckystiff.net/camping/">Camping</a>, the <a title="camping.rb source code" href="http://code.whytheluckystiff.net/camping/browser/trunk/lib/camping.rb">4 Kbyte</a> microframework.<br />
Camping lacks things, and its Markaby is a bit slow compared to RoR&#8217;s <a title="Erb templating" href="http://www.ruby-doc.org/stdlib/libdoc/erb/rdoc/">Erb</a>, but the approach taken by _Why looks very interesting for its simplicity.</p>
<p>I changed the DB connector, not to use the standard SQLite but PostgreSQL, done very rapidly in the <cite>dispatch.rb</cite> file:</p>
<p><code>Camping::Models::Base.establish_connection :adapter => 'postgresql', :host => 'localhost', :port => xxxx,  :database => 'camping_db', :username => 'of_course', :password => 'you_wish'</code></p>
<dl>
<dt>Some more 100% free software, and open source, being used:</dt>
<dd>Gnu/Linux <a title="Debian" href="hyyp://www.debian.org">Debian</a> server  ·  <a title="Lighty" href="http://www.lighttpd.net/">Lighttpd web server</a>   ·   <a title="postgresql" href="http://www.postgresql.org/">PostgreSQL database</a>   ·   <a title="ruby programming language" href="http://www.ruby-lang.org">ruby</a>   ·   <a title="the gems are your friends... sometimes" href="http://rubygems.org/">rubygems</a>   ·   <a title="rubyforge libs" href="http://rubyforge.org/">rubygorge</a>   ·   <a title="Camping on rubyforge" href="http://camping.rubyforge.org/files/README.html">rubyforge&#8217;s Camping </a></dd>
<dt>Lib&#8217;s to pay closer attention:</dt>
<dd>lib/camping/fastcgi.rb   ·   lib/camping/session.rb   ·   ib/camping/db.rb</dd>
<dt>Classes:</dt>
<dd>
Camping::Views   ·   Camping::Session   ·   Camping::Controllers   ·   Camping::Controllers::ServerError   ·   Camping::Controllers::NotFound   ·   Camping::Helpers   ·   Camping::Base   ·   Camping::Models   ·   Camping::Models::Session   ·   Camping::FastCGI   ·   Camping::Mab (for the <a title="markaby" href="http://code.whytheluckystiff.net/markaby/">Markaby</a>(Markup as Ruby)) rdoc <a title="Markaby's RDOC" href="http://markaby.rubyforge.org/">here</a>   ·   Camping::Reloader   ·   Camping::H</dd>
</dt>
</dl>
<p>I&#8217;ll add more stuff now on&#8230;</p>
<p>Of course the intention is making the effort for Camping to gain traction in the web scene. <a href="http://www.uidesign.net/Articles/Papers/UsingMVCPatterninWebInter.html" title="Using MVC Pattern in Web Interactions">Model-View-Controller</a>, is it to last ?<br />
humm&#8230; i&#8217;m giving a look on <a title="Catalyst MVC framework" href="http://www.catalystframework.org/">Catalyst</a>, but now its Ruby, not Perl time&#8230; for me.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/next-is-camping-mvc-microframework/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Edit remote scipts on local VIM under SSH generated RSA keys</title>
		<link>http://blog.tquadrado.com/2007/edit-remote-scipts-on-local-vim-under-ssh-generated-rsa-keys/</link>
		<comments>http://blog.tquadrado.com/2007/edit-remote-scipts-on-local-vim-under-ssh-generated-rsa-keys/#comments</comments>
		<pubDate>Fri, 28 Sep 2007 02:42:41 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>os</category>
	<category>file</category>
	<category>shell</category>
	<category>code</category>
	<category>vi</category>
	<category>vim</category>
	<category>gvim</category>
	<category>ssh</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=160</guid>
		<description><![CDATA[
Passphrases, when used the good way, present a higher level of security over passwords, but what if you are editing scripts on a remote server using a local Vim ? For every open, write, explore, you are asked for it. After a certain amount of times, it starts making no sense, and you&#8217;ll end up [...]]]></description>
			<content:encoded><![CDATA[<p>
Passphrases, when used the good way, present a higher level of security over passwords, but what if you are editing scripts on a remote server using a local Vim ? For every open, write, explore, you are asked for it. After a certain amount of times, it starts making no sense, and you&#8217;ll end up writing the entire passphrase in clear text mode (hopefully, not during a presentation).</p>
<p>So, a good solution is to generate a key to use with SSH, then edit the remote files with a local:</p>
<p><code>vim -f scp://user@host.tld//path/to/the/scripts/</code></p>
<p>To generate the public/private key pair, and conjecturing you have openssh local and remotely, just locally do:</p>
<p><code>$ cd ~/.ssh<br />
$ ssh-keygen</code></p>
<p>you may have to specify the type, say,</p>
<p><code>$ ssh-keygen -t rsa</code></p>
<p>You may specify a name, or by default you&#8217;ll get a <code>~/.ssh/id_rsa</code> for the rsa type.<br />
Then insert the passphrase that is used to access the remote server.<br />
This creates the private/public key pair, as you can see on a directory listing.</p>
<p>On the remote host: if you have no ~/.ssh dir on the remote host, to have it created by sshd just ssh any server you know and it will be created with the right privileges.</p>
<p>On the local host: there are other options, like using named files, but one is to:</p>
<p><code>$ scp ~/.ssh/id_rsa.pub user@host.tld:/home/user/.ssh/authorized_keys2</code></p>
<p>There will be no need to advise do_not_upload the private key, right ? Just upload the .pub public key file. Finally, locally, add the rsa identity to the authentication agent on the local host:</p>
<p><code>$ ssh-add</code></p>
<p>this, if your key is id_rsa, that contains the protocol version 2 RSA authentication identity of the user. If not:</p>
<p><code>$ ssh-add my_key_filename</code></p>
<p>Test ? Just try to ssh your remote host:</p>
<p><code>$ ssh user@there.tld</code></p>
<p>Specifying no user, it will assume your $USERNAME is ssh&#8217;ing&#8230; If it&#8217;s all right, you were not asked to insert the passphrase, did you ? Now go and lend your laptop to someone, or leave it in the trunk of the car while dating some chic&#8230;</p>
<p>Back to Vim. Let&#8217;s explore a remote dir, and open some files:</p>
<p><code>$ vim -f scp://user@host.tld//path/to/the/scripts<code></p>
<p><code>:Explore</code></p>
<p>Select and press Enter on some file</p>
<p><code>:Vexplore</code></p>
<p>Select and press Enter on another file</p>
<p>lovely ? Indeed, and you are using your own .vimrc specs!! The cool (but security questionable) part is that if you were not using the, say, RSA keys, you&#8217;d have to insert the passphrase on every operation. Back on our last example, 5 times.</p>
<p>Finally. Of course you are using <a title="Gnome homepage" href="http://www.gnome.org">Gnome</a> <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  and if you go Places > Connect to Server > Service type: SSH > &#8230; and you name your connection My_Server_02, you&#8217;ll not need to use the&#8230; passphrase. Go run <a title="gedit homepage" href="http://www.gnome.org/projects/gedit/">GEdit</a> and open the remote server scripts&#8230;</p>
<p>Advise: read more on the web about <a title="OpenSSH homepage" href="http://www.openssh.com/">openssh</a>, check the MAN pages for ssh, ssh-add, ssh-agent, ssh-keygen, sshd, scp,&#8230;</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/edit-remote-scipts-on-local-vim-under-ssh-generated-rsa-keys/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>screen modes note</title>
		<link>http://blog.tquadrado.com/2007/screen-modes-note/</link>
		<comments>http://blog.tquadrado.com/2007/screen-modes-note/#comments</comments>
		<pubDate>Sun, 09 Sep 2007 22:28:11 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=159</guid>
		<description><![CDATA[
XGA 1024 x 768
WXGA 1280 x 800
WXGA+ 1440 x 900
SXGA 1280 x 1024
SXGA+ 1400 x 1050
WSXGA 1280 x 854
WSXGA+ 1680 x 1050
UXGA 1600 x 1200
WUXGA 1920 x 1200

]]></description>
			<content:encoded><![CDATA[<p>
XGA 1024 x 768<br />
WXGA 1280 x 800<br />
WXGA+ 1440 x 900<br />
SXGA 1280 x 1024<br />
SXGA+ 1400 x 1050<br />
WSXGA 1280 x 854<br />
WSXGA+ 1680 x 1050<br />
UXGA 1600 x 1200<br />
WUXGA 1920 x 1200
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/screen-modes-note/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Ruby REXML::CData RDOC page</title>
		<link>http://blog.tquadrado.com/2007/ruby-rexmlcdata-rdoc-page/</link>
		<comments>http://blog.tquadrado.com/2007/ruby-rexmlcdata-rdoc-page/#comments</comments>
		<pubDate>Thu, 12 Jul 2007 05:48:22 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>linux</category>
	<category>ruby</category>
	<category>code</category>
	<category>vi</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=158</guid>
		<description><![CDATA[&#8230; one can read this is in the official REXML::CData RDOC page:
ie_hack: Internet Explorer is the worst piece of crap to have ever been written, with the possible exception of Windows itself. Since IE is unable to parse proper XML, we have to provide a hack to generate XML that IE‘s limited abilities can handle. [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; one can read this is in the official REXML::CData RDOC <a href="http://www.ruby-doc.org/core/classes/REXML/CData.html" title="manual page for REXML::CData">page</a>:</p>
<p><code>ie_hack: Internet Explorer is the worst piece of crap to have ever been written, with the possible exception of Windows itself. Since IE is unable to parse proper XML, we have to provide a hack to generate XML that IE‘s limited abilities can handle. This hack inserts a space before the /> on empty tags.</code></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/ruby-rexmlcdata-rdoc-page/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>&lt;/short post&gt; Debian 10Y Social Contract</title>
		<link>http://blog.tquadrado.com/2007/short-post-debian-10y-social-contract/</link>
		<comments>http://blog.tquadrado.com/2007/short-post-debian-10y-social-contract/#comments</comments>
		<pubDate>Wed, 04 Jul 2007 07:03:52 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>debian</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=157</guid>
		<description><![CDATA[10 years of Debian Social Contract&#8230; July 5, 1997 - July 5, 2007.
]]></description>
			<content:encoded><![CDATA[<p><a href="http://wiki.debian.org/SocialContractTenYears" title="SocialContractTenYears">10 years</a> of <a href="http://www.debian.org/social_contract" title="Debian Social Contract">Debian Social Contract</a>&#8230; July 5, 1997 - July 5, 2007.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/short-post-debian-10y-social-contract/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Debian CUT</title>
		<link>http://blog.tquadrado.com/2007/debian-cut/</link>
		<comments>http://blog.tquadrado.com/2007/debian-cut/#comments</comments>
		<pubDate>Tue, 03 Jul 2007 03:49:45 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>ubuntu</category>
	<category>vim</category>
	<category>etch</category>
	<category>debian</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=156</guid>
		<description><![CDATA[Joey Hess proposed some months ago an interesting slight realign for the Debian release model. Basically he proposes the formation of a team to ensure a Constantly Usable Testing (CUT) allowing for some (lots of) users to have access to a well formed and current packaged version of&#8230; Testing. CUT would enforce that Testing should [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Joey webs" href="http://kitenet.net/~joey/">Joey Hess</a> proposed some months ago an interesting slight realign for the Debian release model. Basically he proposes the formation of a team to ensure a <a title="Debian CUT" href="http://kitenet.net/~joey/code/debian/cut/">Constantly Usable Testing (CUT)</a> allowing for some (lots of) users to have access to a well formed and current packaged version of&#8230; Testing. CUT would enforce that Testing should be installable at all times, giving fast answers on how to deal with bugs (fix fast or drop package), security (fix fast or track for user to deal (hey, it&#8217;s Testing)), etc.</p>
<p>CUT does not mean Testing_is_tha_new_Stable (policy used by Google, Yahoo, etc, labeling everything as Beta), but it&#8217;s a fact that Desktop Debianists are going more and more for the latest packages that populate Testing. One can say: &#8220;so go get Ubuntu, you get all the fancy stuff there, and you can even go for Ubuntu+1&#8230; and every 6 months you have the right, by promise, to a new release&#8221;. True, after all they are related, as familly. But lot&#8217;s of Debianists are using and maintaining Debian Stable servers and using Testing on their laptops (yes, OSX too) and desktops for the everyday computing.</p>
<p>Me ? Love Ubuntu, have Feisty partition, have Gutsy on ISO, but Debian Etch speed makes my day. I live on the Etch <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div align="right">&#8230;delivered by, Vim</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/debian-cut/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Linus Torvalds on git</title>
		<link>http://blog.tquadrado.com/2007/linus-torvalds-on-git/</link>
		<comments>http://blog.tquadrado.com/2007/linus-torvalds-on-git/#comments</comments>
		<pubDate>Sun, 01 Jul 2007 03:20:04 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>google</category>
	<category>linux</category>
	<category>vim</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=155</guid>
		<description><![CDATA[Linus talked on Google about his source control management system, with questions from the audience. 70 precious minutes&#8230; with humour, smart ideas, good explanations on the theory of team software development, focusing on building a trust network, on performance, on centralized vs distributed systems, security, etc.
(by minute 60, this guy kicks Google Code (SVN) ass&#8230; [...]]]></description>
			<content:encoded><![CDATA[<p>Linus talked on Google about his source control management system, with questions from the audience. <a title="Youtube Linus on git presentation" href="http://www.youtube.com/watch?v=4XpnKHJAok8">70 precious minutes&#8230;</a> with humour, smart ideas, good explanations on the theory of team software development, focusing on building a trust network, on performance, on centralized vs distributed systems, security, etc.</p>
<p>(by minute 60, this guy kicks Google Code (SVN) ass&#8230; hard)</p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/linus-torvalds-on-git/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Save Net Radio . Org</title>
		<link>http://blog.tquadrado.com/2007/save-net-radio-org/</link>
		<comments>http://blog.tquadrado.com/2007/save-net-radio-org/#comments</comments>
		<pubDate>Wed, 27 Jun 2007 02:45:49 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>culture</category>
	<category>life</category>
	<category>digital-life</category>
	<category>music</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=154</guid>
		<description><![CDATA[

]]></description>
			<content:encoded><![CDATA[<p><a target="_blank" href="http://www.capwiz.com/saveinternetradio/alert_9738601.html/home/" /></p>
<div style="text-align: center"><a title="http://www.savenetradio.org" href="http://www.savenetradio.org"><img width="300" height="250" border="0" alt="SaveNetRadio.org" title="SaveNetRadio.org" src="http://209.9.226.89/mirror/banner/300x250-black.gif" /></a></div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/save-net-radio-org/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple Safari for profit…</title>
		<link>http://blog.tquadrado.com/2007/safari-for-profit/</link>
		<comments>http://blog.tquadrado.com/2007/safari-for-profit/#comments</comments>
		<pubDate>Fri, 22 Jun 2007 03:09:50 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>google</category>
	<category>browser</category>
	<category>apple</category>
	<category>Firefox</category>
	<category>Epiphany</category>
	<category>api</category>
	<category>mac osx</category>
	<category>safari</category>
	<category>windows</category>
	<category>mozilla</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=153</guid>
		<description><![CDATA[&#8230; seems that the main (or a higher) reason for Apple to release a Windows version of Safari is&#8230; income. And for that, the Google search box in to top right corner is the gateway for profit.
Windows still is the most used operating system out there, so why not take the ride ? Mozilla did [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; seems that the main (or a higher) reason for <a title="Apple web site" href="http://www.apple.com">Apple</a> to release a <a title="Microsoft website" href="http://www.microsoft.com">Windows</a> version of <a title="Apple Safari" href="http://www.apple.com/safari">Safari</a> is&#8230; income. And for that, the <a title="Google website" href="http://www.google.com">Google</a> search box in to top right corner is the gateway for profit.</p>
<p>Windows still is the most used operating system out there, so why not take the ride ? <a title="Mozilla Foundation" href="http://www.mozilla.org">Mozilla</a> did it with great <a title="Mozilla Firefox" href="http://www.mozilla.com/firefox">Firefox</a>. <a title="Flock browser" href="http://www.flock.com">Flock</a> are aiming that too. So, dear <a title="Epiphany web browser" href="http://www.gnome.org/projects/epiphany/">Epiphany</a>, you are pure, you don&#8217;t think profit <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/safari-for-profit/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flickr SET’s RSS Feed</title>
		<link>http://blog.tquadrado.com/2007/flickr-sets-rss-feed/</link>
		<comments>http://blog.tquadrado.com/2007/flickr-sets-rss-feed/#comments</comments>
		<pubDate>Tue, 12 Jun 2007 07:07:50 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>rss</category>
	<category>ruby</category>
	<category>code</category>
	<category>Flickr</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=152</guid>
		<description><![CDATA[&#8230; no. No feed available. But thanks to cygnoir and wirehead info at Flickr IRC channel, i can get these feed by using the API. So i&#8217;ll code it now and there, Ruby will help me get those feeds, hopefully. Good&#8217;old IRC&#8230;

]]></description>
			<content:encoded><![CDATA[<p>&#8230; no. No feed available. But thanks to cygnoir and wirehead info at Flickr IRC channel, i can get these feed by using the API. So i&#8217;ll code it now and there, Ruby will help me get those feeds, hopefully. Good&#8217;old IRC&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/flickr-sets-rss-feed/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>&lt;/short post&gt;</title>
		<link>http://blog.tquadrado.com/2007/short-post-2/</link>
		<comments>http://blog.tquadrado.com/2007/short-post-2/#comments</comments>
		<pubDate>Sun, 10 Jun 2007 23:34:46 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>code</category>
	<category>vi</category>
	<category>vim</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=151</guid>
		<description><![CDATA[Vim color scheme for the next weeks:
:colorscheme desert

]]></description>
			<content:encoded><![CDATA[<p>Vim color scheme for the next weeks:</p>
<p>:colorscheme desert
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/short-post-2/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Reinvigorate and Google Analytics</title>
		<link>http://blog.tquadrado.com/2007/reinvigorate-and-google-analytics/</link>
		<comments>http://blog.tquadrado.com/2007/reinvigorate-and-google-analytics/#comments</comments>
		<pubDate>Sun, 03 Jun 2007 21:18:24 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>life</category>
	<category>blog</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=150</guid>
		<description><![CDATA[
Started using Reinvigorate for about a month now. On a fast comparison with Google Analytics new interface, i will problably be using Reinvigorate a lot, since i don&#8217;t run Ads. Analytics is very complete, but Reinvigorate is beautifull, easy, well organized, until now very fast and&#8230; we are neighbours at (mt) MediaTemple, heh. The motto [...]]]></description>
			<content:encoded><![CDATA[<p>
Started using <a href="http://www.reinvigorate.net" title="Reinvigorate website">Reinvigorate</a> for about a month now. On a fast comparison with <a href="http://www.google.com/analytics" title="Google Analytics">Google Analytics</a> new interface, i will problably be using Reinvigorate a lot, since i don&#8217;t run Ads. Analytics is very complete, but Reinvigorate is beautifull, easy, well organized, until now very fast and&#8230; we are neighbours at (mt) MediaTemple, heh. The motto is:  measure. analyze. evolve. Name Tags funcionality allows you to track who your visitors are, with some javascript code.</p>
<p>Both get activated by placing some lines of javascript code on the site(s) to manage. Becomes handy to manage severall sites under a single account.</p>
<p>Google Analytics for sure is a trully web app. All that javascript is cool, the design has nothing to do with past (recent) google, heh, there are very interesting graphs and views, that window moving feature gets very handy to remove things that don&#8217;t matter, and it is offered the possibility to add items to the dashboard. If you are in the Adwords business, go straight to Analytics. Site usage, goal conversions (you define goals), clicks with visits, impressions, costs, ctr, cpc, rpc, roi, margins, you pick up.</p>
<p>Geolocation: Reinvigorate uses of course Google Maps API, and the first impression for the way they present info over Google Analytics, based on simplicity, is good. Analytics zooms, detailing from map overlay to continent, region, country, state, city your visitor is in. Once again, the detailed info is huge at Analytics, since most of the info is segmented &#8220;by zoom&#8221;. Reinvigorate zooms the well known Google Maps and identifies the place the visitor is in, its operating system, IP and browser.</p>
<p>Exporting data to PDF, XML, CSV, TSV is another Analytics good issue. Combine this with instant or scheduled emailing capability and we have marketing people happy.</p>
<p>Google is focusing on delivering more and more professional apps for the average user. But&#8230; there are other companies out there doing good things. I tend to like small companies.</p>
<p>Segmentation and Goals are mottos for Analytics.<br />
Simplicity and good design are a plus on Reinvigorate.</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/reinvigorate-and-google-analytics/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Hpricot - HTML parser for Ruby</title>
		<link>http://blog.tquadrado.com/2007/hpricot-html-parser-for-ruby/</link>
		<comments>http://blog.tquadrado.com/2007/hpricot-html-parser-for-ruby/#comments</comments>
		<pubDate>Sun, 27 May 2007 02:00:18 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>ruby</category>
	<category>code</category>
	<category>vim</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=149</guid>
		<description><![CDATA[
Hpricot is a very interesting lib to parse HTML. I&#8217;ll post here the example, just to check on the beauty of it from time to time&#8230;

require 'hpricot'
require 'open-uri'
# load the RedHanded home page
doc = Hpricot(open("http://redhanded.hobix.com/index.html"))
# change the CSS class on links
(doc/"span.entryPermalink").set("class", "newLinks")
# remove the sidebar
(doc/"#sidebar").remove
# print the altered HTML
puts doc

The lib is evolving, being added [...]]]></description>
			<content:encoded><![CDATA[
<p><a href="http://code.whytheluckystiff.net/hpricot/" title="Hpricot webpage">Hpricot</a> is a very interesting lib to parse HTML. I&#8217;ll post here the example, just to check on the beauty of it from time to time&#8230;</p>
<p><code><br />
require 'hpricot'<br />
require 'open-uri'<br />
# load the RedHanded home page<br />
doc = Hpricot(open("http://redhanded.hobix.com/index.html"))<br />
# change the CSS class on links<br />
(doc/"span.entryPermalink").set("class", "newLinks")<br />
# remove the sidebar<br />
(doc/"#sidebar").remove<br />
# print the altered HTML<br />
puts doc<br />
</code></p>
<p>The lib is evolving, being added support for more XPath functions, etc.</p>
<p><a href="http://redhanded.hobix.com/" title="Redhanded blog">RedHanded</a>&#8217;s blog from the same author, has another cool example. <a href="http://whytheluckystiff.net/" title="Whytheluckystiff">why</a> rocks!</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/hpricot-html-parser-for-ruby/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>MTA Comparison</title>
		<link>http://blog.tquadrado.com/2007/mta-comparison/</link>
		<comments>http://blog.tquadrado.com/2007/mta-comparison/#comments</comments>
		<pubDate>Thu, 17 May 2007 17:54:52 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>mail</category>
	<category>linux</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=148</guid>
		<description><![CDATA[
&#8230; this page is a good and simple comparison page for different MTA&#8217;s like Exim, Postfix, qmail and Sendmail.
&#8220;One scenario is to use Postfix and Exim. The logic for Postfix is that an MTA facing the Internet needs to be as secure as possible it must perform as few functions as possible. For Exim, an [...]]]></description>
			<content:encoded><![CDATA[
<p>&#8230;<a href="http://shearer.org/MTA_Comparison" title="MTA comparison"> this page</a> is a good and simple comparison page for different MTA&#8217;s like Exim, Postfix, qmail and Sendmail.</p>
<p>&#8220;One scenario is to use Postfix and Exim. The logic for Postfix is that an MTA facing the Internet needs to be as secure as possible it must perform as few functions as possible. For Exim, an MTA used to maximise the quality of email in a second level of anti-spam/malware must be as flexible as possible.&#8221;</p>
<p>&#8220;Think of Exim as the Linux of free MTAs.&#8221;</p>
<p>[Edit]</p>
<p>&#8230; a new cool table from wikipedia, but for <a href="http://en.wikipedia.org/wiki/List_of_mail_servers#Comparison_of_mail_servers" title="wikipedia mail server comparison">mail servers comparison</a>.</p>
<div align=right>blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/mta-comparison/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Blogging from Vim</title>
		<link>http://blog.tquadrado.com/2007/blogging-from-vim/</link>
		<comments>http://blog.tquadrado.com/2007/blogging-from-vim/#comments</comments>
		<pubDate>Fri, 11 May 2007 02:27:36 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>life</category>
	<category>digital-life</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>api</category>
	<category>vi</category>
	<category>vim</category>
	<category>gvim</category>
	<category>blog</category>
	<category>open source</category>
	<category>mac osx</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=147</guid>
		<description><![CDATA[&#8230; i finally set up the page for the download of the vimblog.vim vim-ruby script. It will allow you to manage your blog posts from *the* editor VIM, very easilly. Learn one single command and, at maximum, seven simple parameters. So go ahead and blog with vim.

]]></description>
			<content:encoded><![CDATA[<p>&#8230; i finally set up the <a title="VIM blogging bundle" href="http://blog.tquadrado.com/?page_id=146">page for the download</a> of the <code>vimblog.vim</code> vim-ruby script. It will allow you to manage your blog posts from *the* editor <a title="VIM homepage" href="http://www.vim.org">VIM</a>, very easilly. Learn one single command and, at maximum, seven simple parameters. So go ahead and blog with vim.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/blogging-from-vim/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>&lt;/short post&gt;</title>
		<link>http://blog.tquadrado.com/2007/short-post/</link>
		<comments>http://blog.tquadrado.com/2007/short-post/#comments</comments>
		<pubDate>Tue, 01 May 2007 11:45:19 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>ubuntu</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=145</guid>
		<description><![CDATA[Bug #1 in Ubuntu
blogged with VIM
]]></description>
			<content:encoded><![CDATA[<p><a href="https://bugs.launchpad.net/ubuntu/+bug/1" title="ubuntu launchpad">Bug #1 in Ubuntu</a></p>
<div align=right>blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/short-post/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>electronic toxic wastes</title>
		<link>http://blog.tquadrado.com/2007/electronic-toxic-wastes/</link>
		<comments>http://blog.tquadrado.com/2007/electronic-toxic-wastes/#comments</comments>
		<pubDate>Tue, 01 May 2007 09:22:03 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category />
	<category>tech</category>
	<category>web</category>
	<category>life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=144</guid>
		<description><![CDATA[It is very cool to go and buy a new computer. It sure is. But what about the old ones ? There are some companies recycling parts for these unusefull machines, but it actually is not enough. The production numbers are too high, and the used materials still too much non_environment_friendly. Manufacturers will have to [...]]]></description>
			<content:encoded><![CDATA[<p>It is very cool to go and buy a new computer. It sure is. But what about the old ones ? There are some companies recycling parts for these unusefull machines, but it actually is not enough. The production numbers are too high, and the used materials still too much non_environment_friendly. Manufacturers will have to deal with component production in a much proper way. We really should try to <a href="http://www.ban.org/photogallery/index.html" title="basel action network">avoid this</a>.</p>
<div align=right>blogged from VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/electronic-toxic-wastes/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>“All the computer people use Macs or Linux now”</title>
		<link>http://blog.tquadrado.com/2007/all-the-computer-people-use-macs-or-linux-now/</link>
		<comments>http://blog.tquadrado.com/2007/all-the-computer-people-use-macs-or-linux-now/#comments</comments>
		<pubDate>Tue, 10 Apr 2007 02:35:44 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>life</category>
	<category>digital-life</category>
	<category>apple</category>
	<category>blog</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=142</guid>
		<description><![CDATA[&#8230; this is Paul Graham&#8217;s version of why Microsoft is dead. There are some interesting parts in it. One thing he does not state, is that Microsoft never drove the internet trends. They get always late, and sometimes very late. Then, the huge ammount of monetary units and a very confortable monopolistic position in the [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; this is <a title="Microsoft is Dead blog post" href="http://www.paulgraham.com/microsoft.html">Paul Graham</a>&#8217;s version of why Microsoft is dead. There are some interesting parts in it. One thing he does not state, is that Microsoft never drove the internet trends. They get always late, and sometimes very late. Then, the huge ammount of monetary units and a very confortable monopolistic position in the market helps them catch up (as reduce distance). Microsoft is primarily a desktop software company, with or without <a title="live.com" href="http://live.com">live.com</a>.</p>
<p>Apart from this, and because we discussed it a bit in a private mailing-list today, why the heck did <a title="Novell" href="http://www.novell.com">Novell</a> signed the agreement ?!?! They even have 3 cool ads: <a title="Novell Linux ads" href="http://www.novell.com/linux/meetlinux/">PC, Mac&#8230; meet Linux</a>. This is what makes Microsoft come closer. Bad move from Novell. And they didn&#8217;t come for the technology. They come for legal actions&#8230; They come for patents. They come for business and technology shutdowns. Microsoft needs Linux to be wiped out from the face of the earth: <code>sudo rm -fr *</code>. Can&#8217;t Novell see it ?!?? I trully hope not to see a <code>del novell.*</code> move.</p>
<p>Remember that scene from <a title="IMDB Stanley Kubrik" href="http://www.imdb.com/name/nm0000040/">Stanley Kubrik</a>&#8217;s <a title="IMDB The Shining" href="http://www.imdb.com/title/tt0081505/">The Shining</a> in wich <a title="IMDB Jack Nicholson" href="http://www.imdb.com/name/nm0000197/">Jack Nicholson</a> keeps type-writing the same sentence over and over again ? Make it <a title="Steve Balmer webpage" href="http://www.microsoft.com/presspass/exec/steve/default.mspx">Steve Balmer</a> writing <cite>del novell.*</cite>&#8230;</p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/all-the-computer-people-use-macs-or-linux-now/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Krop - creative and tech jobs</title>
		<link>http://blog.tquadrado.com/2007/krop-creative-and-tech-jobs/</link>
		<comments>http://blog.tquadrado.com/2007/krop-creative-and-tech-jobs/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 16:06:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=140</guid>
		<description><![CDATA[&#8230;just received a (mt) email announcing Krop. It&#8217;s a very cool &#038;&#038; fast &#038;&#038; simple website.
blogged with VIM
]]></description>
			<content:encoded><![CDATA[<p>&#8230;just received a <a title="mediatemple" href="http://www.mediatemple.net">(mt)</a> email announcing <a title="krop web site" href="http://www.krop.com">Krop</a>. It&#8217;s a very cool &#038;&#038; fast &#038;&#038; simple website.</p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/krop-creative-and-tech-jobs/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Engine Yard</title>
		<link>http://blog.tquadrado.com/2007/engine-yard/</link>
		<comments>http://blog.tquadrado.com/2007/engine-yard/#comments</comments>
		<pubDate>Wed, 04 Apr 2007 21:05:29 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>ruby</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=141</guid>
		<description><![CDATA[
&#8230; i saw a  small video on buiding a cluster. When placing the machines in the cabinet i noticed they inserted them close to the top. It is known the heat goes up, and a while ago i attended a conference where a mechanical engineer showed some heat graphs, thermal cabinet photos and presented [...]]]></description>
			<content:encoded><![CDATA[<p>
&#8230; i saw a  small video on <a title="engine yard web site" href="http://www.engineyard.com/">buiding a cluster</a>. When placing the machines in the cabinet i noticed they inserted them close to the top. It is known the heat goes up, and a while ago i attended a conference where a mechanical engineer showed some heat graphs, thermal cabinet photos and presented some stats about top servers failure being higher then lower positioned ones. I emailed Engine Yard fellows and got 1 response in a question of minutes from Tom Morini, explaining the how&#8217;s and why&#8217;s of it. Some hours later, another response from Loren Hale. How many companies do this ? For me, its a good relation start. If you are on Rails, check on them. <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/engine-yard/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple in Japan</title>
		<link>http://blog.tquadrado.com/2007/apple-in-japan/</link>
		<comments>http://blog.tquadrado.com/2007/apple-in-japan/#comments</comments>
		<pubDate>Sat, 31 Mar 2007 21:17:27 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>culture</category>
	<category>life</category>
	<category>digital-life</category>
	<category>apple</category>
	<category>mac osx</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=139</guid>
		<description><![CDATA[from O&#8217;Reilly MacDevCenter, an interesting interview with Nobi, with interesting facts:
&#8230;
&#8220;The research took about a year, and when they were done, their conclusion was that Macintosh would be the best platform, but with one condition: If Apple could keep the swap files encrypted, the bank could use the Macintosh. So the reason that Macs can [...]]]></description>
			<content:encoded><![CDATA[<p>from O&#8217;Reilly <a title="mac dev center" href="http://www.macdevcenter.com/">MacDevCenter</a>, an interesting <a title="a chat with noby" href="http://www.macdevcenter.com/pub/a/mac/2007/03/13/a-chat-with-nobi.html">interview with Nobi</a>, with interesting facts:<br />
&#8230;<br />
<cite>&#8220;The research took about a year, and when they were done, their conclusion was that Macintosh would be the best platform, but with one condition: If Apple could keep the swap files encrypted, the bank could use the Macintosh. So the reason that Macs can do that now is because Aozora requested that Apple add that feature.&#8221;</cite><br />
&#8230;<br />
<cite>&#8220;The reason they needed to net boot relates to the way public universities now operate in Japan, which has changed just recently. Mostly because a new lack of funding, the entire computer infrastructure at Todai now has to be managed by just two or three people. They have some others helping here and there, but use only two or three core people to support two campuses, which are very far away from each other. That&#8217;s why they needed a centralized solution. I heard that in this case also there are some features in Mac OS X that were implemented because of Todai&#8217;s requirements.&#8221;</cite><br />
&#8230;<br />
<cite>&#8220;Yes, it is very advanced. So much so that whenever I leave the country I feel so frustrated. At my home, for example, I have a symmetric 100Mbps fiber-optic connection&#8211;I actually get about 40-60Mbps from it. And that costs me about $40/month. With it I can, for example, play back from my office a DVD that&#8217;s mounted on my home server.&#8221;</cite></p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/apple-in-japan/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>&lt;/short post&gt;</title>
		<link>http://blog.tquadrado.com/2007/138/</link>
		<comments>http://blog.tquadrado.com/2007/138/#comments</comments>
		<pubDate>Fri, 30 Mar 2007 03:07:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>culture</category>
	<category>digital-life</category>
	<category>music</category>
	<category>blog</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=138</guid>
		<description><![CDATA[Merlin Mann&#8217;s talk with John Roderick as&#8230; &#8220;cut the crap&#8221;.

]]></description>
			<content:encoded><![CDATA[<p>Merlin Mann&#8217;s talk with <a title="The Merlin Show" href="http://www.themerlinshow.com/ep/012-interview-john-roderick">John Roderick</a> as&#8230; &#8220;cut the crap&#8221;.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/138/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Linux recovers XP boot sector(s)</title>
		<link>http://blog.tquadrado.com/2007/linux-recovers-xp-boot-sectors/</link>
		<comments>http://blog.tquadrado.com/2007/linux-recovers-xp-boot-sectors/#comments</comments>
		<pubDate>Sat, 17 Mar 2007 00:01:51 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>os</category>
	<category>ubuntu</category>
	<category>shell</category>
	<category>xp</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=136</guid>
		<description><![CDATA[
Well, a post about Windows&#8230; who&#8217;d say about that&#8230;
The thing is: is have a HP desktop that after a good BIOS update, got its motherboard dead. Good BIOS update. Pretty much dead motherboard. Not only happened to me. There are foruns about these HP BIOS updates for this motherboard series that gave lot&#8217;s of problems. [...]]]></description>
			<content:encoded><![CDATA[<p>
Well, a post about Windows&#8230; who&#8217;d say about that&#8230;<br />
The thing is: is have a HP desktop that after a good BIOS update, got its motherboard dead. Good BIOS update. Pretty much dead motherboard. Not only happened to me. There are foruns about these HP BIOS updates for this motherboard series that gave lot&#8217;s of problems. No warranty, so no HP help, after talking to HP tech dept., support dep., and even quality dept. So, two solutions: get someone to rebuild the PLCC chip info, or buy new material. Faster, buy. New motherboard, processor, memory. Installation madness: had do hard-wire cables to some pins (some front panel functions). Nothing that a good manual circuit reading couldn&#8217;t do.</p>
<p>Turn on: everything running fine except for the front big blue light. 1 minute to fix it. Now, let&#8217;s see who will behave better on this first boot up: the OEM Win XP or the Ubuntu Edgy GNU/Linux installation? Fast answer: XP reboots after 2 secs. No way to make it run, using any boot options. Edgy got it to the end, just needing a X-server reconfiguration. Wow! Linux wins.</p>
<p>XP: when trying to reinstall the thing from the Recovery Partition, couldn&#8217;t do it either. Very funny long error message to phone call someone and a Code Purple. Code Purple ? What the&#8230; So i e-mailed Microsoft questioning if i&#8217;d lost the license to run that HP OEM XP, sending my Key on that email. Yes, i did register XP, i do just have legal software. First e-mail response: buy a new one or check our support page. New e-mail: my motherboard got broken. Had to buy a new one and therefore all the other material. Who can i contact to give me a simple, valid, complete answer ? New response, very helpfull this time. I&#8217;ll send some data, the OEM Key, invoices for the PC and new motherboard and they even want a damage report for the morherboard <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ok&#8230; i&#8217;ll send it all. I&#8217;m cooperative.</p>
<p>But before all this, i made a mistake&#8230; When reinstalling GRUB i did a:</p>
<p><code>sudo grub-install --root-directory=./ /dev/hda1</code></p>
<p>The problem is in <code>hda1</code>, the &#8220;1&#8243; more precisely. Mistake. It should have been <code>.../hda</code>. So, no boot for the FAT32 XP Recovery Partition. Using the Recovery Console was unsusefull, with that fixboot. I didn&#8217;t trust the fixmbr, nor i needed it. After some reading and having only one distro working, i decided to go *manual mode*. In short, some partition boot sectors analisys with:</p>
<p><code>dd if=/dev/hda1 of=./output1.dat bs=512 count=1</code></p>
<p>Searching the web had no good efects. Some commercial apps to solve it, but i prefer to understand what must be done.<br />
After some reading on <a title="An Examination of the Windows 2000 (NT5.0) and Windows XP (NT5.1) MBR" href="http://www.geocities.com/thestarman3/asm/mbr/Win2kmbr.htm">Daniel B. Sedory</a> extensive info site (very tech), i managed to understand that the XP boot sector really needs 6 sectors. But the first sector got &#8220;damaged&#8221; by the GRUB. At a time, i reminded that FAT32 does have backup, so i did a:</p>
<p><code>dd if=/dev/hda1 of=./boot.dat bs=512 count=6 skip=6</code><br />
<code>hexdump -C boot.dat > boot.hex</code>*</p>
<p>Now i could see difs between the sectors. So&#8230; this meant i could try to fetch the backup sectors and manually place them on the beggining of the partition. Here we go:<br />
<code>dd if=./boot.dat of=/dev/hda1 bs=512 count=6</code></p>
<p>After this i got the 6 first sectors again and compared them to the ancient ones. Different, so the placement was ok.</p>
<p>Reboot. GRUB boot. XP Recovery FAT32 partition boot. Cool!</p>
<p>* <code>hexdump</code> is awsome. I used it 2 years ago to recover my father&#8217;s jpeg Paris photos from a FAT destroyed Sony MMC card. All of them. Signatures, jpeg file signatures. This is a very good personnal data viewer. Give it a try on some file of your own. See this <a title="hexdump in action" href="http://www.flickr.com/photo_zoom.gne?id=422823594&#038;size=o">screenshot</a> of the 6 boot sectors.</p>
<p>So remember, XP needs 6 sectors to boot on FAT32. I could not find this on the web but on Daniel website, viewed then on the hexdump. For NTFS the approach should not be difficult problably. So beware, you&#8217;r walking on a wire, no net. So, backup. I did a backup of the first, say, 20 sectors of my /dev/hda1 in case things went wrong:</p>
<p><code>dd if=/dev/hda1 of=./boot_backup.dat bs=512 count=20</code></p>
<p>All this on unmounted partitions.</p>
<p>So now i have Ubuntu 7.04 Feisty Fawn runnin&#8217; fast, with all its great improvements. And XP that i barelly use, just to maintain some Win32 apps, waiting for MS decision to letting me keep the license, or not. On the other hand, i can buy a Vista OEM version &#8220;packed&#8221; in all this new material (controversial?). Or not.</p>
<div align="right">blogged with VIM</div>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/linux-recovers-xp-boot-sectors/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Blogging from VIM (timezone insanity)</title>
		<link>http://blog.tquadrado.com/2007/blogging-from-vim-tmz-insanity/</link>
		<comments>http://blog.tquadrado.com/2007/blogging-from-vim-tmz-insanity/#comments</comments>
		<pubDate>Mon, 26 Feb 2007 05:52:07 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>ruby</category>
	<category>code</category>
	<category>api</category>
	<category>vi</category>
	<category>Wordpress</category>
	<category>xmlrpc</category>
	<category>vim</category>
	<category>gvim</category>
	<category>mac osx</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=124</guid>
		<description><![CDATA[Blogging from VIM is now possible using this script. This post is being written using it. But one problem is making me loose a great ammount of time: dateCreated, meaning TMZ headache.
Wordpress XMLRPC wants a datetime timestamp for the dateCreated field. I give it an ISO8601 format as stated in XMLRPC specs.
The post is sent [...]]]></description>
			<content:encoded><![CDATA[<p>Blogging from VIM is now possible using this script. This post is being written using it. But one problem is making me loose a great ammount of time: <code>dateCreated</code>, meaning TMZ headache.</p>
<p>Wordpress XMLRPC wants a datetime timestamp for the dateCreated field. I give it an ISO8601 format as stated in XMLRPC specs.<br />
The post is sent to the server, fine, MySQL db is updated, all fine. But the post is not presented. Wordpress counts it in the Archives, even shows it in the Recent Posts, but does not present it.<br />
I managed to isolate the problem. It is in the TimeStamp. Wordpress has severall dates in the database using datetime format YYYY-MM-DD HH:MM:SS but not storing the timezone. It deals with in using 2 fields: wp_date and wp_date_gmt.<br />
But it does not accept a datetime like this. It wants a TimeZone too for the conversions. So lets say, we pass a:<br />
<code>Time.now.iso8601</code> => &#8220;2007-02-26T07:01:29+00:00&#8243; or a:<br />
<code>Time.xmlschema(Time.now.iso8601)</code> => &#8220;Mon Feb 26 07:04:53 UTC 2007&#8243; or a:<br />
<code>Time.now.rfc2822</code> => &#8220;Mon, 26 Feb 2007 07:06:27 +0000&#8243;</p>
<p>I deal with it this way:<br />
<code>post_content['dateCreated'] = Time.parse(((VIM::Buffer.current[2]).gsub(/Date *:/, '')).strip)</code></p>
<p>I made severall tests on time parsing functions, and some of them send the correct date to the server.<br />
But&#8230; no post still. Only if I send a <code>dateCreated.isempty?</code> = true date: wp_xmlrpc.php creates a timestamp, then.</p>
<p>So, I SSH&#8217;d the MySQL database and saw everything ok. All the data is in. Title, links, content, categories, everything is passed via the struct. To isolate the problem i started changing data manually in MySQL. So my conclusion is that the problem is in the <code>wp_date_gmt</code> field. The difference has to be <= 6 hours for my case or the post is not displayed.<br />
So tomorrow i'll deal with it. This post will fly via VIM and I'll force it to appear via SSH <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_neutral.gif' alt=':|' class='wp-smiley' /> </p>
<p><a href="http://blog.kung-foo.tv/archives/001532.html">Adriaan Tijsseling</a> has a great post on standardization, touching character encoding (UFT-8, ISO8859-x,&#8230;) and timezone (UTC, GMT,&#8230;) problems.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/blogging-from-vim-tmz-insanity/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>about costs…</title>
		<link>http://blog.tquadrado.com/2007/about-costs/</link>
		<comments>http://blog.tquadrado.com/2007/about-costs/#comments</comments>
		<pubDate>Sat, 24 Feb 2007 02:32:06 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web 2.0</category>
	<category>talks</category>
	<category>amazon</category>
	<category>s3</category>
	<category>ec2</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=54</guid>
		<description><![CDATA[&#8220;&#8230;the biggest cost is not power (electrical), and its not the servers, and it&#8217;s not the people to maintain the data center. The biggest cost is lack of utilization&#8221;
Jeff Bezos talking with Tim O&#8217;Reilly on EC2 and S3 services
Web2.0 SUMMIT&#8217;06

]]></description>
			<content:encoded><![CDATA[<p>&#8220;&#8230;the biggest cost is not power (electrical), and its not the servers, and it&#8217;s not the people to maintain the data center. The biggest cost is lack of utilization&#8221;</p>
<p align="right">Jeff Bezos talking with Tim O&#8217;Reilly on EC2 and S3 services<br />
Web2.0 SUMMIT&#8217;06
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/about-costs/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Vi blogging bundle</title>
		<link>http://blog.tquadrado.com/2007/vi-blogging-bundle/</link>
		<comments>http://blog.tquadrado.com/2007/vi-blogging-bundle/#comments</comments>
		<pubDate>Wed, 21 Feb 2007 07:50:00 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>ubuntu</category>
	<category>gnome</category>
	<category>digital-life</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>textmate</category>
	<category>api</category>
	<category>Flickr</category>
	<category>vi</category>
	<category>Wordpress</category>
	<category>xmlrpc</category>
	<category>vim</category>
	<category>gvim</category>
	<category>blog</category>
	<category>screenshot</category>
	<category>iccf</category>
	<category>open source</category>
	<category>GPL</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=53</guid>
		<description><![CDATA[&#8230; well the name reminds Brad Choate&#8217;s Textmate blogging bundle   Brad is an excellent developer and like me, was once a Delphi (Borland great product) developer. I based this on his Textmate work. I&#8217;m coding a Vi / ViM / GViM script for a plugin that has some nice results already, exclusively for [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; well the name reminds <a title="Brad Choate blog" href="http://bradchoate.com/">Brad Choate</a>&#8217;s <a title="Textmate website" href="http://www.macromates.com">Textmate</a> blogging bundle <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Brad is an excellent developer and like me, was once a Delphi <a title="Borland website" href="http://www.borland.com">(Borland</a> great product) developer. I based this on his Textmate work. I&#8217;m coding a Vi / <a title="Vi IMproved website" href="http://www.vim.org">ViM</a> / GViM script for a plugin that has some nice results already, exclusively for geek bloggers. Brad&#8217;s bundle has a very nice image automation/integration that this one won&#8217;t have. SSH images to the server then manually link to them.</p>
<p>Some of the features/ideas/facts include:</p>
<p>- vimblog.vim file including directives, function and ruby script (VIM:: class)<br />
- syntax highlighting: different between vi/vim and gvim (richer color handling);<br />
- XMLRPC access to blog;<br />
- exception handling in ruby script and vi function script<br />
- categories insertion freedom<br />
- buffer selection<br />
- is being tested for Wordpress xmlrpc using mt.calls<br />
- future: multiple blog / user definition (via switch); window selection;&#8230;<br />
- Vi command line usage definition as:</p>
<p><code>:Blog option [*args]</code></p>
<p>- switches:<br />
- rp [x]   =&gt; show recent [x] posts<br />
- np       =&gt; create a new post<br />
- gp [id]  =&gt; get complete post with id [id]<br />
- publish  =&gt; publish an edited/new post<br />
- draft    =&gt; save edited/new post as draft</p>
<p>Hope to release it real soon. I need it to my own usage (remember <a title="Katty Sierra blog" href="http://headrush.typepad.com/creating_passionate_users/2007/02/test.html">Kathy Sierra</a> ?).</p>
<p><a title="Vi blogging bundle screenshot" href="http://www.flickr.com/photos/keynote/397369388/">Screenshot</a> test for Recent Posts list with syntax highligh.</p>
<p>From the site:<br />
&#8220;VIM stands for Vi IMproved. Most of VIM was made by Bram Moolenaar, but only through the help of many others. Vim is charityware.  Its license is GPL-compatible, so it&#8217;s distributed freely, but we ask that if you find it useful you make a donation to help children in Uganda through the <a title="ICCF charity site" href="http://iccf-holland.org/">ICCF</a>&#8220;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/vi-blogging-bundle/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Wordpress XMLRPC::Client.new()</title>
		<link>http://blog.tquadrado.com/2007/wordpress-xmlrpcclientnew/</link>
		<comments>http://blog.tquadrado.com/2007/wordpress-xmlrpcclientnew/#comments</comments>
		<pubDate>Mon, 19 Feb 2007 06:09:54 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>ubuntu</category>
	<category>gnome</category>
	<category>ruby</category>
	<category>php</category>
	<category>shell</category>
	<category>code</category>
	<category>api</category>
	<category>vi</category>
	<category>MovableType</category>
	<category>Wordpress</category>
	<category>xmlrpc</category>
	<category>vim</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=52</guid>
		<description><![CDATA[&#8230; when coding switter, using lot&#8217;s of command line, vim, bash, i felt the need to blog from vim. Some readings (quite a few availlable, actually) later, i was testing Wordpress xmlrpc using MovableType (Six Apart) calls to it. Vim allows ruby scripts (when compiled with that directive) use to create new commands, just like [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; when coding <a title="switter (yet) on Flickr" href="http://www.flickr.com/photos/keynote/387686763/">switter</a>, using lot&#8217;s of command line, <a title="vim - vi improved" href="http://www.vim.org/">vim</a>, bash, i felt the need to blog from vim. Some readings (quite a few availlable, actually) later, i was testing <a title="wordpress website" href="http://www.wordpress.org">Wordpress</a> <a title="xmlrpc website" href="http://www.xmlrpc.com">xmlrpc</a> using <a title="MovableType" href="http://www.movabletype.com/">MovableType</a> (<a title="Six Apart website" href="http://www.sixapart.com">Six Apart</a>) calls to it. Vim allows ruby scripts (when compiled with that directive) use to create new commands, just like with python, perl, etc. So a bit of <a title="ruby programming language website" href="http://www.ruby-lang.org">ruby</a> code that may be handy: wordpress xmlrpc methods availability:</p>
<p><code>require 'xmlrpc/client.rb'</code></p>
<p><code>blog = XMLRPC::Client.new("your.blog.domain", "/xmlrpc.php", 80)</code><br />
<code>begin</code><br />
<code>    puts "10 most recent post titles:"</code><br />
<code>    resp = blog.call("mt.getRecentPostTitles", 0, "log", "pwd", 10 )</code><br />
<code>    puts resp</code><br />
<code>    puts "available rpc's:"</code><br />
<code>    resp = blog.call("mt.supportedMethods", 0, "log", "pwd" )</code><br />
<code>    puts resp</code><br />
<code>rescue XMLRPC::FaultException => e</code><br />
<code>    puts "ERROR: Code: #{e.faultCode}"</code><br />
<code>    puts "ERROR: Msg.: #{e.faultString}"</code><br />
<code>end</code></p>
<p>Embebded example for the blog last 10 posts too.<br />
Very handy to make it work fast:<br />
- get the source code for wordpress xmlrpc.php;<br />
- get the source code for ruby xmlrpc/client.rb lib.<br />
Analyze them well. All the answers are there. <a title="wordpress xmlrpc ruby access  Flickr screenshot" href="http://www.flickr.com/photos/keynote/395003896/">Screenshot</a> for all this.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/wordpress-xmlrpcclientnew/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>switter on rubyforge.org</title>
		<link>http://blog.tquadrado.com/2007/switter-on-rubyforgeorg/</link>
		<comments>http://blog.tquadrado.com/2007/switter-on-rubyforgeorg/#comments</comments>
		<pubDate>Mon, 12 Feb 2007 07:20:47 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>ubuntu</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>api</category>
	<category>Flickr</category>
	<category>switter</category>
	<category>twitter</category>
	<category>vi</category>
	<category>rubyforge</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=51</guid>
		<description><![CDATA[&#8230;now, switter was accepted on rubyforge.org. I&#8217;ll try to put source and some docs there (rdoc does wonders) soon. Meanwhile, and with threahds now working for continuous message post/get, it just needs some tickles on the readline method.
switter on a maximized shell window receiving public timelines
switter on a normal sized shell window receiving public timelines

]]></description>
			<content:encoded><![CDATA[<p>&#8230;now, switter was accepted on rubyforge.org. I&#8217;ll try to put source and some docs there (rdoc does wonders) soon. Meanwhile, and with threahds now working for continuous message post/get, it just needs some tickles on the <code>readline</code> method.</p>
<p><a title="maximized switter screenshot [Flickr]" href="http://www.flickr.com/photos/keynote/387686762/">switter</a> on a maximized shell window receiving public timelines<br />
<a title="normal shell size switter screenshot [Flickr]" href="http://www.flickr.com/photos/keynote/387686763/">switter</a> on a normal sized shell window receiving public timelines
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/switter-on-rubyforgeorg/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>switter as a remote controller</title>
		<link>http://blog.tquadrado.com/2007/switter-as-a-remote-controller/</link>
		<comments>http://blog.tquadrado.com/2007/switter-as-a-remote-controller/#comments</comments>
		<pubDate>Fri, 09 Feb 2007 00:12:04 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>jabber</category>
	<category>linux</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>api</category>
	<category>Flickr</category>
	<category>switter</category>
	<category>twitter</category>
	<category>vi</category>
	<category>rubyforge</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=50</guid>
		<description><![CDATA[Had a new idea for the switter (twitter shell client) client.
What if you had a switch that enabled you to secretly send commands to the shell via twitter service ? Now, that can be (is) dangerous. But what if you defined an hash with predefined actions, and &#8220;secret&#8221; (remember, unsafe connection) codes ?
./switter -u test [...]]]></description>
			<content:encoded><![CDATA[<p>Had a new idea for the <a title="switter screenshot" href="http://www.flickr.com/photos/keynote/383488755/">switter</a> <a title="Twitter website" href="http://twitter.com">(twitter</a> shell client) client.<br />
What if you had a switch that enabled you to secretly send commands to the shell via twitter service ? Now, that can be (is) dangerous. But what if you defined an hash with predefined actions, and &#8220;secret&#8221; (remember, unsafe connection) codes ?</p>
<p><code>./switter -u test -p pwd -t me -w -cli -h --log<br />
</code></p>
<p>-cli or &#8211;command would activate the :CLI listener and switter would parse the next limited string.<br />
-h or &#8211;hash would make :CLI search hash keys for the predefined commands.<br />
Without -h, :CLI would execute &#8220;all&#8221; commands (no root access please!)</p>
<p><code>./switter -cli -h  # login info comes from the .yaml configuration file<br />
<code>:CLI who # would execute hash value for key 'who'(scripts, etc)</code></code></p>
<p><code>./switter -cli<br />
<code>:CLI  who -u   # would execute who -u</code> </code></p>
<p>Limitations include security issues, twitter string limitation, etc. A secret account could be created for this, or a secret &#8220;activator&#8221; (:CLI ou :RUNTh1S) could be defined. This opens doors to new features like command categorization, meaning the creation of severall listeners types, like :CLI for a purpose, :RUNTh1s for another.<br />
Hum&#8230; hey Twitter coders, some HTTPS ?<br />
Severall oriented tools do this (safer), but Twitter can be used for such things, like Jabber does, etc.</p>
<p>A final consideration&#8230; open source software allows you to look at the code. A very few ammount of people does this, obviously, but using others code can be&#8230; let&#8217;s say, we don&#8217;t know every programmers intentions. Being open, allows a much faster discover of potential problems. Now, with proprietary software, we just don&#8217;t know. Cases of undisclosed &#8220;<a title="phone home feature (Wikipedia)" href="http://en.wikipedia.org/wiki/Phone_home">phone</a> home&#8221; features were discovered on Microsoft sotware, HP drivers (a HP keyboard driver had a &#8220;phone home&#8221; feature created by the HP programmer &#8220;just to know how often special keys were pressed&#8221;), among (lots of) other. Now, let your imagination flow&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/switter-as-a-remote-controller/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Environment vars</title>
		<link>http://blog.tquadrado.com/2007/environment-vars/</link>
		<comments>http://blog.tquadrado.com/2007/environment-vars/#comments</comments>
		<pubDate>Thu, 08 Feb 2007 07:16:32 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>ubuntu</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>vi</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=49</guid>
		<description><![CDATA[ENV is the hash that contains environment variables:
ENV.collect { &#124;key, val&#124; puts "#{key} ==> #{val}" }
ENV.each_pair { &#124;key, val&#124; puts "#{key} ==> #{val}"  }

Need to know $HOME of the current user (needed for config files, say)?
puts ENV['HOME'] if ENV.has_key?('HOME')
puts ENV['HOME'] if ENV.key?('HOME')
puts ENV['HOME'] if ENV.include?('HOME')
puts ENV['HOME'] if ENV.member?('HOME')  

]]></description>
			<content:encoded><![CDATA[<p>ENV is the <a title="Hash table" href="http://en.wikipedia.org/wiki/Hash_table">hash</a> that contains environment variables:</p>
<p><code>ENV.collect { |key, val| puts "#{key} ==> #{val}" }<br />
</code><code>ENV.each_pair { </code><code>|key, val| puts "#{key} ==> #{val}" </code><code> }<br />
</code><br />
Need to know $HOME of the current user (needed for config files, say)?</p>
<p><code>puts ENV['HOME'] if </code><code><code>ENV.has_key?('HOME')</code><br />
<code /><code>puts ENV['HOME'] if </code><code><code>ENV.key?('HOME')</code><br />
<code /><code>puts ENV['HOME'] </code><code><code>if ENV.include?('HOME')</code><br />
<code /><code>puts ENV['HOME'] </code><code><code>if ENV.member?('HOME')</code> </code> </code></code></code>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/environment-vars/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>switter: ruby twitter shell client</title>
		<link>http://blog.tquadrado.com/2007/switter-ruby-twitter-shell-client/</link>
		<comments>http://blog.tquadrado.com/2007/switter-ruby-twitter-shell-client/#comments</comments>
		<pubDate>Tue, 06 Feb 2007 06:40:01 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
	<category>api</category>
	<category>Flickr</category>
	<category>switter</category>
	<category>twitter</category>
	<category>rubyforge</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=48</guid>
		<description><![CDATA[been having some fun coding a twitter client for the *nix shell in (pure) ruby.
Soon will post source file for anyone to play with it.
Cool libraries used, include:
require 'net/http'
 require 'rexml/document'
 require 'optparse'
 require 'yaml'
Configuration file created for user defs;
Command line switches prioritized over config. file;
Timeline options;
Working now on a minimal (shell) UI, message posting [...]]]></description>
			<content:encoded><![CDATA[<p>been having some fun <a title="flickr screenshot" href="http://www.flickr.com/photos/keynote/381447170/">coding</a> a <a title="Twitter.com" href="http://twitter.com">twitter</a> <a title="flickr screenshot of messages" href="http://www.flickr.com/photos/keynote/378919127/">client</a> for the *nix shell in (pure) ruby.<br />
Soon will post source file for anyone to play with it.<br />
Cool libraries used, include:</p>
<p><code>require 'net/http'<br />
</code> <code>require 'rexml/document'<br />
</code> <code>require 'optparse'<br />
</code> <code>require 'yaml'</code></p>
<p>Configuration file created for user defs;<br />
Command line switches prioritized over config. file;<br />
Timeline options;<br />
Working now on a minimal (shell) UI, message posting and message updatings.<br />
Tried out severall shell escapes for color, but bold is default option. Maybe will create 2 more switches for color picker, storable on configuration file.</p>
<p>Lot&#8217;s of Twitter apps are rising. Mainly desktop, but some command line too.<br />
A few more hours and that&#8217;s it. Then, add to the Twitter Fan Wiki <img src='http://blog.tquadrado.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/switter-ruby-twitter-shell-client/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>object.methods</title>
		<link>http://blog.tquadrado.com/2007/objectmethods/</link>
		<comments>http://blog.tquadrado.com/2007/objectmethods/#comments</comments>
		<pubDate>Fri, 02 Feb 2007 02:40:04 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=47</guid>
		<description><![CDATA[res.methods.each do &#124;meth&#124;
  print meth, " / "
end
&#8230; just to check wich methods my res object could call.

]]></description>
			<content:encoded><![CDATA[<p><code>res.methods.each do |meth|</code><br />
<code>  print meth, " / "</code><br />
<code>end</code></p>
<p>&#8230; just to check wich methods my <code>res</code> object could call.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/objectmethods/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Ruby footprint - Tattle</title>
		<link>http://blog.tquadrado.com/2007/ruby-footprint-tattle/</link>
		<comments>http://blog.tquadrado.com/2007/ruby-footprint-tattle/#comments</comments>
		<pubDate>Sun, 28 Jan 2007 00:37:37 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>ruby</category>
	<category>shell</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=46</guid>
		<description><![CDATA[Tattle is a little reporting script used for collecting system information from the Ruby community. The purpose is to help implementors of Ruby and its libraries to better understand the install footprint of the community at large.
Project Admins:  Chad Fowler / Bruce Williams / Jim Weirich
me@system:~/workspace/ruby$ gem install -r tattle
 me@system:~/workspace/ruby$ tattle 

]]></description>
			<content:encoded><![CDATA[<p><a title="Tattle homepage" href="http://tattle.rubygarden.org/">Tattle</a> is a little reporting script used for collecting system information from the <a title="Ruby website" href="http://www.ruby-lang.org/en/">Ruby</a> community. The purpose is to help implementors of Ruby and its libraries to better understand the install footprint of the community at large.</p>
<p>Project Admins:  Chad Fowler / Bruce Williams / Jim Weirich</p>
<p><code>me@system:~/workspace/ruby$ gem install -r tattle<br />
</code> <code>me@system:~/workspace/ruby$ tattle </code>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/ruby-footprint-tattle/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>XMPP Standards Foundation</title>
		<link>http://blog.tquadrado.com/2007/xmpp-standards-foundation/</link>
		<comments>http://blog.tquadrado.com/2007/xmpp-standards-foundation/#comments</comments>
		<pubDate>Wed, 17 Jan 2007 04:41:12 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>jabber</category>
	<category>xmpp</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=45</guid>
		<description><![CDATA[Jabber Software Foundation Renamed to XMPP Standards Foundation
&#8220;The XMPP Standards Foundation (formerly the Jabber Software Foundation) is an independent, non-profit membership organization whose primary mission is to define open protocols for presence, instant messaging, and real-time communications on top of the IETF&#8217;s Extensible Messaging and Presence Protocol (XMPP). The XSF also provides information and infrastructure [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Jabber Software Foundation" href="http://www.jabber.org/">Jabber Software Foundation</a> Renamed to <a title="XSF" href="http://www.xmpp.org/xsf/">XMPP Standards Foundation</a><br />
&#8220;The XMPP Standards Foundation (formerly the Jabber Software Foundation) is an independent, non-profit membership organization whose primary <a title="XSFmission" href="http://www.xmpp.org/xsf/mission.shtml">mission</a> is to define open protocols for presence, instant messaging, and real-time communications on top of the IETF&#8217;s Extensible Messaging and Presence Protocol (XMPP). The XSF also provides information and infrastructure to the worldwide community of Jabber/XMPP developers, service providers, and end users.&#8221;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/xmpp-standards-foundation/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>muttrc builder</title>
		<link>http://blog.tquadrado.com/2007/muttrc-builder/</link>
		<comments>http://blog.tquadrado.com/2007/muttrc-builder/#comments</comments>
		<pubDate>Sun, 14 Jan 2007 06:59:19 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>mail</category>
	<category>linux</category>
	<category>perl</category>
	<category>mutt</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=44</guid>
		<description><![CDATA[Luke Ross built this Perl web app to help build your ~/.mutt/muttrc file.
Dropdown control helps select pages to fill out. The last page gives you the resource file ready for copy/paste.
&#8230;Mutt rocks!

]]></description>
			<content:encoded><![CDATA[<p>Luke Ross built this Perl <a target="_blank" title="muttrc builder" href="http://muttrcbuilder.org/">web app</a> to help build your ~/.mutt/muttrc file.<br />
Dropdown control helps select pages to fill out. The last page gives you the resource file ready for copy/paste.<br />
&#8230;<a title="Mutt mail reader" href="http://www.mutt.org/">Mutt</a> rocks!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/muttrc-builder/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple iPhone is awsome!</title>
		<link>http://blog.tquadrado.com/2007/apple-iphone-is-awsome/</link>
		<comments>http://blog.tquadrado.com/2007/apple-iphone-is-awsome/#comments</comments>
		<pubDate>Tue, 09 Jan 2007 18:20:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>apple</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=43</guid>
		<description><![CDATA[It really is awsome. I am viewing Steve Jobs keynote, and it really sums 3 or 4 gadgets. Incredible interface. OSX on a phone ? wow !!
Apple has done partnerships with amazing companies to get this device covering lot&#8217;s of digital life areas. Steve got Jerry &#8220;Yahoo&#8221; Yang, Dr. Eric &#8220;Google CEO&#8221; Schmidt, Stan &#8220;Cingular&#8221; [...]]]></description>
			<content:encoded><![CDATA[<p>It really is awsome. I am viewing Steve Jobs keynote, and it really sums 3 or 4 gadgets. Incredible interface. OSX on a phone ? wow !!</p>
<p>Apple has done partnerships with amazing companies to get this device covering lot&#8217;s of digital life areas. Steve got Jerry &#8220;Yahoo&#8221; Yang, Dr. Eric &#8220;Google CEO&#8221; Schmidt, Stan &#8220;Cingular&#8221; Singman, on stag just to do the iPhone presentation.</p>
<p>If Apple could get, by 2006 numbers, 1% share for cell phones, worldwide, it would be 10 million devices sold!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/apple-iphone-is-awsome/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>… back on Mutt</title>
		<link>http://blog.tquadrado.com/2007/back-on-mutt/</link>
		<comments>http://blog.tquadrado.com/2007/back-on-mutt/#comments</comments>
		<pubDate>Sun, 07 Jan 2007 23:59:30 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>mail</category>
	<category>linux</category>
	<category>ubuntu</category>
	<category>digital-life</category>
	<category>Epiphany</category>
	<category>Flickr</category>
	<category>mutt</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=42</guid>
		<description><![CDATA[&#8230;broken computer motherboard made be use an older laptop, Celeron 1Ghz 256MB RAM.
Linux with XFCE and Mutt to read IMAP mail accounts. Mutt is cool !!

]]></description>
			<content:encoded><![CDATA[<p>&#8230;broken computer motherboard made be use an older laptop, Celeron 1Ghz 256MB RAM.<br />
Linux with XFCE and Mutt to read IMAP mail accounts. <a target="_blank" title="Mutt on my Flickr" href="http://www.flickr.com/photos/keynote/349666316/">Mutt</a> is cool !!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2007/back-on-mutt/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>eBoy New FooBar poster</title>
		<link>http://blog.tquadrado.com/2006/eboy-new-foobar-poster/</link>
		<comments>http://blog.tquadrado.com/2006/eboy-new-foobar-poster/#comments</comments>
		<pubDate>Mon, 04 Dec 2006 21:05:40 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>culture</category>
	<category>digital-life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=41</guid>
		<description><![CDATA[&#8230; i think i&#8217;ll buy this: cool!
(via SimpleBits Dan)

]]></description>
			<content:encoded><![CDATA[<p>&#8230; i think i&#8217;ll buy <a title="eBoy FooBar poster" href="http://hello.eboy.com/eboy/wp-content/uploads/shop/EBY_FooBar_35t.png">this</a>: cool!</p>
<p>(via <a title="SimpleBits" href="http://www.simplebits.com/">SimpleBits</a> Dan)
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/eboy-new-foobar-poster/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>#32: Research-oriented development</title>
		<link>http://blog.tquadrado.com/2006/32-research-oriented-development/</link>
		<comments>http://blog.tquadrado.com/2006/32-research-oriented-development/#comments</comments>
		<pubDate>Mon, 04 Dec 2006 15:10:12 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>culture</category>
	<category>digital-life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=40</guid>
		<description><![CDATA[&#8220;Seymour Cray, the designer of the Cray supercomputers, says that  he does not attempt to exceed engineering limits in more than two areas  at a time because the risk of failure is too high (Gilb 1988). Many  software projects could learn a lesson from Cray. If your project  strains the limits [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Seymour Cray, the designer of the Cray supercomputers, says that  he does not attempt to exceed engineering limits in more than two areas  at a time because the risk of failure is too high (Gilb 1988). Many  software projects could learn a lesson from Cray. If your project  strains the limits of computer science by requiring the creation of new  algorithms or new computing practices, you&#8217;re not doing software  development; you&#8217;re doing software research. Software-development  schedules are reasonably predictable; software research schedules are  not even theoretically predictable.</p>
<p>If you have product goals that push the state of the art&#8211;algorithms,  speed, memory usage, and so on&#8211;you should expect great uncertainty in  your scheduling. If you&#8217;re pushing the state of the art and you have any  other weaknesses in your project&#8211;personnel shortages, personnel  weaknesses, vague requirements, unstable interfaces with outside  contractors&#8211;you can throw predictable scheduling out the window. If you  want to advance the state of the art, by all means, do it. But don&#8217;t  expect to do it rapidly!&#8221;</p>
<p>The author Steven C. McConnell&#8217;s <a title="Steven C.McConnell's book" href="http://www.stevemcconnell.com/rdenum.htm">book</a> points a fact that lot&#8217;s of  developers fall into, when a specific project does not care for true  innovation. I see this quest for innovation achievement sometimes a  consequence of need for extra motivation. A bit like development  gold-plating. Clients do not understand it, even more when that makes  failing schedules. Most of the times the subject is so tech, that the  developer just won&#8217;t waste time explaining it to the project manager or  the client. Worst when the client does see no visual or procedural  impact on the final result.</p>
<p>Google (to name a known one) has a nice approach, allowing developers to  dedicate attention to personal projects, on a percentage of work time a  week.</p>
<p>Back to #32, in fact in true innovation projects, scheduling, that  clients and managers like and need, can be hard to define and gather  consensus.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/32-research-oriented-development/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Sigur Rós &amp; Flickr API &amp; Yahoo! Developer Network</title>
		<link>http://blog.tquadrado.com/2006/sigur-ros-flickr-api-yahoo-developer-network/</link>
		<comments>http://blog.tquadrado.com/2006/sigur-ros-flickr-api-yahoo-developer-network/#comments</comments>
		<pubDate>Mon, 20 Nov 2006 04:06:56 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>culture</category>
	<category>browser</category>
	<category>digital-life</category>
	<category>music</category>
	<category>ruby</category>
	<category>api</category>
	<category>yahoo!</category>
	<category>Flickr</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=39</guid>
		<description><![CDATA[&#8230; i visit this page for months. Now i felt like blogging it. API&#8217;s are fine. And Sigur Rós still are a damn great band.

Yahoo! Developer Network is getting really awsome. And now with a Ruby Developer Center. Cool!

]]></description>
			<content:encoded><![CDATA[<p>&#8230; i visit this <a target="_blank" title="emichrysalis/sigurros/photostream" href="http://emichrysalis.co.uk/players/sigurros/photostream/">page</a> for months. Now i felt like blogging it. API&#8217;s are fine. And Sigur Rós still are a damn <a target="_blank" title="Sigur Ros website" href="http://www.sigur-ros.is/">great</a> <a target="_blank" title="Sigur Ros uk site" href="http://www.sigur-ros.co.uk/">band.<br />
</a></p>
<p>Yahoo! Developer <a target="_blank" title="Yanoo! Developer Network" href="http://developer.yahoo.com/">Network</a> is getting really awsome. And now with a Ruby Developer Center. Cool!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/sigur-ros-flickr-api-yahoo-developer-network/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Syntax matters… class / module</title>
		<link>http://blog.tquadrado.com/2006/syntax-matters-class-module/</link>
		<comments>http://blog.tquadrado.com/2006/syntax-matters-class-module/#comments</comments>
		<pubDate>Tue, 07 Nov 2006 01:32:32 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=38</guid>
		<description><![CDATA[In Ruby, modules are collections of methods and constants. They cannot generate instances. Classes may generate instances (objects), and have per-instance state (instance variables).
A class may inherit from another class, but not from a module.
A module may not inherit from anything.
Modules may be mixed-in to classes and other modules. The mixed-in module&#8217;s constants and methods [...]]]></description>
			<content:encoded><![CDATA[<p>In Ruby, modules are collections of methods and constants. They cannot generate instances. Classes may generate instances (objects), and have per-instance state (instance variables).</p>
<p>A class may inherit from another class, but not from a module.<br />
A module may not inherit from anything.</p>
<p>Modules may be mixed-in to classes and other modules. The mixed-in module&#8217;s constants and methods blend into that class, empower it.</p>
<p>Subclasses require inheritance. A module may be included in a class to mimic multiple inheritance (the mixin facility)</p>
<p><code>class Compare<br />
&nbsp;&nbsp;attr_accessor :a<br />
&nbsp;&nbsp;def initialize a<br />
&nbsp;&nbsp;&nbsp;&nbsp;@a = a<br />
&nbsp;&nbsp;end</code></p>
<p><code>&nbsp;&nbsp;def > arg<br />
&nbsp;&nbsp;&nbsp;&nbsp;puts "Yep!" if @a > arg<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p><code>test = Compare.new(3)</code><br />
<code>test > 1</code>&nbsp;&nbsp;# => Yep!<br />
<code>test.> 1</code>&nbsp;&nbsp;# => Yep!<br />
<code>test.>(1)</code>&nbsp;&nbsp;# => Yep!<br />
<code>puts "Yep, too!" if 2 > 1</code>&nbsp;&nbsp;# => Yep, too!<br />
<code>puts "Yep ?" if test < 1</code>&nbsp;&nbsp;# -> *<br />
<code>puts "Yep ?" if 1 > test</code>&nbsp;&nbsp;# -> **</p>
<p>* undefined method `<' for #<Mixin:0xb7d35858 @a=3> (NoMethodError)<br />
** comparison of Fixnum with Mixin failed (ArgumentError)</p>
<p>Just as expected!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/syntax-matters-class-module/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>One Laptop Per Child News link…</title>
		<link>http://blog.tquadrado.com/2006/one-laptop-per-child-news-link/</link>
		<comments>http://blog.tquadrado.com/2006/one-laptop-per-child-news-link/#comments</comments>
		<pubDate>Tue, 31 Oct 2006 02:07:47 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>abiword</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=37</guid>
		<description><![CDATA[&#8230; to my blog. I never post the links to my blog but this one by its meaning made me do it. My recent experience with AbiWord (that i use in Linux, besides OpenOffice) saving a 500MB Word backup file from a friend, that MS Word could not restore (not even OpenOffice), was worth to [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; to my blog. I never post the links to my blog but this one by its meaning made me do it. My recent <a href="http://blog.tquadrado.com/?p=20" title="Abiword saves the day">experience</a> with AbiWord (that i use in Linux, besides OpenOffice) saving a 500MB Word backup file from a friend, that MS Word could not restore (not even OpenOffice), was worth to blog about, since it was given as an example of what this nice app can do.<br />
It&#8217;s on an <a href="http://www.olpcnews.com/software/applications/abiword_xo_text_editor.html">olpcnews.com</a> article upon a discussion on weather Abiword or a fork will be shipped in the &#8220;One Laptop Per Child&#8221; machine. And these two are really nice projects wich i believe would integrate well together.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/one-laptop-per-child-news-link/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Zeldmans web1.0 vs web2.0</title>
		<link>http://blog.tquadrado.com/2006/zeldmans-web10-vs-web20/</link>
		<comments>http://blog.tquadrado.com/2006/zeldmans-web10-vs-web20/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 02:36:31 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=36</guid>
		<description><![CDATA[Zeldman.com posts a funny article about what Web 2.0 concept may mean in different days, like in the case of The Economist’s coverage of Google and YouTube.
&#8220;[&#8230;] Clearly &#8216;Web 2.0&#8242; means different things to different journalists on different days. Mostly it means nothing—except a bigger paycheck. [&#8230;]&#8221;
The fun part is the Web1.0 vs Web2.0 examples [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.zeldman.com/2006/10/17/web-20-thinking-game/" title="zeldman web 2.0 thinking game">Zeldman.com</a> posts a funny article about what Web 2.0 <em>concept</em> may mean in different days, like in the case of The Economist’s coverage of Google and YouTube.</p>
<p>&#8220;[&#8230;] Clearly &#8216;Web 2.0&#8242; means different things to different journalists on different days. Mostly it means nothing—except a bigger paycheck. [&#8230;]&#8221;</p>
<p>The fun part is the Web1.0 vs Web2.0 examples from him and from the&#8230; 513 comments:</p>
<p>Web 1.0: Joshua Davis on the cover of Art News.<br />
Web 2.0: 37signals on the cover of Forbes.</p>
<p>Web 1.0: Site under construction<br />
Web 2.0: Beta</p>
<p>Web 1.0: Webmail 2mb storage<br />
Web 2.0: Webmail 2gb storage</p>
<p>Web 1.0: You and I<br />
Web 2.0: Us</p>
<p>web 1.0: Published standards and browsers that don’t support them<br />
web 2.0: “De-facto” standards by browsers that don’t support 10-year old standards.</p>
<p>Web 1.0: Bring the web into our lives<br />
Web 2.0: Bring our lives into the web</p>
<p>&#8230;and someone posts this flame:</p>
<p>Web 1.0: Solaris<br />
Web 2.0: Linux</p>
<p><g>&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/zeldmans-web10-vs-web20/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Flock experience</title>
		<link>http://blog.tquadrado.com/2006/flock-experience/</link>
		<comments>http://blog.tquadrado.com/2006/flock-experience/#comments</comments>
		<pubDate>Mon, 30 Oct 2006 00:16:53 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>browser</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=35</guid>
		<description><![CDATA[ Flock is cool! I tried one of the first still hot versions (long time) and could antecipate a nice product. Now, only now i decided to give another try. You can really enjoy a different web experience with this tool. The keyword is: integration, services integration. Other than that, it&#8217;s a Mozilla::kind_of product (and that&#8217;s [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" title="flock" alt="flock" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/flock.png"> <a href="http://www.flock.com">Flock</a> is cool! I tried one of the first still hot versions (long time) and could antecipate a nice product. Now, only now i decided to give another try. You can really enjoy a different web experience with this tool. The keyword is: integration, services integration. Other than that, it&#8217;s a Mozilla::kind_of product (and that&#8217;s good). <br/><br />
The thing is, if you have a <a href="http://www.flickr.com/photos/keynote" title="flickr">Flickr</a> account, a <a href="http://blog.tquadrado.com" title="blog">blog</a>, a <a href="http://del.icio.us/pedro.mg" title="del.icio.us bookmarks">del.icio.us</a> account and read news feeds a lot, you&#8217;ll easily adapt to it.<br/><br />
On first run (or not), there&#8217;s the need to (easily) configure services access: log in info. That&#8217;s it. Posting a new blog entry is a matter of pressing <i><span>ctrl</span>-b</i>. Uploading photos opens a nice interface to specify photo location, tags and descriptions. When in a Flickr page, if you hover over a photo it detects it and allows to open the top photo stream from any account (friends, etc), and filter (or not) by <i>set</i>. That is very cool. <br/><br />
Importing opml lists, an on_the_fly task with rich visualisation options.<br/>
</p>
<p>Minor bugs to fix. Word spell blog tool miss-behavior upon word replace, crash on feed folder rename, &#8230;<br/>
</p>
<p>Ok, excitement <span>apart</span>, this is a good product with a cool development team. The thing is, i already miss my Epiphany (simplicity), <span>Seamonkey</span> (geek), and <span>Firefox</span> (extensions). But I&#8217;ll keep it because the Flickr thing is really sweet.<br/>
</p>
<p><!-- technorati tags begin --><br />
<p style="font-size:10px;text-align:right;">technorati tags:<a href="http://technorati.com/tag/flock" rel="tag">flock</a></p>
<p><!-- technorati tags end --><br />
<p style="text-align: right; font-size: 8px">Blogged with <a href="http://www.flock.com/blogged-with-flock" title="Flock" target="_new">Flock</a></p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/flock-experience/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Alan Odgaard Textmate screencasts</title>
		<link>http://blog.tquadrado.com/2006/33/</link>
		<comments>http://blog.tquadrado.com/2006/33/#comments</comments>
		<pubDate>Sat, 28 Oct 2006 15:19:02 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>apple</category>
	<category>code</category>
	<category>textmate</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=33</guid>
		<description><![CDATA[Alan Odgaard, creator of Textmate has done a very nice screencast about how to obfuscate email addresses in your web page. As always he shows other features while getting to the point. Notice the speed and productivity gains this tools can accomplish (having taks well defined in your head). Download it here.

]]></description>
			<content:encoded><![CDATA[<p>Alan Odgaard, creator of <a href="http://www.macromates.com">Textmate</a> has done a very nice <a href="http://macromates.com/screencasts">screencast</a> about how to obfuscate email addresses in your web page. As always he shows other features while getting to the point. Notice the speed and productivity gains this tools can accomplish (having taks well defined in your head). Download it <a href="http://macromates.com/screencast/html_text_transformations.mov">here</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/33/feed/</wfw:commentRSS>
<enclosure url="http://macromates.com/screencast/html_text_transformations.mov" length="13907105" type="video/quicktime" />
		</item>
		<item>
		<title>Syntax matters… &amp;args</title>
		<link>http://blog.tquadrado.com/2006/syntax-matters-args/</link>
		<comments>http://blog.tquadrado.com/2006/syntax-matters-args/#comments</comments>
		<pubDate>Sat, 28 Oct 2006 02:04:31 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=32</guid>
		<description><![CDATA[If the last formal argument of a method is preceeded with an ampersand, a block following the method call will be converted into a Proc object and assigned to the formal parameter.
If the last actual argument in a method invocation is a Proc object, you can preceed its name with an ampersand to convert it [...]]]></description>
			<content:encoded><![CDATA[<p>If the last formal argument of a method is preceeded with an ampersand, a <code>block</code> following the method call will be converted into a <code>Proc</code> object and assigned to the formal parameter.<br />
If the last actual argument in a method invocation is a <code>Proc</code> object, you can preceed its name with an ampersand to convert it into a <code>block</code>. The method may then use <code>yield</code> to call it.</p>
<p><code>square = proc { |i| i*i}</code></p>
<p><code>def method1(&#038;b)<br />
&nbsp;&nbsp;print b.call(9), '\n'<br />
end</code></p>
<p><code>def method2<br />
&nbsp;&nbsp;print yield(8), '\n'<br />
end<</code></p>
<p><code>method1 { |i| i+i }</code>    => 18<br />
<code>method2 { |i| i+i }</code>    => 16<br />
<code>method2 &#038;square</code>    => 64
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/syntax-matters-args/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Syntax matters… starred parameters</title>
		<link>http://blog.tquadrado.com/2006/syntax-matters-starred-parameters/</link>
		<comments>http://blog.tquadrado.com/2006/syntax-matters-starred-parameters/#comments</comments>
		<pubDate>Thu, 26 Oct 2006 01:01:45 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
	<category>code</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=31</guid>
		<description><![CDATA[def foo(prefix, *all)
&#160;&#160;for e in all
&#160;&#160;&#160;&#160;print prefix, e, ' '
&#160;&#160;end
end
foo('val=', 1, 2, 3)   => val=1 val=2 val=3
The use of * allowed all the arguments from 1 to be collected into an array, used as a formal parameter named *all and passed to the method. Without any change to the method we could call [...]]]></description>
			<content:encoded><![CDATA[<p><code>def foo(prefix, *all)<br />
&nbsp;&nbsp;for e in all<br />
&nbsp;&nbsp;&nbsp;&nbsp;print prefix, e, ' '<br />
&nbsp;&nbsp;end<br />
end</code></p>
<p><code>foo('val=', 1, 2, 3)</code>   => val=1 val=2 val=3</p>
<p>The use of * allowed all the arguments from <code>1</code> to be collected into an array, used as a formal parameter named <code>*all</code> and passed to the method. Without any change to the method we could call <code>foo('val=', 7, 12)</code> or <code>foo('val=', 6, 4, 2, 7, 5, 43)</code>, this is, with an arbitrary number of arguments.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/syntax-matters-starred-parameters/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Syntax matters…</title>
		<link>http://blog.tquadrado.com/2006/syntax-matters/</link>
		<comments>http://blog.tquadrado.com/2006/syntax-matters/#comments</comments>
		<pubDate>Tue, 10 Oct 2006 22:44:08 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=29</guid>
		<description><![CDATA[C:
for (int i=0; i &#8220;3&#8243;
3.to_f => 3.0
3.is_a?(Integer) => true
3 == 3.0 => true
3.eql?3.0 => false
3.eql?"3".to_i => true
Have a pdf cheatsheet.

]]></description>
			<content:encoded><![CDATA[<p>C:<br />
<code>for (int i=0; i<3; i++)  {<br />
&nbsp;&nbsp;do_something()<br />
}</code></p>
<p>Ruby:<br />
<code>3.times do<br />
&nbsp;&nbsp;do_something<br />
end</code></p>
<p>This 3 in Ruby is an object. It belongs to the Ruby Class Integer and you can apply several methods like +, *, /, -, class, to_s, to_f,  is_a?, &#8230;<br />
One must make sure to understand the difference between classes and objects. Simplifying, an object is a unit of data. A class is what kind of data it is. For example, 3 and 5 are different numbers. They are not the same object. But they are both integers, so they belong to the same class.</p>
<p><code>3.to_s</code> => &#8220;3&#8243;<br />
<code>3.to_f</code> => 3.0<br />
<code>3.is_a?(Integer)</code> => true<br />
<code>3 == 3.0</code> => true<br />
<code>3.eql?3.0</code> => false<br />
<code>3.eql?"3".to_i</code> => true</p>
<p>Have a pdf <a title="ruby cheatsheet" href="http://ruby.cenophobie.com/RubyCheat.pdf">cheatsheet</a>.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/syntax-matters/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Second Life NMC symposium</title>
		<link>http://blog.tquadrado.com/2006/second-life-nmc-symposium/</link>
		<comments>http://blog.tquadrado.com/2006/second-life-nmc-symposium/#comments</comments>
		<pubDate>Tue, 10 Oct 2006 18:17:45 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>digital-life</category>
	<category>second life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=25</guid>
		<description><![CDATA[This post could be gazillion lines long to describe this world. Better try by yourself. I have meetings, attend symposiums, see expos., have fun, meet peolple, ride my hoovercraft, sail on boats, fly&#8230;
This week, New Media Consortium* will present a symposiym at their island, Learning. Live videos, wikis, chat, etc. They have a fantastic place [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="SL logo" title="SL logo" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/sl.png" />This post could be gazillion lines long to describe this world. Better try by yourself. I have meetings, attend symposiums, see expos., have fun, meet peolple, ride my hoovercraft, sail on boats, fly&#8230;</p>
<p>This week, <a title="nmc homepage" href="http://www.nmc.org">New Media Consortium</a>* will present a symposiym at their island, Learning. Live videos, wikis, chat, etc. They have a fantastic place in <a title="Second Life website" href="http://secondlife.com/">SL</a>.<br />
Technologically SL is awsome. About 1500 (growing) computers to manage land and &#8220;sims&#8221;. If you walk to a new area, your &#8220;state&#8221; is passed to a new machine that deals that land area and all the simulations happening there. Nice to run SL from a terminal to see you steping to another machine IP. The Linux client is very good and totatlly stable.<br />
The LSL scripting language is to be changed to Mono.</p>
<p>I have some photos of mine <strong><a title="flickr of me..." href="http://www.flickr.com/photos/keynote">here</a></strong>.</p>
<p>If you step by, say hi: I belong to NMC Members group and the Rubyists group. We have Ruby meetings (where you actually learn, see my flickr photos) 1st and 3rd Wednesdays. I&#8217;ll take you on a boat sail.</p>
<p>* NMC is an international 501(c)3 not-for-profit consortium of nearly                      200 leading colleges, universities, museums, corporations,                      and other learning-focused organizations dedicated to the                      exploration and use of new media and new technologies
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/second-life-nmc-symposium/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>CPAN growth</title>
		<link>http://blog.tquadrado.com/2006/cpan-grouth/</link>
		<comments>http://blog.tquadrado.com/2006/cpan-grouth/#comments</comments>
		<pubDate>Mon, 02 Oct 2006 16:39:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>perl</category>
	<category>cpan</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=23</guid>
		<description><![CDATA[&#8220;Perl 5 enabled the growth of something amazing; the CPAN. This distributed code repository has grown from a few dozen contributions to over ten thousand reusable components in millions of lines of code, written by several thousand contributors, in ten years. Some people even claim that 90% of any Perl program exists, prewritten, on the [...]]]></description>
			<content:encoded><![CDATA[<p>&#8220;Perl 5 enabled the growth of something amazing; the CPAN. This distributed code repository has grown from a few dozen contributions to over ten thousand reusable components in millions of lines of code, written by several thousand contributors, in ten years. Some people even claim that 90% of any Perl program exists, prewritten, on the CPAN&#8221; <a title="cpan on ONLamp" href="http://www.oreillynet.com/onlamp/blog/2006/07/a_ridiculously_large_software.html?CMP=OTC-6YE827253101&#038;ATT=A+Ridiculously+Large+Software+Quality+Problem">&#8230; (by chromatic)<br />
</a></p>
<p>I wonder will Ruby Gems get such an increase of code donations ?
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/cpan-grouth/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>shell addiction…</title>
		<link>http://blog.tquadrado.com/2006/shell-addiction/</link>
		<comments>http://blog.tquadrado.com/2006/shell-addiction/#comments</comments>
		<pubDate>Sat, 30 Sep 2006 06:30:09 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>shell</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=22</guid>
		<description><![CDATA[pedro@dapper:~$ history&#124;awk '{print $2}'&#124;awk 'BEGIN {FS="&#124;"} {print $1}'&#124;sort&#124;uniq -c&#124;sort -rn&#124;head -10
based on Gunnar Wolf geeky script. See your shell trends&#8230;

]]></description>
			<content:encoded><![CDATA[<p><code>pedro@dapper:~$ history|awk '{print $2}'|awk 'BEGIN {FS="|"} {print $1}'|sort|uniq -c|sort -rn|head -10</code></p>
<p>based on Gunnar Wolf geeky script. See your shell trends&#8230;
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/shell-addiction/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Randal ‘Perl’ Schwartz, Guido ‘Python’ van Rossum,… on FLOSS</title>
		<link>http://blog.tquadrado.com/2006/randal-perl-schwartz-guido-python-van-rossum-on-floss/</link>
		<comments>http://blog.tquadrado.com/2006/randal-perl-schwartz-guido-python-van-rossum-on-floss/#comments</comments>
		<pubDate>Thu, 28 Sep 2006 03:54:23 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>linux</category>
	<category>digital-life</category>
	<category>ruby</category>
	<category>perl</category>
	<category>python</category>
	<category>php</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=21</guid>
		<description><![CDATA[Chris DiBona, open source program manager at Google, maintains a Netcast at TWiT.TV with Leo Laporte called FLOSS Weekly (Floss as Free Libre Open Source Software). Here&#8217;s a list of some of the most interesting ones:
#13: Eben Moglen on GPL 3.0
 #12: PHP Creator Rasmus Lerdorf, on origins of PHP, challenges, &#8230;
 #11: Guido van [...]]]></description>
			<content:encoded><![CDATA[<p><a title="Chris DiBona" href="http://egofood.blogspot.com/">Chris DiBona</a>, open source program manager at Google, maintains a Netcast at TWiT.TV with Leo Laporte called FLOSS Weekly (Floss as Free Libre Open Source Software). Here&#8217;s a list of some of the most interesting ones:</p>
<p><a title="floss 13" href="http://www.twit.tv/floss13">#13</a>: Eben Moglen on GPL 3.0<br />
<a title="floss 12" href="http://www.twit.tv/floss12"> #12</a>: PHP Creator Rasmus Lerdorf, on origins of PHP, challenges, &#8230;<br />
<a title="floss 11" href="http://www.twit.tv/floss11"> #11</a>: Guido van Rossum, creator of Python, on language design, &#8230;<br />
<a title="floss 10" href="http://www.twit.tv/floss10"> #10</a>: Jeff &#8216;Hemos&#8217; Bates, Slashdot founder, on site&#8217;s new design, facing Digg,&#8230;<br />
<a title="floss 9" href="http://www.twit.tv/floss9"> #9</a>: Randal L. Schwartz on Perl 6, author and developer,&#8230;<br />
<a title="floss 8" href="http://www.twit.tv/floss8"> #8</a>: Ryan Gordon on how programmers work with a Linux dev. and SDL guru&#8230;<br />
<a title="floss 7" href="http://www.twit.tv/floss7"> #7</a>: Wikipedia&#8217;s Jimmy Wales founder talks about online communities,&#8230;<br />
<a title="floss 6" href="http://www.twit.tv/floss6"> #6</a>: Larry Augustin, VA Linux founder, sourceforge,<br />
<a title="floss 5" href="http://www.twit.tv/floss5"> #5</a>: Miguel de Icaza on Gnome, Ximian, Mono Project, Novell,&#8230;<br />
<a title="floss 2" href="http://www.twit.tv/floss2">#2</a>: Ben Goodger,  lead engineer for Firefox.<br />
<a title="floss 4" href="http://www.twit.tv/floss4">#4</a>: Chromatic, tech. editor at O&#8217;Reilly and Perl dev., Brad &#8220;Live Journal&#8221; Fitzpatrick</p>
<p>So Chris, i&#8217;ll be waiting for Yukihiro “<a title="matz on Ruby" href="http://www.ruby-lang.org/en/about/">matz</a>” Matsumoto, <a title="Ruby" href="http://www.ruby-lang.org"> Ruby</a> language creator netcast.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/randal-perl-schwartz-guido-python-van-rossum-on-floss/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Abiword saves th’day</title>
		<link>http://blog.tquadrado.com/2006/abiword-saves-thday/</link>
		<comments>http://blog.tquadrado.com/2006/abiword-saves-thday/#comments</comments>
		<pubDate>Sun, 24 Sep 2006 05:59:40 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>linux</category>
	<category>gnome</category>
	<category>abiword</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=20</guid>
		<description><![CDATA[a call from a friend asking for some help on a Word doc recovery. That&#8217;s how it started. On a 300km train travel, working important docs on a laptop makes the journey happen in a twist. But when adding non redimensioned images to it makes Word crash and take away the file, well, things go [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" title="AbiWord" alt="AbiWord" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/abiword.png" />a call from a friend asking for some help on a Word doc recovery. That&#8217;s how it started. On a 300km train travel, working important docs on a laptop makes the journey happen in a twist. But when adding non redimensioned images to it makes Word crash and take away the file, well, things go ugly. I received a 530MB sized *.wbk file. MS Word could not open it. After a while, everything crashed. I tried Open Office. Well, a strange error, and no results. I came back to Linux. 15 minutes in Windows is just too much damn time. Back in Linux, tried once again with Open Office gettin&#8217; no results. Then, before hacking into the file i remembered i frequently use <a title="gnome office" href="http://www.gnome.org/gnome-office/">Abiword</a>. I just like it. Very simple and light. I opened AbiWord, followed by a terminal window with a:</p>
<p><code>$ top -d2</code></p>
<p>running, and waited. Abi process started consuming processing time, memory, OS and computer resources. Who doesn&#8217;t like to watch geeky processes running ? Ok, after some 2 or 3 minutes that was it. Abiword recovered the file, plus the images. Sweet. Little Abiword is the best! By the way, <a title="Gnome" href="http://www.gnome.org/">Gnome 2.16</a> is out. Give it a look on new features. I am a happy Gnumeric, Abiword, Gimp (hope <a title="pedro figueiredo" href="http://www.livejournal.com/users/pfig">pfig</a>&#8217;s not reading this one), Evolution, Gnome user. I like Gnome integration. OpenOffice is of course for heavy duty stuff, but today, well, today Abi made my day.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/abiword-saves-thday/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>The Google Culture</title>
		<link>http://blog.tquadrado.com/2006/the-google-culture/</link>
		<comments>http://blog.tquadrado.com/2006/the-google-culture/#comments</comments>
		<pubDate>Mon, 18 Sep 2006 02:54:25 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>google</category>
	<category>linux</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=19</guid>
		<description><![CDATA[This is an interesting page on Google Corporate Information website. Fun to see the equipment brief description:
&#8220;Equipment - Most Googlers have high powered Linux OS workstations on their desktops. In Google&#8217;s earliest days, desks were wooden doors mounted on two sawhorses. Some of these are still in use within the engineering group.&#8221;

]]></description>
			<content:encoded><![CDATA[<p>This is an interesting page on <a title="google" href="http://www.google.com/corporate/culture.html">Google Corporate Information</a> website. Fun to see the equipment brief description:</p>
<p><font size="-1"><strong>&#8220;Equipment</strong> - Most Googlers have high powered Linux OS workstations on their desktops. In Google&#8217;s earliest days, desks were wooden doors mounted on two sawhorses. Some of these are still in use within the engineering group.&#8221;</font>
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/the-google-culture/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Mac Mini model changes</title>
		<link>http://blog.tquadrado.com/2006/mac-mini-model-changes/</link>
		<comments>http://blog.tquadrado.com/2006/mac-mini-model-changes/#comments</comments>
		<pubDate>Sun, 17 Sep 2006 00:30:26 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>apple</category>
	<category>mac mini</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=18</guid>
		<description><![CDATA[The Mac Mini&#8217;s were also altered on this recent new product presentations. So there is no longer a Mac Mini Core Solo 1.5Ghz. The new line-up is:

Mac Mini Core Duo 1.66 Ghz / 512MB RAM / 60GB HD / Combo
Mac Mini Core Duo 1.83GHz / 512MB RAM / 80GB HD / SuperDrive

The good news is [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" title="mac mini" alt="mac mini" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/macmini_xs.gif" />The Mac Mini&#8217;s were also altered on this recent new product presentations. So there is no longer a Mac Mini Core Solo 1.5Ghz. The new line-up is:</p>
<ul>
<li>Mac Mini Core Duo 1.66 Ghz / 512MB RAM / 60GB HD / Combo</li>
<li>Mac Mini Core Duo 1.83GHz / 512MB RAM / 80GB HD / SuperDrive</li>
</ul>
<p>The good news is that prices were not changed. The new entry-level 1.66 Ghz Core Duo maintains the price of the ancient 1.5 Ghz Core Solo.</p>
<p>Will we see Core 2 Duo chips next spring ? I&#8217;d for sure prefer better harddrives or even a dedicated memory video card since &#8220;memory available to Mac OS X may vary depending on graphics needs. Minimum graphics memory usage is 80MB, resulting in 432MB of system memory available&#8221; for a 512MB original set.</p>
<p>So, fuelling it with RAM, this is an excelent <a title="Macromates Textmate" href="http://www.macromates.com/">Textmate</a> machine to do some coding, i&#8217;d say.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/mac-mini-model-changes/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Leica M8</title>
		<link>http://blog.tquadrado.com/2006/leica-m8/</link>
		<comments>http://blog.tquadrado.com/2006/leica-m8/#comments</comments>
		<pubDate>Fri, 15 Sep 2006 23:55:52 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>leica</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=17</guid>
		<description><![CDATA[The LEICA M8 is the first classic digital camera “Made in Germany”.
Kodak KAF-10500 sensor: &#8220;This was developed specifically for the M8 with offset microlenses to help reduce the effect of vignetting due to  severely off-perpendicular light towards the corners of the frame (especially when using wide angle lenses)&#8221;

solid metal housing manufactured from a magnesium [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="Leica M8" title="Leica M8" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/leica_m8.png" />The <a title="Leica M8" href="http://www.leica-camera.us/photography/m_system/m8/">LEICA M8</a> is the first classic digital camera “Made in Germany”.</p>
<p>Kodak KAF-10500 <a title="dpreview.com Kodak sensor info" href="http://www.dpreview.com/news/0609/06091501kodakccdleicam8.asp">sensor</a>: &#8220;This was developed specifically for the <a title="dpreview M8" href="http://www.dpreview.com/news/0609/06091412leicam8previewed.asp">M8</a> with offset microlenses to help reduce the effect of vignetting due to <span class="justify"> severely off-perpendicula</span>r light towards the corners of the frame (especially when using wide angle lenses)&#8221;</p>
<ul>
<li>solid metal housing manufactured from a magnesium alloy</li>
<li>Adobe DNG technology has been chosen as the future-proof raw data format as it guarantees safe archiving for the long term</li>
<li>full compatibility with virtually all M lenses</li>
<li>maximum sensitivity settings of up to ISO 2500</li>
<li>electronic metal-blade slotted shutter for exposure times of up to 1/8000</li>
<li>deliberately dispenses with multifunction keys and nested menus. All the main settings are made in clearly structured menus on the bright 2.5&#8243; display. For detailed quality control &#8220;on location&#8221;, RGB histogram and clipping warning can be used on even the finest details of the subject</li>
<li>modern metal-blade slotted shutter for fast flash synchronization times down to 1/250 second</li>
<li>the Leica viewfinder system allows the photographer to see his subject in the lighting conditions as they are, even outside the frame</li>
<li>the metering basis for the Leica M is the range finder, whose  performance is always the same, irrespective of the lens (not like SLR&#8217;s) and allowing considerably smaller lenses than an equivalent SLRs.</li>
<li>€4200 including German VAT makes it about £2950 in the UK including VAT, and about US$4500 + tax&#8230; is being unofficially spread&#8230; pro gear&#8230;</li>
</ul>
<p>I imagine an Olympus OM-1D, or a Pentax SpotMaticD. Would be great, as for a Nikon FM3D.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/leica-m8/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple iTunes Coverflow</title>
		<link>http://blog.tquadrado.com/2006/apple-itunes-coverflow/</link>
		<comments>http://blog.tquadrado.com/2006/apple-itunes-coverflow/#comments</comments>
		<pubDate>Fri, 15 Sep 2006 19:53:46 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>apple</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=16</guid>
		<description><![CDATA[The new Apple iTunes version 7 is really sweet. Easier and with a very nice interface. The Coverflow tech comes from here:
&#8220;We are pleased to announce that all CoverFlow technology and intellectual property was recently sold to Apple. It has been incorporated into the latest version of iTunes. Please visit www.apple.com/itunes&#8220;.
Does anybody know the numbers [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" title="iTunes 7" alt="iTunes 7" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/iTunes7.png" />The new Apple iTunes version 7 is really sweet. Easier and with a very nice interface. The Coverflow tech comes from <a title="Coverflow" href="http://www.steelskies.com/coverflow/">here</a>:</p>
<p>&#8220;We are pleased to announce that all CoverFlow technology and intellectual property was recently sold to Apple. It has been incorporated into the latest version of iTunes. Please visit <a href="http://www.apple.com/itunes">www.apple.com/itunes</a>&#8220;.</p>
<p>Does anybody know the numbers ? :]
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/apple-itunes-coverflow/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>“We know about Internet Explorer”</title>
		<link>http://blog.tquadrado.com/2006/we-know-about-internet-explorer/</link>
		<comments>http://blog.tquadrado.com/2006/we-know-about-internet-explorer/#comments</comments>
		<pubDate>Wed, 13 Sep 2006 03:04:51 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>browser</category>
	<category>standards</category>
	<category>Firefox</category>
	<category>Epiphany</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=15</guid>
		<description><![CDATA[&#8220;… we just don’t like it much.&#8221; It&#8217;s a small post, but very meaningfull by Frederico (Fred) Oliveira from Webreakstuff. I totally subscrive it. It&#8217;s about how Goplan does not work well on Internet Explorer 6 because it (IE6) does not respect standards. I wrote severall times about this. Now, Fred, even IE7 is not [...]]]></description>
			<content:encoded><![CDATA[<p><span class="hl"><img align="left" title="webreakstuff logo" alt="webreakstuff logo" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/webreakstuff.png" />&#8220;<a title="Goplan blog" href="http://blog.goplan.org/2006/09/12/internet-explorer-support/">… we just don’t like it much.</a>&#8221; </span>It&#8217;s a small post, but very meaningfull by Frederico (Fred) Oliveira from <a title="Webreakstuff" href="http://webreakstuff.com/">Webreakstuff</a>. I totally subscrive it. It&#8217;s about how Goplan does not work well on Internet Explorer 6 because it (IE6) does not respect standards. I wrote severall times about this. Now, Fred, even IE7 is not going to be very <a title="w3c" href="http://www.w3.org/">standard</a> respectfull. But at least it can render .PNG (<a title="web standards" href="http://www.webstandards.org/">web standard</a>) images. As for positioning and dimensions&#8230; let&#8217;s wait and see. I know you know this and i do have the same perfect answer: <a title="get Firefox" target="_blank" href="http://getfirefox.com/">get firefox</a>. or any other much better standard compliant browser. As an example i use <a title="Gnome web-site" href="http://www.gnome.org/">Gnome</a> <a title="Epiphany browser" href="http://www.gnome.org/projects/epiphany/">Epiphany</a> as much as Firefox. Goplan renders great under Gecko engine.</p>
<p>By the way, thanks for the Goplan invite. Great app. And great dev team: i reported 3 items and in less than 24H two where corrected. Keep the good work. Now, when will the &#8220;business model&#8221; go public ?
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/we-know-about-internet-explorer/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Webreakstuff Goplan</title>
		<link>http://blog.tquadrado.com/2006/webreakstuff-goplan/</link>
		<comments>http://blog.tquadrado.com/2006/webreakstuff-goplan/#comments</comments>
		<pubDate>Mon, 11 Sep 2006 13:00:15 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>37signals</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=14</guid>
		<description><![CDATA[The Webreakstuff guys are releasing a &#8220;beta&#8221; version of Goplan, online project management and collaboration tool, in a controlled manner, by invitation. A social scalling thing, in wich each invited gets 5 invites to give away. The theory underneath this social scalling thing is: &#8220;i know these fine people. Since i like them, it&#8217;s probable [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" title="Goplan logo" alt="Goplan logo" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/goplan_logo.png" />The <a title="Webreakstuff" href="http://www.webreakstuff.com">Webreakstuff</a> guys are releasing a &#8220;beta&#8221; version of <a title="Webreakstuff Goplan" target="_blank" href="http://webreakstuff.com/work/goplan/">Goplan,</a> online project management and collaboration tool, in a controlled manner, by invitation. A social scalling thing, in wich each invited gets 5 invites to give away. The theory underneath this social scalling thing is: &#8220;i know these fine people. Since i like them, it&#8217;s probable they know some more people that i&#8217;d like too. So i expect them to give the extra invitations to them&#8221;. The &#8220;web&#8221; tends to expand in a fairly &#8220;controlled&#8221; scheme. It&#8217;s cool. Google uses it a lot.</p>
<p>As for Goplan, seems to be a kind of <a title="37 signals" target="_blank" href="http://www.37signals.com/">37signals</a> guys <a title="Basecamp" target="_blank" href="http://www.basecamphq.com/">Basecamp</a> product. Hope to test it  soon.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/webreakstuff-goplan/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Ruby’s new site</title>
		<link>http://blog.tquadrado.com/2006/rubys-new-site/</link>
		<comments>http://blog.tquadrado.com/2006/rubys-new-site/#comments</comments>
		<pubDate>Sun, 10 Sep 2006 02:51:09 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>ruby</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=13</guid>
		<description><![CDATA[It&#8217;s about to be presented the Ruby language new site. It is of course made with Ruby and powered by Radiant CMS an open source content management system designed for small teams. Ruby is a interpreted scripting language for quick and easy object-oriented programming. Ruby is a complete, full, pure object oriented language: OOL. This [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="ruby icon" title="ruby icon" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/ruby.gif" />It&#8217;s about to be presented the <a title="Ruby new site" href="http://new.ruby-lang.org">Ruby language</a> new site. It is of course made with Ruby and powered by <a title="Radiant site" href="http://radiantcms.org/">Radiant CMS</a> an open source content management system designed for small teams. Ruby is a interpreted scripting language for quick and easy object-oriented programming. Ruby is a complete, full, pure object oriented language: OOL. This means all data in Ruby is an object, in the sense of Smalltalk: no exceptions. Example: In Ruby, the number 1 is an instance of class Fixnum. Ruby features blocks in its syntax (code surrounded by &#8216;{&#8217; &#8230; &#8216;}&#8217; or &#8216;do&#8217; &#8230; &#8216;end&#8217;). These blocks can be passed to methods, or converted into closures. Ruby features a true mark-and-sweep garbage collector. It works with all Ruby objects. You don&#8217;t have to care about maintaining reference counts in extension libraries. Ruby needs no variable declarations. It uses simple naming conventions to denote the scope of variables. Examples: simple &#8216;var&#8217; = local variable, &#8216;@var&#8217; = instance variable, &#8216;$var&#8217; = global variable. So it is also not necessary to use a tiresome &#8217;self.&#8217; prepended to every instance member. The creator of Ruby Yukihiro Matsumoto, a.k.a Matz does a good job.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/rubys-new-site/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Black Mac Mini ?</title>
		<link>http://blog.tquadrado.com/2006/black-mac-mini/</link>
		<comments>http://blog.tquadrado.com/2006/black-mac-mini/#comments</comments>
		<pubDate>Sun, 10 Sep 2006 00:47:31 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>apple</category>
	<category>mac mini</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=12</guid>
		<description><![CDATA[As for the black 24&#8243; iMac, here comes another exercise for black Mac Mini&#8217;s. I think i really prefer the white ones. More pictures at flickr
 

]]></description>
			<content:encoded><![CDATA[<p>As for the black 24&#8243; iMac, here comes another exercise for black Mac Mini&#8217;s. I think i really prefer the white ones. More pictures at <a href="http://www.flickr.com/photos/keynote">flickr</a></p>
<p><a href="http://www.flickr.com/photos/keynote" /> <img align="middle" alt="black mac-mini" title="black mac-mini" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/mac_minib.png" />
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/black-mac-mini/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Apple 24″ Black iMac ?</title>
		<link>http://blog.tquadrado.com/2006/apple-24-black-imac/</link>
		<comments>http://blog.tquadrado.com/2006/apple-24-black-imac/#comments</comments>
		<pubDate>Fri, 08 Sep 2006 03:58:33 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>apple</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=11</guid>
		<description><![CDATA[&#8230; would not it be nice to see it in black ? Well, the Macbook is, so why can&#8217;t iMac be ?         Because Steve says so. And it&#8217;s fine for me. The man is in (good) charge. This was a fast edited image to see the look [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230; would not it be nice to see it in black ? Well, the Macbook is, so why can&#8217;t iMac be ?        <img align="middle" alt="black imac" title="black imac" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/imac_lineup.jpg" /> Because Steve says so. And it&#8217;s fine for me. The man is in (good) charge. This was a fast edited image to see the look in the line up.</p>
<p>Would you pay another $500 for 1GB extra RAM, 128MB extra Video, black paint,  and Leopard upgrade, all in the package ?</p>
<p>Anyway, 2.16GHz Intel Core 2 Duo rocks fast for sure. 1.5x faster is a good number.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/apple-24-black-imac/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>twit.tv</title>
		<link>http://blog.tquadrado.com/2006/twittv/</link>
		<comments>http://blog.tquadrado.com/2006/twittv/#comments</comments>
		<pubDate>Tue, 05 Sep 2006 04:47:02 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>culture</category>
	<category>digital-life</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=10</guid>
		<description><![CDATA[Leo Laporte is a california tech radio guy. He is podcasting for &#8220;ages&#8221; and after maintaining about 10 podcasts weekly, he got it right: aggregated them all on a station. TWiT stands for This Week in Tech. I listen to mostly 3 podcasts. FLOSS Weekly is about free open source tech, conducted by Leo and [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="twit" title="twit" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/twit.gif" /><a target="_blank" title="Leo Laporte" href="http://leoville.com/">Leo Laporte</a> is a california tech radio guy. He is podcasting for &#8220;ages&#8221; and after maintaining about 10 podcasts weekly, he got it right: aggregated them all on a station. TWiT stands for <a title="twit" target="_blank" href="http://twit.tv">This Week in Tech</a>. I listen to mostly 3 podcasts. FLOSS Weekly is about free open source tech, conducted by Leo and <a target="_blank" title="DiBona blog" href="http://egofood.blogspot.com/">Chris DiBona</a>, Google Open Source responsible. TWiT, weekly podcast with <a title="Dvorak blog" href="http://dvorak.org/blog/">John C. Dvorak</a>, <a target="_blank" title="Robert Heron" href="http://dl.tv">Robert Heron</a>, <a target="_blank" title="DL TV" href="http://dl.tv">Patrick Norton</a>, <a target="_blank" title="Rev3" href="http://revision3.com">David Prager</a>, <a target="_blank" title="bit-tech" href="http://bit-tech.net">Wil Harris</a>, and a guest. Security Now is a really good tech podcast. <a target="_blank" title="grc" href="http://grc.com">Steve Gibson</a> means security. Inside the Net is a web2.0 oriented podcast. <a target="_blank" title="Amber" href="http://www.ambermac.typepad.com">Amber</a> does a good job on tech.web.content.usability.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/twittv/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Pandora - the music genome project</title>
		<link>http://blog.tquadrado.com/2006/pandora-the-music-genome-project/</link>
		<comments>http://blog.tquadrado.com/2006/pandora-the-music-genome-project/#comments</comments>
		<pubDate>Tue, 05 Sep 2006 04:12:08 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>web</category>
	<category>browser</category>
	<category>podcast</category>
	<category>digital-life</category>
	<category>music</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=9</guid>
		<description><![CDATA[I still get amazed the job these folks are doing. Pandora is a bandwith monster as a streaming radio service. Basically, you indicate the system a music or artist and it generates an internet radio station based on that preference. You can fine tune the radio by indication. It runs on a browser, on a [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="pandora" title="pandora" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/logo_pandora.gif" />I still get amazed the job these folks are doing. <a title="pandora music" target="_blank" href="http://www.pandora.com">Pandora</a> is a bandwith monster as a streaming radio service. Basically, you indicate the system a music or artist and it generates an internet radio station based on that preference. You can fine tune the radio by indication. It runs on a browser, on a java app. Slick, simple, nice. 3 months ago they inserted a top ads banner wich took a lot of it&#8217;s visual interest. You can advance musics for a limitid # of times (10). Then you must let it flow.</p>
<p>Each music is categorized using more than 40 parameters. It&#8217;s done one by one by specialized (meaning with musical studies) musicians/professionals. There is an &#8220;<a title="inside the net" target="_blank" href="http://www.twit.tv/itn6">inside the net</a>&#8221; podcast conducted by Leo Laporte and Amber MacArthur talking to Tim Westergren of the   Music Genome Project. Listen to it. Apparently he departed to a trip accross america to find unknown bands, records, tapes. A kind of musical road trip.<br />
You can create your own stations very simply. Then if necessary add music/artists for the system to adapt to your preferences.</p>
<p>Have some hours of good music, legally. I do on my 9 stations. Great product.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/pandora-the-music-genome-project/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Cultural Podcasting</title>
		<link>http://blog.tquadrado.com/2006/cultural-podcasting/</link>
		<comments>http://blog.tquadrado.com/2006/cultural-podcasting/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 20:51:48 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>podcast</category>
	<category>digital-life</category>
	<category>ogg</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=8</guid>
		<description><![CDATA[The way is: go ahead. If you feel you have content in your mind ready to be made available to others, in a way it can benefit those, start podcasting. Having a pleasant tone of voice is a plus. I visited Paris last year, Rome the year before. Rome is a truly historical city. History [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="podcast" title="podcast" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/podcast-logo1.gif" />The way is: go ahead. If you feel you have content in your mind ready to be made available to others, in a way it can benefit those, start podcasting. Having a pleasant tone of voice is a plus. I visited Paris last year, Rome the year before. Rome is a truly historical city. History is permanently around the corner. I see Rome as a big wonderful museum. Visiting Rome in April or May is an excellent idea because of the good weather and not very crowded places. A good guide book is essential. Study your trip before going. Learn some historic facts. Learn how to understand what you see. You will be embraced by culture. You will be walking on centuries of history. Each single step is an adventure into knowledge.</p>
<p>This is where i see podcasts and iPods as a major tech and social advance to the cultural tourist. There are some places where you can hire a gadget with headphones to listen descriptive content about that place.</p>
<p>What if you had a website where you could download descriptive podcasts about independent places ? Let&#8217;s say you are interested in archaeological aspects of the Colosseum. There are several experts on this matter. Could you benefit from their knowledge ? What if you could make those visits guided by them ? There are paintings worth hours of description. Buildings too. Landscapes too.</p>
<p>I see this as a future market being included in travel packages: - here are your tickets and your podcast files or links.<br />
Tools ? Just your iPod or flash memory audio listener.</p>
<p>Other areas of interest are emerging: political usage, educational, advising, literature, etc.<br />
Podcasters can even create level oriented informational casts. Language used for professionals is somehow different to the one used with non experts.</p>
<p>I hope to see this as a natural service really soon. It will be great. I imagine myself visiting the Vatican again but instead of walking and reading, walking and listening. Both approaches are interesting. They can be used together, because it makes sense.</p>
<p>Digital life is finally here. And it is here to stay. PDA&#8217;s with Wi-Fi, iPods, small laptops are now part of the travel gear. Hopefully batteries continue to deliver the increasing power users need.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/cultural-podcasting/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Life in a File: Anagram</title>
		<link>http://blog.tquadrado.com/2006/life-in-a-file-anagram/</link>
		<comments>http://blog.tquadrado.com/2006/life-in-a-file-anagram/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 20:49:31 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>life</category>
	<category>file</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=7</guid>
		<description><![CDATA[Society is evolving faster than ever, reinventing itself, creating new approaches to our part in the global picture, using a time frame we could not possibly think possible and viable decades ago.
That&#8217;s when this anagram becomes true. Our life is being merged and compressed into single files. Our intellect, image, relation to the world is [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="server" title="server" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/cray.png" />Society is evolving faster than ever, reinventing itself, creating new approaches to our part in the global picture, using a time frame we could not possibly think possible and viable decades ago.<br />
That&#8217;s when this anagram becomes true. Our life is being merged and compressed into single files. Our intellect, image, relation to the world is getting out of our physical domain. We are spreading it across computer data centers all over the world. When we send an electronic mail message we can&#8217;t seem to imagine the journey it accomplishes. That&#8217;s when artificial beings become responsible by the delivery of our feelings, our desires, affections, wishes and goals. We trust machines to know the path. And they don&#8217;t let us down most of the times. We trust them because with no human interference the message gets its destiny. But if not, we are advised against it. Yesterday i got an automatic email response. The email could not be delivered, but the system will keep trying it:</p>
<blockquote><p>Warning: message still undelivered after 4 hours</p></blockquote>
<blockquote><p>Will keep trying until message is 5 days old</p></blockquote>
<p>This behaviour would not be acceptable if done by humans under a normal mail delivery. Not with that persistence. We could not ask the mail man to sleep by that person door waiting for him to get home. But this technological implementation is a wish for that to happen. And it gained trust for important content to be delivered this way, by single or corporate entities. The national Post-Office CEO said their business is a dieing one. The graphical curve of normal mail delivery is declining in perspective. And it is declining fast. They will have to reinvent themselves or will become obsolete.<br />
The number of people putting their lives in digital format increases every second. Documents, spreadsheets, images, sounds, videos became an extension of us. There are people that work every single day trying to maintain safe those extensions. Keeping them safe and secure in data storage servers is their goals. Network infrastructure administrators keep their eyes on flat screens monitoring digital traffic. Billions of dollars are spent and earned to maintain this flow of intellectual property running. Distances are huge. The time we expect data to reach us is getting shorter in a month basis. The fascination of speed improvements last weeks. Soon after, the content being spread gets more complex. Simple text files became complex formatted text. Single low resolution images or low bit rate sound files, are not acceptable. High resolution images, sounds and videos are becoming standard. Will the universe quantum physics have to be upgraded ? Universe 2.0 ?<br />
After all, we don&#8217;t want to wait too much to get our life back in our hands. Not so long ago, the FBI or the CIA had files. File was a strong word. It usually meant lack of privacy. Knowing someone in detail without knowing her. Now&#8230; everybody has files. We exchange files. We upload our curriculum vitae to websites for public analyses. We upload personal photos to public photo websites. We do podcasts. We are exposed. I pretend not to talk about safety or lack of it. We expose what we produce professionally. Based on that we build images of thousands of miles persons. Physically, emotionally, intellectual. We mentally build people. Then we relate to them using Internet and that allows to fine tune the image, but always in perspective. So, are we getting unreal most of the time ?
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/life-in-a-file-anagram/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Yet another day…</title>
		<link>http://blog.tquadrado.com/2006/yet-another-day/</link>
		<comments>http://blog.tquadrado.com/2006/yet-another-day/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 20:46:24 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>linux</category>
	<category>os</category>
	<category>ubuntu</category>
	<category>6.06 LTS</category>
	<category>gnome</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=6</guid>
		<description><![CDATA[I am now awake for almost 24 hours. Most of the time was spent with my beloved daughter and this laptop. I spent a good portion of my working day updating to a new release of Ubuntu Linux. This one is still in &#8220;Beta&#8221; phase, but i could not wait more. So I&#8217;m typing this [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="ubuntu" title="ubuntu" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/ubuntu.jpg" />I am now awake for almost 24 hours. Most of the time was spent with my beloved daughter and this laptop. I spent a good portion of my working day updating to a new release of Ubuntu Linux. This one is still in &#8220;Beta&#8221; phase, but i could not wait more. So I&#8217;m typing this over Ubuntu Linux 6.04 Dapper Drake. The installation of it was really simple and fast. Three or four clicks include operating system install, productivity suite (office) install, web, network, graphics and pro-tools install. Fast and easy. Everything very well packed into a single cdrom, ready to run, updated later from the web. Now, my fine tuning consumes lots of resources. Several hours trying to understand how USB works. My Internet connection is a wireless EVDO one, and a kernel module has to be patched for the speed to be better. Well, they say 1,4Mbps&#8230; maybe in the next one or two years&#8230;I must say this is really a good GNU/Linux distribution. Mark Shuttleworth, the guru behind Ubuntu, proposed for the official release to be out 6 weeks later than planned. Well, i see it as a responsible act. In this fast world, where every delay means waste of money, having the sense to propose such, means a real good posture in software development and respect for users. Ubuntu Linux has a 6 month new release agenda. I believe this will be the first time, if the delay goes forward, it happens. But Mark wants Dapper Drake to be a real good release. So, has seen in the development forums for this version, everyone is writing: so, be it! I feel really good to be a part of this community.</p>
<p>GNU/Linux is an excellent operating system kernel, heart. There are excellent GUI&#8217;s (graphical user interface) sitting on it. I am a GNOME user. Simple, effective, humanized, well assembled, very well integrated. I will install XFCE too. Even more simpler, faster and very nice to work with. Not so complete like GNOME, mas has its space and personality. Ubuntu will launch a special release, based on this GUI. So, in my case, i went towards Ubuntu some years ago, but for my wonder, Ubuntu is coming to me, to meet my preferences, my needs, my expectations. As a Fedora Core user too, i see Ubuntu as something with great value and being extremely well taken care of. Slowly it will gain lot&#8217;s of respect in world operating system use statistics.</p>
<p>Firewall with IPTables up. Anti-virus&#8230; none. The best anti-virus is good sense.</p>
<p>I considered trying Sun&#8217;s Solaris, but I&#8217;d be getting lots of problems in this laptop. Better do it on the HP desktop. Will be a long day too. And that will be nice&#8230; As i wrote in a previous post, web life in tech is fun. Let&#8217;s make it meaning full too.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/yet-another-day/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Wonders of Opera browser</title>
		<link>http://blog.tquadrado.com/2006/wonders-of-opera-browser/</link>
		<comments>http://blog.tquadrado.com/2006/wonders-of-opera-browser/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 20:42:45 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>browser</category>
	<category>mail</category>
	<category>opera</category>
	<category>rss</category>
	<category>nntp</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=5</guid>
		<description><![CDATA[As an ancient Opera (http://www.opera.com) user who stopped using it some years ago, i managed to rediscover the wonders of it. it is really an excellent product. I would easily classify it as a superior product to the Mozila suite. when getting to the download area of the site, your operating system is detected and [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="opera" title="opera" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/opera.gif" />As an ancient Opera (http://www.opera.com) user who stopped using it some years ago, i managed to rediscover the wonders of it. it is really an excellent product. I would easily classify it as a superior product to the Mozila suite. when getting to the download area of the site, your operating system is detected and the unique question is the version/distribuiton of it. My linux box has Fedora Core 4. I selected it &#8220;et voilá&#8221;! 4.1MiB of RPM download. Double-click installation and its part you you. I immediately created an email account. Very easy. the email starts to download after inserting the server, login, name and email info. When getting email you have a progress bar, interesting when you receive lots of email. First wonder: it detects mailing lists for you; separates them in a special Mailing-list area; with a single click you have a filter for those messages. Very good! When visiting a RSS enabled &#8220;site&#8221; you are presented with a small RSS icon. Just a click and you are subscribed to recive the feeds on a special area: Newsfeeds area! Wonder 2! Attachments are separated too. Labeling function. Very good icon representation for special things. I&#8217;ll check it for spam behaviour. Attractive design: Wonder 3. Skin enabled for your taste. Very good Bookmarks/Mail/Comtacts/Notes/Transfers/History/Browsing integration. And the Links area let&#8217;s you see all the available links on a page. Might be handy. Speed: very good page rendering speed. Very good rendering quality. Spelling function. The main menu is very reduced font, which is well thought. You get all the maximum available space area to see content.  In short, give them a try! I&#8217;ll stop my Firefox/Epiphany browsing for a while. Even Evolution mail will be read in Opera for this while. Very good product. I recommend it!
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/wonders-of-opera-browser/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Google’s Gmail chat log</title>
		<link>http://blog.tquadrado.com/2006/googles-gmail-chat-log/</link>
		<comments>http://blog.tquadrado.com/2006/googles-gmail-chat-log/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 15:32:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>google</category>
	<category>gmail</category>
	<category>jabber</category>
	<category>xmpp</category>
	<category>log</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=4</guid>
		<description><![CDATA[Well, as a Linux/Gaim(IM)/Jabber and Gmail user i verified today an odd thing. When opening my Gmail account, i saw in the new &#8220;chat&#8221; area my private Gaim conversations archived, since Feb.8.
A few hours ago, when logging again into Gmail I was asked for a chat option to save or not my conversations. Well, what [...]]]></description>
			<content:encoded><![CDATA[<p><img align="left" alt="talk_logo.gif" title="talk_logo.gif" src="http://blog.tquadrado.com/wp-content/uploads/2006/09/talk_logo.gif" />Well, as a Linux/Gaim(IM)/Jabber and Gmail user i verified today an odd thing. When opening my Gmail account, i saw in the new &#8220;chat&#8221; area my private Gaim conversations archived, since Feb.8.<br />
A few hours ago, when logging again into Gmail I was asked for a chat option to save or not my conversations. Well, what does this mean ? It seems obvious my conversations have been being saved for days, without my knowledge. Even not using Gmail to do those conversations. I was using an external app, Gaim, using Jabber XMPP protocol. So, i contacted those persons who i chatted with and they found it odd too. Odd to say the least&#8230;<br />
So this means logging has started prior to service presentation and save/not_save option. But i insist, those conversations where not taken using Gmail, but and independant IM (Instant Messaging) application, GAIM under Jabber (XMPP) protocol. And they where logged and saved.<br />
The thing is, if one wants to gain trust, must act in a &#8220;non odd way&#8221;.<br />
Trust is not easy to obtain and terribly easy to loose. Most Gmail users wont mind, but some of them will. Reminds me&#8230; &#8220;we shall do no evil&#8221;.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/googles-gmail-chat-log/feed/</wfw:commentRSS>
		</item>
		<item>
		<title>Web life in tech</title>
		<link>http://blog.tquadrado.com/2006/web-life-in-tech/</link>
		<comments>http://blog.tquadrado.com/2006/web-life-in-tech/#comments</comments>
		<pubDate>Mon, 04 Sep 2006 15:30:42 +0000</pubDate>
		<dc:creator>pedro mg</dc:creator>
		
	<category>tech</category>
	<category>web</category>
	<category>culture</category>
		<guid isPermaLink="false">http://blog.tquadrado.com/?p=3</guid>
		<description><![CDATA[People&#8217;s life integration with the web is evolving in an unprecedented way. With the appearance of social web services to manage photos, ideas, news, thoughts, etc, a vast number of people are dedicating more and more of their life to public it on the net. Even companies are seeing these services as a way to [...]]]></description>
			<content:encoded><![CDATA[<p>People&#8217;s life integration with the web is evolving in an unprecedented way. With the appearance of social web services to manage photos, ideas, news, thoughts, etc, a vast number of people are dedicating more and more of their life to public it on the net. Even companies are seeing these services as a way to bring them down to a level that the costumer can see the real persons, as humans, inside the company and not only the brand. To take an example, Yahoo&#8217;s Flickr (www.flickr.com) is being used by companies to make available life inside, to everybody. Can even serve as an appeal for the &#8220;come work with us, it&#8217;s great!&#8221;.<br />
So this may not have a huge impact right now, but for the next years (who can talk about generations nowadays?) people will start culturally thinking different. If i am living in Porto, Portugal, e can have a much better idea of how it is to work in L.A., USA, by browsing these companies, reading their blogs, by seeing their day-to-day. Globalization ? Absolutely! In a pure sense. Approach ? Absolutely! The risk of cultural melting is not quite new. Let&#8217;s not forget society is evolving for more then internet explode time of 15-20 years. The internet is not the only cause for cultural alienation. Culture evolves, new cultures appear, some other disappear. Good or bad, now there are digital ways to preserve some of those. Building pyramids was proved to be another very good way. The key to preserve good things alive is based on simple tasks using good sense. Humanity has a natural gift to forget rapidly.<br />
Sometimes history is too complex and ancient to be kept alive. So let&#8217;s make a good use of these emerging technologies to teach each others beautiful things.
</p>
]]></content:encoded>
			<wfw:commentRSS>http://blog.tquadrado.com/2006/web-life-in-tech/feed/</wfw:commentRSS>
		</item>
	</channel>
</rss>

