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

<channel>
	<title>Altura Labs &#187; php</title>
	<atom:link href="http://www.alturalabs.com/blog/tag/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.alturalabs.com/blog</link>
	<description></description>
	<lastBuildDate>Tue, 24 Jan 2012 11:37:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Dietro le quinte del sito di Altura Labs</title>
		<link>http://www.alturalabs.com/blog/2009/06/16/dietro-le-quinte-del-sito-di-altura-labs/</link>
		<comments>http://www.alturalabs.com/blog/2009/06/16/dietro-le-quinte-del-sito-di-altura-labs/#comments</comments>
		<pubDate>Tue, 16 Jun 2009 09:35:41 +0000</pubDate>
		<dc:creator>Simone Carletti</dc:creator>
				<category><![CDATA[Altura Labs]]></category>
		<category><![CDATA[Web Development]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[mod_rails]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.alturalabs.com/blog/?p=763</guid>
		<description><![CDATA[Curiosità tecniche sul dietro le quinte del nostro sito e del nostro blog: dettagli su Ruby, Rails, database e server.]]></description>
			<content:encoded><![CDATA[<p>Dalla scorsa settimana è disponibile online il nuovo sito di Altura Labs. Come Claudia ha avuto modo di sottolineare nel <a title="Online il nuovo sito di Altura Labs «  Altura Labs" href="http://www.alturalabs.com/blog/2009/06/05/online-il-nuovo-sito-di-altura-labs/">post di presentazione</a>, il nuovo sito dà ampio spazio ai <a title="I nostri progetti - Altura Labs" href="http://www.alturalabs.com/projects">progetti made in Altura Labs</a> così come alle tecnologie utilizzate. E proprio di tecnologie vorrei parlare in questo mio primo post, rivelando qualche <strong>curiosità tecnica sul dietro le quinte</strong> del nostro sito e del nostro blog.</p>
<h2>Two is meglio che One</h2>
<p>Così come il Maxibon, anche il progetto Alturalabs è composto da due anime: <strong>il sito</strong> ed <strong>il blog</strong>. A voi la scelta su quale corrisponda alla granella e quale al biscotto.</p>
<p>Il sito di Altura Labs è completamente scritto in <strong>Ruby</strong>, basato sul <strong>framework Ruby on Rails</strong>. Al contrario, il blog gira su piattaforma <strong>WordPress</strong> e <strong>PHP 5</strong>. Ebbene sì, se non lo sapevate, è possibile far convivere in modo del tutto trasparente anche su uno stesso server.</p>
<p>Ma vediamo qualche dettaglio in più.</p>
<h2>Sito di Altura Labs</h2>
<p><img class="aligncenter size-medium wp-image-765" title="alturalabs-site" src="http://www.alturalabs.com/blog/wp-content/uploads/2009/06/alturalabs-site-400x259.png" alt="alturalabs-site" width="400" height="259" /></p>
<h3>Linguaggio</h3>
<p>Come anticipato, il sito di Altura Labs si basa si basa sul framework <strong>Ruby on Rails</strong>, versione 2.3.2. L&#8217;ambiente di <strong>production</strong> utilizza una versione speciale di <a title="Welcome — Ruby Enterprise Edition" href="http://www.rubyenterpriseedition.com/">Ruby, Ruby Enterprise Edition</a>, per sfruttare a pieno le potenzialità del linguaggio in combinazione con <a title="Overview — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)" href="http://www.modrails.com/">mod_rails</a>.</p>
<p>Personalmente sono molto curioso di provare <strong>Ruby 1.9.1</strong>. Le performance sono eccellenti e la nuova versione si sta comportando decisamente molto bene. Purtroppo, il processo di integrazione di una versione di un linguaggio così profondamente modificata in uno stack di produzione non è attività immediata.</p>
<p>Alturalabs utilizza alcune <strong>GEM</strong> liberamente disponibili. Il nostro <code>environment.rb</code> contiene più o meno le seguenti istruzioni</p>
<pre>config.gem "chrislloyd-gravtastic", :lib =&gt; "gravtastic", :source =&gt; 'http://gems.github.com'
config.gem "lukeredpath-simpleconfig", :lib =&gt; "simple_config", :source =&gt; 'http://gems.github.com'
config.gem "mislav-will_paginate", :lib =&gt; "will_paginate", :source =&gt; 'http://gems.github.com', :version =&gt; '&gt;= 2.3.0'
config.gem "RedCloth", :lib =&gt; 'redcloth', :version =&gt; '&gt;= 4.0'
config.gem "thoughtbot-paperclip", :lib =&gt; "paperclip", :source =&gt; 'http://gems.github.com', :version =&gt; '&gt;= 2.2'
config.gem "thoughtbot-shoulda", :lib =&gt; "shoulda", :source =&gt; 'http://gems.github.com'
config.gem "weppos-helperful", :lib =&gt; "helperful", :source =&gt; 'http://gems.github.com', :version =&gt; '~&gt; 0.3.1'
config.gem "weppos-tabs_on_rails", :lib =&gt; "tabs_on_rails", :source =&gt; 'http://gems.github.com', :version =&gt; '~&gt; 0.3'</pre>
<p>Per i meno tecnici, ecco una breve panoramica.</p>
<ul>
<li><a href="http://github.com/chrislloyd/gravtastic/">chrislloyd-gravtastic</a> è una delle GEM ufficiali l&#8217;integrazione su Rails di <a href="http://gravatar.com/">Gravatar</a>, il servizio che usiamo per mostrarvi le nostre (belle?) facce sia sul blog sia sul sito</li>
<li><a href="http://github.com/lukeredpath/simpleconfig/">lukeredpath-simpleconfig</a> è oramai uno standard de-facto di ogni nostro progetto. Consente la gestione di un sistema di configurazioni globali in modo flessibile, elegante, per environment e con una speciale DSL per la definizione delle variabili.</li>
<li><a href="http://github.com/mislav/will_paginate/">mislav-will_paginate</a> non ha bisogno di presentazioni dato che è lo standard de-facto per la paginazione dei record per ActiveRecord.</li>
<li><a title="RedCloth - Textile for Ruby" href="http://redcloth.org/">RedCloth</a> è un parser Textile per Ruby.</li>
<li><a href="http://github.com/thoughtbot/paperclip">thoughtbot-paperclip</a> è un plugin per l&#8217;upload in Rails. Normalmente la preferiamo ad altre alternative altrettanto note come attachment_fu.</li>
<li><a href="http://github.com/thoughtbot/shoulda">thoughtbot-shoulda</a> è un plugin per semplificare la creazione di unit, functional ed integrational test in Ruby e Rails.</li>
<li><a href="http://github.com/weppos/helperful">weppos-helperful</a> è un plugin Rails che contiene una lista di helper più o meno utili che utilizziamo in molti progetti Rails.</li>
<li><a href="http://github.com/weppos/tabs_on_rails">weppos-tabs_on_rails</a> è un plugin Rails per la creazione gestione di tab e menu di navigazione in Rails.</li>
</ul>
<p>Come avrete senz&#8217;altro notato, diverse di queste GEM sono in realtà plugin per Ruby on Rails. Infatti, normalmente preferiamo utilizzare le GEM quando disponibili. La cartella plugin contiene ugualmente un paio di prodotti interessanti:</p>
<ul>
<li><a href="http://ennerchi.com/projects/jrails">jrails</a> per <a href="http://www.simonecarletti.it/blog/2009/05/rails-e-jquery/">integrare jQuery in Rails</a> come alternativa a Prototype.</li>
<li><a href="http://github.com/rpheath/google_ajax_libraries_api/">Google AJAX Libraries API</a> per sfruttare la versione di jQuery ospitata da Google, traendo così vantaggio dal loro sistema di Content Delivery Network.</li>
</ul>
<h3>Database</h3>
<p>Il database di riferimento per questo e per la maggior parte dei nostri progetti è <strong>PostgreSQL</strong>. Tutte le nostre applicazioni Rails utilizzano PostgreSQL in production ed in staging, mentre normalmente preferiamo <strong>SQLite 3</strong> in fase di test e sviluppo.</p>
<p>PostgreSQL è uno degli ingredienti base delle nostre ricette. Da quest&#8217;anno, Altura Labs è anche <a title="Partner pubblicitari e sponsor del PGDay 2008" href="http://www.pgday.org/it/sponsor">sponsor ufficiale del PGDay</a>. Credo che ci sarà senz&#8217;altro occasione di approfondire l&#8217;argomento in futuro su questo blog.</p>
<h2>Blog di Altura Labs</h2>
<p><img class="aligncenter size-medium wp-image-766" title="alturalabs-blog" src="http://www.alturalabs.com/blog/wp-content/uploads/2009/06/alturalabs-blog-400x186.png" alt="alturalabs-blog" width="400" height="186" /></p>
<p>Quanto si è trattato di scegliere quale piattaforma adottare per il blog di Altura Labs non l&#8217;abbiamo tirata troppo per le lunghe. Il blog precedente era ospitato su piattaforma <strong>WordPress</strong> così la scelta è stata abbastanza naturale.</p>
<p>Altra piattaforma altro database. Purtroppo WordPress supporta solo <strong>MySQL</strong> dunque anche in questo caso la scelta è stata obbligata.</p>
<h2>Frontend e Backend Server</h2>
<p>La struttura di frontend e backend dei nostri progetti è mediamente complessa e, da sola, merita un post dedicato.</p>
<p>Senza entrare troppo nei dettagli, sia il sito di Altura sia il blog utilizzano Apache come web server. Nel primo caso si tratta di un&#8217;<strong>installazione multi-thread</strong> con <a title="Overview — Phusion Passenger™ (a.k.a. mod_rails / mod_rack)" href="http://www.modrails.com/">mod_rails</a>, nel secondo di un&#8217;<strong>installazione classica per PHP 5</strong>. Come avrete capito, le due applicazioni girano su due <strong>server differenti.</strong></p>
<p>A gestire le danze ed il traffico ci pensa un frontend server che si occupa delle <strong>operazioni di proxy</strong>. In questo caso il compito è egregiamente assolto dal russo <a title="nginx" href="http://nginx.net/">Nginx</a>.</p>
<h2>E i test?</h2>
<p>Non potevo concludere l&#8217;articolo senza un accenno all&#8217;argomento <strong>test</strong>. Credo che il team di sviluppo non me l&#8217;avrebbe mai perdonato, considerato quanto io sia particolarmente stressante sull&#8217;argomento (ebbene sì, lo ammetto!).</p>
<p>Il sito di Altura è un progetto relativamente semplice ma, nella sua semplicità, comporta comunque un certo grado di complessità. Così come ogni nostro progetto, anche questo comprende unit, functional ed integrational test.</p>
<p><a href="http://www.alturalabs.com/blog/wp-content/uploads/2009/06/code-coverage.png"><img class="aligncenter size-medium wp-image-764" title="Code Coverage" src="http://www.alturalabs.com/blog/wp-content/uploads/2009/06/code-coverage-400x337.png" alt="Code Coverage" width="400" height="337" /></a></p>
<p>Il <strong>code coverage</strong> di questo progetto è del <strong>73.4%</strong>. Tipicamente ad abbassare la media sono le funzionalità di caching che, in Rails, sono particolarmente complesse e macchinose da verificare in modo automatico.</p>
<p>Numeri a parte, i test sono un aspetto fondamentale del nostro processo di sviluppo, supporto fondamentale alle periodiche attività di refactoring e manutenzione del codice.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.alturalabs.com/blog/2009/06/16/dietro-le-quinte-del-sito-di-altura-labs/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

