Friday, November 25, 2005

Shiny screenshot

Well, I spent the evening fixing the ubuntu I broke.. (bad r300 driver, bad..) but then I used the occasion to pass my hoary into a dapper, and in the end (X freezed with it..) to a breezy. And finally everything works fine, _again_ ... pfiew.. (and the synaptic driver decided to work too, yeah). Well, dapper is by definition unstable, so that's my fault. Anyway, I used the occasion to try the composition features of X, and as we apprently lack good screenshots in the GNUstep world, here a shiny one:



Surprisingly with my non-accelerated ati radeon the shadows don't slow particularly the display, so I'm keeping them -- incredible how they add a proper "finished" feeling...

Now I'm just waiting for the next X release (cvs compilation of xorg froze the powerbook) to have this damn ati radeon *accelerated*, because Alex Malmberg GNUstep OpenGL backend is neat (woosh windows disappear in spinning), but.. er... unusable without a 3D acceleration, of course :-/

Thursday, November 10, 2005

Structured Edition



I have been playing since a week or so with the Text System on Cocoa/GNUstep... it's not immediately easy to understand, but it's really nice and powerful :-)
It handles automatically lots of things, you can redefine many things too (create specific layout manager to change the way the text is displayed, eg, to "flow" around an image, etc.)..

For instance, you're supposed to work with NSTextStorage, which contains the content you're editing, and which is supposedly an attributed string (a string plus related attributes -- fonts, links, attachments, etc), and you edit it via a NSTextView. But what if you want MORE than edit an attributed string ? like, say, edit some structured content ?

Well in fact,the answer is to create a subclass of NSTextStorage that will answer the base methods (just four) of NSTextStorage -- it's in fact a class cluster. So the idea is simply to have on one side your structured document (in my case, a simple array of "Section" objects, containing (optionally) a title and a content), and to have a NSTextStorage that will actually serve as a gateway between the text system (which expect a simple NSAttributedString) and your own structured model... Pretty cool :-) and that way you benefit of all the niceties of the text system..

The above screenshot is my current editor (which btw I wrote under Cocoa, and recompiled this evening on GNUstep), the button is there to define a selected text as a title.

Friday, November 04, 2005

Gorm on Windows

Gürkan posted this screenshot of Gorm on Windows :


Ok, the theme used is.. well, the default NeXT theme :-) which doesn't really fit well with the Windows GUI. But still, it's quite cool to have Gorm working on Windows like that :-) (and hopefully once I finish integrating Camaelon -gui modifs somebody will write a Windows theme using the win32 theme api !)

Saturday, October 29, 2005

GNUstep/Gorm videos

I uploaded a new video showing a custom palette in Gorm and its use -- isn't it great to code a complex volume dataset visualizer without a line of code ? ^_^

I also cleaned up a bit the main page..

I should probably make a video showing the services in action !

Wednesday, October 26, 2005

Subtext

Found on Martin Fowler's bliki, an interesting short summary of the OOPSLA'05 conference, along with interesting links. One of them is Subtext, a really cool language / programming environment (you perhaps already encounteered it, it was featured on slashdot some time ago...). Definitely something interesting -- check the demo (flash video) and the researcher's blog. Lots of good points / ideas about what should be a programming environment ;-)

I wonder if we could extend some ideas about ide to really dump the text editing, or at least relay a lot more on metamodels of the code.. Dynamic Aspects seems to head into that direction ;-)

Thursday, October 20, 2005

Nokia 770

I received today my new shiny toy, the Nokia 770:



I put online some pictures of it..

