Sunday, December 13, 2009

Lua for Pythoners - Lists

Hello,
lately I'm discovering Lua as general purpose language. Many people don't agree with lua being used as a general purpose language, many others (including a newbie like me) think Lua has such a simple syntax and powerful tables to become a full fledged language.
I use a lot of Python, so I start from here: what Python does that Lua can't do almost in the same way? Read the question as it is, don't read "what Python does that Lua can't do", it's different.

This is the first of several post series I'm writing. I'm trying to "translate" python pills in Lua + Penlight

Please consider that many things can be done really better in Lua. As I said, this is a kind of "translation". You will understand that Lua does better than Python in other things that will not be shown because the examples are made in Python.

Here's the snippet, you can run it with a stand-alone Lua interpreter.

If you know better ways of doing things like in Python please comment. Comments like 'Hey, it's inefficient! This is not the way you do things in Lua' are accepted of course but not related to the post.

Errata:
I've had some important feedback thanks to #lua people in IRC:
- Variables in Lua are globally assigned, so at least in functions you must use local
- Using table.insert in loops is slow, better use tbl[#tbl+1] assignment, and even better remember the next free position tbl[next] = element; next = next + 1

Friday, November 27, 2009

Mimaggia, cairo tester

Hello,
From GNOME

I've created a simple pygtk project for testing cairo statements. It includes a sort of terminal where you write statements in a simple language. It features immediate preview of what you write.

Say it's a new format for images.
If you want to test it and see the code, ask me.

Saturday, November 14, 2009

Python and RSA


There are many Python toolkits for crypto, so I hope I've done the best choice (at least for now). This is a simple utility class for managing RSA keys, a sort of wrappera to the m2crypto class.

import M2Crypto
class RSA (object):
def __init__ (self, bits=1024, padding=M2Crypto.RSA.pkcs1_padding, exp=65537):
self.bits = bits
self.padding = padding
self.exp = exp
self.rsa = None

def generate (self):
self.rsa = M2Crypto.RSA.gen_key(
self.bits, self.exp, lambda x: None)

def encrypt (self, s):
c = ""
bytes = self.bits/8-11
for i in range(0, len(s), bytes):
c += self.rsa.public_encrypt (s[i:i+bytes], self.padding)
return c

def sign (self, s, algo="sha1"):
dgst = M2Crypto.EVP.MessageDigest (algo)
dgst.update (s)
return self.rsa.sign (dgst.digest (), algo)

def verify (self, s, sign, algo="sha1"):
dgst = M2Crypto.EVP.MessageDigest (algo)
dgst.update (s)
try:
self.rsa.verify (dgst.digest (), sign, algo)
except:
return False
return True

def decrypt (self, c):
s = ""
bytes = self.bits/8
for i in range(0, len(c), bytes):
s += self.rsa.private_decrypt (c[i:i+bytes], self.padding)
return s
Example usage:

rsa = RSA ()
rsa.generate () # generate key pair
s = "a"*2000 # test data
edata = rsa.encrypt (s)
sign = rsa.sign (s)

ddata = rsa.decrypt (edata)
assert rsa.verify (ddata, sign) == True

Friday, October 09, 2009

Debian+Apache+Tomcat+Axis

Hello,
one of the courses I'm following at the university is "Laboratorio di reti
di calcolatori" which uses the technologies (really technologies?????)
listed in the post title. This is a little tutorial for making them works,
with a little script for registering .wsdd files.

- aptitude install apache2 tomcat6
- download the binaries of axis 1.x (latest is 2.x, it's not used in our course) and xerces then unpack them.
- copy *.jar of xerces into the "lib" dir of axis.
- create "/etc/tomcat6/policy.d/99axis.policy" with:
grant codeBase "file:/var/lib/tomcat6/webapps/-" {
permission java.security.AllPermission;
};

- copy the "axis" directory found under webapps of the axis binaries into /var/lib/tomcat6/webapps
- invoke-rc.d apache2 restart
- invoke-rc.d tomcat6 restart

Now go to http://localhost:8080 to make sure that Apache-Axis works.

Finally, this is the script for deploying web services (call it deploy.sh):
export AXIS_HOME="/home/lethal/ingegneria/reti/axis/axis-1_4"
export AXIS_LIB="$AXIS_HOME/lib"
export AXISCLASSPATH="$AXIS_LIB/axis.jar:$AXIS_LIB/commons-discovery-0.2.jar:$AXIS_LIB/commons-logging-1.0.4.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar:$AXIS_LIB/log4j-1.2.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar"
java -cp "$AXISCLASSPATH" org.apache.axis.client.AdminClient -lhttp://localhost:8080/axis/services/AdminService "$1"

In the script, you must tweak the AXIS_HOME variable to point to the unpacked axis binaries: avoid using spaces in this variable or you'll encounter several errors in terms of classpath.
Usage of the script:
sh deploy.sh file.wsdd

We're done!

Wednesday, October 07, 2009

Speeding up zsh completion

Hello,
since I've started using zsh, a great shell with great out of the box completion, one of the most boring issues was having a really slow completion. I can understand it could be slow to get a list of packages, remote files or command line options, but also paths were often slow to be completed. After lots of searches I've ended up in adding this magic line to my ~/.zshrc:
zstyle ':completion:*' accept-exact '*(N)'
This way you tell zsh comp to take the first part of the path to be exact, and to avoid partial globs. Now path completions became nearly immediate.

Another important speed up is using the cache for packages and other stuff:
zstyle ':completion:*' use-cache on
zstyle ':completion:*' cache-path ~/.zsh/cache
If you know how to boost up options/remote files, please share :)

Saturday, August 29, 2009

New GPG key

Hello,
due to some synchronization problems between my desktop and laptop, unfortunately I've lost my GPG secret key. I was planning to renew my key after the SHA issues, but this way I can't neither revoke the old key nor sign the new key. So I please anybody having my pubkey to delete it:
gpg --delete-key C29A9371

I've uploaded my new key as usual so you can get it:
gpg --keyserver pgp.mit.edu --recv-keys D2C27B6B

Sunday, August 09, 2009

Spadi source code

Hello,
after I've written really a few docs, and cleaned up some stuff, I've published the code of both Spadi and Corraza on gitorious here. In the while, I've added support for floors and closeable views.
Help... help is needed.

Stay tuned.

Thursday, August 06, 2009

Constructing a free ArchiCAD alternative

Hello,
together a couple of university mates we talked about a possible free (as in freedom) ArchiCAD alternative. There are several free CAD out there but none is free for architects/engineers. The project is too big and ambitious, but I wanted to give OpenGL a shot with this excuse to learn something new.

I've started two projects:
  • Corraza, the OpenGL framework for editing 3d objects and exporting the scene graph to ray tracing software... think about a very very very minimal blender but as library
  • Spadi, the GTK+ application that runs on top of Corraza

You can find a video here to see what it can do now, after a week of development.
There's no code published at the moment, contact me if you would like to join the development.

Stay tuned.

Tuesday, July 21, 2009

Aruanne, pdf reporting framework

Hello,
a while ago I've been talking about pango cairo and how to generate pdf with a couple of tables.
In the meantime I've worked on it, improving and enhancing new kinds of elements. This has lead to the creation of a small project, a library providing a simple framework for generating mostly PDF reports (I haven't tried to generate SVG or something else yet).

