The DGL Project

The main goals – in details.

The DGL (Declarative GUI programming Language) Project is about developing a (Open Source) translator/compiler, and an interpreter, which will make it a lot more easier to develop desktop software.

The translator translates from a declarative programming language to GTK+ C code. Using a declarative language has several benefits. The benefits are (incomplete list):

  • describe what the program should accomplish, rather than describeing how to go about accomplishing it.
  • implement the use of actor based concurrency, that is, the declarative programming language will have implicit support for parallel programming of multi core microprocessors, without any effort of the programmer. The Actor based concurrency in DGL will use ideas from the Erlang programming language.

My thoughts about how to implement it (the 1st very abstract ideas).

The method I will use is like this.

1st I am using a radically different software developing method called: Language-Oriented Programming (LOP), and i will use this programming method more than once.

I am doing this technique more than once, because I need a hard working machine, that is, the computer, to do the tedious job of playing catch-up with the developers of the graphical user interface toolkit (GUI) – this first translator will work with GTK+ code. Another translator will work with the Enlighenment Foundation Libraries (EFL) much later, and I or another software developer can build other supporting backend translator(s), if I/him/her wants to do that.
The translator will probaly need some hand coded knowledge, wich act as kind of rules to compute the hard-coded knowledge database created by the supporting backend translator for a partikular GUI, fx. GTK+.

The result of a supporting backend translator is a knowledege database, wich is not a relational database, and not a NoSQL database, but a database written in a source code of a programming language (=micro language). The nice thing of having the output in source code is that is very quickly to do a lookup in the database – we are speaking of several orders of magnitude more quickly than compared to a relational database.

The knowledge database has a standardized layout, and is used by the front-end of the main translator, wich is translating the declarative programming language. It uses the information in the knowledge database to do semantic checks on the code.

The knowledge database is also used by the so called backend of the main translator. In that section of the translator it looks up information about how to do a isomorphic translation from the declarative programming language to source code. In the case of GTK+ it is C source code.

The declarative programming language will of course need to have a way of escapeing to a programming language where the programmer can tell the machine how a task in an event handler should be accomplished, but what being said, if you only want to change some properties, and say, open a pop up, you can still use the declarative programming language.

The escape to C feature will have syntax to generate C code that is a declaration of variable(s) with the correct type. Syntax for generating C code that sends a getter and/or setter message to the Application actor is also supported.

A much simpler escape to language should also be supported, Googles new Dart programming language looks nice.

I am thinking of using Dart as the 1st language you can escape to, and later adding support for escaping to C.

An interpreter far out in the future will also be useful, together with:

A GTK+ widget wich shows the GUI while you are codeing in the language. That widget could be used in an editor. Needless to say what that widget should have a plugin architecture so it can be extended in ways I never have thought of.

Currently I am doing some protypeing on the grammar with the ANTLRWorks tool – it has some nice features:

ANTLR Works - Ambiguous Path Visualization

I will not use the ANTLR generator – it isn’t the right tool for the job in my opinion (YMMV), but it is good for the initial work.

I think a Common Lisp compiler together with Common Lisp macros would be a lot better tool, because Common Lisp macros is equal to rewriteing the parse tree.


No language wars, please! I consider different programming languages the best tool for different type of works. If you disagree, take a look at the Blub paradox (scroll down to find it).


Please note that I take the liberty to delete any comments posted here that I deem inappropriate, off-topic, or insulting. And I excercise this liberty quite agressively. So yes, if you comment here, I might censor you. If you don’t want to be censored your are welcome to comment on your own blog instead.

Posted in The DGL Project | 1 Comment

Tux & nOObs

Posted in Linux | Kommentarer slået fra

Open Cobalt – 3D GUI – brugergrænseflade og programmeringsmiljø

Dette indlæg er om Open Cobalt
Open Cobalt

Man kan skrive nok så meget uden at læseren får en ide om det man skriver, så her er først en YouTube Video om Open Cobalt at kigge på:

Som du så er det Open Source (MIT licens), og det er Alfa Software(=forvent fejl) – men hvilken alfa software! Det skal med det samme siges at programmering i Open Cobalt det her foregår i Smalltalk – der vel nok reneste af de objekt orienterede sprog (alt er et objekt – og man kommunikerer ved at sende meddelelser).

