<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-2546119310705319043</id><updated>2009-10-17T09:41:04.097-03:00</updated><title type='text'>CodeNuts</title><subtitle type='html'>Small code hits from my daily experience!</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://codenuts.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default'/><link rel='alternate' type='text/html' href='http://codenuts.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Sebastián</name><uri>http://www.blogger.com/profile/13089364888963054023</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2546119310705319043.post-3182868061919207122</id><published>2008-10-20T00:24:00.003-02:00</published><updated>2008-10-20T00:47:25.085-02:00</updated><title type='text'>Fix low contrast photos using python (PIL)</title><content type='html'>In this post i explain how to fix low contrast images using the equalization functions of the python image library PIL.&lt;br /&gt;&lt;br /&gt;Suppose that you have a low contrast image like this one:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvsZRFM5gI/AAAAAAAAAp8/gCw8EL4vs_A/s1600-h/lowContrast.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvsZRFM5gI/AAAAAAAAAp8/gCw8EL4vs_A/s400/lowContrast.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259056908711290370" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now lets equalize it using python:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(200, 200, 200); padding: 10px; background: rgb(249, 247, 243) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;import Image,import ImageOps&lt;br /&gt;&lt;br /&gt;im = Image.open('lowContrast.jpg')&lt;br /&gt;im_eq = ImageOps.equalize(im)&lt;br /&gt;im_eq.save('lowContrast_eq.jpg')&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And the result is:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_BvEOB07Hf6U/SPvvC3vzxVI/AAAAAAAAAqE/8tyP0q-fq30/s1600-h/lowContrast_eq.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_BvEOB07Hf6U/SPvvC3vzxVI/AAAAAAAAAqE/8tyP0q-fq30/s400/lowContrast_eq.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259059822488438098" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now suppose that you have the same problem but only in one of the channels. Like in this one that has low contrast in the blue band.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvvDBsh_3I/AAAAAAAAAqM/kdSQRvKZgZ4/s1600-h/colorProblem.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvvDBsh_3I/AAAAAAAAAqM/kdSQRvKZgZ4/s400/colorProblem.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259059825159044978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No problem:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid rgb(200, 200, 200); padding: 10px; background: rgb(249, 247, 243) none repeat scroll 0% 0%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;import Image,import ImageOps&lt;br /&gt;&lt;br /&gt;im = Image.open('colorProblem.jpg')&lt;br /&gt;r,g,b = im.split()&lt;br /&gt;b = ImageOps.equalize(b)&lt;br /&gt;im_e = Image.merge('RGB', (r,g,b))&lt;br /&gt;im_e.save('colorProblem_beq.jpg') &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;The result:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvvDMVFfEI/AAAAAAAAAqU/ABNsmGbPDSQ/s1600-h/colorProblem_beq.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvvDMVFfEI/AAAAAAAAAqU/ABNsmGbPDSQ/s400/colorProblem_beq.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5259059828013497410" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2546119310705319043-3182868061919207122?l=codenuts.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codenuts.blogspot.com/feeds/3182868061919207122/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2546119310705319043&amp;postID=3182868061919207122' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/3182868061919207122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/3182868061919207122'/><link rel='alternate' type='text/html' href='http://codenuts.blogspot.com/2008/10/fix-low-contrast-photos-using-python.html' title='Fix low contrast photos using python (PIL)'/><author><name>Sebastián</name><uri>http://www.blogger.com/profile/13089364888963054023</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01237382387473785038'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_BvEOB07Hf6U/SPvsZRFM5gI/AAAAAAAAAp8/gCw8EL4vs_A/s72-c/lowContrast.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2546119310705319043.post-4147111686823560361</id><published>2008-10-19T01:05:00.006-02:00</published><updated>2008-10-19T01:24:51.020-02:00</updated><title type='text'>force download django</title><content type='html'>When you serve a document,image,file from a Web server, you might want to immediately prompt the user to save the file directly to the user's disk, without opening it in the browser.&lt;br /&gt;&lt;br /&gt;You can use the content-disposition header to override the default behavior.&lt;br /&gt;&lt;br /&gt;The code below shows how-to do this in python/django:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;font-size:85%;" &gt;&lt;span style="font-family:trebuchet ms;"&gt;import mimetypes, os&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;def download_view(request, filename):&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;file = open(filename,"r")&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mimetype = mimetypes.guess_type(filename)[0]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if not mimetype: mimetype = "application/octet-stream"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response = HttpResponse(file.read(), mimetype=mimetype)&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;response["Content-Disposition"]= "attachment; filename=%s" % os.path.split(filename)[1]&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:trebuchet ms;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return response&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2546119310705319043-4147111686823560361?l=codenuts.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codenuts.blogspot.com/feeds/4147111686823560361/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2546119310705319043&amp;postID=4147111686823560361' title='0 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/4147111686823560361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/4147111686823560361'/><link rel='alternate' type='text/html' href='http://codenuts.blogspot.com/2008/10/force-download-django.html' title='force download django'/><author><name>Sebastián</name><uri>http://www.blogger.com/profile/13089364888963054023</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01237382387473785038'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2546119310705319043.post-4613245392943797265</id><published>2007-12-13T00:22:00.000-03:00</published><updated>2007-12-13T02:30:18.662-03:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='joomla'/><title type='text'>Change title, description and other meta tags on Joomla 1.5</title><content type='html'>Today when i was finishing a component for Joomla 1.5, i had to change the title and the meta info generated by Joomla, i was unable to find how to do this on the Joomla site or google, so i had to read the source code to find out. At the moment this is particular  useful because there is no SEO extension available for joomla 1.5&lt;br /&gt;&lt;br /&gt;Well how we do this? first get the document object:&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;$document =&amp;amp; JFactory::getDocument();&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Second use this document methods to change the title, meta description or any other meta. Be aware that change the description must be done with setDescription if you use setMetaData you will get the meta description twice, the original and the new one.&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;/**&lt;br /&gt;* Sets the title of the document&lt;br /&gt;*&lt;br /&gt;* @param       string  $title&lt;br /&gt;* @access   public&lt;br /&gt;*/&lt;br /&gt;function setTitle($title)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;/**&lt;br /&gt;* Sets or alters a meta tag.&lt;br /&gt;*&lt;br /&gt;* @param string  $name                 Value of name or http-equiv tag&lt;br /&gt;* @param string  $content              Value of the content tag&lt;br /&gt;* @param bool  $http_equiv      META type "http-equiv" defaults to null&lt;br /&gt;* @return void&lt;br /&gt;* @access public&lt;br /&gt;*/&lt;br /&gt;function setMetaData($name, $content, $http_equiv = false)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;/**&lt;br /&gt;* Sets the description of the document&lt;br /&gt;*&lt;br /&gt;* @param       string  $title&lt;br /&gt;* @access   public&lt;br /&gt;*/&lt;br /&gt;function setDescription($description)&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Example:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;$document =&amp;amp; JFactory::getDocument();&lt;br /&gt;$document-&gt;setTitle($document-&gt;getTitle()  . ' | ' .  "testTitle");&lt;br /&gt;$document-&gt;setMetaData("keywords", "key1, key2");&lt;br /&gt;$document-&gt;setDescription("a description");&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Example output:&lt;/span&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;title&gt;sitename | testTitletitle&gt;&amp;lt;/title&gt;&lt;br /&gt;.....&lt;br /&gt;&amp;lt;meta name="keywords" content="key1, key2"/&gt;&lt;br /&gt;.....&lt;br /&gt;&amp;lt;meta name="description" content="a description"/&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;Well this is my first entry in this Blog, I pretend do this kind of post, mini HOWTOs  about particular things i learn this day.&lt;br /&gt;I hope this info be useful, See You Soon!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2546119310705319043-4613245392943797265?l=codenuts.blogspot.com'/&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://codenuts.blogspot.com/feeds/4613245392943797265/comments/default' title='Enviar comentarios'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=2546119310705319043&amp;postID=4613245392943797265' title='1 comentarios'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/4613245392943797265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2546119310705319043/posts/default/4613245392943797265'/><link rel='alternate' type='text/html' href='http://codenuts.blogspot.com/2007/12/change-title-description-and-other-meta.html' title='Change title, description and other meta tags on Joomla 1.5'/><author><name>Sebastián</name><uri>http://www.blogger.com/profile/13089364888963054023</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='01237382387473785038'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry></feed>