comments disabled
since this blog is mostly on a hiatus anyway, and spammers are annoying the hell out of me, comments are disabled for this one.
trackbacks disabled
I disabled trackbacks due to trackback spamming. Trackback sucks as a protocol anyway and I don't want to put in any more work in such a sucky protocol.
A few small updates to PyDS
There was a bit of activity on Python Desktop Server recently. Nothing big - only small fixes to make it more compliant with HTML4 strict, as Jutta is working on her blog again.
Reason for the Silence
Currently there isn't much action in my own projects - at least not in those that are documented on this blog. The reason is, I am mostly working with Django - and moved over my main blog from it's Wordpress incarnation into something written by me, based on Django. It's fun to write a CMS again - especially since I did a lot of other stuff in between in that area with several other systems, so it went much faster than last time, where I had to start from zero. That Django is quite a nice framework for CMS stuff helps, of course. I have a Trac instance for all my Django stuff. So you can try it all out.
Simpler Lazy Evaluation with Python
If you know before what kind of value your function call will return, you can build a very simple decorator for functions or methods that will turn them into lazy evaluation ones. It goes like this: class NoneSoFar: pass> NoneSoFar = NoneSoFar()> def lazy(func, resultclass):> class __proxy__:> def __init__(self, args, kw):> self.__func = func> self.__args = args> self.__kw = kw> self.__result = NoneSoFar> for (k, v) in resultclass.__dict__.items():> setattr(self, k, self.__promise__(v))> def __promise__(self, func):> def __wrapper__(*args, **kw):> if self.__result is NoneSoFar:> self.__result = self.__func(*self.__args, **self.__kw)> return func(self.__result, *args, **kw)> return __wrapper__> def __wrapper__(*args, **kw):> return __proxy__(args, kw)> return __wrapper__ To use it is very simple and straight forward: def anton(a,b):> return a+b> anton = lazy(anton, int)> print type(anton(5,6))> print str(anton(5,6)) This should print the __proxy__ instance in the first line and the real value in the second one. The proxy class automatically defines special methods for every method that's defined on the result type. This works best for builtin types, for more complex types you would have to take precautions not to stomp over important attributes. And as you can see this won't help with ambigiously defined functions - anton could work with strings, too, but the lazy stuff will only install handlers for int magic methods. But as the title writes: it's about simpler lazy evaluation, not the full thing
new stuff in TooFPy
There are quite some checkins from today. Two noteable changes: TooFPy now can make use of Django, I already wrote about that. when started with -l, TooFPy will automatically restart the toolserver when it detects any changes in the used modules (tools, wsgi-scripts and system modules). Quite handy for development setups.
combining TooFPy and Django
I just wrote the linked document that describes how and why to combine TooFpy and Django. It's a quite nice combination - on the one hand you get a very powerfull web application framework for TooFPy, on the other hand you get a very powerfull webservice framework for Django. Combined with the builtin high-performance webserver and all that in a pure python package. Quite nice, I think
Trac rules
Yep. It rules. Definitely. So I just set up a trac instance for TooFPy. This is just a first shot at it, so don't expect too much documentation, yet. But I will improve that situation and try to add stuff from this site and from my harddisc (and my brain) to the wiki. At least you now have a decent source browser, a nice timeline for commits and a ticket system to bug me with requests
running Django with lighttpd and FCGI
I cooked up a short document on how to get this going. It's over on my main blog. (and WSGI just plain rocks, this was allmost too easy to do) Update: I have a second document online that talks about load distribution and provides a much nicer django-fcgi.py script to control your FCGI servers outside of the webserver.
just "dicking around in a wiki"?
Is it just me or do others think that it's rather devalueing to call the open work on the Atom format in the Wiki just dicking around? When we were just dicking around, people like Mark called Atom the best thing since sliced bread and called for implementations and denounced RSS as something ugly and bad. Now that people implemented stuff on the 0.3 version, it's called just dicking around in a wiki. Oh, and the flamewars start again, of course. This is really rather silly. Oh well, I go back to my ugly and bad - but working - formats, thank you very much.
RBL == Incompetence
Remember my rant about the incompetence of SORBS? They got company: rfc-ignorant.org lists .de as a complete domain, because they don't like the whois-interface of the .de toplevel. No, there is no RFC that demands a working whois for domains - especially it's nothing that's in the mail RFCs. But they don't like it and so they just throw it into their silly list. Another RBL you can't use. Actually I am quite sure that all RBL providers are either technically incompetent or totally retarded idiots and sociopaths. Didn't ever meet someone who isn't either of one ...
TooFPy 0.3.6 released
This is just the long waiting release of TooFPy - nothing new in the last months, I just hadn't done too much testing with it and so delayed the release until it got a bit more usage. The main changes of this release are: WSGI support (TooFpy can function as a WSGI server) Reactor Chain pattern to add hooks into the code in a non-destructive and non-disruptive manner (already used for server start/stop, tuple deleting and for request rewriting) better authentication stuff (IP-based, HTTP-based, RSA certificate based, user/group definitions) refactoring of the protocol stuff so that it is easily extended for new RPC style protocols abstract RPC client that can make use of all new features better placement of files under Windows (APPDATA is used) refactoring of documentation and WSDL generating code to make use of TooFPy factory tools and so give those more testing (they actually work now!)
The Incompetence of SORBS.NET
SORBS.NET runs a RBL service that admins foolish enough can use to block mail from supposedly corrupted or spammy servers. From time to time systems of mine are listed in that list. Usually out of rather stupid reasons: one system was listed because it ran FTP services on some high port numbers and that's defined as being taken over by spammers for the SORBS.NET admins. A recent listing just gives the reason that there are supposedly unknown trojans running on that server - yeah, sure, you don't know what it is but you define it as a trojan. Suckers. So you think you go and check why your server is listed. You reach their site and check the database - enter the IP and send the form. You get a message that you need to register first. What the fuck? They are listing my machine, I want to know why it is listed and they require a registration? When you click the register button, you are asked a lot of questions. And several of those are required fields. Of course you only get told this after sending the form with emtpy fields - it would be far too much work for those fools to put visible marks on required fields ... What are those required fields? eMail, postal address, phone number (that you only get told after you send an otherwise fully filld form - no, they don't include it in their first report on required fields), name, skill level. Why the fuck do they need my address and my phone number? This is just plain silly. Filter-fascists ... After you jump through their hoops, you can check the database (of course you need to log in after validating their registration - doing onestep-validation-and-registration would be far to complicated for those retards to do). Then you get the lousy excuse they have for listing your server. Delisting? Yes, you can do that - but don't think it's as easy as pressing a button. No, you must do that from the machine that is listed in the RBL. Yes, of course you need to go through their poor excuse for a web interface for that, too. Yes, it sucks with Lynx - and of course we all run GUI environments on our servers, don't we? I remember on my first encounter with this system that mail via support forms bounced because of broken mail routing. Yeah, they are a real well on incompetence. Bogon field of galactic magnitude ... Sorry, but SORBS.NET is the most shitty implementation of a RBL service I ever found. No transparency on what they are listing and why, not easy management of delisting or listing or information gathering and a overall very luserish attitude towards the whole stuff. So if you are one of those silly mail admins that uses SORBS.NET for mail filtering: don't try to ask me anything. I won't help you and won't jump through any more hoops just to deliver mail to your inbox. It's bad enough we have to cope with spammers and broken software - we don't need the additional burden of totally incompetent idiots running broken RBLs. If I get a bounce on a mail I send because of SORBS.NET filtering, you are out.
ActiveStorage now has a SQLite backend
Thanks to Yaroslav Samchu, asfPY now has a SQLite backend. He sent in a first take at this backend and I completed the code so that it now runs with only a few glitches left. One glitch is the support for autoincrementing columns - this isn't done in an atomic way due to the fact that the pysqlite interface (at lest the 1.something series) doesn't support atomic update and fetch on those columns and so I had to do a select max() and a combined insert. The other glitch is support for data types. SQLite has only it's flexible data type handling and due to that currently the support for long integers is broken - they are damaged on store and you never get back a long integer on fetch. Due to this the test cases regarding long integers don't work. Otherwise it's running fine. It's as slow as the other backends, though. There is definitely optimization needed in asfPY. But hey, it's just some 0.something version
PythonEggs
Yes! That's exactly what we need - a simple way to push applications out the door. Great stuff.
Common Lisp
Common Lisp Projects
Schemers
Schemers Org
Python
The Python Language Homepage
muensterland.org
German Weblogcommunity for Radio, bzero and PyDS users
Slashdot
Slashdot - News for Nerds (and Trolls)
Python Desktop Server
The Python Desktop Server homepage.
Python Community Server
The home of the Python Community Server
Creating the OPML blogroll story
This is the screen when creating the OPML blogroll.
That's your cloud after the new message.
See the similarities? This is your cloud page with the new posting tacked to the top.
your weblog is your desktop
You always see everything you post in your weblog on your desktop. Ok, it doesn't look exactly like the outside, the cloud, but it's similar enough.
post an item from a newsfeed
After clicking the "blog" icon on an item in your newsfeeds, you can add a comment and post your own entry, based on this item.
stories are shown as the user will see them
Same as with the weblog, after editing the story you are shown the rendered output on your desktop.
Now write some essay
With some stupid content. Yours could be more interesting ...
after adding the macro
After adding your macro, you usually see this screen - your parsed and added macro source and the edit box below. Sometimes you see a traceback with an error message. Better fix the error, if that happens.
lets write our first macro
This shows how to add a first macro to the system. This isn't something complicated, but you need to know python for it.
This will be the admin user
This will be an user that is allowed to make changes to the system from remote places. You need to enable remote access in your configuration, too.
add a user for remote access
If you want to access your machine from the outside, add a user that has the needed rights.


name: MAGPIE