First impressions:


  • it's light ! yet it doesn't feel "crap" :-)

  • the form factor is surprisingly nice (even if coming from a newton I wouldn't mind a (physically) bigger screen)

  • applications are a bit slow to start. Hopefully things will improve -- even if as it is it's ok, I wouldn't mind instantaneous starts ;-)

  • redrawing is a bit slow too :-/ is it because of X or gnome.. ?

  • the screen is absolutely gorgeous !! really beautiful and luminous :-) (the pictures I took don't completely do it justice)

  • playing movie is ok (there's a trailer for ice age 2 on the machine), but could be improved..

  • lack of pppoe configuration for wifi VPN (or if there is, it's not obvious, but well, I just got it, so I perhaps overlooked something)

  • installing a package is easy :-)

  • The UI is quite good, as a PDA UI -- definitely better than PocketPC (well, duh..), obviously less good than the newton, but hey, it's not too bad..



So well, overall, I'm quite pleased -- the device is indeed very, very cool. Things can be improved, but it's already quite nice. The UI is ok, even if what I would like to do is (obviously ?) install GNUstep on it, and then modify GNUstep to blend on the Maemo platform (with a possible replacing of maemo in an improbable future). Anyway, as it is running linux, it seems an ideal platform for me -- both for experimenting with etoile/gnustep on a PDA (see a previous post about that, and see what I posted about the newton for what I think is good on a PDA...) and as a good client for the system I'm working on at uni...

I'm not sure if there's a market for a "web tablet" device, but I don't think that the Nokia 770 will only be a "web tablet" anyway :-) -- there's already ports of doom, abiword, the GPE pim stuff, etc.

Nokia has a winner in the linux community I think :-) -- which means that you can expect lots of software for the Nokia, and it already started... It also look like an excellent device for ebooks, administrators (as an X/VNC/ssh terminal), etc.

Tuesday, October 11, 2005

Yeah

Just finished (completely, as in "theoretically nothing to add") the paper I was working on for wscg.. (they don't even have a LaTeX template, only a Word one (!!), and it is rather ugly imho..)

Hopefully I'll have some more free time now to work on camaelon and étoilé ;-)

Talking about étoilé, Quentin created a blog ! Étoilé dev will use it to rant about the project :-) -- hopefully it will become an interesting news place..

Saturday, September 10, 2005

High Order Messaging

Marcel Weiher sent a mail on the objc mailing-list about a paper he wrote (with Stéphane Ducasse) on High Order Messaging. Basically, HOM is a message that takes another message as a parameter -- like in functional language you have High Order Functions that take a function as parameter.

Ok, nice name .. but why is it interesting ? Well, you have lots of cases where it's really neat :-) but the most known is to use it for iterations. Imagine you have an array containing objects, and you want to send to all of them a message. In Objective-C you'd do:


int i;
for (i=0; i<[myArray count]; i++)
{
id currentElem = [myArray objectAtIndex: i];
[currentElem aMessage];
}

You could also use an enumerator (NSEnumerator) but that doesn't really simplify things. What's the problem with that ? Well, you have code (the for loop..) that you don't really care about, that is actually always the same, you need to deal with each elements, etc. Basically, the programmer's intent is not immediately clear. And of course, the more code you have, the more you can encounteer bugs... So simplifying this pattern would be great. Well, with HOM you will do:

[[myArray do] aMessage];

Better, no ?

Conceptually, the message "do" takes another message as parameter -- it's a HOM. Here it actually bounces the message to all the elements of the array -- therefore, encapsulating the iteration pattern.

Technically, it's a rather cool usage of the Objective-C runtime -- no need to change anything to your compiler :-) -- the HOM message actually returns a Trampoline object that will get the message send to it via forwardInvocation. Read the paper for a good description.

So, using HOM is great for encapsulating the iteration pattern, ok. But after all, we have the makeObjectsPerformSelector.. so why using HOM ?.. Well, the difference is that YOU can create new HOMs, and you are not limited to the iteration pattern :-)

Another good example from the paper.. You have a delegate object you need to send a message to. You'll have the following code:

if ( [delegate respondsToSelector: @selector(windowDidClose:) ]
{
[delegate windowDidClose: self];
}

Again, this is a frequent pattern. Moreover, it's prone to errors -- the selector in the test needs to be equal to the message you send.. An HOM equivalent will be:

[[delegate ifResponds] windowDidClose: self];

Elegant, no ?

Just to finish.. some other examples from the paper:

Starting a method in a thread is done like that in OpenStep:

[NSThread detachNewThreadSelector: @selector(doSomething)
toTarget: receiver withObject: nil];

The HOM equivalent:

[[object async] doSomething];

Or say you want to send a message with a delay.. In OpenStep:

[receiver performSelector: @selector(doSomething)
withObject: nil afterDelay: 1.0];

With HOM:

[[object afterDelay: 1.0] doSomething];


I remember reading about HOM on Marcel's site before this paper, but this paper is an excellent presentation of the idea and do a great job highlighting the possibilities -- another useful mechanism to add to your toolbox to capture patterns :-)

Many HOM implementations exists (in addition to Marcel's original, MPWFoundation), that you can check on that page

Friday, September 02, 2005

PDA, Dynabook and Etoile

I started to think how Etoile could possibly works on -- and take advantage of -- a PDA or Tablet platform...

With the help of Jesse Ross I wrote this page
on the Etoile's wiki; another related page I wrote is one about the Dynabook

Thoughts ?

Monday, August 29, 2005

VERY interesting videos

Following a link from the Squeak-dev mailing list... I watched theses two videos (a presentation in two parts) by Alan Kay, circa 87 ... They are brilliant, and extremely interesting. Definitely something to view !

Part 1

Part 2

(ps: Squeak is an incredible environment, and Seaside is a fantastic web app framework running in Squeak... worth your time..)

addendum: Interesting PDF about PARC's work ...

addendum 2: another interesting video, an interview of alan kay.

Saturday, August 06, 2005

Screenshot UKUUG Demo

Just to show you how the demo was looking:



Nice no ? :)

UKUUG Talk

I just gave the UKUUG gnustep presentation an hour ago, and I think it went fine...
Not completely as planned -- I wanted to use keynote on an ibook for the slides part, and use my powerbook under linux to make the demonstration via a vnc connection, and of course... when I tried the setup yesterday it worked without a hitch. But when I tried today just before the presentation the client didn't want to connect for whatever reason .. as I didn't have the time to find what was the problem, I ended doing the keynote presentation with the powerbook (at least it was faster and smoother than if I had used the ibook g3..), and just rebooted under linux for the demo. Not as smooth, but that was ok.

The GNUstep presentation .. -- well, manipulating apps wasn't that easy as the screen wasn't cloned, so I needed to look to the projection screen instead... ;-) but I was able to present mostly all I wanted:


  • GWorkspace, with Camaelon + the new icons from jasper...

  • panel hiding, applications hiding, tear-off menus (but all rather quickly though... not sure I explained well that part)

  • the services system, taking the LaTeX service, the Zipper service and the GNUMail service as example (LaTeX in Ink.app, then use Zipper to create some tgz from GWorkspace, and finally select the tgz and mail it via GNUMail...

  • GORM -- I started with the basic demo of slider + textview linked together, then I did a demo using a custom palette I wrote yesterday (just for the talk!), which had one object managing a volumetric dataset (a head), and two views rendering the dataset. So it let you create a complete app visualizing a dataset in different way... all in Gorm, without needed to code anything. Pretty nice I thought ;-)



