malte's Journal malte's use Perl Journal en-us use Perl; is Copyright 1998-2006, Chris Nandor. Stories, comments, journals, and other submissions posted on use Perl; are Copyright their respective owners. 2012-01-25T02:20:50+00:00 pudge Technology hourly 1 1970-01-01T00:00+00:00 malte's Journal Joose 2.0 released <p>Just wanted to let you guys know that <a href="">we released a new version the JavaScript meta object system Joose</a> which was heavily inspired by Moose.</p><p>The major new feature of this release is the support for type constraints and type coercions for attributes and method parameters. There is also experimental support for multi method. We'll see how that evolves.</p> malte 2009-02-03T07:23:58+00:00 journal Joose release and job openings <p>The development of <a href="">Joose</a>, a meta object system for JavaScript with great similarities (and interoperability) to Moose continues at great pace. We just released a new <a href="">release candidate</a> and the release should happen today or tomorrow.</p><p>Meanwhile I started a new job at <a href="">sinnerschrader (Hamburg, Germany)</a> and we have quite a few job openings in all things software engineering. Especially if you are tired of body leasing, you might find <a href="">this video</a> interesting.</p> malte 2008-11-10T11:09:51+00:00 journal New version of Joose and blok <p>While staying in the US I got a lot of hacking time in. The first result is a <a href="">new version of Joose</a> the JavaScript meta system that should feel very familiar to everybody who uses Moose<nobr> <wbr></nobr>:)</p><p>The new feature I find most useful is the ability to add custom class builder methods:</p><blockquote><div><p> <tt> Class("MyClass", {<br>&nbsp; &nbsp; &nbsp;methods: {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;...<br>&nbsp; &nbsp; &nbsp;},<br> <br>&nbsp; &nbsp; &nbsp;primaryKey: "id"<br> }) </tt></p></div> </blockquote><p>The "class builder methods" in this example <em>methods</em> and <em>primaryKey</em> are just methods on the meta class and can be freely defined and overwritten.</p><p>Secondly, I put a lot of work into <a href="">blok</a>. blok is an application build on Joose that enables collaborative editing of simple flow charts and user interface prototypes.</p><p>Back to hacking...</p> malte 2008-09-25T16:57:49+00:00 journal Recent Journals The recent journals module seems to be deactivated when you go to use.perl without a login cookie malte 2008-08-30T15:46:07+00:00 journal Joose applications <p>Development of <a href="">Joose</a> has recently focused in using it in real applications and refining the API on the go.</p><p>The most complex application to date is <a href="">Blok</a> which supports collaborative editing of user interface prototypes. Blok uses <a href="">Google App Engine</a> on the server side but almost all the code is running on the client side using Joose and jQuery (especially jQuery UI). At the core of blok lies a component system that uses roles to apply behavior to different shapes. For more information see the <a href="">Joose blog.</a>.</p> malte 2008-06-19T20:02:56+00:00 journal Joose <a href="">Joose</a> has turned from an experiment to something really cool. It has pretty much the same effect of JS programming like Moose has on Perl-Programming. There is now some <a href="">some documentation</a> on Google code. If you want to join in on the development just email me at malte.ubl (at) or drop by at #moose, so I can get you a commit bit for the repository and the wiki. malte 2008-04-06T18:52:49+00:00 journal Joose Blog I moved by JavaScript and Joose-related blogging to <a href="">a new blog</a> to give it more wide exposure to the general non-perl-related internet community. malte 2008-03-26T22:32:15+00:00 journal Attribute meta classes Attributes now have their own meta class in Joose. Support for attribute traits is currently quite limited, but you can say:<blockquote><div><p> <tt>Class("Car", {<br>&nbsp; &nbsp; has: {<br>&nbsp; &nbsp; &nbsp; &nbsp; leftRearWheel: {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; init: new Wheel(),<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; isa: Wheel,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; is: rw,<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; handles: "*"<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; }<br>})</tt></p></div> </blockquote><p>to only allow Wheels in the attribute leftRearWheel and to delegate all of Wheel's methods to the leftRearWheel. </p><p>In other news: </p><ul> <li>Joose is now hosted in the Moose svn</li><li>Joose now supports the <a href="">Moose JSON Storage format</a> and allows round trips between Moose and Joose (at least for basic tests)</li><li>Joose now works in IE and Opera</li><li>Joose now supports class methods</li></ul> malte 2008-03-24T12:14:34+00:00 journal Joose can write TPS-Reports While advancing at least two computer science zen levels I augmented my brain enough to implement the augment method modifier in Joose.<blockquote><div><p> <tt>Class("HTMLDoc", {<br>&nbsp; &nbsp; augment: {<br>&nbsp; &nbsp; &nbsp; &nbsp; html: function () { return "&lt;html&gt;"+this.INNER()+"&lt;/html&gt;" }<br>&nbsp; &nbsp; }<br>})<br> <br>Class("HTMLDocBody", {<br>&nbsp; &nbsp; isa: HTMLDoc,<br>&nbsp; &nbsp; augment: {<br>&nbsp; &nbsp; &nbsp; &nbsp; html: function () { return "&lt;body&gt;"+this.INNER()+"&lt;/body&gt;" }<br>&nbsp; &nbsp; }<br>})<br> <br>Class("TPSReport", {<br>&nbsp; &nbsp; isa: HTMLDocBody,<br>&nbsp; &nbsp; augment: {<br>&nbsp; &nbsp; &nbsp; &nbsp; html: function () { return "&lt;h1&gt;TPS-Report&lt;/h1&gt;" }<br>&nbsp; &nbsp; }<br>})</tt></p></div> </blockquote><p>While making method modifiers stackable was really easy for all the other modifiers, I had to roll my own reverse call stack to make it happen with augment.</p> malte 2008-03-22T12:52:39+00:00 journal Google Gears support in Joose You can now automatically execute methods of a Joose.Class in a different thread using Google Gears. All you need to do is use the meta class Joose.Gears and add a worker method. All the Gears-Interfacing is handled for you. If Gears is not present, the worker is executed in the main thread. The workers result will be sent to a method called "on".ucfirst($worker_name) if available:<blockquote><div><p> <tt>Class("HardWork", {<br>&nbsp; &nbsp; meta: Joose.Gears,<br>&nbsp; &nbsp; has: {<br>&nbsp; &nbsp; &nbsp; &nbsp; data: {is: rw, init: {}}<br>&nbsp; &nbsp; },<br>&nbsp; &nbsp; methods: {<br>&nbsp; &nbsp; &nbsp; &nbsp; onDoWork: function (result) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ok(result == 1001, "Gear Worker returns correct result")<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; },<br>&nbsp; &nbsp; workers: {<br>&nbsp; &nbsp; &nbsp; &nbsp; doWork: function (start) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var counter = start;<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; for(var i = 0; i &lt; 1000; i++) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; counter++<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return counter<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; }<br>})<br> <br>var hw = new HardWork();<br> <br>hw.doWork(1)</tt></p></div> </blockquote> malte 2008-03-21T18:34:52+00:00 journal Joose now has method modifiers You can now use the following method modifiers in Joose:<blockquote><div><p> <tt>Class("S3", {<br>&nbsp; &nbsp; isa: S2,<br>&nbsp; &nbsp; override: {<br>&nbsp; &nbsp; &nbsp; &nbsp; two: function () {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.result2 += "3"<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.SUPER();<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; },<br>&nbsp; &nbsp; before: {<br>&nbsp; &nbsp; &nbsp; &nbsp; add: function () { this.result += "5" }<br>&nbsp; &nbsp; }<br>&nbsp; &nbsp; after: {<br>&nbsp; &nbsp; &nbsp; &nbsp; add: function () { this.result += "7" }<br>&nbsp; &nbsp; },<br>&nbsp; &nbsp; wrap: {<br>&nbsp; &nbsp; &nbsp; &nbsp; add: function (original) { this.result += "8"; original(); this.result += "9" }<br>&nbsp; &nbsp; }<br>})</tt></p></div> </blockquote><p>By using the excplicit override modifier you get access to the overridden method using this.SUPER(). This is basically the same as the wrap modifier, but it keeps the methods signature intact (wrap passes the wrapped function as the first parameter).</p> malte 2008-03-21T09:21:19+00:00 journal New builder syntax for Joose <p>Joose now supports two new ways to create Joose.Classes</p><p> <code>joosify(MyClass)</code> now turns regular classes into Joose.Clases.</p><p>...and you can now use a more JavaScript like Syntax to build Joose.Classes:</p><blockquote><div><p> <tt>Class("Currency", {<br>&nbsp; &nbsp; does: Eq,<br>&nbsp; &nbsp; has:&nbsp; ["value", {is: rw}],<br>&nbsp; &nbsp; methods: {<br>&nbsp; &nbsp; &nbsp; &nbsp; initialize: function (value) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; this.setValue(value)<br>&nbsp; &nbsp; &nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; isEqual: function (cur) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return this.getValue() == cur.getValue()<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; }<br>})</tt></p></div> </blockquote> malte 2008-03-19T20:55:32+00:00 journal Joose has Roles <p> <a href="">Joose</a> the JavaScript implementation of Moose now has Roles.</p><p>A direct translation of the <a href="">Synopsis from Moose::Role</a> looks like this:</p><blockquote><div><p> <tt>Class("Eq", {meta: Joose.Role});<br>requires("isEqual");<br> <br>methods({<br>&nbsp; &nbsp; notEqual: function (para) {<br>&nbsp; &nbsp; &nbsp; &nbsp; return !this.isEqual(para)<br>&nbsp; &nbsp; }<br>})<br> <br>Class("Currency");<br>does(Eq)<br>has("value", {is: rw})<br> <br>methods({<br> <br>&nbsp; &nbsp; initialize: function (value) {<br>&nbsp; &nbsp; &nbsp; &nbsp; this.setValue(value)<br>&nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; isEqual: function (cur) {<br>&nbsp; &nbsp; &nbsp; &nbsp; return this.getValue() == cur.getValue()<br>&nbsp; &nbsp; }<br>})<br> <br>check()</tt></p></div> </blockquote><p>The check() makes a "compile time" check of the role requirements. This might later be implemented as an onload-event in browsers.</p><p>Joose.Roles are themselves implemented as Joose.Classes. The source looks like this:</p><blockquote><div><p> <tt>Class("Joose.Role");<br>isa(Joose.Class);<br>has("requiresMethodNames")<br>methods({ <br> <br>&nbsp; &nbsp; initialize: function () {<br>&nbsp; &nbsp; &nbsp; &nbsp;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = "Joose.Role"<br>&nbsp; &nbsp; &nbsp; &nbsp; this.requiresMethodNames = [];<br>&nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; addRequirement: function (methodName) {<br>&nbsp; &nbsp; &nbsp; &nbsp; this.requiresMethodNames.push(methodName)<br>&nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; exportTo: function (classObject) {<br>&nbsp; &nbsp; &nbsp; &nbsp; classObject.meta.importMethods(this.getClassObject())<br>&nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; hasRequiredMethods: function (classObject) {<br>&nbsp; &nbsp; &nbsp; &nbsp; var complete = true<br>&nbsp; &nbsp; &nbsp; &nbsp; this.requiresMethodNames.each(function (value) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; var found = classObject.meta.can(value)<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(!found) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; complete = false<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; })<br>&nbsp; &nbsp; &nbsp; &nbsp; return complete<br>&nbsp; &nbsp; },<br> <br>&nbsp; &nbsp; isImplementedBy: function (classObject) {<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; var complete = this.hasRequiredMethods(classObject);<br> <br>&nbsp; &nbsp; &nbsp; &nbsp; if(complete) {<br>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; complete = this.implementsMyMethods(classObject);<br>&nbsp; &nbsp; &nbsp; &nbsp; }<br>&nbsp; &nbsp; &nbsp; &nbsp; return complete<br>&nbsp; &nbsp; }<br>})</tt></p></div> </blockquote> malte 2008-03-05T20:29:04+00:00 journal Moose in JavaScript <p>This must have been done before, but it was fun anyway. I have written a partial implementation of Moose (and Class::MOP) in JavaScript. It's called Joose. It is self-hosting, so you can write meta classes in Joose and you get some of the syntactic sugar from Moose.</p><p> A typical example would be:</p><blockquote><div><p> <tt>Class("Animal");<br> <br>methods({<br>&nbsp; &nbsp; multiply: function () { return this.meta.instantiate() }<br>})<br> <br>Class("Cat");<br>isa(Animal)<br> <br>methods({<br>&nbsp; &nbsp; likes: function () { return "fish" }<br>})<br> <br>Class("Dog");<br>isa(Animal)<br>has("owner", {is: rw})<br> <br>methods({<br>&nbsp; &nbsp; balksAt: function () { return this.owner },<br>&nbsp; &nbsp; hates: function () { Cat }<br>})<br> <br>ok(Cat.meta.isa(Animal), "Cats are animals");<br>ok(Dog.meta.isa(Animal), "Dogs are animals too");<br>ok(!Animal.meta.isa(Cat), "Not all animals are cats")<br>ok(new Cat().likes() == "fish", "Cats like fish");<br>ok(new Cat().multiply().likes() == "fish", "Cat babies like fish")<br>ok(new Cat().multiply().meta.isa(Cat), "Cat babies are Cats")</tt></p></div> </blockquote> malte 2008-03-04T22:07:47+00:00 journal xssinterface <p>There seems to be some interest in xssinterface in the javascript community so I put it up as a project on <a href="">Google Code</a>.</p><p>Meanwhile I implemented the usage of the new HTML 5 postMessage() method that implements the same behavior for new browsers where available.</p><p>Does anybody here have a clue about p3p xml privacy policies? Looks like the worst, over engineered spec since SOAP WS-*</p> malte 2008-02-28T19:16:43+00:00 journal Cross domain javascript callbacks <p>I created a javascript library that enables sending javascript messages between browser pages that reside on different domains.</p><p>The listener can register a number of callbacks and allow specific domains to call these callbacks.</p><p>This is done via evil cookie magic, but it seems to work. I'd be very interested in feedback. Do you have security concerns? is this a novel idea?</p><p>A demo can be seen <a href="">here</a> and the library is <a href="">here</a> </p> malte 2008-02-23T18:59:50+00:00 journal Annoying Banner-Ads <p>We just made it easier to deliver rich media banner ads with our new service <a href="">instanttraffic</a> that allows hosting of rich media ads (Flash-Files, Flash-Videos) through a simple self-service interface. The service integrates with existing ad servers (Because only the rich content is loaded from our servers).</p><p>The system is using our existing content delivery infrastructure that is optimized for delivering large numbers of medium size files.</p><p> Might be time to update your Ad-Block-Regexes<nobr> <wbr></nobr>:)</p> malte 2007-12-21T09:14:50+00:00 journal Techno Music &#196;hm, <a href="">Techno Claim</a> malte 2007-08-01T19:03:22+00:00 journal Public Beta - Shares 2.0 <p>Hey, we just launched the public beta our internet tv channel for user-generated content <a href=""></a>. If you don't care about the content, you can at least watch our servers die<nobr> <wbr></nobr>:)</p><p>The site is mod_perl based using our internal MVC and ORM frameworks. Most of the UI is composed from JSON - webservices so you are free to build your own front ends if you don't mind reverse engineering the protocol for now (until we add docs)</p><p>One thing that is really special about this site is that we give away shares of the publicly held company behind the project for good content. So everyone gets to be a part of the (potential) success of the site. </p> malte 2007-07-17T15:30:49+00:00 journal Beta-Test started <p>We've been hard at work building the first internet tv channel based on user generated content. We just started the beta program and you are all invited to <a href="">check it out and give us feedback</a>. (The site is in german language but should be rather straight forward to use)</p><p>The system is basically an automated version of the gong show. The site is based on mod_perl and is put together through a REST API that we use ourselves via AJAX, so everybody may build their own front end. The video stream is generated by a live editing software on a mac that is controlled by small snippets of applescript which are in turn called by a Perl script.</p><p>Maybe one of the most interesting parts of the project are our directors. The editing is done by a singleton object of class Editor. The editor has a director that tells the him what to do - it adds the behavior. It turns out that the decorator pattern fits perfectly to model directors, so we can stack together different behavioral patterns. One director loops the content another controls the gong show and another schedules best of content to run when we have nothing current to show.</p><p>We've been <a href="">blogging</a> about a lot of the technical details in german language for more information.</p> malte 2007-06-15T16:51:01+00:00 journal We are building a very exciting internet tv channel for user generated content. It's not like youtube but really more like any other tv channel you would see on regular cable television. It will go live Very Soon Now and we started <a href="">blogging</a> about the technical challenges (in german) of building such a beast. Perl proved to be the right tool to bring all those technologies together. CPAN is our hero! malte 2007-02-10T12:14:48+00:00 journal Perl for Eclipse <p>The <a href="">eclipse-perl integration project</a> has made an impressive come back from a long time of very low activity:</p><blockquote><div><p>After more than two years since the last release, an updated version of EPIC is now available. This version works with Eclipse 3.2, has a completely rewritten parser, many bug fixes and several new features (see ChangeLog). At this point, the stable and testing versions are identical. However, new features will be only provided through the testing version, while stable will be updated only with bug fixes. Both versions can be installed and kept up-to-date using Eclipse's Update Manager.</p></div> </blockquote><p>See the <a href="">changelog</a> for bug fixes and new features</p><p>We've been using EPIC for more than two years now and this looks like this'll get us a lot of productivity for free.</p> malte 2006-08-04T18:56:31+00:00 journal LWP and https <p>We recently tried to deploy an application on a new machine (x86_64, Suse Linux 10) but couldn't get Crypt::SSLeay to compile which we need to do SSL-Requests through LWP.</p><p>As an alternative we implemented a new Protocol-Implementor for LWP that makes https requests using wget. Of course, we found out that wget had really buggy http header handling until version 1.10 which is not widely deployd yet. But once you install the new version it works fine. The module supports basic authentication, http headers, get and post which is enough to use it as a transport layer for SOAP::Lite.</p><p>There are probably quite a few bugs lurking in this thing and it only really works with newer version of wget, but it might still be interesting for some desperate people<nobr> <wbr></nobr>:)</p><p>If people are interested we'll release it to CPAN once things have settled done here a little.</p> malte 2006-07-05T10:52:28+00:00 journal Job Offer <p>We are looking for new Perl developers. What we really want are hardcore, geek programmers. If that doens't fit you 100% that's alright, though. More Info on <a href=""></a> and on our <a href="">site</a>.</p><p>We are doing some very interesting projects right now with a wide variety of technologies. If you can work on-site in Elmshorn near Hamburg, Germany please contact me<nobr> <wbr></nobr>:)</p> malte 2006-01-04T13:21:56+00:00 journal Summary 2005 <p>Following <a href="">spur's</a> tradition I'll add my summary of 2005, too</p><p> <b>Professional</b> </p><ul> <li>My team turned from a being the internet department of an advertising agency to being our own little company.</li><li>I got promoted to "Mitglied der Gesch&#228;ftsleitung" which basically means the I run the store<nobr> <wbr></nobr>:)</li><li>Besides being an overall good year, we gained a couple of large new customers and managed to achieve a 55% growth rate and we have fixed projects for next year which should sum up to least an extra 33% growth</li><li>We launched an <a href="">internet lottery</a> with live broadcating of the drawings every 3 minutes</li><li>I looked into switching our web development to <a href="">Catalyst</a> but had to find out that it's not much different than what we have been doing for 4 years now.</li><li>We switched our source control to svn and are very happy with it</li><li>We started using <a href="">RT</a> but found out that its just too big for us</li><li>We started using <a href="">wikimedia</a> for knowledge management</li> <li>We will start using <a href="">Trac</a> next year</li><li>Still with me? Want to work for us?<nobr> <wbr></nobr>:)</li></ul><p> <b>Personal</b> </p><ul> <li>I turned 25 - a quarter century, that is. Getting old...</li><li>I went on a 2 weeks snowboarding vacation to austria and I just finished making a movie from it</li><li>In fall I spend 2 weeks in greece in a very nice house righr next to the water</li><li>My girlfriend is still with me.</li></ul><p> <b>Reading</b> </p><ul> <li>Smalltalk best Practices - Kent Beck - Must Read!</li><li>Perl best Practices - Damian Conway - Must Read!</li><li>Code Complete - Steve McConnel - No done yet</li><li>Higher Order Perl - MJD - Very Good, but the books wants to talk to Ex-C programmers and I am an ex-smalltalk programmer.</li><li>Patterns of Enterprise Application Architecture - Martin Fowler - Very Good</li><li>User Interface Design - Joel Spolsky - Not convinced</li><li>Joel on Software - Joel Spolsky - Funny</li><li>The Diamond Age - Neal Stephenson - Masterpiece</li><li>Snow Crash - Neal Stephenson - Masterpiece</li><li>Cryptonomicon - Neal Stephenson - Masterpiece</li><li>The Da Vinci Code - Dan Brown - alright</li><li>Digital Fortress - Dan Brown - sucks bad</li><li>Angels &amp; Demons - Dan Brown - alright</li></ul><p>Next year I'll read more tech books and everything by Neal Stephenson that I haven't read yet</p> malte 2005-12-30T17:53:53+00:00 journal Business::DE::DTAUS <p>I made a first step at above module (see my last journal entry) by implementing what I need myself<nobr> <wbr></nobr>:). The problem is, that I'm really not the right guy for the job - I didn't even know how to use sprintf until yesterday. DTAUS as a format really sucks. I guess the decision not to use line feed and/or carriage return for record separation was made for interoperability, but I think they should as least have made them optional, so that my shell doesn't scream at me all day.</p><p>Python and PHP both have DTAUS implementation. The PHP one, however, doesn't have documentation and the python implementation uses CSV-Files as it's API. There is a nice <a href="">Ruby implementation</a>, though. I think I'll steal it's API.</p><p>The API is a tough thing anyway. The first question that arises is whether to use english or german words since the format is solely used in the German banking system and it is sometimes hard to find exact english translations for all the special words.</p><p>Ah, well, back to work</p> malte 2005-12-28T13:23:55+00:00 journal DatenTr&#228;gerAuStausch <p>Does anybody know of a Perl-Module to create DTAUS-files for money exchange in the german banking system? I have found <a href="">this</a>. But the code looks really trashy and it uses a weird home grown GPL-like viral licence that doesn't seem very suitable for commercial projects.</p><p>If there isn't something like this already, I guess it is a perfect fit for the Business::DE::* Namespace on CPAN.</p> malte 2005-12-21T09:22:56+00:00 journal MVC frameworks and content management systems <p>One major point that is missing from most MVC frameworks in my opinion is a solid integration with content management systems.</p><p>Most dynamic websites will also have some kind of content component. In some situations you might get away with generating static pages with the CMS while using the same basic template for the dynamic pages. However, for more complex pages where you might want to do cross-selling on all pages or you want to have the dynamic pages integrated into the navigation which is generated by the CMS this won't work for you.</p><p>The solution is a system that fully integrates static and dynamic pages in a single system. What we did for <a href="">this website</a> was to add an extra field to the article entity of the content management system. You can now tell an article that it really is a dynamic page with a certain action for the MVC framework. Links to this article within the CMS will now automagically point to the controller of the MVC framework and the controller knows that while generating the page it is supposed to take the article from the CMS to complete it's page generation.</p><p>In the project above we used a proprietary content management system with a proprietary MVC framework. We are considering switching all <a href="">our</a> development to <a href="">Catalyst</a>. Build in integration with a system like <a href="">Bricolage</a> (and something that is easier to install than Bricolage) would be a big selling point.</p> malte 2005-11-20T13:23:30+00:00 journal fm4 radio <p>For some good music I can really recommend the radio station from vienna, austria <a href="">fm4</a>. Their stream is windows media player only unfortunately. It's located at mms://</p> malte 2005-10-19T10:47:20+00:00 journal intelligent design <a href="">I do believe!</a> malte 2005-08-23T10:34:18+00:00 journal