<?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' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8169620749554436833</id><updated>2011-04-21T14:07:23.151-07:00</updated><title type='text'>Moving to Google Application Engine</title><subtitle type='html'>A blog demonstrating my uselessness with Google Application Engine and my total lack of understanding of the underlying technologies.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-6460816650138397965</id><published>2008-08-03T07:07:00.000-07:00</published><updated>2008-08-03T07:56:00.245-07:00</updated><title type='text'>Setting up the DNS</title><content type='html'>Trying to figure out DNS has given me some problems. Unfortunately some bugs exist in setting up the GAE so I will try and outline what I have found here.&lt;br /&gt;&lt;br /&gt;You are able to register a domain with google for $10 a year, this is a great bargain as it includes privacy. At this stage it does not look as though they are allowing domain transfers.&lt;br /&gt;&lt;br /&gt;1. Firstly you will have to have your domain name registered with google apps.&lt;br /&gt;&lt;a href="https://www.google.com/a/"&gt;http://www.google.com/a/&lt;/a&gt; - sign up here&lt;br /&gt;Once you have signed up you can log in to your like this;&lt;br /&gt;http://www.google.com/a/yourdomain.com&lt;br /&gt;&lt;br /&gt;2. You will need to figure out the numbers needed for the A records from google. I have found them at this location: &lt;a href="http://www.google.com/support/a/bin/answer.py?answer=91080&amp;amp;hl=en"&gt;http://www.google.com/support/a/bin/answer.py?answer=91080&amp;amp;hl=en&lt;/a&gt;&lt;br /&gt;The numbers when I last checked are;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;216.239.32.21 &lt;/li&gt;&lt;li&gt;216.239.34.21 &lt;/li&gt;&lt;li&gt;216.239.36.21 &lt;/li&gt;&lt;li&gt;216.239.38.21 &lt;/li&gt;&lt;/ul&gt;3. Log in to your domain host e.g. GoDaddy (Which I have used in this example).&lt;br /&gt;From the domain manager, select the domain you wish to use. The select "Total DNS control and MX records" (If this is missing you will need to make sure you have set godaddy as your dns host)&lt;br /&gt;In the boxes you will need to delete all the current A records then add the following under A(host);&lt;br /&gt;Host: @   Points to: 216.239.32.21&lt;br /&gt;Host: @   Points to: 216.239.34.21&lt;br /&gt;Host: @   Points to: 216.239.36.21&lt;br /&gt;Host: @   Points to: 216.239.38.21&lt;br /&gt;&lt;br /&gt;While you are there you should set up the rest of your dns.&lt;br /&gt;Under CNAME (aliases);&lt;br /&gt;Host: www    Points to: ghs.google.com&lt;br /&gt;(You can add whatever sub domains here that you wish to use)&lt;br /&gt;&lt;br /&gt;If you are using google for your email double check the MX records while you are there.&lt;br /&gt;Priority: 1   Host: @   Goes to:aspmx.l.google.com&lt;br /&gt;Priority: 5   Host: @   Goes to:alt1.aspmx.l.google.com&lt;br /&gt;Priority: 5   Host: @   Goes to:alt2.aspmx.l.google.com&lt;br /&gt;Priority: 10   Host: @   Goes to:aspmx2.googlemail.com&lt;br /&gt;Priority: 10   Host: @   Goes to:aspmx3.googlemail.com&lt;br /&gt;&lt;br /&gt;This should be all you need to do on the DNS side of things.&lt;br /&gt;&lt;br /&gt;4. Go to the Google application engine and make sure you do things in the right order;&lt;br /&gt;From the dashboard select;&lt;br /&gt;Add More Services, then type in the name of your google app e.g. myapp&lt;br /&gt;Select the tick in the agree box, then type in  the name of your web address;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Type in: temp.yourdomain.com DO NOT put: yourdomain.com&lt;/span&gt;&lt;br /&gt;The press "continue to set up URL"&lt;br /&gt;&lt;br /&gt;go back to the dashboard now add a new service yourdomain.com to yourapp&lt;br /&gt;then do it again for www.yourdomain.com.&lt;br /&gt;&lt;br /&gt;Once you have done this you can delete temp.yourdomain.com from your application.&lt;br /&gt;&lt;br /&gt;5. Wait.&lt;br /&gt;In theory this should work and you will never have to touch it again.&lt;br /&gt;However check that it works sometime later (24 to 48 hours)&lt;br /&gt;make sure you check both www.yourdomain.com and yourdomain.com&lt;br /&gt;&lt;br /&gt;With one of my apps www.domain.com didn't work so I had to delete the www from myapp then add it again.&lt;br /&gt;&lt;br /&gt;Hopefully that should get you around the two main bugs which I found, if you have any further questions or comments please feel free to ask on the google apps group.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-6460816650138397965?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/6460816650138397965/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=6460816650138397965' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/6460816650138397965'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/6460816650138397965'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/08/setting-up-dns.html' title='Setting up the DNS'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-1300796901140013807</id><published>2008-07-03T04:39:00.000-07:00</published><updated>2008-07-03T06:21:28.272-07:00</updated><title type='text'>yaml and gae</title><content type='html'>&lt;a href="http://www.yaml.org/"&gt;Yaml&lt;/a&gt; (Yet Another Markup Language) is Google's prefered way of dealing with the structure of its web applications and in this case the Google Application Engine.&lt;br /&gt;&lt;br /&gt;The documentation I can find is located at;&lt;br /&gt;&lt;a href="http://www.yaml.org/"&gt;yaml.org&lt;/a&gt;&lt;br /&gt;The getting started guide for &lt;a href="http://code.google.com/appengine/docs/configuringanapp.html"&gt;configuring an app&lt;/a&gt; gives something of an overview.&lt;br /&gt;&lt;br /&gt;For some strange reason an example on how to deal with a single static file is not found in the documentation.  Looks like I will have to deal with things a little different to the way i am used to.&lt;br /&gt;I also seem to have a problem with mime types using mime_type setting. The mime_type is overwritten by googles settings somewhere along the line.&lt;br /&gt;&lt;br /&gt;The app.yaml file is far from alone, there is also settings.py file which is used by python and  django also has a settings file (django_bootstrap.py) to add to the mix.&lt;br /&gt;&lt;a href="http://code.google.com/p/google-app-engine-samples/source/browse/trunk/django_example/django_bootstrap.py?r=11"&gt;Example django bootstrap file.&lt;/a&gt;&lt;br /&gt;&lt;span style="font-family: monospace;"&gt;&lt;/span&gt;&lt;code&gt;&lt;span style="font-family: verdana;"&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-1300796901140013807?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/1300796901140013807/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=1300796901140013807' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/1300796901140013807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/1300796901140013807'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/07/yaml-and-gae.html' title='yaml and gae'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-550637824422586945</id><published>2008-07-03T02:30:00.000-07:00</published><updated>2008-07-03T02:44:57.204-07:00</updated><title type='text'>Formatting Dates with Django</title><content type='html'>Simply letting a date field be displayed with django results in something like this;&lt;br /&gt;&lt;h6 style="font-family: courier new;"&gt;2008-07-03 09:20:12.019000&lt;br /&gt;&lt;/h6&gt;Which is quite helpful in the scientific world but it doesn't really add much to a lot of applications other than confusion.&lt;br /&gt;The way to handle dates is to pass them through something of a filter like this;&lt;br /&gt;{{ datefield|date:"d M Y" }} and the output is : 03 Jul 2008&lt;br /&gt;&lt;br /&gt;The filter list can be found in the Django documentation;&lt;br /&gt;&lt;a href="http://www.djangoproject.com/documentation/templates/#now"&gt;http://www.djangoproject.com/documentation/templates/#now&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The is also a somewhat useful entry I found here on the topic;&lt;br /&gt;&lt;a href="http://www.magpiebrain.com/blog/2005/08/21/formatting-dates-with-django/"&gt;http://www.magpiebrain.com/blog/2005/08/21/formatting-dates-with-django/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-550637824422586945?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/550637824422586945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=550637824422586945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/550637824422586945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/550637824422586945'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/07/formatting-dates-with-django.html' title='Formatting Dates with Django'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-5621285355664796240</id><published>2008-06-26T01:43:00.000-07:00</published><updated>2008-06-26T01:46:17.644-07:00</updated><title type='text'>Django includes</title><content type='html'>Another problem which has irked me in recent days is including another file within the one I am displaying.&lt;br /&gt;If I use the include statement in a page which is used by django like&lt;br /&gt; this;&lt;br /&gt; {% include "includes/footer.html" %}&lt;br /&gt; I need to change it to look like;&lt;br /&gt; {% include "static/includes/footer.html" %}&lt;br /&gt; What do I need to edit within django so it can represent or look&lt;br /&gt; similar to changes I have made to the app.yaml file?&lt;br /&gt; - url: /includes&lt;br /&gt;   static_dir: static/includes&lt;br /&gt;&lt;br /&gt;While this is something of a fixable problem it is exacerbated when theapplication is loaded onto the Google appspot and the the file to include is ignored even though the file is present.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-5621285355664796240?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/5621285355664796240/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=5621285355664796240' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/5621285355664796240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/5621285355664796240'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/06/django-includes.html' title='Django includes'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-4244157966202388601</id><published>2008-06-26T01:37:00.000-07:00</published><updated>2008-06-26T01:43:53.016-07:00</updated><title type='text'>Filenames and case sensitivity.</title><content type='html'>If a reference an image from my local machine(windows) I have no problem accessing a filename such as: FileName.jpg even if the name of the file is filename.jpg.&lt;br /&gt;&lt;br /&gt;Luckily it was  a small problem to fix and caused no major problem other than a couple of minutes type fixing the variables with the .lower() command in python.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-4244157966202388601?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/4244157966202388601/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=4244157966202388601' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/4244157966202388601'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/4244157966202388601'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/06/filenames-and-case-sensitivity.html' title='Filenames and case sensitivity.'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8169620749554436833.post-8722175054180975787</id><published>2008-06-09T23:52:00.000-07:00</published><updated>2008-06-11T21:27:33.956-07:00</updated><title type='text'>Favicon with gae</title><content type='html'>While creating any new web application the one thing which I look at the most is the logs. The logs tend to give me a good idea of what is happening and in my case what I am doing wrong.&lt;br /&gt;&lt;br /&gt;One error message which I am getting a lot of is;&lt;br /&gt;INFO     2008-06-09 17:14:37,313 &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;dev&lt;/span&gt;_&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;appserver&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;py&lt;/span&gt;] "GET /&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;favicon&lt;/span&gt;.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;ico&lt;/span&gt; HTTP/1.1" 404 -&lt;br /&gt;&lt;br /&gt;This means a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;favicon&lt;/span&gt; is missing. So I went to the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;google&lt;/span&gt; application website and picked up the &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;favicon&lt;/span&gt; and dumped it in my application directory.&lt;br /&gt;&lt;a href="http://appengine.google.com/favicon.ico"&gt;http://appengine.google.com/favicon.ico&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I also needed to add to the file app.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;yaml&lt;/span&gt;.&lt;br /&gt;- url: /favicon.ico&lt;br /&gt;  static_files: static/images/favicon.ico&lt;br /&gt;  upload: static/images/favicon.ico&lt;br /&gt;&lt;br /&gt;This option allows any images to be automatically shown without having to be processed any further.&lt;br /&gt;&lt;br /&gt;A problem which I have found by doing this is the mime_type really needs to be set to something else, but it doesn't seem to work.&lt;br /&gt;&lt;br /&gt;You will need to ensure that this statement is placed before others that my overwrite it, so check the order in the yaml file&lt;br /&gt;&lt;br /&gt;More about this can be read here;&lt;br /&gt;&lt;a href="http://code.google.com/appengine/docs/configuringanapp.html"&gt;http://code.google.com/appengine/docs/configuringanapp.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8169620749554436833-8722175054180975787?l=movetogae.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://movetogae.blogspot.com/feeds/8722175054180975787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8169620749554436833&amp;postID=8722175054180975787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/8722175054180975787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8169620749554436833/posts/default/8722175054180975787'/><link rel='alternate' type='text/html' href='http://movetogae.blogspot.com/2008/06/favicon-with-gae.html' title='Favicon with gae'/><author><name>Wally</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry></feed>
