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, 6. November 2008 

Juhu, wieder eine Groovy-Vorlage von Robert. Da nutze ich gleich mal die Gelegenheit, das noch junge Number-Module in Helma NG aufzufetten und komm dann zu folgendem:

require('core.number');
include('helma.shell');
include('helma.system');

var ONE = java.math.BigInteger.ONE;

function fibber(n) {
    if (isNaN(n)) return false;
    var current = ONE, next = ONE;

    n.times(function() {
        write(current + ' ');
        [current, next] = [next, next.add(current)];
    });

    print();
    return true;
}

fibber(parseInt(args[1])) || print('usage: helma fibber.js <n>');

Hier sieht man, wie sehr Destructuring Assignments rocken. Jawohl, nie wieder Zwischenvariablen! [current, next] = [next, next + current]; verdichtet von 3 Zeilen auf eine und ist nebenbei viel leichter zu lesen.

Auf der Minusseite steht Rhinos (und damit Helmas) Handling von java.math.BigIntegers. Die werden nämlich allerorten in doubles umgewandelt und sind daher kaum zu gebrauchen. Ohne BigIntegers beginnen die Ergebnisse bei n ~ 80 an Präzision zu verlieren.

lnk + 11 cmt (earl, robi42, hns)

Steve Yegges grosses Rhino AST Refactoring ist im Rhino CVS gelandet.

lnk ~ cmt
 Wednesday, 5. November 2008 

@robi42: Your Helma NG can do this quite elegantly:

include('helma.file');

File.prototype.forEachRecursive = function (func) {
    func(this);
    if (this.isDirectory()) {
        for each(var file in this) {
            new File(this, file).forEachRecursive(func);
        }
    }
};

new File('.').forEachRecursive(function(file) { print(file); });

PS: How do you run a groovy shell?

lnk + 4 cmt (earl, hns, robi42)
 Friday, 31. October 2008 

Es macht Spass, Rhino Committer zu sein. Erst mal ein paar einfache Bugs zum Aufwärmen.

lnk ~ cmt

Der unerschütterliche Steinbock ist gelandet. Pfeif auf Windows und OS X, Ubuntu ist das beste, was deinem Computer und dir passieren kann!

lnk + 6 cmt (klemens, katatonik, hns)
 Wednesday, 29. October 2008 

Lose one, win one: Der Helma-Artikel in der englischen Wikipedia wurde nun endgültig gelöscht. Dafür aber bitteschön scheint "Helma Object Publisher" bei freedictionary als eine von 27 Bedeutungen für die Abkürzung HOP auf!

Ganz im Ernst, der Wikipedia-Artikel hatte seine Probleme. Der Ton hatte tatsächlich etwas Fanboy-mässiges, und die Quellen hatten wirkten bemüht. (Ich weiss, die Auswahl an 3rd party Quellen lässt zu wünschen übrig, Helma hat ein PR-Problem). Vielleicht könnte man sich beim Axiom Stack-Artikel etwas abschauen bezüglich Sachlichkeit und Stil.

Ach ja: es heisst Helma! Den Object Publisher haben wir schon vor Jahren verloren.

lnk + 6 cmt (chris, hns, klemens)
 Monday, 27. October 2008 

CouchDB: JavaScript Map/Reduce in der Datenbank.

Das ist so einfach wie genial, weil nämlich die Ergebnisse der map/reduce Funktionen in einem Index gespeichert werden, der dann bei Änderungen in der Datenbank inkrementell aufgefrischt werden kann.

Das Äquivalent zu einem "SELECT title, body FROM page WHERE author = 'bob' ORDER BY createtime" würde demnach ungefähr so ausschauen:

map = function(doc) {
  if (doc.type == "page" && doc.author == "bob")
    emit(doc.createtime, {title: doc.title, body: doc.body}); 
}

(Ist quasi Pseudocode, funktionierender Code könnte anders aussehen, aber es geht ja um die Idee.)

lnk ~ cmt
 Wednesday, 15. October 2008 

helma.filestore kann jetzt 1:1, 1:n und n:m Mappings. Ist jetzt alles sehr raffiniert und smooth und sauber, finde ich.

b = new Book({title: 'Die Leiden des jungen Werther'}); 
Book({title:"Die Leiden des jungen Werther"})

b.author = new Author({name: 'Johann Wolfgang von Goethe'});
Author({name:"Johann Wolfgang von Goethe"})

b.save();

new Book({title: 'Faust', author: b.author}).save();

Book.all()
Book{title:"Die Leiden des jungen Werther", author:{_id:"1", _type:"Author"}},
Book{title:"Faust", author:{_id:"1", _type:"Author"}}

Author.all()
Author{name:"Johann Wolfgang von Goethe"}

Author.all()[0].books
Book{title:"Die Leiden des jungen Werther", author:{_id:"1", _type:"Author"}},
Book{title:"Faust", author:{_id:"1", _type:"Author"}}
lnk ~ cmt
 Tuesday, 14. October 2008 

Seit ich an Helma NG arbeite, leide ich an der Shelllosigkeit von Helma 1. Heute bin ich endlich draufgekommen, dass ich Helma 1 innerhalb von Helma NG laufen lassen kann. Das Helma-1 lib-Verzeichnis in das von Helma NG kopieren und geht schon:

hannes@hns:~/git/helma-ng$ java -jar run.jar 
helma> Packages.helma.main.Server.main(["-w", "8080", "-h", "/home/hannes/svn/helma"]);
Starting Helma 1.7.0-pre (October 14 2008) on Java 1.6.0_0
helma> [2008/10/14 22:09:36] [INFO] Using session manager class helma.framework.core.SessionManager
[2008/10/14 22:09:36] [INFO] Starting engine 1 for test
[2008/10/14 22:09:36] [INFO] test:internal:onStart 0 inserted, 0 updated, 0 deleted in 24 millis

helma> var srv = Packages.helma.main.Server.getServer();
helma> srv
helma.main.Server@ae533a
helma> 

Das einzige Problem ist der Konflikt zwischen den verschiedenen Jetty-Versionen. Einfach das neuere NG-Jetty zeitweise aus dem lib-Verzeichnis verbannen und die Sache hat sich. Freilich ist man ausserhalb des Helma-1-JavaScript-Contexts und sieht das ganze aus der Java-Sicht, für meine Zwecke ist das aber sehr nützlich.

lnk + 2 cmt (p3k, hns)

Not logged in. Click here to log in.

 comments