Gato - Et meta framework

For et år siden begynte et ambisiøst prosjekt i Trondheim på Dock-cafén. Jeg og en kamerat bestemte oss for å lage programvare som var av ypperste klasse etter å ha irritert oss i flere år over dårlige programmer. Vi gikk igang med det vi i dag kaller for Gato. Det er et meta framework som har unike funksjoner og er langt forut for sin tid. Det er multiplattform, ergo: det fungerer på Linux, Windows, Mac og andre *nix systemer. Språket det bygd (les: wrappet) i er selvsagt Mono. Det er jo ikke akkurat noe nytt å spennede i seg selv da Mono + GTK# greier det samme, men det vi bringer inn er en usedvanlig wrapping av frameworks. Vi har skrevet et felles API for mange frameworks ! Det betyr at du kan kode med samme syntax selv om du vil bruke GTK, Qt,Clutter, Winforms eller Aqua. De to siste er egent for hver sin plattform og kan ikke kjørers om hverandre. Hva betyr det her i praksis ?
Det betyr at hvis du har skrevet et program med GUI, så kan du enkelt å greit bare bytte ifra GTK, Qt eller noen av de andre med å bare bytte ut en linje kode i programmet ! Dette gir en 'native-look' hvis du vil kjøre det på KDE, Gnome, Windows eller Mac. Vi har mottat utrolige mye bra respons ifra folk som har sett det aksjon. Til og med selveste Mark Shuttleworth har hørt om idéen ifra oss som er et bittelille firma her i Trondheim som vi kaller for OakOrigin.

Prosjektet er ikke ferdig pr dags dato, men selve GTK# delen er så godt som ferdig og fungerer fantastisk og begynner å bli modent for å nå massene. Her kommer spørsmålet som vi har diskutert lenge: open-source eller ikke ? Jeg ville helt klart valgt opensource, men problemet er penger. Målet er å kunne leve av Gato, Opossum og de andre programmene som vi lager på dette frameworket. Vi trenger rett og slett råd / tips ifra andre som har god innsikt.

For de som måtte være litt mer teknisk interessert i dette, så kan jeg opplyse om at GTK# delen er også unik for Gato. Vi har fjernet GTK elementene og bygd våre egne. Her kommer det fantatiske: har har greid å bytte over til Cairo ! Alt tegnes og ordnes av Cairo. Vi bruker GDK sin eventhandler som er wrappet ilag med Cairo. Dette gjør at Cairo-tegninger kan ta imot eventer ! Javisst, du leste riktig ! Dette er noe mange har ønsker seg lenge og så vidt jeg har fått med meg, så er vi først ute med å greie denne bragden. For å beskrive hvordan dette fungerer. Du kan tegne en sirkel og gi den eventer som MouseOver, MouseEnter/Leaves osv osv og du kan i tillegg legge til eventer som Grab ! Da kan vi flytte på sirkelen rundt i programmet, ja faktisk alle ting du lager kommer med disse standard eventene vi har wrappet inn.

For dere som enda er interesserte, verken det gjelder Gato eller Opossum, vårt egent kassesystem skrevet med dette frameworket som gjør at kassesytemet er multiplattform, kan sende meg en personlig melding her på Linux1 eller sende en mail til eposten som du finner på nettsien jeg likner til her: http://flash.oakorigin.com/
Denne nettsiden er IKKE ferdig og innholder fullt av skrivefeil og andre ufullstendige sider, men kan være intersang for de som vil lese litt mer om oss.

Jeg håper på noen tilbake meldinger på spørsmålet angående hvor vidt vi skal bevege oss ut i opensource verden eller ikke. Er det kanskje noen med erfaringer her med tanke på OpenSource i bedrifter eller kanskje noen har prøvd å starte en open-source bedrift ?

Tags:

Valg for kommentarvisning

Velg din foretrukket måte å vise kommentarer på og klikk på "Lagre innstillinger" for å aktivere endringene.

rinux

For de som er enda litt mer tenknisk intressert. Her kommer en "Hello World" program. Dette kaster opp et vindu som med tittel "Gato" og skriver "Hello World" i vinduet. Når man klikker på "Hello World", så avsluttes programmet.

namespace OakOrigin.Gato.Test
{
class MainClass
{
public static void Main()
{
Application.Engine = OakOrigin.Gato.GTK.Engine.Instance;

var w = new Window("Gato") { Size = new Size(600, 400) };

var label = new Label(w, "Hello World") { Font = new Font("Mono",32) };
label.OnClick += delegate {
Application.Quit();
};

Application.Run();
}
}

Legg merke til på linje 7, bruker jeg GTK. Der det står GTK kan jeg bare bytte ut med Qt, så blit det helt av seg selv et Qt program uten at jeg må gjøre noe mer med koden. Samme går for clutter, Winforms og Aqua ! :) På den måten kan man skrive et program som ikke ser 'ailen-ish' ut på de forskjellige plattformene. :D

terjejh

Jøss, takker for et interessant og engasjerende innlegg. Men her må jeg dessverre melde pass og beklage at jeg ikke har noe å bidra med eller tilføre. Har du prøvd å kontakte firma som driver med opensource eller kombinert utvikling? Kanskje Friprog.no kan formidle noen kontakter(?)