I could have talked much longer than the authorized time, I forgot to say and show some things, but all in all it went well. At the end of the talk the chairman asked how many people had used GNUstep before the talk (3 persons), and how many will try after the talk (5-6 persons?). With around 20+ persons (?) in the room that wasn't bad ;-)

Apparently people were impressed by Gorm :-) , and liked the look of the apps ("it's clean") -- good icons and Camaelon did their job I guess ;-)

I'll put some screenshots later so you could see how did that look..

Wednesday, August 03, 2005

update...

Well, quite a lot of things to do this week... in the end I didn't have time to work on camaelon last weekend (well, I worked on the glyph bug) but camaelon 2 release is still planned soon, along with other étoilé's components (hopefully this weekend ? finally ?) .. I need to fix the display glyph bugs in -gui first..

Else, I'm preparing the GNUstep talk I'm giving at the UKUUG 2005 Linux Technical Conference this saturday at the university of swansea, I'll try to make a cool demo of gorm, showing the power of building apps with components .. ;-)

On other topics.. my bag was stolen this afternoon *on my desk*, in the lab, when I went to lunch for half an hour... quite a few things inside, like, my passport, my keys, my newton... that really, really sucks. damn. This in a building supposedly with secured access..

Friday, July 29, 2005

Camaelon's release

Ok, finally arrived home... quite a lot of things to do next week at the lab, so I'll try if I can to release a public version of Camaelon tomorrow (even if you can already grab it from the étoilé's cvs in Bundles/Camaelon, of course !)

Tuesday, July 26, 2005

Music

... One good thing beeing in holiday, you have more time for playing guitar :-)
So I recorded some songs with my cousin, available on boxson.net, a french site that provides hosting, etc., for copyleft music (licence art libre, creative commons...). I think it's great that such initiatives appears beyond the software world...
Anyway. Lots of fun. :-)

Friday, July 15, 2005

Camaelon 2 ?

I committed a few things on the cvs today and yesterday... here's a screenshot of the current results with the theme Nesedah:



Just grab Camaelon from etoile's cvs, get Nesedah.theme 0.3 and follow the readme :-)

What's missing before an official Camaelon 2.0 release ? well... there's always something missing... for example I'd like to refactorise GSDrawFunctions to use instance methods instead of class methods, so you could change themes on the fly very easily. But I think that can wait for a 2.1 :-)

Appart from that, well, there's a couple of problems apparently with NSMatrix, some wrong text color with cells in general (actually this one is a gnustep bug), and you shouldn't use gnustep to manage the windows with camaelon enabled for now. The menu aren't themed properly (the menu items are, but the menu itself isn't really themed), etc. Nothing very complex overall, so hopefully I'll fix that in the next few days before leaving to France.

Thursday, July 14, 2005

Newton...

Received the wifi card and memory card, so I was able to connect the newton to my local network :-)

After some tweaking, I have NTK (the newton dev environment) running under Classic and connected to the newton using the wifi card :-)



