<?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>malev&#039;s blog</title>
	<atom:link href="http://blog.malev.com.ar/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.malev.com.ar</link>
	<description>fighting against the ruby and the python</description>
	<lastBuildDate>Wed, 09 Nov 2011 19:54:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<item>
		<title>MongoDB con Mongoid</title>
		<link>http://blog.malev.com.ar/2011/11/09/mongodb-con-mongoid/</link>
		<comments>http://blog.malev.com.ar/2011/11/09/mongodb-con-mongoid/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 19:54:32 +0000</pubDate>
		<dc:creator>malev</dc:creator>
				<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[mongodb]]></category>
		<category><![CDATA[mongoid]]></category>

		<guid isPermaLink="false">http://blog.malev.com.ar/?p=949</guid>
		<description><![CDATA[Estoy en la RubyConfArg, y hace unos minutos pasaron las LightTalks, en las que por suerte pude hablar sobre Mongoid, un ODM para MongoDB que cumple muy bien con su filosofía propuesta: The philosophy of Mongoid is to provide a familiar API to Ruby developers who have been using Active Record or Data Mapper, while [...]]]></description>
			<content:encoded><![CDATA[<p>Estoy en la <a href="http://rubyconfargentina.org/">RubyConfArg</a>, y hace unos minutos pasaron las LightTalks, en las que por suerte pude hablar sobre Mongoid, un ODM para MongoDB que cumple muy bien con su filosofía propuesta: </p>
<blockquote><p>The philosophy of Mongoid is to provide a familiar API to Ruby developers who have been using Active Record or Data Mapper, while leveraging the power of MongoDB&#8217;s schemaless and performant document-based design, dynamic queries, and atomic modifier operations.</p></blockquote>
<p>Aquí les dejo la presentación, cuando tenga fotos las subo.</p>
<div style="width:425px" id="__ss_10091274"> <strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/malev/mongodb-mongoid" title="Mongodb mongoid" target="_blank">Mongodb mongoid</a></strong> <iframe src="http://www.slideshare.net/slideshow/embed_code/10091274" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>
<div style="padding:5px 0 12px"> View more <a href="http://www.slideshare.net/" target="_blank">presentations</a> from <a href="http://www.slideshare.net/malev" target="_blank">malev</a> </div>
</p></div>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=MongoDB+con+Mongoid+http%3A%2F%2Fblog.malev.com.ar%2F%3Fp%3D949" title="Post to Twitter"><img class="nothumb" src="http://blog.malev.com.ar/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=MongoDB+con+Mongoid+http%3A%2F%2Fblog.malev.com.ar%2F%3Fp%3D949" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://blog.malev.com.ar/2011/11/09/mongodb-con-mongoid/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>gemsets are the awesomeness</title>
		<link>http://blog.malev.com.ar/2011/11/09/gemsets-are-the-awesomeness/</link>
		<comments>http://blog.malev.com.ar/2011/11/09/gemsets-are-the-awesomeness/#comments</comments>
		<pubDate>Wed, 09 Nov 2011 13:25:11 +0000</pubDate>
		<dc:creator>malev</dc:creator>
				<category><![CDATA[gems]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[gemset]]></category>
		<category><![CDATA[rvm]]></category>

		<guid isPermaLink="false">http://blog.malev.com.ar/?p=939</guid>
		<description><![CDATA[Cada vez que tenía que usar un proyecto con python, empezaba creando un ambiente particular con virtualenv. En ruby, en principio no podía hacer eso. Después conocí RVM y trabajaba con varias versiones de Ruby en mi PC, sobre todo para trabajar algunos proyectos legacy. Sin embargo, tenía un popurrí de gemas instaladas que ya [...]]]></description>
			<content:encoded><![CDATA[<p>Cada vez que tenía que usar un proyecto con python, empezaba creando un ambiente particular con virtualenv. En ruby, en principio no podía hacer eso. Después conocí RVM y trabajaba con varias versiones de Ruby en mi PC, sobre todo para trabajar algunos proyectos legacy. Sin embargo, tenía un popurrí de gemas instaladas que ya empezaban a conflictuarse entre sí. Apareció bundler y su magia de <strong>bundle exec</strong> para solucionar muchos problemas (nota: en futuras versiones de bundler esto ya no va a hacer falta). En fin, la ensalada de gemas seguí ahí, hasta que por fin conocí <strong>gemset</strong>.<br />
<a href="http://blog.malev.com.ar/wp-content/uploads/2011/11/logo.png" rel="lightbox[939]"><img src="http://blog.malev.com.ar/wp-content/uploads/2011/11/logo.png" alt="" title="rvm" width="200" height="200" class="aligncenter size-full wp-image-941" /></a><br />
Mi workflow es más o menos así:</p>
<blockquote><p>
➜  ~  cd code<br />
➜  code  mkdir proyecto_nuevo<br />
➜  code  cd proyecto_nuevo<br />
➜  proyecto_nuevo  rvm use malev@proyecto_nuevo &#8211;rvmrc &#8211;create<br />
Using /home/malev/.rvm/gems/ruby-1.9.2-p290 with gemset proyecto_nuevo<br />
WARN: .rvmrc is not empty, moving aside to preserve.<br />
➜  proyecto_nuevo  rvm gemset list</p>
<p>gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)<br />
   global<br />
   mobilenews<br />
=> proyecto_nuevo<br />
   webui</p>
<p>➜  proyecto_nuevo
</p></blockquote>
<p>Es decir, voy a mi directorio donde guardo mis proyectos / experimentos, creo un directorio, creo un nuevo gemset y listo! Todas las <strong>gems</strong> que instale en ese <strong>gemset</strong> van a estar aisladas del resto.<br />
Lo interesante es que gracias a la magia de <strong>rvm</strong>, cada vez que entre en el directorio de mi proyecto nuevo, <strong>rvm</strong> me va a cambiar al <strong>gemset</strong> ahí usado:</p>
<blockquote><p>➜  code  pwd<br />
/home/malev/code<br />
➜  code  rvm gemset list</p>
<p>gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)<br />
=> global<br />
   mobilenews<br />
   proyecto_nuevo<br />
   webui</p>
<p>➜  code  cd proyecto_nuevo<br />
=========================================================<br />
= NOTICE                                                                     =<br />
=========================================================<br />
= RVM has encountered a new or modified .rvmrc file in the current directory =<br />
= This is a shell script and therefore may contain any shell commands.       =<br />
=                                                                            =<br />
= Examine the contents of this file carefully to be sure the contents are    =<br />
= safe before trusting it! ( Choose v[iew] below to view the contents )      =<br />
=========================================================<br />
Do you wish to trust this .rvmrc file? (/home/malev/code/proyecto_nuevo/.rvmrc)<br />
y[es], n[o], v[iew], c[ancel]> yes<br />
➜  proyecto_nuevo  rvm gemset list</p>
<p>gemsets for ruby-1.9.2-p290 (found in /home/malev/.rvm/gems/ruby-1.9.2-p290)<br />
   global<br />
   mobilenews<br />
=> proyecto_nuevo<br />
   webui</p>
<p>➜  proyecto_nuevo
</p></blockquote>
<p><em>Si no tienes rvm instalado, corred e instaladlo por favor!<br />
</em></p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=gemsets+are+the+awesomeness+http%3A%2F%2Ftinyurl.com%2F7o3763e" title="Post to Twitter"><img class="nothumb" src="http://blog.malev.com.ar/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=gemsets+are+the+awesomeness+http%3A%2F%2Ftinyurl.com%2F7o3763e" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://blog.malev.com.ar/2011/11/09/gemsets-are-the-awesomeness/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sobre callbacks en Rails</title>
		<link>http://blog.malev.com.ar/2011/10/27/debates-sobre-callbacks-en-rails/</link>
		<comments>http://blog.malev.com.ar/2011/10/27/debates-sobre-callbacks-en-rails/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 16:06:30 +0000</pubDate>
		<dc:creator>malev</dc:creator>
				<category><![CDATA[ActiveRecord]]></category>
		<category><![CDATA[buenas practicas]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[active_record]]></category>
		<category><![CDATA[after_create]]></category>
		<category><![CDATA[callbacks]]></category>

		<guid isPermaLink="false">http://blog.malev.com.ar/?p=896</guid>
		<description><![CDATA[¿Qué son los callbacks? Son métodos que son llamados en determinados momentos del ciclo de vida de un objeto. Esto nos permite escribir código que se va a ejecutar cuando nuestros objetos (ActiveRecord u otros) son creados, grabados, actualizados, borrados, validados o cargados desde la base de datos (created, saved, updated, deleted, validated, or loaded). [...]]]></description>
			<content:encoded><![CDATA[<p>¿Qué son los <strong>callbacks</strong>? Son métodos que son llamados en determinados momentos del ciclo de vida de un objeto. Esto nos permite escribir código que se va a ejecutar cuando nuestros <strong>objetos</strong> (<strong>ActiveRecord</strong> u otros) son creados, grabados, actualizados, borrados, validados o cargados desde la base de datos (created, saved, updated, deleted, validated, or loaded).<br />
Supongamos que nosotros queremos que inmediatamente después de haber creado un usuario, se cree automáticamente una cuenta para ese usuario. Podríamos hacer esto (por favor no lo intenten en sus casas, puede ser peligroso):</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> UsersController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
  <span style="color:#9966CC; font-weight:bold;">def</span> create
    <span style="color:#0066ff; font-weight:bold;">@user</span> = User.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:user</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#0066ff; font-weight:bold;">@account</span> = Account.<span style="color:#9900CC;">create</span> <span style="color:#ff3333; font-weight:bold;">:user</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0066ff; font-weight:bold;">@user</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Sin embargo, estaríamos contaminando nuestro <strong>controller</strong> con lógica de modelo. Una primera aproximación, podría ser, usar un callback: after_create. Se ejecuta siempre que se crea un objeto y se lo guarda en la base por primera vez:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  <span style="color:#008000; font-style:italic;">#...</span>
  <span style="color:#9966CC; font-weight:bold;">def</span> after_create
    Account.<span style="color:#9900CC;">create</span> <span style="color:#ff3333; font-weight:bold;">:user</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">self</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#008000; font-style:italic;">#...</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Esta aproximación funciona y está buena, pero tiene algunos problemillas: el nombre del método no describe lo que hace y si tenemos que hacer varias cosas, tendríamos un método gigante. Aquí entran en acción el método de clase: after_create:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> User <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  <span style="color:#008000; font-style:italic;">#...</span>
  after_create <span style="color:#ff3333; font-weight:bold;">:create_account</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> create_account
    Account.<span style="color:#9900CC;">create</span> <span style="color:#ff3333; font-weight:bold;">:user</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">self</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#008000; font-style:italic;">#...</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Una vez creado el objeto, ActiveRecord buscará un método llamado &#8220;<strong>create_account</strong>&#8221; y lo ejecutará. Esto nos permite tener varios métodos que se ejecuten como callbacks, he inclusive podemos llamarlos de manera secuencial:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Snippet <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  after_create <span style="color:#ff3333; font-weight:bold;">:test1</span>
  after_create <span style="color:#ff3333; font-weight:bold;">:test2</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test1
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;test 1&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> test2
    <span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">&quot;test 2&quot;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>


<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">ruby<span style="color:#006600; font-weight:bold;">-</span>1.9.2<span style="color:#006600; font-weight:bold;">-</span>p136 :002 <span style="color:#006600; font-weight:bold;">&gt;</span> s = Snippet.<span style="color:#9900CC;">new</span>
 <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#008000; font-style:italic;">#&lt;Snippet id: nil, content: nil, user_id: nil, created_at: nil, updated_at: nil, language_id: nil, public_sha: nil, private_sha: nil, private: false&gt; </span>
ruby<span style="color:#006600; font-weight:bold;">-</span>1.9.2<span style="color:#006600; font-weight:bold;">-</span>p136 :003 <span style="color:#006600; font-weight:bold;">&gt;</span> s.<span style="color:#9900CC;">save</span>
test <span style="color:#006666;">1</span>
test <span style="color:#006666;">2</span>
 <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span> 
ruby<span style="color:#006600; font-weight:bold;">-</span>1.9.2<span style="color:#006600; font-weight:bold;">-</span>p136 :004 <span style="color:#006600; font-weight:bold;">&gt;</span></pre></div></div>

<p>Por supuesto, after_create no es el único callback. Hay mucha información al respecto <a href="http://guides.rubyonrails.org/active_record_validations_callbacks.html#callbacks-overview">aquí</a>. Aquí solo voy a listar los callbacks disponibles:<br />
<strong>Creando un objeto</strong><br />
before_validation<br />
after_validation<br />
before_save<br />
before_create<br />
around_create<br />
after_create<br />
after_save</p>
<p><strong>Actualizando un objeto</strong><br />
before_validation<br />
after_validation<br />
before_save<br />
before_update<br />
around_update<br />
after_update<br />
after_save</p>
<p><strong>Eliminando un objeto</strong><br />
before_destroy<br />
after_destroy<br />
around_destroy</p>
<p>Su uso es ampliamente recomendable y una cosa a tener en cuenta es&#8230; no podemos evitarlos! No son como las validaciones, en las que a veces podemos no ejecutarlas. Aquí si alguna vez necesitamos saltearlos algún callback, vamos a tener que repensar la lógica del modelo de vuelta. Usar con responsabilidad.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=Sobre+callbacks+en+Rails+http%3A%2F%2Ftinyurl.com%2F69kp3kc" title="Post to Twitter"><img class="nothumb" src="http://blog.malev.com.ar/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Sobre+callbacks+en+Rails+http%3A%2F%2Ftinyurl.com%2F69kp3kc" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://blog.malev.com.ar/2011/10/27/debates-sobre-callbacks-en-rails/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Agile testing</title>
		<link>http://blog.malev.com.ar/2011/10/26/agile-testing/</link>
		<comments>http://blog.malev.com.ar/2011/10/26/agile-testing/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 19:54:00 +0000</pubDate>
		<dc:creator>malev</dc:creator>
				<category><![CDATA[buenas practicas]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[qa]]></category>
		<category><![CDATA[quality]]></category>
		<category><![CDATA[test]]></category>
		<category><![CDATA[testing]]></category>

		<guid isPermaLink="false">http://blog.malev.com.ar/?p=921</guid>
		<description><![CDATA[En mi trabajo nuevo, los equipos de desarrollo cuentan con gente de QA, lxs Quality Assurance. Y debo decir, es fantástico trabajar con gente que continuamente este viendo la calidad desde el punto de vista del usuario. Quizás no sea toda la calidad como nos gusta a nosotros (no abarcan todos los atributos de calidad [...]]]></description>
			<content:encoded><![CDATA[<p>En mi trabajo nuevo, los equipos de desarrollo cuentan con gente de <strong>QA</strong>, lxs <strong>Quality Assurance</strong>. Y debo decir, es fantástico trabajar con gente que continuamente este viendo la calidad desde el punto de vista del usuario. Quizás no sea toda la calidad como nos gusta a nosotros (no abarcan todos los atributos de calidad de la <a href="http://es.wikipedia.org/wiki/ISO/IEC_9126">ISO9126</a>), pero es algo y ese algo es muy importante. Sin embargo, no todo es alegría y felicidad entre el quipo de desarrollo y el quipo de QA, aunque ambos esten en el mismo equipo, pero bueno. Uno de los principales choques que vivimos apenas se conformo el equipo (voy a seguir diciendo equipo muchas veces más) fue el choque entre <strong>Agile</strong> y <strong>Waterfall</strong> (o lo que sea que ellos usaban). Al principio costo mucho mezclar gente ágil (los desarrolladores) con gente que venía de procesos más rígidos (claramente la gente de QA). Esto sigue siendo un punto a resolver, pero el trabajo se da cada vez más natural. Si Uds, tienen un problema similar en sus organizaciones, les recomiendo este video de Google IO, donde <a href="http://testobsessed.com/">Elisabeth Hendrickson</a>, una alta tester de Quality Tree nos cuenta su experiencia de testing en equipo ágiles.</p>
<p><embed id=VideoPlayback src=http://video.google.com/googleplayer.swf?docid=-3054974855576235846&#038;hl=en&#038;fs=true style=width:400px;height:326px allowFullScreen=true allowScriptAccess=always type=application/x-shockwave-flash> </embed></p>
<p>Yo mientras voy a seguir investigando del tema, si encuentro algo más, prometo publicarlo.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=Agile+testing+http%3A%2F%2Ftinyurl.com%2F3d6jvqd" title="Post to Twitter"><img class="nothumb" src="http://blog.malev.com.ar/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=Agile+testing+http%3A%2F%2Ftinyurl.com%2F3d6jvqd" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://blog.malev.com.ar/2011/10/26/agile-testing/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Así es, di una charla en PyConAr 2011</title>
		<link>http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/</link>
		<comments>http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 16:37:43 +0000</pubDate>
		<dc:creator>malev</dc:creator>
				<category><![CDATA[comunidad]]></category>
		<category><![CDATA[PyAr]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[2011]]></category>
		<category><![CDATA[charla]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[pyconar]]></category>

		<guid isPermaLink="false">http://blog.malev.com.ar/?p=910</guid>
		<description><![CDATA[Así es, me anime, mande y me aceptaron. Buena onda! Este año por fin pude dar una charla en una PyCon y gracias a la experiencia en charlas anteriores como esta, la última no me salio tan mal Tuve un público receptivo que inclusive se animó a participar. La charla fue sobre introducción al desarrollo [...]]]></description>
			<content:encoded><![CDATA[<p>Así es, me anime, mande y me aceptaron. Buena onda! Este año por fin pude dar una charla en una PyCon y gracias a la experiencia en charlas anteriores como <a href="http://blog.malev.com.ar/2011/07/26/y-paso-el-pyday-gonzalez-catan/">esta</a>, la última no me salio tan mal <img src='http://blog.malev.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Tuve un público receptivo que inclusive se animó a participar.<br />
La charla fue sobre introducción al desarrollo web, pero desde el principio. Vi muchas charlas sobre introducción a Django o Rails o Web2Py que demandaban bastante conocimiento previo, bueno, fue este conocimiento previo que yo aborde en mi charla. Desde que es un servidor, HTML, Javascript, etc hasta una mini mini aplicación web hecha en <a href="http://bottlepy.org/docs/dev/">Bottle</a>. ¿Por qué Bottle? Justamente porque su simpleza y porque se enfoca en la web unicamente. No tiene ORM ni nada, pero para una introducción me pareció genial.<br />
Aquí les dejo las diapositivas y más fotos (incluyendo la del super cuchillo que me regalo la organización)</p>
<div style="width:425px" id="__ss_9632998"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/malev/introduccin-al-desarrollo-web" title="Introducción al desarrollo web">Introducción al desarrollo web</a></strong><object id="__sse9632998" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introalaweb-111010113659-phpapp02&#038;stripped_title=introduccin-al-desarrollo-web&#038;userName=malev" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><embed name="__sse9632998" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=introalaweb-111010113659-phpapp02&#038;stripped_title=introduccin-al-desarrollo-web&#038;userName=malev" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"></embed></object>
<div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/malev">malev</a>.</div>
</div>
<p>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/cuchillo_pyconar/' title='cuchillo_pyconar'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/cuchillo_pyconar-150x150.png" class="attachment-thumbnail" alt="cuchillo_pyconar" title="cuchillo_pyconar" /></a>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/labanda/' title='labanda'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/labanda-150x150.jpg" class="attachment-thumbnail" alt="labanda" title="labanda" /></a>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/llavero-python/' title='llavero-python'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/llavero-python-150x150.jpg" class="attachment-thumbnail" alt="llavero-python" title="llavero-python" /></a>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/mate-python/' title='mate-python'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/mate-python-150x150.jpg" class="attachment-thumbnail" alt="mate-python" title="mate-python" /></a>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/posabirra-python/' title='posabirra-python'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/posabirra-python-150x150.jpg" class="attachment-thumbnail" alt="posabirra-python" title="posabirra-python" /></a>
<a href='http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/gente-python/' title='gente-python'><img width="150" height="150" src="http://blog.malev.com.ar/wp-content/uploads/2011/10/gente-python-150x150.jpg" class="attachment-thumbnail" alt="gente-python" title="gente-python" /></a>
<br />
Nota: ninguna foto es mía, las robe de muchos sitios, espero nadie se enoje.</p>
<div class="tweetthis" style="text-align:left;"><p> <a class="tt" href="http://twitter.com/home/?status=As%C3%AD+es%2C+di+una+charla+en+PyConAr+2011+http%3A%2F%2Fblog.malev.com.ar%2F%3Fp%3D910" title="Post to Twitter"><img class="nothumb" src="http://blog.malev.com.ar/wp-content/plugins/tweet-this/icons/en/twitter/tt-twitter.png" alt="Post to Twitter" /></a> <a class="tt" href="http://twitter.com/home/?status=As%C3%AD+es%2C+di+una+charla+en+PyConAr+2011+http%3A%2F%2Fblog.malev.com.ar%2F%3Fp%3D910" title="Post to Twitter">Tweet This Post</a></p></div>]]></content:encoded>
			<wfw:commentRss>http://blog.malev.com.ar/2011/10/17/asi-es-di-una-charla-en-pyconar-2011/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

