<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:feedpress="https://feed.press/xmlns" version="2.0">
  <channel>
    <feedpress:locale>en</feedpress:locale>
    <atom:link rel="hub" href="http://feedpress.superfeedr.com/"/>
    <title>Same Con to Hoyci: Entries about Django</title>
    <link>https://www.unessa.net/en/hoyci/</link>
    <description>Most recent entries about Django from Same Con to Hoyci</description>
    <atom:link href="https://rss.unessa.net/UnessanetHoyciDjango" rel="self"/>
    <language>fi</language>
    <lastBuildDate>Mon, 22 Sep 2014 13:08:02 +0000</lastBuildDate>
    <item>
      <title>On Flying Starts</title>
      <link>https://www.unessa.net/en/hoyci/2014/09/flying-starts/</link>
      <description>What a start for a blog to end up on the homepage of Hacker News on the first day (with a &amp;lt;a title=&amp;quot;Django UI in 2005 vs Django UI in 2014&amp;quot; href=&amp;quot;/en/hoyci/2014/09/django-2005-2014/&amp;quot;&amp;gt;short post about Django UI&amp;lt;/a&amp;gt;). The good: it&amp;#39;s surprisingly easy to install a cache plugin to Wordpress. The bad: this blog is not hosted on the Slipmat.io server (because I don&amp;#39;t want to install PHP on it) so I missed a great chance to stress-test it.&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;https://www.unessa.net/static/kuvat/hoyci/screen-shot-2014-09-18-at-183557.png&amp;quot; alt=&amp;quot;254 Concurrent Users in Google Realtime Analytics&amp;quot; /&amp;gt;

To stay with the topic on flying starts, I&amp;#39;ve been quietly readying the first Slipmat.io tool, a site for taking and making requests in Mixify events, for its official launch. I opened the site for public three weeks ago and I&amp;#39;ve been working on it ever since. I&amp;#39;m keeping &amp;lt;a href=&amp;quot;http://slipmat.io/requests/about/release_notes/&amp;quot;&amp;gt;detailed public release notes&amp;lt;/a&amp;gt; to keep the users updated and also for myself as a way to get a feel of the progress.

Most non-DJs and furthermore non-Mixify users probably have no idea what this tool actually does, so &amp;lt;strong&amp;gt;let me explain it quickly&amp;lt;/strong&amp;gt;. &amp;lt;a href=&amp;quot;http://www.mixify.com/&amp;quot;&amp;gt;Mixify&amp;lt;/a&amp;gt; is a Web site where DJs can play for a live audience by streaming sound (and possibly also video) from their computer to Mixify which distributes it to listeners. Listeners can join these live events and chat with the DJ and other listeners. Many DJs take requests but it can sometimes be cumbersome trough the small chat window that can update really fast if there are lots of listeners actively chatting. MixifyRequests is a site where a DJ can make a request event and get the requests in a nice, organised way with a easy to use admin controls for marking requests played etc. Users can also vote for each others requests and there&amp;#39;s a bunch of other features, too. So that&amp;#39;s the idea in a nutshell.

&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;https://www.unessa.net/static/kuvat/hoyci/screen-shot-2014-09-22-at-183957-1024x548_1.png&amp;quot; alt=&amp;quot;MixifyRequests Homepage v0.9a&amp;quot; /&amp;gt;

I did the first part of the development in one 10 day sprint, with the idea of getting the first alpha version online in whatever state it would be after 10 days. (Because &amp;lt;strong&amp;gt;real developers ship&amp;lt;/strong&amp;gt;.) The first release had one big showstopper-bug[^1] which was due to my lazy testing of Facebook sign up process, but otherwise everything worked fine.

[^1]: Where users who signed up everywhere but from the homepage would get a 500 error after first login because the login view respected &amp;#39;next&amp;#39; parameter that would redirect them past the view that created an app-spesific user profile of which everything on the site assumed to be there. Thanks to &amp;lt;a href=&amp;quot;https://www.getsentry.com/&amp;quot;&amp;gt;Sentry&amp;lt;/a&amp;gt; I was informed about the bug immediately and got a hotfix in place in about 20 minutes but it had already affected dozens of users of which few of them didn&amp;#39;t come back that first night.