Det første jeg tenker på er Qt Software hos Nokia. De har en dual-eller trippel lisensensiering (kommersiell, LGPL/GPL) som kanskje kan være interessant for å dekke begge deler http://qt.nokia.com/

Mitt tips er også at det vil være interessert og avklarende om du kan gi skissere en sammenligning (forskjeller/likheter/muligher) mellom Gato meta rammeverket og Qt rammeverket for kryssplattformutvikling?
http://tirania.org/blog/archive/2009/Mar-16.html
http://stackoverflow.com/questions/524058/net-or-mono-vs-qt-which-one-fo...

rinux

@terjejh

Gato er et veldig avansert stykke arbeid som gjør ting utrolig lett. Det er akkurat det som gjør det hele genialt. Du kan jo få lov til å se selv hvis du er interessert.

http://flash.oakorigin.com/Gato/Gato.zip

Last ned fila og pakk den ut. Skriv i terminalen: mono /"retning til Gato mappa"/Gato/GatoTest.exe

Den skrev jeg på under 10 min og kom på 100 linje kode ! Det er bortimot ingenting for å få opp noe sånt, så tid og minimal kode ligger i kortene. Den testen viser GTK i aksjon på en måte du neppe har sett før, da vi bruker Cairo som motor og her kommer den en smart en: Den bruker skjermkortet ditt hvis du har 3D støtte for det, hvis ikke så animerer den med CPU slik at alle kan se det samme :) Lurt ? Jeg mener det er lurt ihvertfall.

Det er sånne her små ting som vi kan vinne på. Og i tillegg hvis du ville at det skulle kjøres i Qt istedenfor GTK, så kan jeg bare bytte det med en linje kode :) Jeg tror personlig at mange opensource utviklere vil sette pris på dette, sånn at de slipper å velge om de skal skrive programmene sine i GTK eller Qt. Bare skriv program og velg etter hva du trenger etterpå :)

P.S. Den testen fungerer selvsagt også på Windows, Mac, Linux og *nix plattformer :)

QtanJ

Først vil eg seia takk for eit bra innlegg. Eg lurer på om det er tilfeldig at du skriv noka slikt akkurat no som eg har vorte interessert i å undersøkja dei tekniske sidene ved mono. Flameeyes skreiv innlegget An appeal to upstream KDE developers og gjorde meg interessert i å undersøkja meir. Ved å lesa innlegg merka mono og dotnet vart eg inspirert til å etter kvart prøva enkel mono på same måte som eg prøver python.

Frå gentoo-brukar-perspektiv kan eg seia meg einig(med "An appeal to upstream KDE developers") i at C++ har sine problem. Når C# skal vera betre er det ein god grunn til å undersøkja. Dei einaste (data)språka eg er i nærleiken av å kunna er python og shell-skripting. Shell-skripting er i praktisk bruk, medan python er inne i ein lære seg fase. Eg klarer enkle program utan GUI.

Eg har sett på Qt, og KDE sine C++-klassar tidlegare(hovudsakleg gjennom python-bindingar) og kome fram til at det var litt meir komplisert enn det nivået eg var på. No trur eg at det skal gå betre dersom eg stiller meg inn på å læra meg det.

Gato ser faktisk lettare ut enn både pyqt4 og pykde4 for "hello world" i alle fall. Dette meiner eg er interessant i og med at dette er eit prosjekt for å kunna skriva for fleire miljø med same API. Ein slik abstraksjon meiner eg er bra for personar utan så veldig stor kompetanse.

Å skriva noka tilsvarande sjølv er ikkje noka alternativ så lenge eg har litan kunnskap til GUI utover (k)dialog-rammeverket. Difor kan eg heller ikkje uttale meg om fordelar for kommersielle program eller for flinke programmerarar.

Utan å ha så god kjennskap til kommersialisering, trur eg GPL/kommersiell kan vera ein god ide.

LGPL ville eg styrt unna til bruken av kommersielle lisensar vart stort nok. Du er sikkert kjent med denne. Eg vil ikkje seia at sida i seg sjølv er grunn god nok til å ikkje gjera biblioteket LGPL, men at det vert mogleg å bruka det på kommersielle program meiner eg er viktig å tenkja på dersom ein vil tena pengar på det.

Flameeyes, som eg lenka til heilt øvst, brukar mono ein del i arbeidet sitt for å tena pengar. Dersom du er interessert kan du sjå om kompetansen hans kan hjelpa deg. Dersom du har eit spørsmål det ikkje tek lang tid å svara på og/eller som er interessant trur eg han svarer gratis, men dersom det tek lang tid kan det vera ein fordel å gjera det om til eit betalt oppdrag.

PS: Eg er ikkje assosiert med han på nokon som helst måte utover at eg liker blogginnlegga han skriv.

rinux

@QtanJ

Hei, hvis du leser flere av mine innlegg her på Linux1, så vil du fort oppdage at jeg bruker mye av min tid på akkurat Mono, så hvis du trenger hjelp eller noe du lurer på, så ser jeg på meg selv som godt kvalifisert til det :)