After a couple of release requests, I've found finally the time to publish a sort of working code.

Here's the git repository and here you can download the snapshot tarball.

Any patches welcome.

Saturday, June 20, 2009

The less consuming radio player ever

Hello,
multimedia always killed desktop performance, also audio with all such effect-based players out there. I've been using deezer for a long time, but sometimes I'm tired to see my desktop lagging.
I don't need that, I need random music from internet while I'm either programming or studying, and my computer has only 512mb ram and 2.4ghz amd64 (onLY??? yes nowadays it's a little amount).

Let's see what we can do using gst-launch:

while [ 1 ]; do wget -q -O - http://66.250.45.112:80/hard.ogg|gst-launch fdsrc fd=0 ! decodebin ! audioconvert ! alsasink; done

The URL above is a hard rock station :) The while ensures re-connection. I think performances are great, 6% cpu and 2% ram.

But there's yet a bettere solution (see comments):

mplayer http://66.250.45.112:80/hard.ogg

Friday, May 29, 2009

Syx changes web and git hosting

Hello,
I'm officializing the change of web hosting and git hosting from googlecode to berlios:

The new website is up!
For several reasons, including reliability, we switched both the website and git hosting to berlios. Also the purpose of this change is to rewrite the website backend using Syx.
The mailing list and the bug tracker are still hosted at googlecode.

Some progress news in the while
We're working on a new memory management, object representation and garbage collector. On the other side the lack of time is making things harder for releasing the new version. Together with the above changes, new Smalltalk standard pieces will implemented as usual. I remind you the new code is in
the object branch.


Wednesday, May 27, 2009

Render tables with pangocairo like reportlab

Hello,
lately I was wondering if there was any alternative to the well known reportlab python software for creating PDF reports. I immediately thought about Cairo. The only two problems are:
  • Cairo doesn't create multiple pages
  • No support for creating tables containing text, necessary for table-based reports
I still can't realize how to achieve the first feature, but the second one could be solved using Pango layouts.
The idea is to create the cells of the table using such layouts, so that the text get wrapped etc.

Here's the Pango tables code snippet containing the necessary classes for achieving the job. Notice that the methods in the snippet often make use of Pango units instead of pixels.
Now let's use the Table class as follows: create a table with two rows and two columns, then show it twice with different background colors.

surface = cairo.PDFSurface ("test.pdf", 300, 400)
cr = cairo.Context (surface)
cr = pangocairo.CairoContext (cairo.Context (surface))

sizes = [pango.SCALE*12*10, pango.SCALE*12*10]
data = [["first test with pango tables", "seems to work correctly"],
["though it needs", "support for borders and spans"]]

table = Table (cr, sizes, data, pango.FontDescription ("Sans 12"))
cr.rectangle (0, 0, pango.PIXELS(table.get_width ()), pango.PIXELS(table.get_height()))
cr.set_source_rgb (0.8, 0.8, 0.8)
cr.fill ()
cr.set_source_rgb (0, 0, 0)
table.show_table (cr)

cr.translate (0, 200)
cr.rectangle (0, 0, pango.PIXELS(table.get_width ()), pango.PIXELS(table.get_height()))
cr.set_source_rgb (0.4, 0.5, 0.7)
cr.fill ()
cr.set_source_rgb (0, 0, 0)
table.show_table (cr)

Here's the result test.pdf:


Monday, May 18, 2009

Blogging from Epiphany WebKit

Hello,
I've been using Midori for a while. It's a great browser: innovative and light. However all my bookmarks and data are in Epiphany. Last week the new epiphany-webkit version has been uploaded in Debian Sid and I couldn't wait to test it. I'm currently using it instead of gecko; it has still some issues but I begun living without it.

Sunday, April 26, 2009

Create a GdkPixbuf from cairo surface

Hello,
here's the inverted code snippet of the previous post.

w, h = surface.get_width(), surface.get_height()

pixmap = gtk.gdk.Pixmap (None, w, h, 24)

cr = pixmap.cairo_create ()

cr.set_source_surface (surface, 0, 0)

cr.paint ()

pixbuf = gtk.gdk.Pixbuf (gtk.gdk.COLORSPACE_RGB, True, 8, w, h)

pixbuf = pixbuf.get_from_drawable (pixmap, gtk.gdk.colormap_get_system(), 0, 0, 0, 0, w, h)

Saturday, April 25, 2009

Create a cairo surface from a pixbuf

Hello,
sometimes in the code of a couple of projects I see some hard algorithms to transform a pixbuf in a cairo surface.
Maybe most of people don't know that GdkCairoContext, contrarily to cairo_t, is created against a cairo context not a cairo surface:

surface = cairo.ImageSurface (cairo.FORMAT_ARGB32, pixbuf.get_width(), pixbuf.get_height())

cr = cairo.Context (surface)

gdkcr = gtk.gdk.CairoContext (cr)

gdkcr.set_source_pixbuf (pixbuf)

gdkcr.paint ()


Notice gtk.gdk.CairoContext (cr), which cr is not the surface. That's the key of the code snippet.

For instance this can be applied on a ClutterCairoTexture to render pixbufs in the canvas.

Friday, February 27, 2009

Awesome/other wrong keyboard layout

Hello,
due to the high resource usage by Eclipse (I have to use that unfortunately because of my professor) I've temporarly dropped GNOME and now I'm using Awesome for a while.

Ok let's say the problem: the keyboard. Do you have different languages, layouts and so on among several configurations (GNOME, X, ...) and your keyboard layout is messed up with awesome?
Just do it:

setxkbmap -layout YOURLAYOUT


Where YOURLAYOUT for me is it.

I've found this utility in this mailing thread. Yet you can read that awesome is still too young and lacks some keyboard configuration features.

Have fun!

Tuesday, February 24, 2009

JMF and MPEG

Hello,
I'm recently writing a game with Java AWT/Swing/SwingX/JMF for a university exam.
If you are using the Java Media Framework and most of the formats (all the well known and used formats) can't be handled by the library here's your definitive solution to the problem.
You will usually get "Unable to handle format: MPEG" or something like that.

How do you get rid of that and make things work? There's a great plugin named jffmpeg which handles a huge number of audio and video formats (including ogg/vob).
Just follow the instructions on the project website to install the plugins.

Alternatively you can register only the codec and demux you use from within your application code as follows (e.g. only handle MPEG video format on input):

Format[] inFormats = { new VideoFormat ("MPEG") };

PlugInManager.addPlugIn ("net.sourceforge.jffmpeg.VideoDecoder", inFormats, null, PlugInManager.CODEC);

PlugInManager.commit ();

Saturday, January 10, 2009

FreeSpeak 0.3.0 has been released

FreeSpeak is a free (as in freedom, developed and released under the terms of GPL) frontend to online translator engines (such as Google, Yahoo, etc.). It is written in Python, it uses the GTK toolkit and some GNOME infrastructure features.

This is a major enhancemenfts release.



Overview of Changes from FreeSpeak 0.2.0 to FreeSpeak 0.3.0
===========================================================

* Project is now hosted at BerliOS.de: http://freespeak.berlios.de

* Support for cancellating operations has been added

* Translation suggestions (open-tran) have been added

* A menubar has been added and the toolbar has been cleaned up