Just started to play with NTK and NewtonScript, but it's quite cool. By far not as cool as IB/Gorm ;-) but NewtonScript is a rather nice language, and NTK seems ok, though not fantastic... got a very basic app running here, where what you write on the newton is displayed on the above textfield when you click on the button (very dull, but it's just to test things ;-)

Not sure what I'll do on it... perhaps a simple calc application where you'd write the numbers / operations and have a "paper trail" ? or perhaps simply a battleship game (there are two already, but they don't use the whole screen, and anyway it's just to play a bit more with NTK/NewtonScript ...). I should also try the xmlrpc lib, it could be cool to use the newton to connect to my visualization system at uni ;-)

I tried VNC on the newton too, both as client and server, and it's extremely cool.. even if it's very slow :-)

Saturday, July 09, 2005

Newton & Étoilé

Well, I didn't do anything last week on gnustep, I just moved from my previous flat to a new one, and in addition to that I also got a newton 2100 from ebay ;-) -- so most of the remaining free time was passed playing with it...

The Newton is really an incredible beast. Ok, it's a bit bulky compared to my pocket pc or my palm Vx... (right, it pass the test of the pocket, but barely, and only because I tried on a huge winter coat with big pockets ;-) -- no chances with a summer coat, that's for sure !) but technically it's a marvel. The writing recognition engine is fantastic: it works! :D
And the UI is great, very well thought, you do everything with the stylus in a logical way (example, to erase a word, just scrible on it... to correct a letter (say, lower case to uppercase) you have a variety of approaches, but the simplest is just to rewrite the letter on the previous one ;-) etc.