I decided to do kind of &amp;lt;strong&amp;gt;a soft launch&amp;lt;/strong&amp;gt; by only telling about the site to few selected DJs and by placing a disclaimer on top of every page with a note saying &amp;quot;&amp;lt;em&amp;gt;This site is not officially launched yet. Use it and have fun, but please do not advertise this yet in bigger scale. Thanks!&amp;lt;/em&amp;gt;&amp;quot;. So far this has worked really well and the userbase has been steadily growing at a rate of about 1-3 new users every day. Thanks to a small number of real users actively using the site, I&amp;#39;ve gotten loads of good usage data, and most importantly, I&amp;#39;ve been able to find and fix good number of bugs emerging from situations only real users can get to. (It never ceases to amaze me how actual users &amp;lt;em&amp;gt;always&amp;lt;/em&amp;gt; find ways to break code that was supposed to be tested really well.)

After the first sprint and the initial production push I changed the development cycle more towards daily productions pushes with the help of feature switches. Last week I sent out an email to all active DJs of the site asking volunteers as future betatesters. Got a few and now I can test and roll out new features in a controlled manner independently of production pushes. Feature switches enable me to keep the development branch in Mercurial very close to stable branch and push bugfixes,  not yet polished code and new features on the site daily without exposing anything to the public before the code is ready and tested (live with betatesters). When I want to publish a new feature, I go to the admin, flip a switch, and it&amp;#39;s live. Boom! Also, if there are any problems, I can just as easily flip the feature off again, and fix the problem with no hurry. &amp;lt;strong&amp;gt;Feature switches are awesome&amp;lt;/strong&amp;gt;. There are lots of different apps for Django for doing this, I chose &amp;lt;a href=&amp;quot;https://github.com/disqus/gargoyle&amp;quot;&amp;gt;Gargoyle&amp;lt;/a&amp;gt; (mainly because couldn&amp;#39;t figure out how to get the newer version called &amp;lt;a href=&amp;quot;https://github.com/disqus/gutter&amp;quot;&amp;gt;Gutter&amp;lt;/a&amp;gt; working). Big props to &amp;lt;a href=&amp;quot;https://disqus.com/&amp;quot;&amp;gt;Disqus&amp;lt;/a&amp;gt; folks for yet another awesome Open Source app.

If you&amp;#39;re interested in following the development of Slipmat.io site by this lone music loving Django developer, check out &amp;lt;a href=&amp;quot;https://twitter.com/slipmatio&amp;quot;&amp;gt;@slipmatio&amp;lt;/a&amp;gt; on Twitter, &amp;lt;a href=&amp;quot;https://www.facebook.com/slipmat.io&amp;quot;&amp;gt;Slipmat.io on Facebook&amp;lt;/a&amp;gt; and, of course, keep in touch with this blog. And if you have been, thanks for reading this far!

&amp;lt;small&amp;gt;(This post was originally posted to my other blog called Spinning Code.)&amp;lt;/small&amp;gt;
</description>
      <pubDate>Mon, 22 Sep 2014 13:08:02 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2014/09/flying-starts/</guid>
      <category>django</category>
      <category>featureswitches</category>
      <category>hackernews</category>
      <category>softlaunch</category>
    </item>
    <item>
      <title>Django UI in 2005 vs Django UI in 2014</title>
      <link>https://www.unessa.net/en/hoyci/2014/09/django-2005-2014/</link>
      <description>I stumbled across my favourite ever tech talk, &amp;lt;a href=&amp;quot;https://www.youtube.com/watch?v=cb9KDt9aXc8&amp;quot;&amp;gt;the legendary Snakes and Rubies event&amp;lt;/a&amp;gt; where Django met Rails, back in 2005. One thing caught my eye while re-watching every minute of the 3-hour event: the Django Web site and the Admin Site app look almost &amp;lt;em&amp;gt;exactly&amp;lt;/em&amp;gt; the same today than they did 9 years ago.

&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;/static/kuvat/hoyci/screen-shot-2014-09-17-at-225740.png&amp;quot; alt=&amp;quot;Screen capture image from Djangoproject.com as it was in 2005&amp;quot; /&amp;gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Still image of Djangoproject.com from the Snakes and Rubies video, 2005.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;p&amp;gt; 

