Navigation

RSS 2.0 New Entries Syndication Feed Atom 0.3 New Entries Syndication Feed

Show blog menu v

 

General

Use it

Documentation

Support

Sibling projects

RIFE powered

Valid XHTML 1.0 Transitional

Valid CSS!

Blogs : Latest entries

avatar
< Previous page 
Bamboo nearing 1.0 release

Bamboo is being prepared for a public release. For those that are interested, the sources are currently available through subversion.

Bamboo is a forum application module written in RIFE that can be used both standalone and embedded. It offers all commonly expected forum features, but always tries to present them in the simplest and most user-friendly way.

We're currently working on a nice automated setup wizard, in the meantime you can help us find bugs by playing with the beta demo installation at http://rifers.org/bamboodemo.

Feedback can be given in the real rifers.org forum or in the issue tracker.

posted by Geert Bevin in RIFE on Jul 30, 2004 4:19 PM : 0 comments [permalink]
 
Decided to put my latest album available for free download

Many people have been asking for it, and I finally decided to put the contents of my latest album, Dream like a tree, online as mp3s. You can freely download the tracks and use them for private listening. Consider buying the CD if you like the music, it is nicely packaged and the cover is wonderfully well done, it's a bargain for only $15.00.

Listen to the songs on my website.

posted by Geert Bevin in Music on Jul 28, 2004 10:49 PM : 0 comments [permalink]
 
Bamboo forum online at rifers.org

JR and I have been working hard to get an open-source version of our Bamboo forum application ready. After Drone, this is the second open-source, real-world application that we'll release, totally written with RIFE. It's almost there, and we already put a working version online at http://rifers.org/forum as the new forum of rifers.org.

Don't hesitate to register and participate in the forum!

posted by Geert Bevin in RIFE on Jul 27, 2004 6:03 PM : 0 comments [permalink]
 
Anonymous disrespect

Cedric writes: "What is up with this insistence of certain bloggers to require non-anonymous commenters? ... I actually even question the attitude in the first place. Tell people that they need to submit a real name and not an anonymous one and they will either stop posting comments on your blog or sign them John Smith. And what have you gained, really? Stop judging people on their identities to avoid addressing what they write. This is the Internet. Deal with it."

In my last Blog entry I delete a single unfinished phrase comment from "noone <noone@email.com>". This was the whole comment:

and your alternatives are better how?

My blog post starts with this paragraph:

For a while I've been getting more and more irritated by XML.
I don't like how I have to type in tags, how I have to escape text,
how everything is passed in as regular text without any typing ...
how unlike a regular programming language it is. XML might be great for
portable document formats, but for configuration it now feels totally
inappropriate.

So to me it's clear that person just scrolled down to the examples and compared brackets without taking the trouble of reading anything. Since the question was not very thought out to begin with and indicated clearly that the person hadn't stopped to think 2 minutes about what I was trying to bring accross in my blog post, I decided to delete it since it was clearly from someone that just likes to comment without taking much effort and not even the effort of leaving a name.

Now why don't I like anonymous comments, why did I decide to delete them? Simple, I just don't like it. It's similar to the fact that I don't like talking with someone that doesn't wash and stinks.

Insisting on being anonymous also brings another feeling accross: disrespect. It's like on IRC, you know everybody by their nickname. Sure anybody could use a fake one, but I hardly talk to all the random nicks that message me in private. When I have someone on the phone, I don't start a conversation without asking who he is, the guy could be lying too. When I receive emails, the addresses could be spoofed too. If you blatently refuse to tell who you are, why the hell should I take the trouble of starting a conversation with you. It's not about the fact that you can disguise yourself as anyone else, since that's possible everywhere. Hell, someone could even get surgery and a wig and look like a good friend in real life.

If you don't take the trouble of giving your name, it's like reading a blurp that's extracted out of nowhere without any context and it's disrespectful. As with emails, I keep the right of deleting emails from anybody without replying, I keep the right of deciding what goes on my personal pages and what not. If you don't like that, go post your crap elsewhere, I don't like you either.

posted by Geert Bevin in Blogging on Jul 23, 2004 8:39 AM : 8 comments [permalink]
 
Getting rid of XML with Groovy and Janino

Update: it seems that I failed to have brought accross that the visual look is not very important to me. However, you get actual functionality in your configuration files without necessarely having to give up a structured configuration format. Both the Groovy as the Janino examples are full languages and all the power of them is available right in the configuration files *and* processed dynamically and reloaded.

For a while I've been getting more and more irritated by XML. I don't like how I have to type in tags, how I have to escape text, how everything is passed in as regular text without any typing ... how unlike a regular programming language it is. XML might be great for portable document formats, but for configuration it now feels totally inappropriate.

So today I implemented a few alternative RIFE site structure configuration methods thanks to Groovy and Janino.

I'm very pleased with the results and the Janino version really feels nice. The fact that it's standard Java makes it possible to use all the features of my IDE (code completion, on-the-fly error checking, ...) and still have the benefit of a concise syntax and automatic reloading.

I have done the Groovy version in a similar way, but I only showed what the BuilderSupport class offers more. So the Groovy version is actually able of taking both approaches.

Take a look at the results:

Regular XML

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE site SYSTEM "/dtd/site.dtd">