The most interesting thing in the UI imho is the "assistant" idea. All datas on the Newton are stored on "soups", kind of databases. Any application can read databases from other apps. So it's easy to really have a synergy between applications. The assistant use that fact: basically, it interprets a sentence (one you just wrote and then pressed the assist icon, or one you wrote directly in the assist window). For example, "remember to buy bread" add the task "buy bread" to the todo list; "meet simon friday" add a new meeting in the calendar application with simon (if you have a simon in your addressbook) on the coming friday, etc. It's truely great. It understand some variations of the formulation (eg, the task "schedule" will be triggered when it encounteers the words "schedule, meet, meet me, talk to, breakfeast, lunch, dinner, holiday, birthday, b-day, bday, anniversary). This mechanism is in fact rather simple, but it works very well !

The writing recognition is excellent (by far the best I ever tried) as I already said; you can choose between 2 engines, one which works letter-by-letter (and works really well) and another that works by words (with attached letters) that works really well too ;-) (this one use neural networks, so it's said to improve -- but I think it already works well :-)

You can also choose to save the writing as "ink text", which let you defer the recognition to a later moment. You can also decide to not have recognition and draw instead; there's two drawing modes, one that "improve" the drawings and a raw drawing. The "improve" drawing means that if you draw something close to, say, a square, it will straighten the lines. Great.

It also can record sound, the use of sound in the UI is quite cool (well, after a while you remove the stylus noises though ;-).

The UI is simple, readable, it handles copy/paste, you got lots of connectivity (fax, email, printing...)...
Basically, they got everything right, or nearly right ! After playing with it, it's really difficult to understand why Apple decided to kill the Newton -- it's so much better than WindowsCE (well, duh..) and PalmOS ! and the best thing... the data is stored persistently, even without power -- no more fear of losing datas when the battery run off. And the batteries are simply 4 AA standard batteries..

The incredible thing is that there's still a lot of people using theses, as well as developers -- I'll try plugging a wifi pcmcia card monday on it, and in theory that should work (got the drivers on a memory card -- two pcmcia ports rulez!); it has web browsers, mail clients, even an mp3 player... not bad for a device made in 1997 ! you just have to wonder what it could have become if apple didn't kill it...

You can program it in Java (there's a waba port) or C/C++, although the normal way to write GUI apps is to use NewtonScript, an interesting dynamic language, object-oriented, based on prototypes.

An interesting page showing you some videos of the Newton: http://www.newtenlightment.de/downloads.html#movies
This one is great too, with a commercial video and its transcript: http://www.aresluna.org/guidebook/extras/videos/welcometonewton

In fact, in many ways, I think NewtonOS is a better OS (UI-wise) than current ones for most of the people, with its emphasis on communication, organisation of personal datas (PIM), and in short, with everything centered around the datas, not the apps.

We should have that kind of orientation in our current computers !! (Actually, Apple made the eMate, which was a NewtonOS device with a keyboard, with a shape a bit similar to the ibook palourde).

So obviously, it gives me a couple of ideas for Étoilé. I think we should deliver a small suite of PIM applications, with shared databases (well, we already wanted to do that to some extent, but what I mean is, we should try to have a way to easily create "open databases" that Étoilé applications would use to save their datas. Such "open" databases would be public (well, limited to the user's app) and easily "discoverable" -- probably a good idea to include their schema/docs in them for example... need to think a bit about that, and I should read in more detail the newton programming book. Yes, our talks about db-enabled fs and this remarks about "open" databases sounds like WinFS, I know ;-) -- but WinFS' goals are actually very interesting.

The other thing is, we should have an assistant-like technology (I sent a mail on the mailing list detailing that point).

A last thing... current PDA/TabletPC UI completeley sucks. Étoilé could perhaps be an excellent choice for a linux-based tabletpc or pda -- as everything already works with only one button (even if it handles more, of course), which is great for such devices, and if we manage to have a good synergy between apps, particularly PIM apps, as well as an assistant technology, that could interest people...

Thursday, June 30, 2005

How to make a flash video recording on linux ?

It's rather easy -- first, you need vnc2swf, and a vnc server.
Start the vnc server on a second X port:

vncserver -geometry 1024x768 :1

Then you can launch vnc2swf:
vnc2swf out.swf :1

That will connect it to the vncserver running on localhost:1, and will output the swf file to out.swf. Start the recording by hitting F9; hitting it again will pause, etc.

Now, to add sound, there isn't a nice way of doing it... but what you can do (and that's what I did) is to launch a sound recorder application in parallel, and start the recording at the same time as the video. At the end of your video recording, you should have the video (out.swf) and a sound file from your recorder app, say "voice.aif". You then need to convert the sound file in mp3 (use the mp3 encoder lame for example).

After that, you just need to add the mp3 to the swf file, and you can do that using edit_vnc2swf :
edit_vnc2swf.py -o final.swf -a voice.mp3 out.swf


The last step is to create a html file containing the following section:

<object width="1024" height="768"
CODEBASE="http://active.macromedia.com/flash5/cabs/swflash.cab#version=5,0,0,0">
<param name="MOVIE" value="final.swf">
<param name="PLAY" value="true">
<param name="LOOP" value="false">
<param name="QUALITY" value="high">
<embed src="final.swf" width="1024" height="768"
play="true" align="" loop="true" quality="high"
type="application/x-shockwave-flash"
pluginspage="http://www.macromedia.com/go/getflashplayer">
</embed>
</object>


Note that you need to set the same dimension as the video, else you'll have artifacts.

And... that's it :-)

Sunday, June 26, 2005

STPalette 1.2

I uploaded STPalette 1.2, you can find it here: http://www.roard.com/gnustep/STPalette-1.2.tgz

The archive contains libStepTalkView, the StepTalkPalette, and CalculatorExample containing the sourcecode and the gorm file of the Calculator done in the flash demo...

Saturday, June 25, 2005

Flash Demo !

I just recorded a flash demo showing how to use Gorm + the StepTalk palette...
the link is http://www.xdev.org/gnustep/demo.html :-)
I'll probably make a release later today, or tomorrow (just to clean up the last things ;-)

Friday, June 24, 2005

Camaelon..

Just to show a screenshot of the StepTalk palette + StepTalkClass inspector + the calculator with Camaelon enabled :-)
(ok, there's one additional thing though -- the popup to select the return type of the method...)



Shiny, no ?

Thursday, June 23, 2005

It works :-)

After fixing a couple of bugs, I was able to code a simple calculator entirely in Gorm :-)



I need to finish properly the NSMethodSignature encoding, but after that I'll probably make a release.

integration in Gorm..

I have now a reasonably-working StepTalkClass implementing inheritance -- you can inherits from other StepTalkClass instances or from a normal ObjC class (well, only the methods.. the ivars aren't inherited..). I also started a new inspector in Gorm for managing a StepTalkClass, where you can add ivars and methods, and if you modify a variable in your method the variable correctly changes (eh, useful no ? ;-)

On the other hand, the object model is rather simple -- I don't have classes and instances, I just define ivars and methods. But for a first version that will be enough for most of the needs (you don't really use lots of instances in general for dealing with the UI..), although I think I will implements a class/instance system anyway (I have a StepTalkRuntime that keep tracks of the created classes..)

I have a slight problem at the moment, calling directly a "script method" in a StepTalkClass works, but for some reasons it doesn't in Gorm, so I need to investigate... it's a bit odd as I inform Gorm of the methods, and I can link a button to a method; I implement respondsToSelector: in StepTalkClass, but somehow I don't even get the message... well I'll see that this evening.

I had some problems with NSMethodSignature, by default the StepTalkClass methods returned an object and took only objects as parameters; so it was easy to build the signature (I actually used a convenient method available in STObjCRuntime). But for actions in gorm, the methodsignature must apparently have a void return value.. so I need to allow signature creation with different return values. Setting the signature by hand make it works though, so it won't be difficult. The other problem is that I can't seem to be able to return an int (not an object) from a script method, even if the NSMethodSignature is correct: I end up with a vacall error when I set the return value of the NSInvocation... I need to find a way, else it will be difficult to create for example NSTableView delegates ! :-)

