Python3 Implementation in Haskell

Berp

Der Interpreter übersetzt den Python Code in Haskell Code. Diesen kann man dann mit GHCi interpretiert laufen lassen, oder mit einem Compiler in Maschinen Code übersetzten.

Tags: programmierung python | am 13.08.2010 um 20:11 Uhr.

Tornado 1.0

Vor zwei Wochen noch hatte ich im Issue-Tracker ein Kommentar geschrieben und gefragt, wie es mit der 0.3er Version aussieht. Die Version 0.2 war immerhin bereits 9 Monate alt. Nun erfolgte diese Woche der Sprung von 0.2 auf 1.0.

Das Archlinux Package im AUR ist bereits geupdated. Auf dem Server werde ich das Update nächste Woche oder so einspielen. Mal sehen ob der Blog dann noch funktioniert.

Tags: python | am 28.07.2010 um 17:06 Uhr.

Neues an der Python Front

Tags: programmierung python | am 13.04.2010 um 21:40 Uhr.

Python Unterricht bei Google

Link

Keine Ahnung ob das was taugt. Bin noch nicht dazu gekommen mir das näher anzusehen.

Tags: programmierung python | am 19.03.2010 um 22:47 Uhr.

Entity Framework, Objekte von einem Context/Entities-Instanz zu einer zweiten kopieren

Vielleicht habe ich ja irgendwelche .NET Experten die sich bereits mit dem Entity Framework auseinandergesetzt haben unter meinen Lesern. Ich bin auf der suche nach einem Äquivalent zu folgendem Python Code:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from sqlalchemy import create_engine, Table, Column, Integer, Unicode, MetaData
from sqlalchemy.orm import sessionmaker, mapper

e1 = create_engine('sqlite:///:memory:', echo=True)
e2 = create_engine('sqlite:///:memory:', echo=True)

metadata = MetaData()

users_table = Table('users', metadata,
        Column('id', Integer, primary_key=True, autoincrement=True),
        Column('name', Unicode(40))
)

metadata.create_all(e1)
metadata.create_all(e2)

class User(object):
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return u'<User(%s)>' % (self.name)

mapper(User, users_table)

Session1 = sessionmaker(bind=e1)
Session2 = sessionmaker(bind=e2)

session1 = Session1()
session2 = Session2()

u1 = User('foo')
u2 = User('bar')

session1.add(u1)
session1.add(u2)
session1.commit()

u1 = session1.query(User).get(1)
u2 = session1.query(User).get(2)

session2.merge(u1)
session2.merge(u2)

print session1.query(User).all()
print session2.query(User).all()

Speziell die Merge Funktion fehlt beim Entity Framework. Ich kann zwar .Detach() und .Attach() ausführen, aber dadurch wird das Object/Entity leider nicht in der zweiten Datenbank erstellt.

Tags: programmierung python c# | am 23.11.2009 um 19:27 Uhr.

SqlAlchemy gotcha order_by desc

Ich fand in SqlAlchemy anfangs keine Möglichkeit ein simples order_by foo desc auszuführen. In der Query Dokumentation und auch in der ORM Doku war da einfach nichts zu finden. Also wurde ich kreativ und fügte [:-11:-1] zu Session.query(Post).order_by(Post.pub_date) hinzu. Das drehte mir zwar mein Ergebnis so um wie ich das wollte. Allerdings wurde das Limit 10 nicht im Sql-Query ausgeführt sondern erst danach pythonisch. Das ist hat auf die Performance natürlich nicht so tolle Auswirkungen.

Nun bin ich heute aber zufällig auf die desc Funktion in der SqlSoap Doku aufmerksam geworden.

1
2
3
>>> from sqlalchemy import or_, and_, desc
>>> where = or_(db.users.name=='Bhargan Basepair', db.users.email=='student@example.edu')
>>> db.users.filter(where).order_by(desc(db.users.name)).all()

Von ~10 req/sec auf ~30 req/sec. Abend gerettet. Nun habe ich mir mein Bier verdient.

Tags: programmierung python | am 21.11.2009 um 20:01 Uhr.

Tags

Ich muss sagen SqlAlchemy gefällt mir immer noch besser.

Gut, ich hatte zuvor eine Weile mit Microsofts Entity Framework gearbeitet. Vielleicht habe ich deshalb meine Ansprüche weit nach unten reguliert.

Jedenfalls kann ich nun meinen Beiträgen wieder Tags zuweisen. Auch wenn ich von dieser Funktion vielleicht nicht all zu oft Gebrauch mache.

Tags: programmierung python | am 11.11.2009 um 21:51 Uhr.

Kurzer Python Rant

Da fügen die mit 2.6 so tolle Keywords wie with ein, vergessen dann aber so Module wie gzip oder tarfile entsprechend anzupassen. Wenigstens gibt es die entsprechenden Bugreports. Die wohl aber erst mit Version 2.7 geschlossen werden sollen.

Abgesehen davon ist Python natürlich toll.

Tags: programmierung python | am 07.07.2009 um 14:53 Uhr.

Google will Python bis zu 5x schneller machen

Na dann viel Erfolg.

Tags: python | am 27.03.2009 um 11:38 Uhr.

Ipython und Gvim - synchronisation

Als Python-Entwickler testet man öfters mal bestimmte Codestücke in der Python-Konsole, oder noch besser in Ipython. Ipython ist eine verbesserte Python Konsole, die so kleine Nettigkeiten wie etwa die Tab-Vervollständigung mitliefert.

Ipython mit Tab-Vervollständigung

Außerdem lassen sich in Ipython sogenannte Magic-Befehle verwenden. So lässt sich mit %edit blubb.py eine Datei im $EDITOR öffnen. Das Problem dabei ist allerdings, dass man nicht auf das was man im Editor geschrieben hat zugreifen kann. Abhilfe schafft da die ipy_vimserver Extension.

Damit man diese verwenden kann muss man noch dieses kleine Vim-Addon unter .vim/after/ftplugin/python ablegen.

Anschließend öffnet man IPython und aktiviert die Extension:

1
2
import ipy_vimserver
ipy_vimserver.setup('myinstancename')

Alternativ kann man das auch in ~/.ipython/ipy_user_conf.py fix hinterlegen, damit das bei jedem Start von IPython ausgeführt wird.

Nun erhält man zusätzlich zu %edit den %vim filename Befehl. Dieser öffnet eine neue Gvim Instanz mit der angegebenen Datei. Drückt man nun F5 so wird der Quellcode in Ipython ausgeführt und anschließend kann man in der Ipython Konsole auch auf alle in der mit %vim geöffneten Datei definierten Methoden und Klassen zugreifen.

Kleiner Hinweis: Hat man F5 bereits gemappt, wird das nicht funktionieren. Entweder man ändert das Mapping in ipy.vim oder man führt den Befehl via :python run_this_file() aus.

Tags: programmierung python | am 28.10.2008 um 09:42 Uhr.