<site fallbackid="ELEMENT4">
    <globalexit name="globalexit1" destid="ELEMENT6"/>
    <globalexit name="globalexit2" destid="SUBSITE.ELEMENT2"/>

    <globalvar name="globalvar1"/>
    <globalvar name="globalvar2"/>
    
    <subsite id="SUBSITE" file="xml/test_xml2sitesubsite.xml" urlprefix="/subsite" inherits="ELEMENT4"/>
    
    <group inherits="ELEMENT5">
        <globalvar name="globalvar4"/>
     
        <element id="ELEMENT6" file="xml/test_xml2elementinfo2.xml" url="/test/element6" inherits="ELEMENT3"/>
        <element file="xml/test_xml2elementinfo3.xml" url="/test/element7"/>
    </group>
    
    <element id="ELEMENT1" file="xml/test_xml2elementinfo1.xml" url="/test/element1">
        <datalink srcoutput="output1" destid="ELEMENT2" destinput="input1"/>
        <datalink srcoutput="output1" destid="ELEMENT2" destinput="input2"/>
        <flowlink srcexit="exit1" destid="ELEMENT2"/>
        <flowlink srcexit="exit2" snapback="true"/>
        <datalink srcoutput="output2" snapback="t" destinput="input2"/>
    </element>
    
    <element id="ELEMENT2" file="xml/test_xml2elementinfo2.xml" inherits="ELEMENT3" url="/test/element2"/>
             
    <element id="ELEMENT3" file="xml/test_xml2elementinfo3.xml"/>

    <element id="ELEMENT4" file="xml/test_xml2elementinfo4.xml"/>

    <element id="ELEMENT5" file="xml/test_xml2elementinfo5.xml"/>
</site>

Groovy

processor.site(fallbackid:"ELEMENT4") {
    globalexit(name:"globalexit1", destid:"ELEMENT6")
    globalexit(name:"globalexit2", destid:"SUBSITE.ELEMENT2")

    globalvar(name:"globalvar1") {
            defaultvalue("default1")
        }
    globalvar(name:"globalvar2")
    
    subsite(id:"SUBSITE", file:"groovy/test_groovy2sitesubsite.groovy", urlprefix:"/subsite", inherits:"ELEMENT4")
    
    group(inherits:"ELEMENT5") {
        globalvar(name:"globalvar4")
     
        element(id:"ELEMENT6", file:"groovy/test_groovy2elementinfo2.groovy", url:"/test/element6", inherits:"ELEMENT3")
        element(file:"groovy/test_groovy2elementinfo3.groovy", url:"/test/element7")
    }
    
    element(id:"ELEMENT1", file:"groovy/test_groovy2elementinfo1.groovy", url:"/test/element1") {
        datalink(srcoutput:"output1", destid:"ELEMENT2", destinput:"input1")
        datalink(srcoutput:"output1", destid:"ELEMENT2", destinput:"input2")
        flowlink(srcexit:"exit1", destid:"ELEMENT2")
        flowlink(srcexit:"exit2", snapback:true)
        datalink(srcoutput:"output2", snapback:true, destinput:"input2")
    }
    
    element(id:"ELEMENT2", file:"groovy/test_groovy2elementinfo2.groovy", inherits:"ELEMENT3", url:"/test/element2")
             
    element(id:"ELEMENT3", file:"groovy/test_groovy2elementinfo3.groovy")

    element(id:"ELEMENT4", file:"groovy/test_groovy2elementinfo4.groovy")

    element(id:"ELEMENT5", file:"groovy/test_groovy2elementinfo5.groovy")
}

Janino

builder
    .setFallback("ELEMENT4")
    
    .addGlobalExit("globalexit1","ELEMENT6")
    .addGlobalExit("globalexit2", "SUBSITE.ELEMENT2")

    .addGlobalVar("globalvar1", new String[] {"default1"})
    .addGlobalVar("globalvar2")

    .enterSubsite("janino/test_janino2sitesubsite.janino")
        .setId("SUBSITE")
        .setUrlPrefix("/subsite")
        .setInherits("ELEMENT4")
    .leaveSubsite()

    .enterGroup()
        .setInherits("ELEMENT5")
    
        .addGlobalVar("globalvar4")
    
        .enterElement("janino/test_janino2elementinfo2.janino")
            .setId("ELEMENT6")
            .setUrl("/test/element6")
            .setInherits("ELEMENT3")
        .leaveElement()
    
        .enterElement("janino/test_janino2elementinfo3.janino")
            .setUrl("/test/element7")
        .leaveElement()
    .leaveGroup()
    
    .enterElement("janino/test_janino2elementinfo1.janino")
        .setId("ELEMENT1")
        .setUrl("/test/element1")
    
        .addDataLink("output1", "ELEMENT2", "input1")
        .addDataLink("output1", "ELEMENT2", "input2")
        .addFlowLink("exit1", "ELEMENT2")
        .addSnapbackFlowLink("exit2", false)
        .addSnapbackDataLink("output2", "input2")
    .leaveElement()
        
    .enterElement("janino/test_janino2elementinfo2.janino")
        .setId("ELEMENT2")
        .setInherits("ELEMENT3")
        .setUrl("/test/element2")
    .leaveElement()
        
    .enterElement("janino/test_janino2elementinfo3.janino")
        .setId("ELEMENT3")
    .leaveElement()
        
    .enterElement("janino/test_janino2elementinfo4.janino")
        .setId("ELEMENT4")
    .leaveElement()
        
    .enterElement("janino/test_janino2elementinfo5.janino")
        .setId("ELEMENT5")
    .leaveElement();
posted by Geert Bevin in RIFE on Jul 22, 2004 3:21 PM : 9 comments [permalink]
 

< Previous page 
 
 
 
Google
rifers.org web