Anyway, I hope that i'll be able to fix the remaining bugs soon and make a release. At least with it you will be able to create for example a calculator completely in Gorm (as in http://www.levenez.com/NeXTSTEP/IB_ex2.html). I think I'll make a flash video to show how it works :-)

Friday, June 17, 2005

StepTalkClass !

Well, after messing a bit, I have now the following code working:


@implementation Transcript
+ (void) show: (NSString*) str
{
NSLog (@"<Transcript> %@", str);
}
@end

...

StepTalkClass* myClass = [[StepTalkClass alloc] init];

[myClass setName: @"NewClass"];

[myClass addIVar: @"Transcript"];
[myClass setTranscript: [Transcript class]];

[myClass addMethod: @"display: str"
withContent: @"Transcript show: str."];
[myClass display: @"Hello World!"];

...

<Transcript> Hello World!

...


:-)

Basically, it means I have objects written using StepTalk, integrated in the ObjC runtime. So what it really means is that we'll be able to develop complete applications in StepTalk, directly in Gorm :-)

Well, I still need to do a bit of work -- I need to hook that into the StepTalk palette, and add a reasonably good class browser in Gorm for theses "Steptalk classes", but it shouldn't be to complex.

I will probably have a Smalltalk-like browser, and in the future I'll try to implement some of the ideas described here...

Also, as the metamodel is easily modifiable (obviously :), it's possible to implement interesting things... first, I need to implement single inheritance, categories, class methods, class variables to the current simple model...

StepTalk "objects"

As I said previously, what I want now is "real" objects in Steptalk, not just scripts. Basically, to abuse the runtime thinking classes really exist as objective-c classes, while in fact they will be a special class containing dictionaries for its ivars and its methods, and that will execute theses methods (mere NSString containing a script) via Steptalk.

It's not done yet... but I have a basic behavior done: I can add a class to the GormClassManager, add a method to it, and connect a button to this virtual method. And that works -- clicking one button connected to the standard execute: method does something, clicking on a second button connected to the virtual method does something else :-)

So, well, it's not ready yet, but things looks good :-)

Wednesday, June 15, 2005

STPalette 1.1

I worked a bit on the steptalk palette today, and I added some nice improvements...

steptalk palette sshot


  • You can create script outlets on the fly -- no need to use the object1,object2,...object9 limitation.. :-)

  • I added a non-ui object that you can instanciate as any object

  • The StepTalkView is still there, but more like a button containing a script. And actually by default its target/action is itself, so when you click on it, you execute the script. To change the default image, just dragn'drop another on it :-)

  • added a connection inspector to only show the script outlets



So basically now, it's more useable imho :-) and starts to be quite nice.

Check the readme files for more infos. You can download it from here: http://www.roard.com/gnustep/STPalette-1.1.tgz

enjoy :)

StepTalk Palette 1.0 released :-)

Well, I had the time this evening to create a small libStepTalkView library (containing... the StepTalkView widget...) and correct a few things, so I thought it was good enough for a release ! For once I'm trying to do "release early, release often". Although I'm not sure about the latter... ;-)

Anyway, the whole package (libStepTalkView and StepTalkPalette) is here: http://www.roard.com/gnustep/STPalette-1.0.tgz

What's wrong at the moment ? well, it seems the StepTalkView class is not properly exported somehow, so you need to reload manually the class in Gorm (Classes->load class, load StepTalkView.h from libStepTalkView) before drag'n dropping a StepTalkView -- I guess that's probably easy to fix. Else it seems to work..

What I'd like to do now is to create outlets/actions on the fly (well, actually, tell Gorm about them) -- if I can do that, then I can create an object that will let you dynamically create "StepTalk objects" -- add instance variables, methods, etc. Each "methods" will contains a script, executed on the fly, and each instance variables will be passed to the scripts. Not completely sure about methods parameters, but I'll probably find a nice way to deal with them...

Anyway, if I can do that (and that seem doable..), then you could really program entirely in Gorm :-)

(although it probably won't be very fast, for sure... but for prototyping that would be quite useful I think, and if you need perfs, you can create an ObjC object!).

Have fun, and contact me if you have ideas :-)

Tuesday, June 14, 2005

Steptalk palette :-)

Making a StepTalk palette was quite simple, as it turned out...



Now I just need to build a proper framework and add a non-view StepTalk object in addition to the current one... :-)