* The behavior of language/translation selection has been fixed and improved

* GNOME documentation has been added

* Dependencies in the configuration have been cleaned up

* Support for global keybindings has been added through python-xlib

* An introduction widget for the main window has been created

Friday, December 26, 2008

Mailbox-to-mbox

Hello,
lately I've been looking for a way to convert a mailman archive to an mbox format so that I could open with mutt.
I then found a couple of scripts, but the one I've found simpler and working for my needs is mailbox2mbox.pl.
Sample usage:

$ gunzip YourArchive.txt.gz
$ perl mailbox2mbox.pl < YourArchive.txt > mbox
$ mutt -f mbox

And it simply works!
Does anybody know a method as simple as the above one but more powerful?

PS: Happy holidays!

Sunday, December 21, 2008

Global keybinding on X

Hello,
lately I've been looking for a way to create a desktop-wide keybinding for FreeSpeak.
I first looked into Tomboy and Deskbar source codes but the egg was too huge to be adopted, and it would have brought C dependency which isn't always nice for a Python project.
Then fargiolas pointed me to a blog post where I could find about gnome keybindings owned by gnome control center. Well that was only a mirage as it doesn't really grab the key but it's only a visual entry in the keyboard shortcuts preferences.
After a few days I've finally found a not-so-hackish solution in about one hundred lines of Python code.

Here is the snippet (download), only using Xlib and GTK+ Python bindings.

Sample usage:

def callback (keybinding):
print 'Callback!'
gtk.main_quit ()

gtk.gdk.threads_init ()
keybinding = GlobalKeyBinding ("/apps/appdir", "key_binding")
keybinding.connect ('activate', callback)
keybinding.grab ()
keybinding.start ()
gtk.main ()


The only problem is that it doesn't make use of GDK filters because PyGTK doesn't provide such function wrappers and there's no GDK-to-Xlib mapping available.
But yes, it works very good.

Monday, December 01, 2008

Aptitude-gtk progress

Hello,
I was curious to see if aptitude-gtk was making some progress. I haven't followed the project since it's been merged into aptitude.
Well, I found it more functional and complete. Here's a screenshot showing pending packages for upgrade after an update:
From GNOME

The team is definitely doing a good job. Hopefully I'll find the time to give some help as I'm really interested in such full-featured GUI frontend.
Keep going on!

Sunday, November 30, 2008

FreeSpeak gains translation suggestions

Hello,
it hasn't been a long time since FreeSpeak 0.2.0 has been released. One of the TODOs for the next release was to support open-tran, and more over translation suggestions for development.
This is a screenshot of what's been included in the repository today:
From GNOME
FreeSpeak is a GNOME frontend to online translator engines.

Friday, November 28, 2008

FreeSpeak 0.2.0 has been released

Hello,
after some work in these weeks now I have released a new version of FreeSpeak.

FreeSpeak is a free (as in freedom, developed and released under the terms of GPL) frontend to online translator engines (such as Google, Yahoo, etc.). It is written in Python, it uses the GTK toolkit and some GNOME infrastructure features



.
It's been rewritten almost from scratch so I think there's no need to post release notes here. Anyway you can always read what changed from the old version released a couple of years ago here.

Notice that the project homepage has been changed. The project has now moved to BerliOS.de.

Sunday, November 23, 2008

Replace GTK+ with Clutter for fun

Hello,
lately I was having fun with Clutter and Python. I've started by creating some Gtk-like widgets (such as GtkWindow, GtkBox, and GtkButton) in Clutter.
Well, this is the result... it's a simple example of a very poor toolkit, but it works:

Try it, it's only one .py file source code

Sunday, November 16, 2008

Single app instances, Python and DBus

Hello,
I'm working on FreeSpeak lately and I needed to run the application once per session, as it's got a trayicon and a notebook (maybe windows with an applet is better?)
I decided to use DBus for making the application run only a single instance; when you try to open it again it won't start another process, instead it will use the already running one.

This is how I would create a generic single app instance with dbus-python:
import dbus
import dbus.bus
import dbus.service
import dbus.mainloop.glib
import gobject

class Application (dbus.service.Object):
def __init__ (self, bus, path, name):
dbus.service.Object.__init__ (self, bus, path, name)
self.loop = gobject.MainLoop ()

@dbus.service.method ("org.domain.YourApplication",
in_signature='a{sv}', out_signature='')
def start (self, options={}):
if self.loop.is_running ():
print 'instance already running'
else:
self.loop.run ()

dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
bus = dbus.SessionBus ()
request = bus.request_name ("org.domain.YourApplication", dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
app = Application (bus, '/', "org.domain.YourApplication")
else:
object = bus.get_object ("org.domain.YourApplication", "/")
app = dbus.Interface (object, "org.domain.YourApplication")

# Get your options from the command line, e.g. with OptionParser
options = {'option1': 'value1'}
app.start (options)
How it works?
  1. Setup the mainloop for dbus
  2. Request a session bus name, so that other applications (in our case another instance of the same application) can connect to it
  3. Create a new instance at path / if the bus name doesn't exist (so we are the primary owner). If it exists, then obtain the object from dbus and call the method on the remote Application object using the known interface.
  4. The Application.start method checks if it's already running then decide what to do in both situations.
Creating a GTK+ application this way is really easy. It only needs to use the GTK+ mainloop.
Let's suppose we want to present() the GtkWindow when the user tries to open another instance of the application:
import dbus
import dbus.bus
import dbus.service
import dbus.mainloop.glib
import gobject
import gtk
import gtk.gdk
import time

class Application (dbus.service.Object):
def __init__ (self, bus, path, name):
dbus.service.Object.__init__ (self, bus, path, name)
self.running = False
self.main_window = gtk.Window ()
self.main_window.show_all ()

@dbus.service.method ("org.domain.YourApplication",
in_signature='', out_signature='b')
def is_running (self):
return self.running

@dbus.service.method ("org.domain.YourApplication",
in_signature='a{sv}i', out_signature='')
def start (self, options, timestamp):
if self.is_running ():
self.main_window.present_with_time (timestamp)
else:
self.running = True
gtk.main ()
self.running = False

dbus.mainloop.glib.DBusGMainLoop (set_as_default=True)
bus = dbus.SessionBus ()
request = bus.request_name ("org.domain.YourApplication", dbus.bus.NAME_FLAG_DO_NOT_QUEUE)
if request != dbus.bus.REQUEST_NAME_REPLY_EXISTS:
app = Application (bus, '/', "org.domain.YourApplication")
else:
object = bus.get_object ("org.domain.YourApplication", "/")
app = dbus.Interface (object, "org.domain.YourApplication")

# Get your options from the command line, e.g. with OptionParser
options = {'option1': 'value1'}
app.start (options, int (time.time ()))
if app.is_running ():
gtk.gdk.notify_startup_complete ()
How it works?

Let's say we're running the Application for the first time, the loop begins and when it ends running is set to False, so gtk.gdk.notify_startup_complete() won't be called. Instead, if the application is already running, start() will be called on the remote object running the loop. The method then returns immediately so gtk.gdk.notify_startup_complete() will be called.
If you don't notify to the launcher that the startup is complete... guess what happens to your mouse and to your taskbar panel...

If the loop is running, the window is presented to the user with a little delay. If you don't use any timestamp, the UI interaction won't let the window have the time to be presented.

Of course, you can use DBus for many more things, like both setting options from the command line, as explained in the above code, and let other applications communicate with yours and viceversa.
Nowadays almost all systems use DBus, so it won't be a pain to add such dependency. In my opinion, it would be much more painful to use lock files, FIFO, unix sockets or whatever. FreeSpeak used such old technologies and it was a very poor emulation of what DBus already offers.

Monday, October 20, 2008

ping.fm is dead

Hello,
lately I've been using ping.fm for a couple of weeks because I've found it really useful.
Today I've tried to update my status through sending a mail but I received delivery failures... I then discovered that ping.fm is dead!

Tuesday, October 14, 2008

FreeSpeak, a GTK+/GNOME translator

Hello,
I've worked on FreeSpeak a couple of years ago, a Python/GTK+/GNOME project to translate text and web pages by querying already existing online translation tools.
PRO: It has been packed for Ubuntu and it has been publicized by a journal in Italy.
CONS: It has been discontinued until now. In fact I restarted the project and I'm doing a huge refactoring because of the ugly code I wrote in the past.



It's already working, but some features are still missing.
The new approach will allow applications to use FreeSpeak as a Python library to embed the translation widgets.



Contact me if you intend to help the project with suggestions, bug reports, critiques and coding.

Thursday, September 11, 2008

Debian Get Satisfaction


Hello,
lately I've found getsatisfaction, a social web2 free customer support for all companies and products.
Of course, what have I done is to look for the Debian company. Well it's there, but unused.

  1. Easy for novice users to ask and find answers there.
  2. You can share you ideas and get help
  3. Report problems and get help on bug reporting
  4. General and specific discussion
  5. Subdivide the service in variuos products (for examples ports and distributions)

Monday, September 08, 2008

GTK Apps to replace Gnome Files

Hello,
everyone knows that gnomefiles has went offline with that boring redirect to osnews.com.
Now many people is looking toward gtk-apps.org, I didn't know it before. It's looking really good.
The only problems is that I had (and I guess I'm not the only one) a few unmaintained projects on gnomefiles and they are now lost.
I'm wondering if it will be publicized a day by gtk.org to be something more official.

Saturday, August 23, 2008

Where are you? Yahoo! Fire Eagle

Hello,
the Twitter question was "What are you doing?". The new question is now "Where are you?"

Yahoo! has launched a sort of social application called Fire Eagle for updating your location and share it across other web services.

Saturday, August 16, 2008

Cincom Industry Misinterpretations reached the 100th podcast


Hello,
I'm listening to the Industry Misinterpretations podcasts (though my English is so poor to understand only a few words) and now they reached the century mark. They're managing an account on Podcast Alley.

Stay tuned!

Interviewed by Clubsmalltalk

Hello,
lately I've been interviewed by the new clubsmalltalk. Hey, I know, I'm not so good with English ;)
I'm glad of this, thanks to Hernan Galante.

Vagalume, GTK+ and Last.fm

I've found this great gstreamer application to listen to the last.fm stations. It works perfectly, fully functional and up-to-date. Features several IM status updates, including telepathy. It's definitely good-looking with my dark theme.
Homepage: http://vagalume.igalia.com/
Last.fm group: http://www.last.fm/group/Vagalume

Monday, August 11, 2008

Compiz with ATI RS480 on Debian

Hello,
after years that compositing has been introduced in our desktop, it's finally come the time to try it.

Uninstall fglrx
My video card is not supported very well with Mesa 7.0.x, in fact I've been using the fglrx driver for a long time.... until now!
I had to manually dpkg --purge all the related packages.
Now it's better to rmmod fglrx.

Install mesa 7.1 from experimental
On #compiz-fusion some guys hinted me I should have used Mesa 7.1rc because of recent improvements on my video card. The only way to get such version was to include experimental sources.
Ok, no problem, if it doesn't work I can downgrade back to the previous one.

Upgrade xorg to experimental
But there're still problems, I had to upgrade to the latest xorg in experimental because of mesa compatibility. In fact AIGLX couldn't load DRI drivers because of missing symbols.
I had to dpkg -l|grep xorg the install the one by one. I did pray for everything to work, really.
Now backup xorg.conf and go ahead with X -configure.

Install compizconfig-settings-manager and compiz-fusion-plugins-extra
For some reason, the first time I've tried running compiz it's gone Segmentation Fault. On the IRC channel they hinted me to install the crash handler plugin to back track the error. After installing such packages, magically compiz --replace worked!
Now I have a GNOME Desktop with the Blue-Joy theme and the Avant Window Navigator.

Everything both nice and unuseful, but now I understand how eye-candy fancy stuff can change your desktop.

Before the war:


After:

Thursday, August 07, 2008

iStream


iStream
Originally uploaded by Lethalman
Very useful applet for listening to the radio. It lacks a perferences dialog, but it's still nice.

Gnome main menu


Gnome main menu
Originally uploaded by Lethalman
Hello,
while I was playing with apt-cache I've discovered a new kind of main menu in GNOME. It's being developed by SuSE. It feels nice, robust and innovative.
The screenshot is showing the documents tab.
To install, aptitude install gnome-main-menu and add the new applet.

kqemu on Debian amd64

Hello,
I've been using qemu a lot lately because I'm creating an usb hdd with debian live.
The image contains a system running postgresql, development packages for gtk and python and gnome-core . All this ends up loading in more than 5 minutes, this is really boring.

Then I begun looking for a faster virtualization system, and found KVM. Unfortunately my processor hasn't the right flag for it.

Finally I found kqemu, which is a module for the kernel that speeds up a lot qemu. I never thought it could speed up things...... so.... much!
Let's install it:
m-a a-i kqemu
modprobe kqemu
That's it, for those who owns an amd64 processor, this is the right way to use kqemu:
qemu-system-x86_64 -kernel-kqemu [your options]
You shouldn't get any error, if you do... boh.

The image now boots in 33 seconds down to the bottom init scripts, and GNOME works only with a slight delay but it's definitely a great speed up. With the real machine, I enter gnome in about 40 seconds.

Keep going the good work Qemu team, and thanks as usual to everyone who helped me on IRC.

Wednesday, August 06, 2008

Debian and zd1211 wifi

Hello,
I'm using debian lenny and I've got these two problems:

  • With versions of the linux kernel prior to 2.6.20 (maybe) I could install zd1211 firmware using the module-assistant which has been now dropped from testing and unstable.
  • Boot process slowed down by 30 seconds and couldn't plug-in the usb pen because udev/hal screw up

What I've done is to remove the source and its created firmware, with the one shipped with testing and unstable (bug #411912):

aptitude remove --purge zd1211-firmware zd1211-source
aptitude update
m-a clean zd1211
aptitude install zd1211-firmware

Now let's fix the hotplug part, open /etc/udev/rules.d/z25_persistent-net.rules and remove similar lines:
# USB device 0ace:1215 (zd1211rw)
SUBSYSTEM=="net", DRIVERS=="?*", ATTR{address}=="00:1d:0f:b3:66:f7", NAME="eth2"
Now try to detach and reattach your usb pen and everything should magically work.

Thanks to Nss (#debianizzati), dcbw NetworkManager developer and gsimmons (#debian).

Sunday, July 13, 2008

Syx gaining more stability and speed

Hello,
in the new branches of Syx (an open source Smalltalk-80 implementation) we're working to try a new kind of memory management and add many features that have been missed until now to focus on other stuff.

The new faster and more modern v0.1.8 release will contain the following refactoring:
  • Objects will be variable-length (minumum 12 bytes on 32-bit processors and 16 bytes on 64-bit processors)
  • By changing the objects also the GC changed to a mark and compact GC
  • Threaded-switch statement to run processes
  • More efficient method cache (maybe a simple global cache lookup for this release)
API for primitives will only change slightly.

Suggestions for any new particular technologies are welcome.

Thursday, July 03, 2008

identi.ca is worse

Hello,
I'm using Twitter in this week and the API works "almost" perfectly while the website is down most of the time.
I've recently heard about identi.ca, so I decided to try it.
My first impression was bad, because I've seen many redirects of the page, and DNS changes sometimes.
But ok, I tried to register and again... I had problems. When I submitted the registration twice it just did nothing.
I then waited for a couple of hours then I've been registered to identi.ca.

Once I tuned all my account settings, the service has gone down. What happened? Too many twitterers have switched and now identi.ca is out of service? In the while Twitter has magically reopened its gate.

Monday, June 30, 2008

New debian tool proposal

Hello,
this is my second post about Debian. I'm lately discovering all the tools for both managing my Debian system and creating packages.
dh_make is the first tool I've used for the "first debianization" (called so by the New maintainers' guide) which creates a basic template for your package.
Anyway after a few packagings I've seen that something redundant could be automatized further.
What I suggest is a tool that does the following stuff after dh_make has been called:
  1. First dpkg-buildpackage -rfakeroot
  2. Check for libraries and binaries and create new packages in debian/control
  3. Find docs in usr/shared and modify the doc-base
  4. Check for .desktop files and .xpm then create menu
  5. Find info and manpages files
  6. Obtain copyright from COPYING/LICENSE and such, authors from AUTHORS and so on
  7. Find ITP on BTS and fill in the bug number in the changelog
  8. Rebuild the project
  9. Check for lintian errors and warnings and try to fix them (such as empty directories, wrong library name, etc.)
I'm sorry if I'm missing any files such as init.d or cron.d but I'm still newbie with packaging and I haven't tried all the stuff yet.
How this tool sounds to you? Would it be useful and easy to make at least for simple autotooled projects?

Saturday, June 07, 2008

Syx 0.1.7 has been released

Hello,
after several months a new version of Syx has been released. This release contains mostly VM changes and some changes to the Smalltalk Collections. As usual, release notes follow:

This versions enhances a new version of the interpreter, major updates to the scheduler, and as usual a lot of bug fixes. Syx left the Google Code SVN repositories because of many connection problems.

You can find informations about the new GIT repository here: http://code.google.com/p/syx/wiki/GitSource?tm=4

Installation instructions: http://code.google.com/p/syx/wiki/InstallationInstructions

API and environment:

  • SYX_ROOT_PATH and SYX_PLUGIN_PATH environment variables have been introduced.
  • Process and context creation changed.
  • New functions have been added for the scheduler, for manually do events iteration and adding idle functions to wake up semaphores.
  • Startup responsibility has been dropped from libsyx.
  • Added syx errors for system signals to be used with syx_signal.
  • Image recovering has been fixed.

Smalltalk:

  • Covered several standard methods for Collections, Numbers and Object printing/storing.
  • Error reporting from the VM now drops the exception to the Smalltalk environment when the interpreter is running.
  • Random class has been added.
  • Signal handling improvements for the GTK+ plugin.
  • #display family methods have been introduced for Smalltalk objects.

Interpreter:

  • System signal handling has been improved.
  • Cache hash code of Symbols.
  • The interpreter has been refactored to use one stack per Process.
  • Contexts are now created only on demand.
  • Optimized Symbols creation.
  • Signal class has been abstracted.

Parser:

  • The parser have been changed for handling new interpreter specifications.
  • Several fixes to the parser for special cases.
  • Fixed blocks scope.
  • Support <- assignment.

Image:

  • Image snapshot will nullify C pointers
  • Image format has been changed for handling new interpreter specifications.
  • Handle internal interpreter C pointers to be restored the right way.

Scheduler:

  • Different behavior of the scheduler for POSIX and Windows systems has been introduced.
  • Scheduler external idle sources have been added.
  • Asyncronous command line and GTK+ loop using semaphores. This leads to dropping readline.
  • A simple round robin scheduler has been added.
  • Dropped image saving of POSIX fd poll

Documentation:

  • Added lots of new comments.
  • Started documentation project including a manual still under development and a manpage.

Thanks to everyone contributing to the project.

See the ChangeLog for a complete list of things that changed.

Friday, May 23, 2008

Syx, GTK+ and threading

Hello,
you all know that Gtk+ has locks for the GUI when dealing with the X server and prevent async events to be sent. This is done by manually acquiring/releasing the lock on Gdk. Many Gtk+ ports don't do this automatically.

Syx used gtk_main() into a thread and automatically put gdk enter/leave for each function in its wrapper. It would be somewhat ugly in Smalltalk code having to enter/leave each time.
Of course, on Windows everything leads to troubles with threads.

But Smalltalk has Processes, handled by an internal scheduler. I decided then to not create a thread but cycle through Gtk+ events in the scheduler itself. Now everything works correctly.

Difference with other wrappers? The way Smalltalk is thought let you perform multi-tasking without the need to use OS threads, which means no problems on Windows and no need to take care of the Gdk lock everytime.

In addition, I rewrote part of the Console (Smalltalk-side) to be asyncronous using Semaphores. Now you can work on widgets after you run Gtk main! A small example:

Smalltalk YX 0.1.7 is ready.
Type "help!" to get help.
> Smalltalk loadPlugin: 'gtk'!
true
> | w |
> w := GtkWindow new.
> Gtk main.
> w add: (GtkLabel new: 'hello').
> w showAll!
a GtkWindow
You can imagine the result ;)
If you want to try it out you can download the scheduler branch snapshot.