Hvad kan den så?
Ikke så lidt med må man sige:

  • 3D hyperlinks: en døråbning kan forbinde flere virtuelle verdener
  • Brugere kan kommunikere med hinanden i samme virtuelle verden via:
    • Chat via XMPP (Jabber)
    • Videochat
    • VoIP: snak til hinanden
  • Opmærkning af objekter i virtuelle verdener med tekst og lyd (altså du kan klistre tekst og lyd til ‘noget’).
  • Ingen krav om at bruge servere for at oprette, og dele virtuelle verdener, fordi der bruger en peer-to-peer (P2P) protokol (XMPP?).
  • Open Cobalt er uafhængig af platform, fordi den bruger en VM (virtuel maskine) der kører på Linux, Mac OS X, og Windows.
  • Den giver et komplet professionelt programmerings sprog. (Smalltalk (Squeak implementationen), IDE, med et komplet klassebibliotek i hver distribution, der kører hos hver bruger.)
  • Brugere og udviklere i en virtuel verden kan tilgå, modificere, og kigge i kildekode for hele systemet (De kan tilgå kode mens det kører inde fra en en virtuel verden)
  • Bruger og udviklere kan importere indhold direkte ind i deres virtuelle verden (Google 3D Warehouse indhold (.kmz) og indhold i andre formater kan trækkes ind (drag-and-drop) direkte ind i Open Cobalt verdener)
  • Bruger og udviklere kan importere multimedie indhold direkte ind i deres verdener (Open Cobalt verdener supporter lyd og mpeg indhold)
  • Den software/kode kan opdateres og/eller ændres imens systemet kører (Det gør det muligt at lave de virtuelle verdener, imens de kører)
  • Open Cobalt kører ikke via en enkelt organisations eller firmas server (som f.eks. SecondLife)

Det var ikke så lidt, og så er den endda stadig i alfa, så der kommer nok mere oven i.

Så kan man godt lade kreativiteten få frit løb.
Fik jeg iøvrigt nævnt at den er gratis? :)

Open Cobalt finder du på: www.opencobalt.org

Posted in Programmering | 1 Comment

Kommer snart: Ubuntu “Maverick Meerkat” 10.10

Så er den her snart!

Den 10.10.10 (10. oktober 2010) udkommer Maverick og det er ikke så mange dage væk!

Lige nu Er den ude i en beta version – du kan teste den, men den er ikke for produktionsmaskiner! Tag et kig på http://www.ubuntu.com/

The next version of Ubuntu is coming soon

Posted in Ubuntu | Kommentarer slået fra

Cool video præsentation af Ubuntu NetBook Remix

Denne video faldt jeg over inde på Ubuntu Danmarks forum: Indlægget på Ubuntu DKs forum linker til denne artikel: http://www.omgubuntu.co.uk/2010/07/best-advert-for-ubuntu-you-probably.html, hvor denne super flotte video præsentation fra Dell af deres netbooks med Ubuntu 9.10 “Karmic Koala” Netbook Remix på er at finde:

Ubuntu from Keith Kenniff on Vimeo.

Posted in Ubuntu | Kommentarer slået fra

IPv4 vs IPv6

Herunder er der et Javascript fra http://ipv6.he.net/statistics/#web (IPv6 webadresse: 2001:470:0:64::2), som viser hvor hurtigt antallet af IPV4 adresser daler.

Der ud over er der også noget statistik på IPv6.

Posted in Internet | Kommentarer slået fra

Intersil Prism 2.5 Wavelan trådløst nekort

Creative Commons License
Dette værk er licenseret under en Creative Commons Navngivelse-Del på samme vilkår 2.5 Danmark Licens.

Denne guide handler om hvordan man sørger for at den rigtige device driver bliver indlæst i Linux kernen for et Intersil Prism 2.5 Wavelan trådløst netværkskort.

Dette er en guide jeg har lovet at lave for en anden bruger på http://forum.ubuntudanmark.dk/  – ikke fordi jeg selv har et sådan trådløst netkort:

Den optimale device driver for dette trådløse netkort hedder hostap. Desværre er det sådan at Linux kernen indlæser en anden device driver som ikke er den optimale.

Dette løses ved at redigere i filen: /etc/modprobe.d/blacklist

  1. Åbn Terminal som findes i Programmer > Tilbehør menuen
  2. Skriv følgende kommando
  3. gksudo gedit /etc/modprobe.d/blacklist

  4. Rediger filen, så følgende tilføjes:
    blacklist orinoco_pci
    blacklist orinoco
    blacklist prism2_pci
    blacklist hermes
  5. Gem ændringerne
  6. Luk gedit
  7. Luk Terminal
  8. Genstart
  9. Nu skulle du gerne have et wifi0 og en wlan0 interface, når du lister dine trådløse netkort med iwconfig kommandoen:
  10. Udfør iwconfig i Terminal. Det skal muligvis denne kommando i stedet for: sudo iwconfig Husk at sudo kommandoen ikke skriver noget til skærmen, imens du indtaster dit kodeord. Afslut indtastning af kodeord med et tryk på enter/retur tasten.
  11. Som bonus virker WPA supplicant også. Det betyder at du også kan bruge andet end WEP kryptering, men du skal naturligvis have wpasupplicant pakken installeret, før WPA og WPA2 kryptering virker.
    Er den pakke ikke installeret kan du installere den med:
    sudo aptitude install wpasupplicant
    fra Terminal

Virker det ikke er det muligt at du skal rette i filen /etc/iftab, som indeholder en linie der ser såles ud: wlan0 mac 00:00:00:00:00:00
Altså du skal sætte netkortets rigtige MAC adresse for wlan interface i den fil. Så vil Networkmanger virke korrekt.

Posted in Ubuntu guides | Kommentarer slået fra