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 much 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.

My idea is to use the clang LLVM compiler API, and the LLVM infrastructure.

Everything below is made with the purpose to collect information to the declarative programming lanuge can do semantic checks and generate code:

  1. First we lets clang create an AST for the GTK+ C++ code header files (and its dependencies). The AST is saved in a LLVM bitcode file.
  2. From 1) we create our own AST – everything but the inheritance hierarchy is lost: This is our type information. It is used for doing type checks, and generate GTK+ C code macro type casts
  3. Now we will let clang create an AST of the GTK+ C code header file (and its dependecies)
  4. Create a file with translation rules for clangs AST to our own AST.
  5. This a huge step: A tree parser wich reads the file with translation rules, and reads the clang AST from step 3. From those 2 inputs it adds information to our existing AST from step 2.
    The added information is f.x. this function belogs to this type. It is a constructor/desctructor/set property/get property/or a signal. A function also has a return type, and a argument list. Each argument does also has a type, and a type has a size in memory. I think i can borrow some code from clang (verbatim copying).

I think this is the required steps to obtain all the knowledge the declarative language will need.

After this I “only” need to create a lexical analyser for the language, a parser, a tree parser to create an AST, and a LLVM IR codegenrator.
There exisist LLVM tools wich translates to LLVM bitcode. LLVM bitcode can be translated into C and C++ code, and machine code for a number of microprocessor architectures. LLVM bitcode can also be used by LLVMs JIT compiler.

The declarative programming language will of course need to have a way of escapeing to an non-declarative 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 menu, you can still use the declarative programming language.

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

A simple language could also be supported in the future: Mozilla had created a new language called Rust, it looks interesting (it does also use LLVM). Lua is also possible and is a more mature language.

i think i will create an compiler first, and then an interpreter.

with an interpreter i can create 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 prototypeing 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.


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.

Udgivet i The DGL Project | Kommentarer slået fra

Tux & nOObs

Udgivet i 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

Udgivet i Programmering | En kommentar

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

Udgivet i 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.

Udgivet i 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.

Udgivet i 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.

Udgivet i Ubuntu guides | Kommentarer slået fra