<?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:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6881310854003126363</id><updated>2024-08-29T02:57:46.021+03:00</updated><category term="Google App Engine"/><category term="python"/><category term="unicode"/><category term="BeatifulSoup"/><category term="Cheeta"/><category term="Django"/><category term="Task Queue"/><category term="Twilio"/><category term="Wordpress"/><category term="security"/><category term="utf-8"/><category term="voice"/><category term="webapp"/><title type='text'>Finding my way in web development</title><subtitle type='html'>Milestones on the road to building internet real estate.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>11</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-5107712981371842738</id><published>2010-01-28T15:09:00.002+02:00</published><updated>2010-01-29T17:40:07.736+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="security"/><category scheme="http://www.blogger.com/atom/ns#" term="Wordpress"/><title type='text'>Hardening Wordpress</title><content type='html'>I have started using Wordpress (instead of Blogger) in order to have more control of advertising; more templates, more plugins, etc. It was very easy to get started with..., however, this weekend the first test sites where hacked, so I am not sure if Wordpress was the right choice or not - still considering sticking with Django, or testing Drupal.&lt;br /&gt;
&lt;br /&gt;
Anyway, although Wordpress does not have the best reputation for security, it may actually have been other user accounts on the shared hosting I rent that were cracked first - in that case I should consider swapping to a VPS instead of changing Wordpress.&lt;br /&gt;
&lt;br /&gt;
Anyway, after some research I have decided to always install these plugins on the Wordpress sites, in alphabetic order:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;AntiVirus&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Login LockDown&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&lt;/b&gt;&lt;b&gt;Login Logger&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Secure WordPress&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WordPress File Monitor&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Wordpress Firewall&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;WP Security Scan&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;In a &lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt; addition, I will be using these .htaccess files:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;In the main directory of the blog:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;files wp-login.php=&quot;&quot;&gt;
Order Deny,Allow
Deny from all
Allow from xx.xxx.xxx.103
&lt;/files&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;In the wp-admin directory:&lt;/b&gt;&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;pre&gt;Order Deny,Allow
Deny from all
Allow from xx.xxx.xxx.103&lt;/pre&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;Can not really be bother setting and managing passwords, so I&#39;ll use the IP instead. If I ever work on these from somewhere else, I&#39;ll just login to the cPanel and add those IPs too into the files.&amp;nbsp;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;Since I will use this blog post as my own bookmark when setting up another Wordpress blog, I will also add the other &quot;must have&quot; plugins here:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;&lt;b&gt;Google XML Sitemaps&lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Google Integration Toolkit&lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt; &lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Sociable&lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&amp;nbsp;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Evermore &lt;/b&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;b style=&quot;font-weight: normal;&quot;&gt;I always install these from the WP Dashboard - so there is no need to include links. &lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b style=&quot;font-weight: normal;&quot;&gt;That&#39;s it folks.&lt;/b&gt;&lt;b&gt; &lt;/b&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/5107712981371842738/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2010/01/hardening-wordpress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5107712981371842738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5107712981371842738'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2010/01/hardening-wordpress.html' title='Hardening Wordpress'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-5875378554855227778</id><published>2009-12-16T16:18:00.001+02:00</published><updated>2009-12-16T16:20:02.785+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="Task Queue"/><title type='text'>Google App Engine Task Queue with Python - for Dummies...</title><content type='html'>I have a script that pull in data using from the net, and does some work on the data before storing it in the Datastore. However, the script was kicked off by cron every now and then, but was running into the 30s time limit set by the App Engine. The obvious solution was to split the work into smaller pieces and assign these to the &lt;a href=&quot;http://code.google.com/appengine/docs/python/taskqueue/&quot;&gt;Task Queue&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
However, after reading that documentation few times I was more confused than before I started. The Task Queue API is actually great, but someone should revise that documentation... Above all, it is not clear at all how the different configurations relate to each other, the examples in the documentation is made for &quot;over complicated&quot; examples, IMHO.&lt;br /&gt;
&lt;br /&gt;
Here is Task Queue explained for Dummies (like myself):&lt;br /&gt;
&lt;br /&gt;
First of all, there is the &lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;default&lt;/span&gt; queue, and in addition you can create your own queues using the &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;queue.yaml&lt;/span&gt; config file. The reason you to create your own queue would be that you are not happy with the default execution of 5 tasks per second of the &lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;default&lt;/span&gt; queue. Let&#39;s start looking at using just the &lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;default&lt;/span&gt; queue, and later on we will expand with creating our own queue too.&lt;br /&gt;
&lt;br /&gt;
In this example the original script was doing work for seven days, and we will split it into seven smaller tasks: &lt;br /&gt;
&lt;ol&gt;&lt;li&gt;When using the default queue, we do not need to create any &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;queue.yaml&lt;/span&gt; file at all.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;To start with, we need a URL that cron, or yourself, can use to kick off the whole affair, in &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;app.yaml&lt;/span&gt; add for example:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- url: /update&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; script: scripts/all-to-q.py&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; login: admin&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Now, create the &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;all-to-q.py&lt;/span&gt; file in the &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;scripts&lt;/span&gt; directory with content like:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;import logging&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;from google.appengine.api.labs import taskqueue&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;for i in range(7):&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; taskqueue.add(url=&#39;/one-day&#39;, params={&#39;dayI&#39;: i}, countdown= i)&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; logging.info(&#39;Adding day &#39;+str(i)+&#39; to the Task Queue.&#39;)&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-family: inherit;&quot;&gt;&lt;span style=&quot;font-size: small;&quot;&gt;&lt;span style=&quot;color: black;&quot;&gt;The &lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;countdown&lt;/span&gt;&lt;/span&gt; parameter adds a little delay for each new task before it is executed.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Now, go back to the &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;app.yaml&lt;/span&gt; file and add that new URL you need for each task:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- url: /one-day&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; script: scripts/one-day.py&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; login: admin&lt;/span&gt;&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
Simple, isn&#39;t it.&lt;br /&gt;
&lt;br style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;/li&gt;
&lt;li&gt;And now the essential parts of the &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;one-day.py&lt;/span&gt; file; mainly those that will pick up the POST parameters (here just one called &#39;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;dayI&lt;/span&gt;&lt;/span&gt;&#39;):&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;import wsgiref.handlers&lt;br /&gt;
from google.appengine.ext import webapp&lt;br /&gt;
&lt;br /&gt;
class OneDay(webapp.RequestHandler):&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; def post(self):&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; i = int(self.request.get(&#39;dayI&#39;))&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # ... and here you get your hands dirty; use i and do the work.&lt;br /&gt;
&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;/span&gt;&lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;def main():&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; application = webapp.WSGIApplication([&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (r&#39;/one-day&#39;, OneDay),&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ], debug=True)&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; &lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; wsgiref.handlers.CGIHandler().run(application)&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;if __name__ == &#39;__main__&#39;:&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; main()&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
...and that&#39;s it.&lt;br /&gt;
&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;I don&#39;t understand why the official documentation could not explain something this simple...; I believe my example above makes it fairly clear how the execution logic flows.&lt;br /&gt;
&lt;/li&gt;
&lt;/ol&gt;PS. Note that I also included some &lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;logging&lt;/span&gt;&lt;/span&gt; above; it is really useful... Expand on it yourself.&lt;br /&gt;
&lt;br /&gt;
Now, let&#39;s say we do not want to overload the sites we pull data from, so we will create our own queue and used that instead of the &lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;default&lt;/span&gt; queue. All we need to do is:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create that &lt;span style=&quot;color: blue; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;queue.yaml&lt;/span&gt; file, with for example:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;queue:&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;- name: one-full-day&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; rate: 1/s&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp; bucket_size: 1&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;/span&gt;&lt;br /&gt;
&lt;/li&gt;
&lt;li&gt;Now, in order to use that queue, change one single line in &lt;span style=&quot;color: red; font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;all-to-q.py&lt;/span&gt; so it reads:&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;#!/usr/bin/python&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;# -*- coding: utf-8 -*-&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;import logging&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;from google.appengine.api.labs import taskqueue&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;for i in range(7):&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; taskqueue.Task(url=&#39;/one-day&#39;, params={&#39;dayI&#39;: i}, countdown= i).add(queue_name=&#39;one-full-day&#39;)&lt;/span&gt;&lt;br style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot; /&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; logging.info(&#39;Adding day &#39;+str(i)+&#39; to the Task Queue.&#39;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
Done. Possibly the &lt;span style=&quot;color: blue; font-size: x-small;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;taskqueue.&lt;/span&gt;&lt;/span&gt; line above wraps the row here in the blog, but it&#39;s a single line.&lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;Wasn&#39;t that easy... &lt;br /&gt;
&lt;ol&gt;&lt;/ol&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/5875378554855227778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/google-app-engine-task-queue-with.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5875378554855227778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5875378554855227778'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/google-app-engine-task-queue-with.html' title='Google App Engine Task Queue with Python - for Dummies...'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-1820256142596190895</id><published>2009-12-16T01:05:00.001+02:00</published><updated>2009-12-16T01:05:57.628+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><title type='text'>Organizing and re-using Python code</title><content type='html'>As the code grows it has become necessary to structure it better and re-use it (import it) - so that it can be maintained and expanded effectively. In short, it is time to take a closer look at&lt;br /&gt;
&lt;code&gt;&lt;span style=&quot;color: blue;&quot;&gt;if __name__==&quot;__main__&quot;:&lt;/span&gt;&lt;span style=&quot;font-family: inherit;&quot;&gt; ...&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;
&lt;br /&gt;
I think &lt;a href=&quot;http://stackoverflow.com/questions/419163/what-does-if-namemain-do&quot;&gt;this&lt;/a&gt; is the best explanation... Better start implementing it.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/1820256142596190895/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/organizing-and-re-using-python-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/1820256142596190895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/1820256142596190895'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/organizing-and-re-using-python-code.html' title='Organizing and re-using Python code'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-2662875592835875331</id><published>2009-12-14T10:14:00.001+02:00</published><updated>2009-12-14T10:28:41.221+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cheeta"/><category scheme="http://www.blogger.com/atom/ns#" term="Django"/><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="webapp"/><title type='text'>...actually, no thanks.</title><content type='html'>Actually trying to produce anything with Django on GAE has been a pain in the ***. All documentation and tutorials seems aimed at people who already knows Django and wants to put it on GAE.&lt;br /&gt;
&lt;br /&gt;
I have realized it is a waste of time.&lt;br /&gt;
&lt;br /&gt;
Will instead just use the template system built into GAE&#39;s own &lt;a href=&quot;http://code.google.com/intl/fr/appengine/docs/python/gettingstarted/templates.html&quot;&gt;webapp&lt;/a&gt; (which I know is from Django) - it is probably all I want from Django anyway. When restling with Django itself&amp;nbsp; i discovered its GUI admin interface and other scary things...&lt;br /&gt;
&lt;br /&gt;
If webapp will not be enough I will instead use &lt;a href=&quot;http://www.cheetahtemplate.org/index.html&quot;&gt;Cheetah&lt;/a&gt;. If I go for Cheetah, there a good how-to &lt;a href=&quot;http://blog.infoentropy.com/Use_Cheetah_Templates_with_Google_App_Engine&quot;&gt;here&lt;/a&gt;.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/2662875592835875331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/actually-no-thanks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/2662875592835875331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/2662875592835875331'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/actually-no-thanks.html' title='...actually, no thanks.'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-2806082500762568678</id><published>2009-12-13T18:16:00.000+02:00</published><updated>2009-12-13T18:16:45.104+02:00</updated><title type='text'>...and Django</title><content type='html'>The documentation regard getting Django up and running isn&#39;t that comprehensive.&lt;br /&gt;
&lt;br /&gt;
This is good: http://code.google.com/appengine/docs/python/tools/libraries.html#Django&lt;br /&gt;
&lt;br /&gt;
The actual local installation on the Mac, use this:&lt;br /&gt;
http://www.djangoproject.com/download/&lt;br /&gt;
...but with the command: &lt;span style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;sudo python2.5 setup.py install&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/2806082500762568678/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/and-django.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/2806082500762568678'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/2806082500762568678'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/and-django.html' title='...and Django'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-4704348007387629999</id><published>2009-12-11T16:02:00.002+02:00</published><updated>2009-12-11T16:03:19.464+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Twilio"/><category scheme="http://www.blogger.com/atom/ns#" term="voice"/><title type='text'>Voice Applications too?</title><content type='html'>Just wanted to put this in here while I remember it... great potential:&lt;br /&gt;
&lt;br /&gt;
http://www.twilio.com/</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/4704348007387629999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/voice-applications-too.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/4704348007387629999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/4704348007387629999'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/voice-applications-too.html' title='Voice Applications too?'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-6468272552791854490</id><published>2009-12-11T14:05:00.002+02:00</published><updated>2009-12-11T14:52:42.350+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><category scheme="http://www.blogger.com/atom/ns#" term="unicode"/><title type='text'>More Unicode, and more gor Google to fix</title><content type='html'>Once I finally got teh Unicode sorted between BeautifulSoup and Google App Engine Datastore, with some help from this:&lt;br /&gt;
&lt;br /&gt;
http://khaidoan.wikidot.com/google-app-engine-datastore&lt;br /&gt;
&lt;br /&gt;
...I was rather surprised to find out that Google itself still have bugs to sort out... The web based Datastore viewer of the SDK (http://localhost:8080/_ah/admin/datastore) can not display non ASCII charcters! ...and it is a rather old bug:&lt;br /&gt;
&lt;br /&gt;
http://code.google.com/p/googleappengine/issues/detail?id=502&lt;br /&gt;
&lt;br /&gt;
Well, well...&lt;br /&gt;
It works fine in the production though - from the DataViewer in the Dashboard.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/6468272552791854490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/more-unicode-and-more-gor-google-to-fix.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/6468272552791854490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/6468272552791854490'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/more-unicode-and-more-gor-google-to-fix.html' title='More Unicode, and more gor Google to fix'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-5637893761705750279</id><published>2009-12-09T01:12:00.001+02:00</published><updated>2009-12-11T14:08:20.025+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="BeatifulSoup"/><category scheme="http://www.blogger.com/atom/ns#" term="Google App Engine"/><title type='text'>BeautifulSoup, GoogleAppengineLauncher and Snow Leopard</title><content type='html'>Using BeautifulSoup has turned out very useful ... However, once everything worked fine from Mac (Snow Leopard) &quot;command line&quot; for the Python script, it was more tricky to get it into the GAE SDK (the GoogleAppengineLauncher).&lt;br /&gt;
&lt;br /&gt;
First of all, to use BeautifulSoup, just download the file &quot;BeautifulSoup.py&quot; from the developer, and drop it in the main directory of the GAE app your are developing. Even if your script that is using BeautifulSoup is in a sub directory, the soup needs to go in the main dir (although I suspect some wizard could have a nice way around that...).&lt;br /&gt;
&lt;br /&gt;
Now, the problem is:&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;&lt;type exceptions.importerror=&quot;&quot;&gt;&lt;/type&gt;&lt;/b&gt;: No module named _ctypes &lt;br /&gt;
&lt;tt&gt;&lt;small&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/small&gt;&amp;nbsp;&lt;/tt&gt;args&amp;nbsp;= (&#39;No module named _ctypes&#39;,) &lt;br /&gt;
&lt;tt&gt;&lt;small&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/small&gt;&amp;nbsp;&lt;/tt&gt;message&amp;nbsp;= &#39;No module named _ctypes&#39;&lt;br /&gt;
&lt;br /&gt;
...and it turns out the GAE SDK works only with Python 2.5 and not 2.6 which Snow Leopard uses.&lt;br /&gt;
&lt;br /&gt;
You can see in both the GoogleAppEnginerLauncher&#39;s Log windows that 2.6 is being used, and possibly at the top of yor browser window that throws out the error messages. &lt;br /&gt;
&lt;br /&gt;
Here is a nice workaround: http://code.google.com/p/googleappengine/issues/detail?id=2122#c3 . Just go into the GoogleAppEnginerLauncher&#39;s preferences and set your Python path to:&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;font-family: &amp;quot;Courier New&amp;quot;,Courier,monospace;&quot;&gt;/usr/bin/python2.5&lt;br /&gt;
&lt;/div&gt;&lt;pre style=&quot;font-family: inherit;&quot;&gt;&amp;nbsp;&lt;/pre&gt;&lt;pre style=&quot;font-family: inherit;&quot;&gt;You can double check that 2.5 is also installed - it was on my Snow Leopard...&lt;/pre&gt;&lt;pre style=&quot;font-family: inherit;&quot;&gt;Note this is slightly different from the path proposed by the Preferences window.&lt;/pre&gt;&lt;pre style=&quot;font-family: inherit;&quot;&gt;&lt;/pre&gt;&lt;pre style=&quot;font-family: inherit;&quot;&gt;Off we go...
&lt;/pre&gt;&lt;div style=&quot;font-family: inherit;&quot;&gt;&lt;br /&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/5637893761705750279/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/beautifulsoup-googleappenginelauncher.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5637893761705750279'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/5637893761705750279'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/beautifulsoup-googleappenginelauncher.html' title='BeautifulSoup, GoogleAppengineLauncher and Snow Leopard'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-1146226156661775837</id><published>2009-12-06T17:51:00.001+02:00</published><updated>2009-12-06T17:52:57.766+02:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="python"/><category scheme="http://www.blogger.com/atom/ns#" term="unicode"/><category scheme="http://www.blogger.com/atom/ns#" term="utf-8"/><title type='text'>ASCII, ... Unicode and UTF-8</title><content type='html'>I was playing with Google Translate (and its API) for my sandbox project - which obviously means I deal with characters not fitting into ASCII.&lt;br /&gt;
&lt;br /&gt;
After just sorting it out by trial and error for some time, and found this presentation:&lt;br /&gt;
&lt;br /&gt;
http://farmdev.com/talks/unicode/&lt;br /&gt;
&lt;br /&gt;
Absolutely brilliant! Why is that not on Python&#39;s own website?&lt;br /&gt;
Many thanks to the author Kumar McMillan.&lt;br /&gt;
&lt;br /&gt;
PS. There are more useful learning on farmdev.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/1146226156661775837/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/ascii-unicode-and-utf-8.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/1146226156661775837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/1146226156661775837'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/ascii-unicode-and-utf-8.html' title='ASCII, ... Unicode and UTF-8'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-3464237466149144128</id><published>2009-12-06T17:41:00.000+02:00</published><updated>2009-12-06T17:41:05.506+02:00</updated><title type='text'>Basics</title><content type='html'>Assuming the big guys do know something I do not, and decided to follow them first.&lt;br /&gt;
&lt;br /&gt;
...Google, hosting on Google App Engine; and Python since Java seems much too complicated at this stage.&lt;br /&gt;
&lt;br /&gt;
I have fumbled around with PHP before and created some really useful script. After doing some Python now, I have to say it is quite enjoyable - cleaner, more forgiving..., and once a script works it is really short. :)&lt;br /&gt;
&lt;br /&gt;
Python is nice.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/3464237466149144128/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/basics.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/3464237466149144128'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/3464237466149144128'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/basics.html' title='Basics'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6881310854003126363.post-8365399036356838694</id><published>2009-12-06T17:11:00.001+02:00</published><updated>2009-12-06T17:53:40.935+02:00</updated><title type='text'>Starting up</title><content type='html'>Mostly out of curiosity I will start playing with the technologies that are behind the Internet today - and here I mean the stuff serving up the graphics we watch, and not the routing and networking of the traffic.&lt;br /&gt;
&lt;br /&gt;
The way I see it &quot;the Internet&quot; in itself a &quot;Second Life&quot; type of world - just more real. The web sites we build and view are in themselves &quot;real estate&quot; with also commercial value - mainly turned into money through advertising. Already having solid knowledge of the networking aspect, I know want to find out what is the building blocks of this other &quot;real estate&quot;.&lt;br /&gt;
&lt;br /&gt;
Thought I&#39;d collect this here in this blog, mainly as a list of bookmarks for myself, but possibly also useful from someone else.</content><link rel='replies' type='application/atom+xml' href='http://code-in-order.blogspot.com/feeds/8365399036356838694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://code-in-order.blogspot.com/2009/12/starting-up.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/8365399036356838694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6881310854003126363/posts/default/8365399036356838694'/><link rel='alternate' type='text/html' href='http://code-in-order.blogspot.com/2009/12/starting-up.html' title='Starting up'/><author><name>pg</name><uri>http://www.blogger.com/profile/16108997865837452753</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4Q8N5kHFIUA5YrbieUXofWmiOeZxBgkfPGecTmaXIEO8-i2J-4XOKMYPE2fT5u3lCs5KUvnwhHIssGixbY8c0agF3zaG9exDXWUG8VwRAOnkx2ms79iaXDXbGOKV1nA/s220/Per_Granath.jpg'/></author><thr:total>0</thr:total></entry></feed>