Stay tuned for next 0.1.7 release.

Friday, May 02, 2008

Syx Manual

Hello,
I report the post on the mailing list below:

Hello,
with the next release 0.1.7, once I get a working interpreter and updated all the parts of Syx,
I will move output of doxygen to doc/reference and start a texinfo manual in doc/manual.

My idea is to have this kind of manual:
1) What is Smalltalk
2) Why Smalltalk YX
3) Introduction to the language
4) Introduction the Syx environment
5) COMPLETE Class and methods documentation, EACH non private method will be documented with examples
and EACH class will have usage examples
6) Embedding
7) Advanced topics, internal documentation

I know it's not the time yet for Smalltalk YX to get such documentation but I think it will be
a nice boost for the project and also for the entire Smalltalk community.
Since I don't have such fantasy now I will start directly with all except the 5th topic.

Any hint will be appreciated.
Bye.

EDIT:
The Smalltalk reference will be created automatically from Smalltalk itself.

Tuesday, April 22, 2008

Time for Debian

Hello,
I switched to Debian lately and i think it will become my preferred distribution.
I started with Slackware, then an LFS and then Gentoo. I never found them definitive for me.

I used Slackware by compiling sources most of all, then i didn't see any reason to continue using it.

The LFS came since my new PC as a test, and as long I could maintain it I had no problems and had fun with it.

