<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Dev Tools on Pablo Seminario</title><link>https://seminar.io/categories/dev-tools/</link><description>Recent content in Dev Tools on Pablo Seminario</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sat, 04 Jan 2014 01:15:00 +0000</lastBuildDate><atom:link href="https://seminar.io/categories/dev-tools/index.xml" rel="self" type="application/rss+xml"/><item><title>Comment utiliser les photographies aériennes de Nantes avec Leaflet</title><link>https://seminar.io/posts/photographies-aeriennes-de-nantes-avec-leafletjs/</link><pubDate>Sat, 04 Jan 2014 01:15:00 +0000</pubDate><guid>https://seminar.io/posts/photographies-aeriennes-de-nantes-avec-leafletjs/</guid><description>&lt;img alt="Screenshot d'une carte interactive" src="photographies-aeriennes-de-nantes-avec-leafletjs.jpg" /&gt;&#10;Ce mini post explique comment on peut utiliser les [Photographies aériennes de la Loire-Atlantique](http://data.paysdelaloire.fr/donnees/detail/photographies-aeriennes-de-la-loire-atlantique/) pour créer des cartes interactives avec [Leafletjs](http://leafletjs.com/).&#10;&lt;p&gt;Les &lt;a href="http://data.paysdelaloire.fr/donnees/detail/photographies-aeriennes-de-la-loire-atlantique/"&gt;Photographies aériennes de la Loire-Atlantique&lt;/a&gt; font partie des jeux de données Open Data de la région des Pays de la Loire et pour utiliser et accéder aux données il faut acepter leur licence.&lt;/p&gt;&#10;&lt;p&gt;Pour accéder aux images le site &lt;a href="http://vuduciel.loire-atlantique.fr/"&gt;vuduciel.loire-atlantique.fr&lt;/a&gt; délivre un flux WMS (Web Map Service) qui peut être intégré facilement avec Leaflet en utilisant une &lt;code&gt;TileLayer.WMS&lt;/code&gt;.&#10;Par exemple avec quelques lignes de HTML on peut générer une carte et ajouter un marqueur :&lt;/p&gt;</description></item><item><title>Testing your REST client in Python</title><link>https://seminar.io/posts/testing-your-rest-client-in-python/</link><pubDate>Fri, 27 Sep 2013 12:38:00 +0000</pubDate><guid>https://seminar.io/posts/testing-your-rest-client-in-python/</guid><description>&lt;p&gt;When you start to write a client for a REST API in Python at beginning it&amp;rsquo;s easy to test it using a Python interactive session,&#10;but at some point you&amp;rsquo;ll have to write tests, at that moment you&amp;rsquo;ll see that it&amp;rsquo;s not easy to test your code against live data from the RESTful web API.&#10;You may encounter various problems, for example, you can have network problems when tests run, the web server may be temporarily down or tests become slow due to network latency.&lt;/p&gt;&#10;&lt;p&gt;A solution to this problem is to use Mock objects, they simulate the behavior of your real objects in a controlled way,&#10;so in this case a mock object may simulate the behavior of the &lt;code&gt;urlopen&lt;/code&gt; function (from the &lt;code&gt;urllib2&lt;/code&gt; module) and return &lt;em&gt;something&lt;/em&gt; like an HTTP response (a file-like object) without hit the real REST API. The file-like object returned may map a RESTful resource to a file which contains a pre-saved response from the real web server.&lt;/p&gt;&#10;&lt;p&gt;To show the idea I wrote a simple REST client for the &lt;a href="http://developer.github.com/v3/"&gt;Github API&lt;/a&gt;. Here&amp;rsquo;s what the directory structure looks like&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&lt;div class="code-block code-block--term"&gt;&#10; &lt;div class="code-block__bar"&gt;&#10; &lt;span&gt;terminal&lt;/span&gt;&#10; &lt;span&gt;bash&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ tree project&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;project&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;├── client.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;└── tests/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ├── test_client.py&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── resources/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── users/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; └── test_user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;3&lt;/span&gt; directories, &lt;span class="m"&gt;3&lt;/span&gt; files&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;I use &lt;a href="https://nose.readthedocs.org/"&gt;nose&lt;/a&gt; as test runner and &lt;a href="http://www.voidspace.org.uk/python/mock/"&gt;Foord&amp;rsquo;s Mock&lt;/a&gt; library to create mock objects. You can install them into a virtualenv by typing&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&lt;div class="code-block code-block--term"&gt;&#10; &lt;div class="code-block__bar"&gt;&#10; &lt;span&gt;terminal&lt;/span&gt;&#10; &lt;span&gt;bash&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ pip install nose mock&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Here&amp;rsquo;s the content of the &lt;code&gt;client.py&lt;/code&gt; file&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&lt;div class="code-block"&gt;&#10; &lt;div class="code-block__bar"&gt;&#10; &lt;span&gt;python&lt;/span&gt;&#10; &lt;span&gt;python&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="nn"&gt;json&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="nn"&gt;urllib2&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;urlopen&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&#10;&#10;&#10;&#10;&lt;div class="code-block"&gt;&#10; &lt;div class="code-block__bar"&gt;&#10; &lt;span&gt;text&lt;/span&gt;&#10; &lt;span&gt;text&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-text" data-lang="text"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;class ClientAPI(object):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; def request(self, user):&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; url = &amp;#34;https://api.github.com/users/%s&amp;#34; % user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; response = urlopen(url)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; raw_data = response.read().decode(&amp;#39;utf-8&amp;#39;)&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return json.loads(raw_data)&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;As you can see, it calls &lt;code&gt;urlopen&lt;/code&gt;, parse the JSON data from the HTTP response and return a Python dictionary.&lt;/p&gt;</description></item><item><title>How to use the Percolate API with Python</title><link>https://seminar.io/posts/how-to-use-the-percolate-api-with-python/</link><pubDate>Fri, 19 Jul 2013 08:21:00 +0000</pubDate><guid>https://seminar.io/posts/how-to-use-the-percolate-api-with-python/</guid><description>&lt;p&gt;Recently, I&amp;rsquo;ve been working on migrate a Django project from &lt;a href="http://lucene.apache.org/solr/features.html"&gt;Solr&lt;/a&gt; to &lt;a href="http://www.elasticsearch.org/overview/"&gt;Elasticsearch&lt;/a&gt;, both of them are great search servers based on Apache Lucene, but Elasticsearch has an interesting feature called Percolate, that&amp;rsquo;s missing on Solr.&lt;/p&gt;&#10;&lt;p&gt;Percolate is the reverse operation of indexing and then searching. Instead of sending docs, indexing them, and then running queries. One sends queries, registers them, and then sends docs and finds out which queries match that doc.&lt;/p&gt;</description></item><item><title>Compilando php-gtk2 en Ubuntu 8.10</title><link>https://seminar.io/posts/compilando-php-gtk2-en-ubuntu-8-10/</link><pubDate>Sun, 11 Jan 2009 18:14:00 +0000</pubDate><guid>https://seminar.io/posts/compilando-php-gtk2-en-ubuntu-8-10/</guid><description>&lt;p&gt;&lt;em&gt;&lt;span style="color: #ff0000;"&gt;Update!&lt;/span&gt;&lt;/em&gt; you can read this post translated to English &lt;a href="https://seminar.io/howtos/php-gtk2/"&gt;here&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Escribo este post porque compilar &lt;a href="http://gtk.php.net"&gt;PHP-GTK 2&lt;/a&gt; en Ubuntu Intrepid no es tan obvio como debería ser, o al menos como dicen &lt;a href="http://gtk.php.net/manual/en/tutorials.installation.linux.php"&gt;acá&lt;/a&gt;.&#10;Descargué la última versión estable de PHP-GTK 2, la &lt;a href="http://gtk.php.net/download.php"&gt;2.0.1&lt;/a&gt; pero al intentar compilarlo tira algunos errores, en &lt;a href="https://bugs.launchpad.net/ubuntu/&amp;#43;source/php5/&amp;#43;bug/262251"&gt;Launchpad&lt;/a&gt; hay un reporte sobre este bug. El fix para esto es&lt;/p&gt;&#10;&#10;&#10;&#10;&#10;&lt;div class="code-block code-block--term"&gt;&#10; &lt;div class="code-block__bar"&gt;&#10; &lt;span&gt;terminal&lt;/span&gt;&#10; &lt;span&gt;bash&lt;/span&gt;&#10; &lt;/div&gt;&#10; &lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ &lt;span class="nb"&gt;cd&lt;/span&gt; /usr/share/aclocal&#10;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;$ cat lt~obsolete.m4 ltoptions.m4 ltsugar.m4 ltversion.m4 &amp;gt;&amp;gt; libtool.m4&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;por un problema con libtool.&#10;El tema es que después de hacer esto tampoco compiló. Se me ocurrió probar la versión del CVS de PHP-GTK pero pasaba el &lt;code&gt;configure&lt;/code&gt; pero al hacer &lt;code&gt;make&lt;/code&gt; tiraba otros errores.&#10;La solución fue descargar la versión anterior a la estable de PHP-GTK, la 2.0.0. Este es el link para descargarla &lt;a href="http://gtk.php.net/do_download.php?download_file=php-gtk-2.0.0.tar.gz"&gt;http://gtk.php.net/do_download.php?download_file=php-gtk-2.0.0.tar.gz&lt;/a&gt;&#10;Una vez descargado, solo hay que hacer&lt;/p&gt;</description></item><item><title>Usando Emacs con Firefox</title><link>https://seminar.io/posts/usando-emacs-con-firefox/</link><pubDate>Fri, 25 Apr 2008 04:42:00 +0000</pubDate><guid>https://seminar.io/posts/usando-emacs-con-firefox/</guid><description>&lt;p&gt;&lt;a href="http://4.bp.blogspot.com/_q0bemMki3uo/SBFpI16927I/AAAAAAAADj0/fO-KQNxc2N8/s1600-h/EmacsFirefox.jpg"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5193047445969165234" src="http://4.bp.blogspot.com/_q0bemMki3uo/SBFpI16927I/AAAAAAAADj0/fO-KQNxc2N8/s200/EmacsFirefox.jpg" style="float: left; margin: 0 10px 10px 0; cursor: pointer; cursor: hand;" /&gt;&lt;/a&gt;&#10;Antes que nada debo aclarar que después de usar casi intensivamente Vi, me&#10;decidí volver al viejo y bien ponderado Emacs. Que la verdad rulea, la última versión trae soporte para fuentes TrueType entre otras cosas.&#10;Además extrañaba lo cómoda que son las combinaciones de teclas, que hacen que&#10;uno no tenga que sacar los dedos del teclado.&#10;Entonces después de todas estas buenas razones uno no quiere escribir&#10;en nada que no sea Emacs. Y para eso existe una extensión para Firefox&#10;llamada &lt;a href="https://addons.mozilla.org/firefox/addon/4125"&gt;It&amp;rsquo;s all text!&lt;/a&gt;&#10;con la que podemos invocar nuestro editor de texto preferido para editar los&#10;textareas dentro de una página web. Por ejemplo, este post ;)&lt;/p&gt;</description></item><item><title>Vim para CakePHP</title><link>https://seminar.io/posts/vim-para-cakephp/</link><pubDate>Tue, 08 Apr 2008 23:59:00 +0000</pubDate><guid>https://seminar.io/posts/vim-para-cakephp/</guid><description>&lt;p&gt;Hace un tiempo que me decidí a usar algún framework para &lt;a href="http://www.php.net"&gt;PHP&lt;/a&gt;, cansado de tener que usar mis libs, que por supuesto estaban lejos de ser perfectas, pero que en su momento me fueron útiles. Terminé elegiendo, por ahora, &lt;a href="http://cakephp.org/"&gt;CakePHP&lt;/a&gt;. Es bastante fácil de entender, mucho mas que el framework de &lt;a href="http://framework.zend.com/"&gt;Zend&lt;/a&gt; y se ajusta a lo que necesito&amp;hellip; hacer mucho con poco esfuerzo ;)&#10;Lo único que me faltaba era decidirme por un &lt;a href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado"&gt;IDE&lt;/a&gt; o un editor de código, a pesar de los grandes &lt;a href="http://es.wikipedia.org/wiki/Entorno_de_desarrollo_integrado"&gt;IDE&lt;/a&gt; como &lt;a href="http://www.eclipse.org/"&gt;Eclipse&lt;/a&gt; y otros. Me terminé decidiendo por Vim, ya sé que muchos me recordaran que siempre me incliné por Emacs (ping Pepe) pero a pesar de es el mejor editor de texto, creo que Vim gana por su sencillez.&lt;/p&gt;</description></item><item><title>Como setear el número de columnas en Emacs</title><link>https://seminar.io/posts/como-setear-el-numero-de-columnas-en-emacs/</link><pubDate>Mon, 11 Dec 2006 14:28:00 +0000</pubDate><guid>https://seminar.io/posts/como-setear-el-numero-de-columnas-en-emacs/</guid><description>&lt;p&gt;Algo que siempre olvido, al menos por ahora que estoy comenzando a usar &lt;span style="font-style: italic;"&gt;Emacs&lt;/span&gt;, es como setear la cantidad de columnas a 72. Por lo general lo uso así cuando quiero editar documentos o notas en texto plano, solo para que se vean un poco más prolijas.&lt;br /&gt;&#10;Buscando un poco en &lt;a href="http://www.google.com/"&gt;Google&lt;/a&gt; encontré la esta &lt;a href="http://homepages.inf.ed.ac.uk/s0243221/emacs/"&gt;página&lt;/a&gt; que mas o menos decía lo que estaba buscando.&lt;br /&gt;&#10;Resumiendo, las opciones son&lt;/p&gt;&#10;&lt;ul&gt;&lt;li&gt;column-number-mode para ver el número de columna.&lt;/li&gt;&lt;li&gt;set-fill-column para establecer la cantidad de columnas. En este caso es necesario pasarle como argumento el número de columnas. Lo podemos hacer con 'C-u 3 Alt-x' o 'ESC 3 Alt-x' 'Alt-3 Alt-x'.&#10;&lt;/li&gt;&lt;li&gt;auto-fill-mode para que corte automáticamente las líneas al ancho de las columnas.&lt;/li&gt;&lt;/ul&gt;Con esto me es sufiente por ahora para mejorar mi entorno &lt;span style="font-style: italic;"&gt;Emacs&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;&lt;br /&gt;</description></item></channel></rss>