&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;/static/kuvat/hoyci/screen-shot-2014-09-17-at-225028-1024x559.png&amp;quot; alt=&amp;quot;Screen Shot 2014-09-17 at 22.50.28&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Djangoproject.com, 2014.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;p&amp;gt;

&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;/static/kuvat/hoyci/screen-shot-2014-09-17-at-225247.png&amp;quot; alt=&amp;quot;Still image from Snakes and Rubies video&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;em&amp;gt;Still image of Django Admin Site from the Snakes and Rubies video, 2005.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;p&amp;gt;

&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;img class=&amp;quot;aligncenter size-full&amp;quot; src=&amp;quot;/static/kuvat/hoyci/screen-shot-2014-09-17-at-225844.png&amp;quot; alt=&amp;quot;Screen Shot 2014-09-17 at 22.58.44&amp;quot; /&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;p style=&amp;quot;text-align: center;&amp;quot;&amp;gt;&amp;lt;em&amp;gt;A screencapture of one Django Admin app (in Finnish -- it still talks also Welsh, among others), 2014.&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;&amp;amp;nbsp;&amp;lt;p&amp;gt;

&amp;lt;p&amp;gt;I don&amp;#39;t want to comment this in any other way but to notice that it&amp;#39;s quite amazing that Djangoproject.com still looks so good and I actually &amp;lt;em&amp;gt;like&amp;lt;/em&amp;gt; using it every single day -- it works really well. Way better than most newer homepages of other open source projects.&amp;lt;/p&amp;gt;

Granted, the Admin app looks a bit more dated, but not too much. And for its purpose, it too works still really well.

&amp;lt;a href=&amp;quot;http://wilsonminer.com/&amp;quot;&amp;gt;Wilson Miner&amp;lt;/a&amp;gt; is one kick-ass designer.

And Wilson, it&amp;#39;s &amp;lt;em&amp;gt;not&amp;lt;/em&amp;gt; just a Web site. :)

&amp;lt;small&amp;gt;(This post was originally published on my other blog called Spinning Code.)&amp;lt;/small&amp;gt;
</description>
      <pubDate>Thu, 18 Sep 2014 12:57:17 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2014/09/django-2005-2014/</guid>
      <category>design</category>
      <category>django</category>
      <category>snakesandrubies</category>
      <category>wilsonminer</category>
    </item>
    <item>
      <title>Redirect to Custom URL After Saving in Django Admin</title>
      <link>https://www.unessa.net/en/hoyci/2012/07/redirect-custom-url-after-saving/</link>
      <description>Here&amp;#39;s a quick and dirty admin hack that can save you *lots* of time if you&amp;#39;re used 
to browsing between editing objects in admin and vieving the results on a live site.

Put following `change_view`-method in your `admin.py` and now you can make links
to admin change page that return you back to where you came from:

```python

class BlogEntryAdmin(admin.ModelAdmin):

    ...

    def change_view(self, request, object_id, form_url=&amp;#39;&amp;#39;, extra_context=None):
        result = super(BlogEntryAdmin, self).change_view(request, object_id, form_url, extra_context)
        if request.GET.get(&amp;#39;return_to&amp;#39;, False):            
            result[&amp;#39;Location&amp;#39;] = request.GET[&amp;#39;return_to&amp;#39;]
        return result

```

In your template you&amp;#39;d have something like:

```django

{% if request.user.is_staff %}
    &amp;lt;a href=&amp;quot;/admin/blog/blogentry/{{ entry.pk }}/?return_to={{ entry.get_absolute_url }}&amp;quot;&amp;gt;Edit in admin&amp;lt;/a&amp;gt;
{% endif %}

```

Of course,  if you&amp;#39;re smart, you should convert any places that need this kind of functionality with frontend editing tools so you can forget going to the Admin in the first place. But meanwhile, those few lines of code may come in handy!
</description>
      <pubDate>Fri, 27 Jul 2012 02:31:55 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2012/07/redirect-custom-url-after-saving/</guid>
      <category>django</category>
      <category>admin</category>
      <category>tip</category>
    </item>
    <item>
      <title>Convention Over Configuration: Django Settings</title>
      <link>https://www.unessa.net/en/hoyci/2011/07/conventions-django-settings/</link>
      <description>I&amp;#39;ve been working with Django for over five years. Even though **I don&amp;#39;t consider myself as a programmer**, one of the advantages I seem to have over less experienced Django developers is that I&amp;#39;ve developed (together with &amp;lt;a href=&amp;quot;http://www.syneus.fi/&amp;quot; title=&amp;quot;Syneus Solutions -- In Finnish&amp;quot;&amp;gt;our team&amp;lt;/a&amp;gt;) strong conventions on how I work. This makes developing faster and generally more enjoyable.