Monday, June 13, 2005

Steptalk integration ..

Now that I have something mostly working on the "stack" side .. what would be neat is to have a way of adding some little code snippets directly in Gorm and link them to actions; it's not meant to replace ObjC coding, but in my "hypercard"-like idea, it's ok -- you'll use small scripts to do some of the things, and if you want really complex stuff you can use objc objects. Well I guess people could abuse the script system, but hey..

So, the obvious way to add scripting is to use Steptalk, Stefan Urbanek's script engine for GNUstep. Furthermore, Steptalk isn't tied to a specific language (actually it can support a smalltalk-like language and scheme, and we could have something else like ruby in the future...).

I had a look to F-Script but I was disappointed by its IB palette.. basically it's not really useable for what I want ;-) -- even if I didn't want to use it, I was wondering how the palette was working, as I thought it permitted what I want... in fact, it kinda does, but by setting manually the targets/actions of objects in the script .. bah :-) -- I want something more easy to use.

Well, I compiled Steptalk on OSX to play a bit with it, and I'm trying to think about how the palette could work to provide an environment as easy to use as possible... F-Script palette's idea of defining a bunch of outlets (object1, object2, .. object9) on the F-Script view where you link objects to have them accessible from the script is a bit crude, but for a start it will do the work. Though I think it should be possible to create a custom editor/connector that will let you add outlets on the fly, which would be a better way. Need to ask greg about that :-)

So the idea is to create a Steptalk palette that will contain a "Steptalk object" (which will contains a steptalk environment and
a text containing the script). You will be able to connect outlets to this object (and theses outlets will then be accessible from the script), and also use it as a target (so you could connect a button to it, when the button is clicked it will execute the content of the script). That won't be a perfect system and not as transparent as visual basic / hypercard (eg, click on the button, you get a window with the corresponding code executed onClick), but that would be a start. This "Steptalk object" won't be a view, but we could have a simple view so you could put the script on your windows (this view won't show when the program is running...).

Something that could be interesting too is to use custom widgets that already contains a steptalk object, with their target/action set to it. For example, the Stack could (and probably should) contains such an object. Same for the cards. And we could have a custom button containing a steptalk object too, which will then permit the "I click on the button and the code appears" scenario...

Sunday, June 12, 2005

update on the hypercard idea...

Well, after backuping OSX, then formatting my hard drive, then reinstalling the backup image on it.. I was able to easily install ubuntu on my powerbook, and now I've got a working gnustep env :-)
Ok, no touchpad support, no wifi support (damn you broadcom !), no luminous keyboard support... but it works :-)

So I was able to start recoding a palette for Gorm.. with a bit of help from gregory casamento, it now works :-)
Well, sort of. It's not persistent in "test mode" yet. And I need to finish my IB Editor subclass to support the Card connections (eg, connect something to the Card, not just to the Stack object). So what's working ? Well:


  • There's a palette containing a Stack object -- you can drag'n drop it on you window

  • The Stack object contains one Card by default, and you can drag'n drop things on it (buttons, textfields...)

  • There's a Stack inspector, so you can add new cards, and navigate through the existing cards

  • There's also the possibility of creating a card from an existing one (eg, the second card will be a copy), which I need to implement the "background elements" thing, useful in the database case


So what needs to be done ? Well, as said before, add connection support to the Card view (so you could for example add a button that when clicked go directly to the card); then add persistency to the cards (I will probably just encode them for a first try... perhaps in the future something with CoreData (if we have a clone ..) or GDL2 ? or a custom solution ? but who knows, simply using encoding will perhaps be good enough for the use I expect, eg, very small databases...)

So anyway, good progresses... and now I have a much better idea about palettes ;-) so i'll probably do some more -- for example, a palette containing NSArray/NSDictionary could be rather useful, particularly if they have an editor to let you add data, and particularly in my "hypercard"-like scenario.. then, I'll just need a Steptalk palette ! :-D

Saturday, June 11, 2005

Hypercard and Gorm ?

