henso.com
Home
Archive
Search

rss feed for this page

DELI
HLM

LNGR
EURN
OON
CHLM
POOL
ELPH
RIST
SOFA
SENS
P3K
FM4
SCRP
MAL
RNS
GDNY
ELEG
OSNS
SLSH

Mozilla, baby!

antville.org
 Thursday, 1. March 2001 

Today I'm putting together the first version of the Hop app that runs this site. It'll be primarily interesting to Hop developers though, since it's just a very raw proof of concept. Actually, it's interesting not because it's a blogging tool - there are Hop-based weblog-type apps which are much more elaborate -, but because it uses a whole new skin-based application framework that cuts down the amount of code quite a bit.

The code is in the CVS now and you can browse through it. Still not ready to be packaged, sorry bout that. The code by itself may be confusing because there's some cross-prototype action going on, so here's a linked reading guide:

Every HopObject in this application has three basic modes in which it can be accessed via a browser. They are defined by three files in the hopobject prototype: main.hac, edit.hac, and create.hac and inherited by every other prototype.

main.hac lets people view an object (like you are doing right now with this page), edit.hac lets them edit it, and create.hac lets them create new child objects beneath it.

The first thing each of this action does is to set a global page skin in the response object to be rendered after the request is done. By doing so, we delegate repeating layout stuff and can concentrate on what's special for the object and action we're dealing with. That's why you won't find a lot of HTML markup in the henso code.

The next thing is that a function is called on the current HopObject to find out if the current user is allowed to perform this action. In the hopobject version of these functions, main.hac may be called by all users while edit.hac and create.hac are generally prohibited. Application prototypes can override this to control user access. For example, this is the code that makes a weblog item editable by its author, while anybody who is logged in may create a comment on it. Of course, real world application will have much more complex rules, but they will fit nicely into this scheme.

If the current action is allowed for the user on the current object, a function corresponding to the action is called on the object. Again, the functions defined in the hopobject prototype do nothing except for throwing out a "not implemented" (which will look like this, thanks to the global skin set earlier). Application prototypes can override either the function or the skin or both to make something out of the action. For example, when a new weblog item is created, function weblog.doCreate() will render weblogitem/create.skin. Note that in typical Hop fashion, we check if the user submitted some meaningful data. If so, we do what we have to and redirect to the main view. If not, we display the object editor.

Skins render and display content. Skins are pieces of layout that can be overridden on an application level to customize the application, although this isn't implemented in the current version of this app. For example, here is a skin that displays a comment, while this one renders an editor for it.

The <% ... %> tags inside the skins are called macros. Macro names consist of a handler name and the macro name, separated by a dot (".") and a list of attributes. Possible handler names are "this" to access a macro in the current object, a prototype name to access a macro in the next object with that prototype down the request path, "request" and "response" to access data in the request and response objects, an finally "param" to access properties of the optional second argument in the renderSkin-functions. If a macro doesn't have a handler name it is considered a global macro defined in the global prototype.

There are two kinds of macros, task-specific ones and generic ones. The task-specific ones reside in application prototypes and know exactly what they do, like the loopLogItems macro in the weblog prototype. The generic macros reside in the hopobject prototype and perform tasks that are possible on any kind of object, like getting a property by name, getting an editor for a property, rendering a link or a skin on the object, or looping through child objects.

That's it for today. Let me know if anything is unclear. Tomorrow there'll be more, including something to download and play with.

In other news, I also gave Greymatter a try today. It's a very nice system. The approach is very different from what I'm doing, however. To sum it up in one sentence, Greymatter is optimized to set up individual blogs in a generic hosting environment, while Hop based systems are more difficult to install, but are geared towards high performance multi-site stuff (think Manila or Blogger).

Today's Hop snapshot introduces two new functions: res.writeBinary() and countActiveUsers().

lnk + 4 cmt (chris, earl, slauti, roland)
 Wednesday, 28. February 2001 

ORF ON: "Nach Informationen der APA gab es am Dienstagmittag ein Gespräch im Palais Dietrichstein [...] an dem neben der FPÖ-Chefin auch FPÖ-Klubchef Peter Westenthaler und "News"-Chef Fellner teilnahmen. "Das stimmt ganz sicher nicht", sagte Fellner dazu. Im Büro der Vizekanzlerin wird dieses Treffen bestätigt, über den Inhalt gab es aber keine Informationen. Fellner bleibt auch bei einer weiteren Anfrage dabei, dass dieses Treffen nicht stattgefunden habe: "Ich weiß nicht, ob ein Klon von mir unterwegs ist, aber in Wien schwirren derzeit Gerüchte der absurdesten Art herum.""