Conventions are a tool for efficient workflow and to help read and understand code by other people better. Like so many tools, conventions too can be taken to extremes to the point when then they become magic (Rails, anyone), which in Python community is &amp;lt;a href=&amp;quot;http://www.reddit.com/r/Python/comments/ex54j/seeking_clarification_on_pylonsturbogearspyramid/c1bo1v5&amp;quot;&amp;gt;considered a bad practice&amp;lt;/a&amp;gt;.

The Python community has a name for code that feels right: that kind of code is _pythonic_. Good, pythonic conventions are logical and easy to remember but also explicit. In other words good conventions should make sense when you see them first time.

Django has many documented conventions (like that models should live in `models.py` and views in `views.py`) and even &amp;lt;a href=&amp;quot;https://docs.djangoproject.com/en/1.3/internals/contributing/#coding-style&amp;quot;&amp;gt;coding guidelines&amp;lt;/a&amp;gt; but there are many places that could use more stronger or better ones. This article is first in a series of discussing conventions related to Django. My goal is not to impose these opinnions to anyone but to share what I&amp;#39;ve learned while working with Django for over five years.

### Conventions for Django settings

Settings are not the sharpest tool in the Django shed. This article is not about crying over the design details, but to make working with them easier.

#### Always use relative paths

One of the first hurdles one comes up with Django settings is that they aren&amp;#39;t very portable. The `MEDIA_ROOT`, `STATIC_ROOT` and `TEMPLATE_DIRS` settings are problematic because the given examples are absolute paths (like `&amp;quot;/home/media/media.lawrence.com/media/&amp;quot;`). Simply by defining your paths as relative you can free yourself from this and move your projects around without breaking your settings.

A good convention is to define a `PROJECT_ROOT` setting and make every path in your settings relative to that root. Django settings file is just an ordinary Python module (well, not really, but in this respect it is) so you can use Python to do this:

```python

import os

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), &amp;#39;../../&amp;#39;))
MEDIA_ROOT = os.path.join(PROJECT_ROOT, &amp;#39;media&amp;#39;)

```

#### Turn settings into a package

Second problem you almost immediately have is a problem of multiple settings files. You can make your life a lot easier by moving settings from ´settings.py´ into several different files in a directory called settings. (Remember that to python `/path/to/your_project/settings.py` and `/path/to/your_project/settings/__init__.py` are the same thing.)

Also, because there usually is at least two almost equal settings files (for development and production), it&amp;#39;s smart to differentiate common settings and the ones that change for every machine. For this, you can move common settings to `common_settings.py` and then just import that to your other settings files:

```python

from common_settings import *

```

Now you can either add an empty `__init__.py` to the settings directory and refer to settings as `DJANGO_SETTINGS_MODULE=myproject.settings.myenv` or you can symlink the current environment settings as `__init__.py`.)

You could end up with a directory structure like this:

myproject/
manage.py
urls.py
settings/
__init__.py
common_settings.py
dev_adrian.py
dev_jacob.py
dev_simon.py
production.py
staging.py

Now you have one file for common settings and one for each individual environment and they all can live together in version control.

#### Store sensitive data outside of settings files

Another problematic thing about Django settings is that you&amp;#39;re supposed to put things like passwords and API-keys in there. For development environment this seldomly is a problem but what about version control and different settings for staging and production environments?

At this point it is a no-brainer: just put all sensitive data to a file outside of version control and import that:

```python

from secrets import *
```

Now we don&amp;#39;t need to think about storing sensitive data in the version control and we just need to make sure that `secrets.py` is properly protected in the production environment.

### Conclusion

Conventions are good and we need them. By using these few simple conventions you can make your Django projects more portable, secure and pythonic.

More important than the implemention details is that you follow _some_ conventions. I&amp;#39;m a strong believer of customization and that you should make your own conventions that best fit you yourself or your team. (This, obviously, is not something you shouldn&amp;#39;t do when writing your first Django apps but instead when you have been working with Django a while so that you have a general feeling of what works for you and what doesn&amp;#39;t.)