I then installed Gentoo when i got my first DSL. But the updates are slow for lack of testing, I'm on an amd64. I tried to contribute someway but for the time I've been using it I never seen a open and innovative development (not in the sense that it wasn't friendly). And also, I've seen many developers leaving the project.

In other words, I "almost" used always source-based distribution. All the time I tried other binary-based distribution also to change my way of linux-life, like OpenSUSE, Ubuntu, Kubuntu, Foresight, and so on but no one satisfied me.

Then i wanted to try Debian, hoping it was different than Ubuntu. And in fact it is!
What I like of Debian is it's very high QA, how new users deal with bugs, how stable it is, how the BTS work, how the packaging works (eventough there are lots of useful tools I still don't know), the rapid updates, the security.

The thing I dislike from other distribution is that they release new stable versions but that are not so stable at first. For example i had troubles with the package manager with both Ubuntu and Foresight. Boot problems with Ubuntu, several crashes with Foresight, and so on.

But, I don't want to say Debian is now my preferred distro (I'm still afraid of binaries), but this is the good way and hopefully the last choice. Go Debian!

Tuesday, April 15, 2008

Smalltalk YX toward a new interpreter

Hello,
Smalltalk YX is currently working on refactoring a part of the interpreter, relative to contexts and stack management.
The current version uses one stack per process but always create contexts for each method or block entered.
The new branch, called newinterp, won't create those contexts anymore but they will be created only on-demand (e.g. thisContext). This means both less resources and garbage collector usage, and a possible speedup.

More informations on the mailing list here.

Monday, January 07, 2008

Smalltalk YX 0.1.6 has been released

Hello,
as usual these release notes follows.

This is a major bug fixes release, but introduce as usual many features. First of all this release put the GNU build (autotools) as first build system, and SCons as secondary which is still useful for MingW and the WinCE port.

  • Full GNU build support
  • X11 plugin
  • A basic CommandLine class for parsing the command line
  • Basic support for handling foreign C pointers and structs/unions from Smalltalk has been added
  • Several fixes for building on Sparc 64 using SCons
  • The -e option from command line has been added
  • Some help and Syx status will be printed in console mode
  • FileStream fileIn has been fixed
  • Class declaration from Smalltalk has been fixed
  • Lexer fixes for symbols, identifier and strings
  • FileStream now handles FILE* instead of file descriptors and this fixed several bugs
  • System startup has been fixed when fileing in files
  • Dictionary rehashing has been fixed
  • Basic support for handling foreign C structs and unions from Smalltalk has been added

Thanks to everyone contributing to the project.

See the ChangeLog for a complete list of things that changed.

Saturday, January 05, 2008

Google search? No thanks, Yahoo!

Hello,


lately I've been searching for "maemo emulator" and "mod_python psp" and the results weren't good to me.


If you don't trust, try the above searches (without double quotes) with both Google and Yahoo. This happens with many more searches.


In my opinion, Google lately is lacking a good page weight system and therefore it breaks results showing for example mailing lists instead of more important web pages.


Conclusion? I'm using Yahoo! as my default search engine until Google fixes these troubles.

Tuesday, December 25, 2007

Monday, December 17, 2007

Hello world in console and GTK+

Hello,
lately i received a request to show how to print Hello world from Syx and a small example on how to open a GTK+ window.

Here are the two examples:
Have fun!

Friday, December 14, 2007

Syx 0.1.5 has been released

Hello,
after a few months of low activity due to the university, i finally released the new version of Syx. Release notes follows.

This version includes yet more features, compatibility with other build systems on different platforms, important bug fixes and a great performance boost, which will be continued in next releases. A list of the major changes:

  • MSVC support has been improved
  • ANSI C and strict ISO compilation
  • External declarations for C++
  • The ST runtime compiler has been replaced with a C-side compiler
  • Class creation issues from ST has been fixed
  • Tracebacks and error reporting have been improved
  • Install desktop files on GNU/Linux platforms
  • Support for the GNU building system has been added as an alternative to SCons
  • Build under MSYS has been fixed
  • Block ensuring has been fixed
  • New examples have been added such as web code browser and a simple GTK+ application
  • Dictionary rehashing has been fixed
  • A better implentation of OrderedCollection? has been enhanced
  • Internal profiling and gprof support at compile-time
  • Created one stack per process against one stack per context

This version breaks the API for creating new processes and contexts from C and ST too. Thanks for anyone who contributed to Syx.

Tuesday, November 20, 2007

Finally ADSL then Gentoo

Hello,


i was a strong Linux From Scratch user since years.


My small city didn't have ADSL until now. ADSL came here with the Wireless technology.


OK, I've a low 256kb but it's better than a 56k, don't you think so? Then i started getting gentoo and compiling everything, and now I've got a complete Gnome desktop with all network working as well.


Yes, my first ADSL, my first distro!

Thursday, November 01, 2007

Syx to run code browser over CGI

Hello,
lately Dominic Letz in the Syx mailing list showed his simple version of a code browser for Syx for CGI. It has been added in the examples if you want to try it on your web server.

You can find an online working version on its site: http://dominicletz.de/cgi-bin/syx
You can also view the source code from the SVN repository: http://syx.googlecode.com/svn/trunk/examples/web/

Currently i'm not working on Syx so much because of lack of time, but remember the project is not dead and won't be.
Stay tuned, a new release of Syx is coming.

Thanks to everyone.

Saturday, October 13, 2007

Syx architecture

Hello,
did you forget Syx already?
After many months of inactivity (that will continue unfortunately) due to my lack of time, i created two images that briefly explains how the initialization and the scheduler of Smalltalk YX work.

The initialization is explained here: http://code.google.com/p/syx/wiki/InitArch
The scheduler here: http://code.google.com/p/syx/wiki/SchedulerArch

I hope to obtain more time to spend on Syx, i won't leave the project anyway.

Bye.

Tuesday, August 28, 2007

Syx on NAS Linux

Hello,
on the Syx mailing list, Brian Zhou notified about yet another Syx platform compatibility.

He said Syx worked on nslu2, on both unslung (armeb linux 2.4) and slugosbe
(armeb linux 2.6) firmware
.
Porting Smalltalk YX to these devices wasn't hard, in fact it doesn't need any specific patch to the sources.

Of course, would be a very good news if Syx is available in Optware.

Thanks to Brian Zhou and to everyone are currently working on Syx.

Bye.

Monday, August 20, 2007

Syx 0.1.4 has been released

Hello,
release notes follow.