Wolfgang Fellner ein schwabbliges Verhältis zur Wahrheit? Das kann ich mir nicht vorstellen.

Friedhof der Kuscheldomains: Man wacht ja oft mit Scheisse im Kopf auf, Träume die sich mit den ersten Gedanken zu Hirnrissigkeiten der besonderen Art verbinden. Ich habe mir heute im Halbschlaf eingebildet, die Domains, die ich reserviert und nie verwendet habe, würden wie ungeborene Kinder in schlechten Anti-Abtreibungs-Filmen nach mir rufen.

Meine Doch-nicht-Domains sind mir doppelt peinlich, erstens: wie konnte ich sowas reservieren, zweitens: ich hab ja überhaupt nichts durchgezogen von dem was ich vorhatte. Aber was soll's, jetzt muss das auf den Tisch, vielleicht wird's nachher besser.

Angefangen hat alles mit bewohnt.at - Anja, Tobi und ich hatten grosse Pläne, bevor dann zufällig helma entstand. Zwei Jahre später die gleiche Geschichte mit salon.at, nur war ich da schon allein. Bei anderen Domains gab's überhaupt nie einen Plan, nicht mal eine Idee: frischfleisch.at ist so ein Fall, und was ich mir bei privateweb.org dachte weiss ich auch nicht mehr. haiderwatch.com (eine coole Animation ist besser als nichts) erinnert mich daran, dass ich meine Potentiale in einem eher begrenzten Rahmen umgesetzt habe. hensomatic.com war doch etwas zu nah an Sensomatic.com, und ähnliches gilt wohl für openblogger.org, euroblog.com und hopster.org.

Naja, immerhin gibt's auch Lichtblicke wie Murmel-Comics.org (Kultursponsoring par excellence), Yugoramsch.com (es war eine schöne Zeit) und noch ein paar hundert andere.

Übrigens: Hop just got faster.

Plus: Erste heissersehnte Worte über type.properties.

lnk + 8 cmt (michi, chris, hns, kris, slauti)
 Tuesday, 27. February 2001 

Something I miss on my CD player is a simple button that says "Stop playing after this track has finished". This would make it easier for me to get out of the house when I should. At least I think it would.

lnk + 3 cmt (mkt, hns, chronistin)
 Monday, 26. February 2001 

Ouch! I feel the pain, I really do. Two years ago I worked on a project with Blue-C. That's when I first met Hannes who was working there at the time. I ended up renouncing to the 5% stake in the company they founded together with Sysis because they seemed to think I should be able to handle all development by myself. There was a big sense of Let's-IPO-and-get-rich in the air. It's funny to feel sorry for somebody you never liked.

Sysis seems to do very well, which is great because they're really cool people.

There's interesting stuff on salon.at/news. This is my own little Moreover clone. Never had the time to launch it, and it's running on the back burner, just spidering Fuzo, Heise and The Register.

I'd like to download the Revolution Beta, but the terms are friggin' unacceptable. For beginners, there's no way to opt out of their marketing mail feed.

lnk + 2 cmt (earl, hns)

Laut a*log und Sofa gab's gestern Probleme bei Blogger. Ich hab mich schon gewundert über die Absenz von Updates auf manchen Logs gestern.

"The log file for database 'pyra' is full" ist keine triviale Fehlermeldung, wie man vermuten könnte. Beim log file handelt es sich nämlich um das transaction log, jenes File, in das alle Änderungen und Updates geschrieben werden bevor sie in der eigentlichen Datenbank durchgeführt werden. In regelmässigen Abständen finden sogenannte Checkpoints statt, bei denen die Datenbank mit dem Logfile abgeglichen wird. Ohne Logfile also keine Updates, und löscht man das transaction log, dann verliert man alle Änderungen seit dem letzten Checkpoint.

Erstaunlich finde ich allerdings, dass Microsoft SQL-Server nicht in der Lage ist, Logfiles zu rotieren, d.h. ein neues anzufangen wenn das alte eine gewisse Größe erreicht wie z.b. die Sleepycat Berkeley DB, die der Hop als Alternative zu externen relationalen DBs verwenden kann.