**Next in the series** I&amp;#39;ll talk about arranging the overall project structure and the tools that help keeping your project evolving.

Meanwhile, **any comments or tips that you&amp;#39;d like to share?**
</description>
      <pubDate>Tue, 19 Jul 2011 18:53:17 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2011/07/conventions-django-settings/</guid>
      <category>conventions</category>
      <category>bestpractices</category>
      <category>idioms</category>
      <category>django</category>
      <category>python</category>
    </item>
    <item>
      <title>Controlling iTunes from Python</title>
      <link>https://www.unessa.net/en/hoyci/2011/07/itunes-from-python/</link>
      <description>&amp;lt;a href=&amp;quot;http://www.flickr.com/photos/uninen/2448444839/&amp;quot; title=&amp;quot;django-tunes by Uninen, on Flickr&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://farm4.static.flickr.com/3127/2448444839_83b611b31e_m.jpg&amp;quot; width=&amp;quot;180&amp;quot; height=&amp;quot;240&amp;quot; alt=&amp;quot;django-tunes&amp;quot; style=&amp;quot;float: right; border: 1px solid blue;&amp;quot;&amp;gt;&amp;lt;/a&amp;gt;&amp;lt;a href=&amp;quot;http://www.flickr.com/photos/uninen/2448444839/&amp;quot;&amp;gt;Back in 2008&amp;lt;/a&amp;gt; I stumbled on then new API on Mac OS X called &amp;lt;a href=&amp;quot;http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ScriptingBridgeConcepts/Introduction/Introduction.html&amp;quot;&amp;gt;Scripting Bridge&amp;lt;/a&amp;gt; that enables easy controlling of Cocoa apps (like iTunes) from scripting languages like Python.

I wrote simple proof-of-concept Django app that turned my iPod touch into a remote control. It was cool, even though it didn&amp;#39;t do very much. Now there&amp;#39;s of course native iOS apps for this but I was somewhat surprised that there are still not much code for controlling iTunes via Web. I misplaced my original code so I decided to write it again -- just for fun.

So here&amp;#39;s a working class for controlling iTunes, in 58 lines of Python:

```python

# -*- coding: utf-8 -*-
from Foundation import *
from ScriptingBridge import *
 
class iTunes(object):
    &amp;quot;&amp;quot;&amp;quot;
    A helper class for interacting with iTunes on Mac OS X via Scripting 
    Bridge framework.

    To use this, launch iTunes and make sure a playlist or an album is ready.
    
    Usage:
    
    &amp;gt;&amp;gt;&amp;gt; player = iTunes()
    &amp;gt;&amp;gt;&amp;gt; player.status
    &amp;#39;playing&amp;#39;
    &amp;gt;&amp;gt;&amp;gt; player.current_track
    u&amp;#39;Maison Rilax&amp;#39;
    &amp;gt;&amp;gt;&amp;gt; player.current_album
    u&amp;#39;Maison Rilax&amp;#39;
    &amp;gt;&amp;gt;&amp;gt; player.current_artist
    u&amp;#39;Lemonator&amp;#39;
    &amp;gt;&amp;gt;&amp;gt; player.pause()
    &amp;gt;&amp;gt;&amp;gt; player.status
    &amp;#39;paused&amp;#39;
    &amp;gt;&amp;gt;&amp;gt; player.play()
    &amp;gt;&amp;gt;&amp;gt; player.next()
    &amp;gt;&amp;gt;&amp;gt; player.current_track
    u&amp;#39;Not Your Game&amp;#39;

    &amp;quot;&amp;quot;&amp;quot;
        
    def __init__(self):
        self.app = SBApplication.applicationWithBundleIdentifier_(&amp;quot;com.apple.iTunes&amp;quot;)

    def _get_status(self):
        if self.app.playerState() == 1800426320:
            return &amp;quot;playing&amp;quot;
        elif self.app.playerState() == 1800426352:
            return &amp;quot;paused&amp;quot;
        else:
            return &amp;quot;unknown&amp;quot;
    status = property(_get_status)
    
    def _get_current_track(self):
        return self.app.currentTrack().name()
    current_track = property(_get_current_track)
    
    def _get_current_artist(self):
        return self.app.currentTrack().artist()
    current_artist = property(_get_current_artist)

    def _get_current_album(self):
        return self.app.currentTrack().album()
    current_album = property(_get_current_album)

    def _set_volume(self, level):
        &amp;quot;&amp;quot;&amp;quot;
        level should be an integer between 0-100.
        &amp;quot;&amp;quot;&amp;quot;
        self.app.setSoundVolume_(level)
    
    def _get_volume(self):
        return self.app.soundVolume()
    volume = property(_get_volume, _set_volume)
        
    def pause(self):
        self.app.pause()
    
    def play(self):
        # According to AppleScript documentatin there should be a .play() 
        # method, but apparently there isn&amp;#39;t. So we fake it :)
        if self.status == &amp;quot;paused&amp;quot;:
            self.app.playpause()
    
    def next(self):
        self.app.nextTrack()

    def previous(self):
        self.app.previousTrack()

```