Jeg vet selv at det kan være litt vanskelig å komme igang med litt grafisk koding. Gato er ment for akkurat det du nevner, bare å få opp et program uten å ta stilling til toolkit osv. Det er strengt tatt ting man ikke vil tenke på. Man vil som regel bare få opp et kult program å jobbe med så fort som mulig når man har fått en god idé !

Hvis du har lastet ned zip-fila jeg linka til og prøvd den, så vil du se at det ligger med noen dll-filer der. De kan du faktisk bruke til å utvikle Gato-baserte programmer med, men det er et unntak. De dll-filene der støtter kun GTK.

Skulle du uansett være interessert, så kan jeg hjelpe deg igang :)

Installer Monodevelop og pass på at alt av dependencies er oppfylt. Sjekk spesielt etter GTK-Sharp2 - vet den trenges som ekstra i Ubuntu, men opensuse er alt ferdig. På fedora trenger man Pango i tilegg. Når det er klart, så er det bare til å starte Monodevelop, velge nytt prosjekt, velg GTK/GUI applikasjon. Når det er oppe, så velg å rediger referenses til prosjektet. Der kan du velge å legge til dll filer. Legg til filene som er i Gato mappa.
Nå kan du bare copy/paste min Hello World inn i Main.cs :)

Jeg modifiserer koden litt sånn at du får sett hvordan Painting fungerer.

using System;
using OakOrigin.Gato.Painting;
using Oakorigin.Utils;

namespace OakOrigin.Gato.Test
{
class MainClass
{
public static void Main()
{
Application.Engine = OakOrigin.Gato.GTK.Engine.Instance;

var w = new Window("Gato") { Size = new Size(600, 400) };
w.OnPaint += delegate {
using(var s = new w.NewSheet)
{
s.Fill(Color.Green);
}

var label = new Label(w, "Hello World") { Font = new Font("Mono",32) };
label.OnClick += delegate {
Application.Quit();
};

Application.Run();
}
}

Happy Coding !

QtanJ

Eg må nok skuffe deg litt. Monodevelop krev diverse gnome-bibliotek som eg ikkje er heilt sikker på om eg vil ha på maskina.

Dette er biblioteka: gnome-sharp, gnome-base/libgnomeui, gnome-base/libgnome, gnome-base/gvfs

Den viktigaste grunnen er at eg må reinstallera udev med ekstra funksjonalitet som i gentoo er dokumentert så dårleg som dette: "Compile udev-extras requiring external dependencies".

vim+(g)mcs+Makefile/Shellskript trur eg vil fungere fint.

Eg får ikkje heilt til gato, men eg trur eg bør læra meir om gmcs og C# først. Krev gato mono-2.6 eller er det bra nok med 2.4? Meiner at eg har lest at 2.6 og 2.4 ikkje er 100% kompatibelt, men det er ganske lenge sidan.

mono GatoTest.exe går heilt fint.

Dersom du er interessert i feilmelding:

~/mono/Gato $ gmcs -pkg:dotnet main.cs
main.cs(15,29): error CS1526: A new expression requires () or [] after type
main.cs(15,1): error CS0210: You must provide an initializer in a fixed or using statement declaration
main.cs(27,1): error CS1525: Unexpected symbol `}', expecting `;'
main.cs(28,1): error CS8025: Parsing error
Compilation failed: 4 error(s), 0 warnings

Installerte mono-bibliotek med versjonsnummer:
dev-dotnet/atk-sharp (2.12.9)
dev-dotnet/gdk-sharp (2.12.9)
dev-dotnet/glib-sharp (2.12.9)
dev-dotnet/gtk-sharp (2.12.9)
dev-dotnet/gtk-sharp-gapi (2.12.9)
dev-dotnet/libgdiplus (2.4.2)
dev-dotnet/pango-sharp (2.12.9)
dev-dotnet/pe-format
dev-lang/mono (2.4.2.3)

Det er ingen problem å oppgradera desse.

rinux

@QtanJ

Hei, jeg beklager så mye ! Slurve feil ifra meg på syntaxen ! Sånn går det når man programmer etter hode, men nå har jeg fikset det, så den koden her fungerer hos meg:

using System;
using OakOrigin.Gato.Painting;
using OakOrigin.Utils;
namespace OakOrigin.Gato.Test
{
class MainClass
{
public static void Main()
{
Application.Engine = OakOrigin.Gato.Catito.Engine.Instance;

var w = new Window("Test") { Size = new Size(200, 200), Position = new Position(0, 0) };

w.OnPaint += delegate {
using (var s = w.NewSheet) { s.Fill(Direction.Falling, Color.Green, Color.Red); }
};

var l = new Label(w, "Hello World") { Left = 0, Top = 30, Font = new Font("Mono", 32, Color.White) };

l.OnMousePress += delegate {
Application.Quit();
};

Application.Run();
}
}
}

Beklager igjen, sånn her er unødvendig av meg.

Det der er 22 linjer med kode. Tror ikke det kan bli lettere jeg :)

Prøver igjen: Happy coding !

  • Skriv ut artikkel
  • Abonner med RSS

Siste kommentarer