A more stable VM has been reached with this version. Many features have been added for both the embedding and the environment. This version also includes the "image endianness compatibility" target of the 0.2 roadmap and a lot of wrapper methods for GTK+ with a basic GtkWorkspace.
This is the list of the major changes:
  • Running blocking processes inside the scheduler has been fixed
  • Major fixes to the garbage collector, object finalization, number parsing and to the scheduler
  • Rehashing support for hashed collections such as Dictinoary, Set and Bag
  • #perform: and #copyReplace family ANSI methods have been added
  • Interval and StdIOStream classes have been added
  • Missing lexer rules for quoted symbols and double quotes in strings have been added
  • ZeroDivide exception check for number division
  • Comparing methods to String have been added
  • A bunch of improvements for the SyxGtk plugin
  • Rehash dictionaries from C
  • Visual Studio compilation and debugging support
  • Useful functions for embedding Syx have been added
  • Reorganized inline functions to support other compilers and use dllexport and dllimport when building the library on Windows
  • Inheritance for method and block objects has been fixed
  • rootdir and plugindir Scons options have been added
  • Install dependent-machine object files into libdir instead of sharedir
  • Option -c has been added to syx to continue the startup sequence once filed in files from the command line
  • Support for big endian machines has been completed
  • System signal handling has been added
  • Print a bug report to the stdout on SIGSEGV or SIGILL containing informations on the memory state, the execution state and the traceback of the active broken Process
  • Image recovery on SIGSEGV and SIGILL or through the syx --recovery option
  • Scripting header (e.g. #!/usr/bin/env syx) support on fileIn
  • argumentCount check for methods and blocks has been introduced
  • Documentation installation and uninstallation is now supported
  • Support for 'a' and 'w+' mode with O_CREAT flag have been added to FileStream
  • Several issues have been fixed for packaging binary distributions of Syx using Scons
  • Getopt dependency has been removed
  • Desktop files for Posix systems have been added
Syx changed its logo since previous version. The Windows installer will handle .st and .sim files.
Roadmap for 0.5 version includes both internal and OS-level threads based schedulers, with possibly parallel computing support.

Thanks for all critiques and suggestions, and a special thank to everyone who's contributing to Syx.

Bye.

Wednesday, August 15, 2007

Syx image recovering

Hello,
lately Syx gained system signal handling. On Segmentation Violation or Illegal Instruction, a complete traceback of the execution state, the memory state and the active process contexts being entered is printed on stdout.

Sometimes, i had problems with Squeak while developing SqueakGtk, because i did interact with C and it was easy to get into an infinite loop or a segv.

In other words, sometimes these errors come just from one Process (in the above example, i'm talking about the Gtk main loop) that break things each time you start the same image.

In Syx, i managed to automatically create a copy of the image, appending the ".recover" extension, whenever SIGSEGV or SIGILL is signaled and then remove that broken Process from being scheduled.
Also, if this didn't work because the corruption involved the VM, you're still able to use the --recovery option from the command line.

Bye.

Saturday, August 11, 2007

SyxGtk vs SqueakGtk

Hello,
a friend requested me a screenshot of syxgtk, it's the first one here:
http://code.google.com/p/syx/wiki/ScreenShots.

I would like to explain how the 'asd.st' script works:
1) Create the window, and connect buttons with something like button when:
#clicked send: self -> #onClicked
2) Gtk main
2.1) This forks a process that calls a primitive
2.1.1) The primitive create a thread in which gtk_main() will run
2.2) Semaphore new wait (won't never be signaled this semaphore, it's used
just to keep the process suspended so keeping Syx up if no other process
is running)
3) Suspend the current process. This because the console actually is in
blocking mode, so we need to suspend the process. There's a way to let the
console be asyncronous, already tested using Semaphores, but won't work
with readline (any suggestion here?)

Now, we connected signals to a special syxgtk marshaller, which does the
following:
  • transform GValue to SyxOop
  • obtain the callback to call
  • create a new process
  • wait that process for being terminated (remember the callback is called within a OS thread)

These i think are pure Syx callbacks, really very easy to implement for
any other external loop.

How it differs from my old SqueakGtk? Just read:
  • each C call had one more redirection than in Syx, because in C calls using SWIG automatically handles self pointers by accessing instance variables
  • main loop had to be implemented in a Squeak-side method by doing the iteration manually
  • the marshaller had to forward its function to Squeak, because we can't convert from GValues to Squeak objects since we can't lookup classes
  • we save all that GValues in a special C-side stack
  • set the jump for future longjmp and call the interpreter
  • the main loop checks for callbacks, then obtain the list of arguments from that list of GValues and does its job
  • once returned from all callbacks, it's time to do the longjmp to return from the C callback

It was a pain, slow and moreover wasn't so safe to use setjmp/longjmp and a
stack of callbacks.

Bye.

Wednesday, August 08, 2007

Example on how to embed Smalltalk YX

Hello,
Smalltalk YX is born also to be a scripting language to embed in C/C++ applications. Lately, i was looking an article which briefly explains how to use Lua with C.

Then, i decided to remake that article for Syx, and this is the result:
http://code.google.com/p/syx/wiki/ExampleEmbeddingLua

The examples in the article above can be executed if you have an updated working copy of the source repository.

Other examples can be found here. Contact me if you want to contribute to this project.

Thanks to everyone, bye.

Monday, August 06, 2007

SWIG module for Syx

Hello,
lately i've been trying SWIG to test how much it can be useful to interface Syx to C/C++ libraries.
I got a good starting point with a very simple module which wraps C declarations very well. For instance, i wrapped many Glib/Gtk includes entirely without any problem.

Since writing Smalltalk YX primitives is really easy, it wasn't a pain to create a SWIG module for it. In fact, today i wrapped almost all GtkLabel functions as well.

The module is still missing C++ wrapping methods and some other typemaps, but i hope it to be available very soon for normal usage.

If anyone wants to contribute to the Syx project, please let me know.

Stay tuned for the next release of Syx.
Bye!

Monday, July 30, 2007

Syx 0.1.3 has been released

Hello,
this new release of Smalltalk YX adds yet more support for other platforms (Windows CE), a bunch of bug fixes, and many features like the ST compiler. This is a list of what changed since previous release:
  • Fractions, division methods and some other match functions (floor, ceiling, quo, trunc, ...) have been added
  • Some lexer issues (quotes, minus, ...) have been fixed
  • Fixed garbage collection while finalizing objects
  • Many ANSI methods for Character have been covered
  • First attempt to reach endianness image compatibility
  • String to Number methods and viceversa have been added
  • Super messages have been fixed
  • Syntax shortucts such as Object>>#caseOf:otherwise: have been added
  • Fixed cascading parsing
  • A complete Smalltalk compiler has been added
  • Support for cross-compiling and with more options have been added to Scons
  • Save text of methods
  • Increased initial memory size from 20000 objects to 100000 objects
  • More C functions have been documented
  • An important issue in ArrayedCollection?>>#replace:From:To:With: primitive has been fixed
  • Access mode (read, write, read and write) to Streams and more methods to FileStreams? have been added
  • CompiledMethod? and CompiledBlock? inheritance has been reorganized
  • Run Smalltalk scripts from command line
  • New plugin to wrap native Win API to create a simple WinWorkspace
  • Build Syx for Windows CE with WinWorkspace running on the device
  • Support for user-defined startup sequence has been added
  • Support for wide-character strings has been added
  • getopt, errno, fstat, access, getenv and perror are now optional functions

Cross-compiling to Windows CE has been done with host=arm-wince-mingw32ce using CeGCC by disabling all configuration options. Endianness compatibility is not perfectly reached yet.

See the ChangeLog for a complete list of things that changed.

Sunday, July 29, 2007

Smalltalk YX to run on PocketPC

Hello,
Smalltalk YX is known to work on many platforms at this time. However, lately i've been working to port it on PocketPC with a small graphical workspace.
It took me about 3 days of work but now it works very well. Cross compilation has been easily done using CeGCC on Windows with just some changes in the VM.