This could be easily refined into something potentially interesting like a native REST API for iTunes. The downside, of course, is that it only works on a Mac. (The &amp;lt;a href=&amp;quot;https://bitbucket.org/Uninen/django-tunes/src&amp;quot;&amp;gt;code is available also on BitBucket&amp;lt;/a&amp;gt;.)

A somewhat related is a project called &amp;lt;a href=&amp;quot;http://www.mopidy.com/&amp;quot;&amp;gt;Mopidy&amp;lt;/a&amp;gt;, which is a Python powered MPD music server for the awesome Spotify music service (that is suposed to finally be launching in US very soon, I hear.). I&amp;#39;m not at all familiar with &amp;lt;a href=&amp;quot;http://en.wikipedia.org/wiki/Music_Player_Daemon&amp;quot;&amp;gt;MPD&amp;lt;/a&amp;gt; but I think it wouldn&amp;#39;t be very difficult to build a Django frontend to a server like Mopidy to get a very slick Web-based interface to your music. Now *that* would be cool.
</description>
      <pubDate>Tue, 12 Jul 2011 03:08:24 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2011/07/itunes-from-python/</guid>
      <category>python</category>
      <category>django</category>
      <category>itunes</category>
      <category>scriptingbridge</category>
    </item>
    <item>
      <title>Django Release Party in Helsinki</title>
      <link>https://www.unessa.net/en/hoyci/2008/09/django-release-party/</link>
      <description>Heads up [Finnish Djangonauts](http://djangopeople.net/fi/)! Join us for celebrating the Django 1.0 release at Kaapelitehdas, Helsinki tomorrow evening (Saturday 6th) starting at 5 pm. More information on the location and attendees can be found on the [event wiki page](http://code.djangoproject.com/wiki/VersionOneReleasePartyHelsinki).

This is an open invite -- everyone is welcome!

See you there! :)
</description>
      <pubDate>Fri, 05 Sep 2008 17:53:24 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2008/09/django-release-party/</guid>
      <category>django</category>
      <category>releaseparty</category>
      <category>party</category>
      <category>helsinki</category>
    </item>
    <item>
      <title>EuroPython 2008, day 3</title>
      <link>https://www.unessa.net/en/hoyci/2008/07/europython-day-3/</link>
      <description>For me, the main theme for the third and last day of the conference was Django. Day started with a session by Honza Král about Django newforms admin, which gave me a pretty good idea what I have to do in preparing for the migration to the new admin interface. Later on the day I had many interesting discussions about varions Django-related things, including ideas about having something like Django release party here in Europe, too.

&amp;lt;a href=&amp;quot;http://www.flickr.com/photos/uninen/2655794578/&amp;quot; title=&amp;quot;We had time to visit the Vilnius TV tower&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://farm4.static.flickr.com/3183/2655794578_fcd0aba681_m.jpg&amp;quot; width=&amp;quot;180&amp;quot; height=&amp;quot;240&amp;quot; alt=&amp;quot;At Vilnius TV Tower&amp;quot; align=&amp;quot;right&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;Turns out there are quite a lot Djangonauts here in EuroPython, we just arent organized very well so most of us don&amp;#39;t know about each other. Lively after-conference discussions about career choises, Web Design and working with Django in general were definitely the high point of the conference so far.

A couple of hour later on the evening, decisions about quiet evening at the Sky Bar (at the 22nd floor of the conference hotel) were forgotten and, again, we headed for the old town. This time we ended up in some night club and, well, yeah, we had a great time :)
</description>
      <pubDate>Thu, 10 Jul 2008 15:47:00 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2008/07/europython-day-3/</guid>
      <category>django</category>
      <category>vilnius</category>
      <category>djangopeople</category>
      <category>europython</category>
      <category>europython2008</category>
    </item>
    <item>
      <title>EuroPython 2008, day 2</title>
      <link>https://www.unessa.net/en/hoyci/2008/07/europython-day-2/</link>
      <description>I skipped most of the sessions for the day as they didn&amp;#39;t seem even remotely interesting to me. But, the ones I did attend where really good.