lnk + 9 cmt (chronistin, chris, hns, h_h)
 Sunday, 25. February 2001 

The downside of what they call "ongoing commitment" is you can't explore new stuff because, well, you're committed. I'll put my ongoing commitment to rest for today and go for a walk now.

Nice Steve Jobs quote from a 5 year old Wired interview: "When you're young, you look at television and think, There's a conspiracy. The networks have conspired to dumb us down. But when you get a little older, you realize that's not true. The networks are in business to give people exactly what they want. That's a far more depressing thought." (via FoRK)
I guess you could argue that "what people want" does not exist as something solid but rather liquid and castable, but yes, the thaught is depressing.

I didn't use any of the pickup lines at the party yesterday. Sorry, Chris! The best pickup move I made was posing as DJ while Klaus went for beer. The party was at a weird 70ies Dorfwirtshaus-like location in 2nd district, and the girl who's birthday it was had a silver balloon attached to the shoulder strap of her shirt, hovering above her all night. Somehow this made an impression on me.

Evelyn put in a Jay Jay Johanson CD. This is extremely beautiful music, and oh, h_h covered it on Euroranch. At first hearing I thaught this was a black female singer, but it's actually a swedish guy.

lnk + 4 cmt (mkt, hns, gung)
 Saturday, 24. February 2001 

Problem gefunden und beseitigt, und natürlich bin ich wieder mal meinem eigenen Schlauseinwollen zum Opfer gefallen. Müde und glücklich.

Die Änderungen machen auch die Hop'sche Cache-Effizienz transparenter und helfen bei der Feineinstellung. my.orf.at hat z.B. eine eher miserable Cache-Effizienz, was aber kein Wunder ist bei hundertausenden Seiten mit oft hunderten Einträgen - und das mit einer relativ gleichmässig flachen Traffic-Verteilung. Wahrscheinlich finden wir aber doch einen Sweet Spot, wenn wir den Cache etwas aufdrehen - nicht alle ORF ON-User sind zu allen Zeiten gleich begehrt.

Höchste Zeit übrigens auch mich für die vielen netten Begrüssungen hier und anderswo zu bedanken. Merci bien, you rock! Und komisch, niemand beschwert sich über die verstümmelten Namen in der Linkleiste 8-)

Baggersprüche bei Neudecker. Vielleicht probier ich ein paar davon heute abend.

Ich bin derzeit Sofaschläfer. Die letzten drei Nächte hab ich auf der Couch geschlafen, ohne zu wissen warum. Ich mag sie einfach. Mein Schlafzimmer ist ein kahles Verliess und immer zu weit weg.

lnk + 5 cmt (p3k, hns, chris, chronistin)
 Friday, 23. February 2001 

Der in den letzten Wochen aufgestaute Kleinkram hat mich auf hinterhältige Weise eingeholt. Hallo Wasserfleck in der Küche melden, hallo Putzfrau bezahlen, Grüßgott Steuern (ihr kommt nächste Woche dran).

Ich habe übrigens den Verdacht, dass Chris gestern doch noch nach Wien gekommen ist - anders wäre eine mehrstündige Netzabstinenz kaum zu erklären. Leider hab ich's nicht rechtzeitig zum Last Thursday geschafft. Vielleicht jemand aus der Leserschaft?

In den letzten Wochen hat sich ein fetter Bug ganz tief in den Innereien des Hop eingenistet. Messge to bug: You have no chance to survive make your time. For great justice.

Yo, Zeit für die erste kleine Reflexionspause. Ich bewundere Blogger, die es schaffen, private angelegenheiten nur dann reinzubringen, wenn sich eine kleine geschichte daraus machen laesst, aber ich selbst bin nicht besonders gut dabei. Die drei Absätze oben sind ziemlich nah am Maximum dessen, was ich an normalen Tagen an kohärentem Geschichtenzauber zustande bringe. Ich glaube, das hat was mit dem Programmieren zu tun. Wenn jedes kleine Wort irgendwann auf einen zurückfallen kann wird man vorsichtig damit.

Dogma 2000 schaff ich so logisch auch nie.

lnk + 4 cmt (chris, h_h, hannes, hns)

Not logged in. Click here to log in.

 comments