The only problem is that Syx needs to be installed into the root device to work, it's not working in other directories, but i think this is the last problem to care about.

A plugin has been added, called WinWorkspace, which is a native Windows GUI containing a text box for both the input and the Transcript, and a DoIt button to evaluate the code. This plugin also works on Win32.
I think Syx can be easily ported to Smartphone as well without many changes.

Here you can find some screenshots: http://code.google.com/p/syx/wiki/ScreenShots

Stay tuned with the next 0.1.3 release, bye.

Thursday, July 19, 2007

Smalltalk YX to compile itself

Hello,
lately i've been working on a compiler for Syx in Smalltalk. Actually, it's mostly a plain translation of the C one, but works pretty nice. This is an example without using intermediate shortcuts:

$ syx
> | text lexer parser method context |
> text := 'message ^123+32'.
> lexer := CompilerLexer on: text.
> parser := CompilerParser on: text for: nil class.
> parser parse.
> method := CompiledMethod fromParser: parser.
> context := MethodContext on: method parent: thisContext receiver: nil arguments: #().
> ^Processor enter: context!
155
> EOF

Eventough it's still missing features such as cascading and optimized blocks, i hope to release 0.1.3 version very soon. The purpose is to use this compiler for the console and for files instead of the C one.

Stay tuned, bye!

Friday, July 13, 2007

Syx 0.1.2 has been released

Hello,

this version of Syx has a bunch of new features added to the Smalltalk
environment, and a more stable VM. Major enhancements includes:
  • New compiler flags to build Syx on Mac OS
  • Added Sets and Bags
  • Refactored objects to hold both instance variables and indexed variables
  • Literals in methods are now constant
  • Added basic WriteStream
  • Doubled initial memory size to hold 20000 objects
  • Fixed ByteArray/String small integer to character conversion
  • Added object finalization by fixing GC transactions
  • Added support for infinite-precision numbers using GMP
  • Integer overflow checks when doing sum, difference, multiplication and bit-shift

Note that Syx can be compiled also without GMP. Eventough you use an
image containing LargeIntegers, Syx will run without problems but won't understand that
numbers.


Bye.

Monday, July 09, 2007

Syx on FreeBSD and Sparc

Hello,
actually, Syx is known to work on Linux and Windows with 32-bit and 64-bit support and image compatibility.
Now Syx is available also on Sparc SunOS and FreeBSD.
A contributor sent me two packages after some troubleshoots with Scons on these two platforms.

Also, i would announce the creation of a google group for Syx discussions.

Stay tuned for the next 0.1.2 version. Bye!

Thursday, July 05, 2007

Syx 0.1.1 has been released

Hello,
this second version of Syx includes as many bug fixes as feature enhancements. I wanted to release this version just after 3 days because i think these changes are very important.
  • Implemented linear hash tables, similiar to double hash
  • Added method caching to unary and binary messages too
  • Added bdist command to create a binary distribution
  • Improved exception handling and tracebacks
  • Added Integer class with basic bit-wise operations
  • Inline whileFalse: block
  • Covered most of PositionableStream? standard
  • Added basic subclassing at runtime
See the ChangeLog for a complete list of things that changed.

I've also added binaries for Linux on x86 and x86-64 platforms.

Please comment, give me suggestions but especially critiques ;)
Bye!

Monday, July 02, 2007

Syx 0.1 has been released!

Hello,
finally after a month, i've just released the first version 0.1 of Smalltalk YX.

You can find detailed informations on what Syx reached till now by reading the release notes.
Downloads and installation instructions are provided on the home page, including binaries for Win32 and an installer.

Feel free to add comments of any type, from critiques to suggestions.
You can also email me and ask about the project.

Bye.

Saturday, June 23, 2007

Syx improvements

Hi,
some times ago i talked about my Smalltalk implementation, Syx.
These are the main objectives i reached till now:
  • Working on Windows and Linux indifferently, using the Scons build system
  • Added a very simple garbage collector and memory management
  • Added a basic plugin system
  • Introduced immediate Characters (like SmallIntegers)
  • Exception handling/ensuring
  • Image compatible with both 32bit and 64bit format
This is what's next:
  • Coalesced hash tables with consistent hash functions
  • Add system signal handling
  • Complete the basic environment
  • Implement a strong method caching
  • Use non-blocking functions for I/O
  • Foreign Function Interface (maybe FFICall?)
Here is the ChangeLog and a screenshot of Gtk+ running inside Syx

Sunday, June 03, 2007

Smalltalk YX

Hi,
i'm creating this new Smalltalk-80 vm, based a bit on the blue book, inspired by PDST and Susie, but much different in some aspects.
I talked about it some times ago here:
http://lethalman.blogspot.com/2006/11/new-experimental-smalltalk-version.html

Now, after important refactorings, that are continuing right now, i wished to publish the project under MIT license here: http://code.google.com/p/syx.

Currently, i'm working on speed: i want a fast but complete VM as much as i can trough my very poor knowledges.

At all, i'm learning many things from this project, really... tough it's very close to Little Smalltalk's philosophy, i would like to continue my work even if it could be "yet another insignificant fork", just to learn other cool things about Smalltalk.

Bye!

Thursday, May 03, 2007

Little Smalltalk

FromSqueak to Visual Works, from StrongTalk to GNU Smalltalk, i finally discovered a good smalltalk implementation: Little Smalltalk.

In the previous post i talked about GNU Smalltalk and why it matters, but it's still unstable, it works only on Unix and it's slow.
Also i stopped working on SqueakGtk due to various reasons.
Visual Works is not open and the non commercial version is just for educative purposes.
I dislike StrongTalk even if it's a nice idea.

So, what's next? I tried to create a Smalltalk by my own, the VM is still ready, it works but it needs still some optimizations and hacks to be more stable. When i decided to exploit some of the basic virtual machines on the net, i found the project Little Smalltalk alive... just a reading on the about page, a test on a Windows machine, and i realized this project is just what i tried to make since several months.

Conclusion? Little Smalltalk has a strong base, it's very portable especially its GUI (IUP) and it's at the beginning... it needs help and i guess this version could increase its importance and become a mainstream only if being supported.

Just what Smalltalk wants to be...

Wednesday, May 02, 2007

SqueakGtk again here

Hello,
after many months of inactivity, i'm going to restart working on SqueakGtk.
For anyone who wants to give a contribute, please contact me at lethalman88 at gmail dot com.

Bye.

Sunday, April 15, 2007

Opera 9.2 Speed Dial

Hi, i've updated my Opera browser. I would just say speed dial is amazing.

It's the most useful caching system i've seen ever. You can set up to 9 web sites to be cached and updated regurarly: the result is an incredible speed boost on that sites.

I would want to say something against Gecko forces: i see Firefox, Thunderbird and the other gecko-based applications too heavy and less powerful/featureful than Opera.

Ok, they have extensions, but the extensions they have are handled in Opera in a better and lighter way. Also, Opera introduced widgets, just a beginning toward plugging the browser.

Firefox and Thunderbird are about 30mb of download, Opera just 6 mb, and this is important for my 56k for upgrades.

Gecko is open source, Opera's not... maybe this is the main reason why Opera is less used than Gecko: "i want only open source software because i want open source". For who's using Gecko, compliments for the choice, i guess you got so much computer resources in order to use it :) .