[Last nights partying](http://www.flickr.com/photos/uninen/2647190250/) kept me pretty much in bed for better part of the morning. **Descriptor tutorial** by Raymond D. Hettinger was very good and I think it was actually the first conference tutorial ever that actually teached me something about programming and Python in general.

There was quite a bit testing-related material on the **Lightning talks**. One thing I wrote down on my notes was the phrase &amp;quot;Given enough tests, all bugs are shallow&amp;quot; (originally from Linus Torvalds in a form &amp;quot;Given enough eyeballs, all bugs are shallow&amp;quot;).

The **keynote talk** for the day was something that absolutely blew my mind. Hans Rosling talked about [Gapminder](http://www.gapminder.org/) and how statstical data and databases should be free. First thing that crossed my mind when listening to him was that &amp;quot;I wonder if Adrian Holovaty has ever talked to this guy -- they&amp;#39;d have much to talk about&amp;quot;. If you havent heard about Gapminder or Hans Rosling before, you should definitely [see his talk on last years TED conference](http://www.ted.com/index.php/talks/hans_rosling_shows_the_best_stats_you_ve_ever_seen.html). In Django-terms, thats some cool shit :)

### EuroPartyPython 2008, night 2

&amp;lt;a href=&amp;quot;http://www.flickr.com/photos/uninen/2650505935/&amp;quot; title=&amp;quot;Smile! by Uninen, on Flickr&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;http://farm4.static.flickr.com/3054/2650505935_691962ce17.jpg&amp;quot; width=&amp;quot;500&amp;quot; height=&amp;quot;375&amp;quot; alt=&amp;quot;Smile!&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;

After Roslings inspiring keynote there was the conference dinner. We ate well and headed again to down town Vilnius. (Todays dream team was [Edgars](http://djangopeople.net/edgars/), [Nicolas](http://djangopeople.net/nicolaslara/) and [me](http://djangopeople.net/uninen/).) The two girls from last night showed up as they had promised. We had great time with them for a couple of hours untill they left early. We stayed at the bar and eventually hooked up with [three cute Lithuanian girls](http://www.flickr.com/photos/uninen/2650505935/). Lots of dancing, beer and fun until the bar closed at 3 am. What a great night -- again!
</description>
      <pubDate>Wed, 09 Jul 2008 04:42:40 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2008/07/europython-day-2/</guid>
      <category>europython2008</category>
      <category>europython</category>
      <category>django</category>
      <category>hansrosling</category>
      <category>adrianholovaty</category>
      <category>testing</category>
      <category>python</category>
    </item>
    <item>
      <title>EuroPython 2008, day 1</title>
      <link>https://www.unessa.net/en/hoyci/2008/07/europython-day-1/</link>
      <description>After a long year of exiting projects and neverending days at the office, I found myself again from EuroPython conference at Vilnius. The first conference day was full of interesting happenings, mainly reviving old and creating new connections.

For all the sessions I attended during the day, I made some notes on few of them. Here are some basic notes about selected ones:

###Build an App in a Week  by Marcin Kaszynski

- [favpico.com](http://favpico.com/) etc
- Suprisingly many of the attendees (about half) use Django
- Use aDjango admin for users, too (not only for admins)
- &amp;quot;Commit early, commit often&amp;quot;
- Share code only via vcs
- Use conventions
- @with_template decorator
- Note: you can use admin docs (template name)
- Tests Do save time
- self.login(), get, find
- coverage.py
- Instant Django

This talk was interesting but didn&amp;#39;t really give much new stuff (at least for me). There was a discussion about how it makes sense to use convention of naming templates like `app/viewname.html` but I pointed out that if you for some reason want to part from that convention (that I believe most Django developers use), you can just point Django admin site help section to your designer and just document the fact in your modeldocs. No phone calls necassary still and you can have full control of your customized software.

### My God, it&amp;#39;s Full of Files by Tommi Virtanen

- &amp;quot;I want to work with files in a uniform way no matter where they are&amp;quot;
- path.py
- eagain.net

This talk was interesting, but we clearly need someone that says &amp;quot;yes, I can do this&amp;quot;. I, for one, will buy a beer to anyone who makes file- and directory handling more uniform and easier with Python.

### py.test -- Rapid Testing with Minimal Effort by Holger Krekel

- looping tests
- HTML generation
- javascript tests

This talk was really interesting. It made me want to try py.test with Django test framework but I suppose that it&amp;#39;s not compatible. The talk also made me miss my old two-display setup. Automatically looping tests are very neat.

### Data Portability and Python  -- Christian Scholz

- OpenId
- Yadis
- Oauth
- FOAF
- RDF
- microformats
- pydataportability.net

Very nice talk in every possible way, but there were nothing new for me this time.

### Keynote, Guido van Rossum

- &amp;quot;Open source needs to move or die&amp;quot;
- what breaks and why
- new features
    - argument annotations
    - abstract base classes
    - extended iterable unpacking
    - new string format method
- enables future evolution
- 2to3 tool
- switch when 1) youre ready and 2) all your dependencies have been ported
- &amp;quot;well help libraries to upgrade&amp;quot;
- do now
- use dict.iterkeys()
    - &amp;quot;Django has been separating unicode for. years now&amp;quot;
    - 2.6 warns you with -3 flag
- q&amp;amp;a
     - documentation is changing (will be up for 2.6)
     -  distributing different versions is easy

Quido has been brainwashing us. Only a couple of more times this same time and I&amp;#39;ll actually agree most of the features and if want to try them.

For me this day was a success. Made a couple of new friends, hooked up with old friends and got to listen sme brilliant sessions. During the night we went to a couple of small bars in the old town nd had even more fun.

The only unsure thing about this evening was if we&amp;#39;re going to see the girls again or not :)
</description>
      <pubDate>Tue, 08 Jul 2008 00:02:46 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2008/07/europython-day-1/</guid>
      <category>django</category>
      <category>europython</category>
      <category>europython2008</category>
      <category>vilna</category>
      <category>vilnius</category>
    </item>
    <item>
      <title>We Are Django</title>
      <link>https://www.unessa.net/en/hoyci/2008/01/we-are-django/</link>
      <description>I&amp;#39;ve always thought that the community is one of the greatest things about Django. Not because Django isn&amp;#39;t great but because the people are just so awesome! [Django People](http://djangopeople.net/) is a brilliant new site by [Simon Willison](http://simonwillison.net/) and [Natalie Downe](http://notes.natbat.net/) which brings together Djangonauts all over the world. &amp;lt;small&amp;gt;(Interestingly, I was talking about _exactly_ this same idea yesterday with my friend, in the lines of &amp;quot;there should definitely be something like that&amp;quot;. Great minds think alike (I wish) :)&amp;lt;/small&amp;gt;

I had the pleasure of meeting Simon and Natalie during the Europython conference [last summer](/en/hoyci/2007/07/europython-2007/). Like every other Django people at the conference, they were super-nice and fun to share thoughts with. The various conversations we had with the Web-gang there were definitely one of the highlights of my last year. I hope that Django People will help in finding more same-minded people, both near you and when traveling around the world.

If you are Djangonaut, add yourself to the site! And when you do, please include your picture and some information about yourself. It&amp;#39;s so much nicer to look at real faces than empty rectangles :)

Here&amp;#39;s to many more Django friends.
</description>
      <pubDate>Wed, 23 Jan 2008 05:36:08 +0000</pubDate>
      <guid>https://www.unessa.net/en/hoyci/2008/01/we-are-django/</guid>
      <category>django</category>
      <category>djangopeople</category>
      <category>friends</category>
      <category>simonwillison</category>
      <category>nataliedowne</category>
      <category>community</category>
    </item>
  </channel>
</rss>