Hypercard ? Never used it, but always heard good things about it.. (starting from Dave Small's articles ;-)
So in another round of web procrastination, I tried to find more infos about it. Turns out it was quite interesting, and modern incarnations such as Revolution are quite cool too.

So what's cool with Hypercard ?


  • You could say that it was one of the first easy to use "gui builder" -- you just drag'n drop elements on your screen, click on them to open a script function that will be triggered (for example when the user click on the element), etc. And it's not limited to widgets, you can draw, add images, sound... More than a gui builder, Hypercard was the first multimedia authoring system..

  • You program it using Hypertalk, a "natural" programming language (ie, close to english, rather lax). Interesting.

  • The real interesting bit: everything revolves around the concept of Stacks of Cards. Basically, you start with a stack containing one card. You can have more than one card in a stack (duh), and only one card is displayed at a time. So, a card is a "screen" if you want. And then you have the possibility to navigate through the cards, going from one card to another, to add cards, etc. Which is basically a hypertext (or hypermedia in that case) system. Now, the other great thing is that cards are persistants : if you add something to a card, it will stay. If you quit hypercard, restart it, reload your stack, what you added on the card is still there. Combine that with the ability to specify some of the elements on a card as "background elements" (meaning they'll be there on any cards of the stack) and you have a really simple method to define databases. Which is why Hypercard was also considered as a database. Pfew, quite a lot of possibilites, no wonder Apple's management had a hard time figuring it out ;-)



An example of creating a database: Just create a new card, add some textfields... add buttons to navigate (prev card, next card) and a button to add / remove a card. Set the textfields as background elements. And voila ! you're done ! Now you can run your stack, fill in the card, and when you need to add a new card, just click on the button. Great no ? In addition Hypercard could easily search through a stack, so it wasn't difficult to add search possibilities too.. And if you need to add a new information ? just add a new textfield :-)

So to sum up, quite a neat system. As I never used it, I perhaps misunderstood some of the possibilites, but playing a bit with Revolution, I'm not too far from what I describe..

I now understand more why lots of people liked it -- it was really a great system for "non programmers" to actually do great things with their computer. It's a shame Apple didn't push it more...

Anyway... I needed to explain all that to introduce my idea : Gorm is the InterfaceBuilder-like program for the GNUstep framework. You could say it's just another "gui builder" ... and you would be rather wrong ! Because instead of limiting itself to describe UI elements layout.. it really only deals with objects. Live objects. Which means you can even try your user interface, link buttons to actions, etc., all without compiling. And it's any objects -- not just graphical objects.

When you set options of the elements on your UI, you really work on the objects themselves. Then the UI is saved -- in fact, the objects graph is simply serialized in a file. When your GNUstep (or Cocoa) program starts, it just load this serialized graph of objects back in memory. That's the great thing with InterfaceBuilder and Gorm : you can set up a lot of things directly, without writing a line of code. The other good thing is you can define your own palettes of objects :-) so at the end, you can build complex program simply by drag'n drop... well, that's the idea anyway. Recent Apple's additions to the Cocoa API goes toward that (NSController, CoreData...).

So what's my idea then ? Well, it occured to me that you could simply have two objects -- a "Card" object and a "Stack" object, and put them on a Gorm (or IB) palette. The "Card" object will accept other objects (textfields, images...) and will also be in charge of saving their state. So there you'd have a persistant Card. The "Stack" object will maintain a collection of Cards, and will answer to messages like "go to card #2", "go to next card", or "create a new card".

Thoses two objects will provide you with Hypercard-like functionalities -- just start Gorm, select the "hypercard" palette, drag'n drop a Stack view on your window, and then add what you want on it. Want another card, open the Stack inspector and add one. Add new objects on it. Add some buttons on your window, and link the buttons' actions to some methods of the Stack or of the current card. And of course, instead of widgets, you could drop images or sound ... why not ?

Now, imagine we'd have a Steptalk palette to create scripts objects... and voila, you have an hypertalk-like system :-) -- all that inside Gorm (or InterfaceBuilder), leveraging the Gorm's UI builder possibilities. Imagine now we add a few nice graphical transitions or other niceties... and you end up with a rather good multimedia authoring system that generates binaries :-)
-- and if you want to add your own objects to it, to extend it.. well, it's still Gorm and GNUstep, so you can easily do that, obviously :-)

Ok, that was a long post... :-)

So in short, the idea sounds quite cool to me, and I actually started to implement a palette with thoses two objects on InterfaceBuilder (MacOSX). Sadly, palette creation isn't that well documented and I ran into a couple of strange problems .. so ... I'll do that with Gorm first, it'll be easier. Didn't start with Gorm for a very simple reason -- since Tiger, my GNUstep/OSX installation is b0rked. In the end, I'm installing a linux distrib (ubuntu PPC) ... Should be easier to have a working GNUstep environment ! :D

First Post...

Well, I finally decided myself to open a blog. What for ? hm.. mainly to record my thoughts and ideas about computer science, programming, etc. I'm not really into writing personal stuff about me :-)

At least it will give me with a known place where I can write things and find them later...

Just the bare minimum about myself: I'm 26, french, in the middle of my PhD. I live in Wales, UK. Crap weather, but nice place and nice people.

I'm involved with some free software projects, mainly GNUstep and Étoilé. Which is why I'm writing in english rather than in french, as many of the things I plan to write here will likely concern thoses projects.

We'll see how it turns out !