BarCamp Stuttgart

Dieses Wochenende fand das erste BarCamp Stuttgart statt. Gestern war ich auch dabei, bei meinem ersten BarCamp überhaupt. Ohne allzu genaue Vorstellung was mich eigentlich erwartet, habe ich mich auf den Weg nach Stuttgart gemacht.

Los gings mit einer großen Vorstellungsrunde, bei über 200 Teilnehmer hat das ne ganze Weile gedauert. Danach wurde die Sessions geplant, insgesamt standen 30 Sessions zur Auswahl.

Um 11:30 starteten die erste Sessions, ich entschied mich für Internationalisierung von Webservices mit Mario von kindo. kindo hat eine Strategie der frühzeitigen und umfassenden Internationalisierung verfolgt (Launch mit 6 Sprachen, am Schluss 17, wenn ich mich richtig erinnere). Diese Strategie war wohl mit ein Erfolgsfaktor, mit nur einer Sprache hätte die Plattform wahrscheinlich nur ein Drittel ihrer Nutzer. Interessant war der Punkt, dass man mit den Sprachen Englisch, Spanisch und Chinesisch über die Hälfte der Internetnutzer erreicht. Die Übersetzung von Rechtsdokumenten und die Befolgung von internationalen Rechtsvorschriften ist wohl ein großes Problem. Als StartUp kommt man vielleicht damit durch, wenn man sich zuerst mal um die lokalen Gesetze kümmert.

Nach dem Mittagessen gab’s die Session “Ideen im Social Commerce am Praxisbeispiel” mit Markus und Stephan. Über das vorgestellte Projekt codeME gab es geteilte Ansichten. Die Grundidee, ein Produkt zu erschaffen, das eine Brücke zwischen einer Online-Community und dem Real-Life schlägt, fand ich aber sehr interessant. Es wurde unter anderem die These aufgestellt, dass Produkte nicht nur wegen ihrer Eigenschaften, sondern auch wegen ihrer vermittelten Werte und Gruppenzugehörigkeit gekauft werden. Beispiel Harley-Davidson, technisch vielleicht nicht das beste Motorrad, aber ein Kult. Für einen Marketing-Menschen sicher ein alter Hut, aber trotzdem gut sich das nochmal bewusst zu machen.

Wie bei einem guten Event üblich, hat man die Qual der Wahl zwischen mehreren parallel laufenden Veranstaltungen. So auch bei Session #3 und #4. Zwei Sessions über Recht oder ein zweiteiliger SEO-Workshop? Ich endschied mich für “Neue Gesellschaftsform. Unternehmergesellschaft” mit Malte und “Web 2.0 und Recht. User Generated Content – Chance oder Risiken?” mit Carsten Ulbricht. Hier mal ein paar Stichpunkte:

  • Die neue Gesellschaftsform “Unternehmergesellschaft (haftungsbeschränkt)” kommt wohl (endlich) im November und hat einige Vorteile gegenüber der unter StartUps beliebten englischen Limited.
  • Haftung für User Generated Content: es gibt Pflichten für einen Diensteanbieter (Forenanbieter, Blogger, etc.) gibt, aber es durchaus möglich ist denen nachzukommen.
  • Verwendung von User Generated Content: eine AGB ist kein Persilschein, Vorsicht auf bei der Verwendung von Werken unter Creative Commons (Stichwort Persönlichkeitsrecht)

Zum Abschluss gabs noch eine Session “Gründungszuschuss und finnzielle Unterstützung vom Staat” mit Sascha Konietzke. Der Gründungszuschuss wird für eine Gründung aus der Arbeitslosigkeit gewährt, die Höhe richtet sich nach dem Arbeitslosengeld. Wenn ich es richtig verstanden habe, bedeutet “kein Anspruch auf ALG” automatisch “kein Anspruch auf Gründungszuschuss”. Doof für Studenten, allerdings gibt es für die andere Möglichkeiten zur Förderung, z.B. das Exist Gründerstipendium.

Alles in allem sehr interessante Sessions. Es ergaben sich auch eine Menge interessante Gespräche, besonders beim Abendessen. Apropos Abendessen: Für das leibliche Wohl war während der gesamten Veranstaltung bestens gesorgt. Überhaupt war ich positiv von der phantastischen Organisation überrascht, danke hierfür an Jan, Markus und Carsten und an die Sponsoren.

Mein Fazit: BarCamp ist ne tolle Sache! Das nächste Mal werde ich auch selbst eine Session zu halten und bin auf jeden Fall beide Tage dabei.

Dynamic paths for lazy people

Once your Django project has to run on multiple machines, the absolute paths in settings.py will drive you nuts.

A suggested solution to enhance portability (in German) is to define a PROJECT_ROOT.

import os
PROJECT_ROOT = os.path.dirname(__file__)

And then define absolute paths like this:

MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'site_media')
TEMPLATE_DIRS = (
    os.path.join(PROJECT_ROOT, 'templates'),
)

The downside is, typing os.path.join(PROJECT_ROOT,'foo') twice over and over again, will probably incur the wrath of the DRY gods. But don’t despair, we can do better:

import os
PROJECT_ROOT = os.path.dirname(__file__)
p = lambda *x: os.path.join(PROJECT_ROOT,*x)

Use it like this:

MEDIA_ROOT = p('static')
TEMPLATE_DIRS = (
    p('templates'),
)
MY_NESTED_PATH = p('x','y')

Pitfalls in Django unittests

I’m currently rewriting dwidder [1] and I just spent way to much time on a unit test for the registration view. These are the things that made me stumble:

  1. Write fixtures. Unit tests run on an empty database. Somewhere deep in your code might be a reference to one of the default applications, like django.contrib.sites, which will fail, because there is no default site object in your database.
  2. Don’t subclass unittest.TestCase. Use Django’s TestCase class instead. Otherwise you will miss all the fancy stuff, like automatic fixture loading.
  3. Import mail, not outbox. Django provides a dummy email outbox. But to make it work as expected, you have to import the mail module. If you import the outbox directly, it will always be empty.

[1] a now defunct site where you could tweet by sending an SMS to a German mobile phone number