Sunday, May 02, 2010

Google Reader Fail

Hello,
Google Reader has just wiped out my subscriptions list, which made me scream like a crazy monkey (other than cleaning up the list).Now I'm using bloglines, which looks pretty good except there's nothing like "read all items", but you must clean on each feed to see the items (any alternative to bloglines supporting this?).

But as far as I can see, I'm not the only one that lost the feeds, the difference is that I just opened the reader without any other operation.

I've also heard of MyYahoo! being a good aggregator, the only problem is that Epiphany/Webkit is broken with yahoo (no css), anybody experiencing this?

Friday, April 02, 2010

Valagtkdoc 1.0

Hello,
yes... this is the nth program I'm writing in this period. I hope this is the last one :)

Valagtkdoc is a tool that integrates Vala with GTK-Doc for documentation generation.

You can find download and example usage at the homepage.

I think it's far from being perfect, and actually I haven't tried integrating it with autotools, but it shouldn't be that hard. Unfortunately, you have to somehow break the gtk-doc rule "do not run it manually" because valagtkdoc goes in the middle between gtkdoc-scan and gtkdoc-mkdb.

If anybody has a better solution, please tell me :)

Tuesday, March 16, 2010

Tdpkg troubleshooting and some news

Hello,
lately I've received some feedback, thanks for this.

1) Is it compatible with apt? Can I use dpkg back again after using tdpkg?
The answer is... yes! You can use what you want in the order you want, and use tdpkg when you want. Take in consideration that after using dpkg (or apt) without tdpkg, then you use tdpkg the cache will be rebuilt for consistency.

2) It's not working here (Ubuntu, other distro...), doesn't create the cache.
First of all you have to be root when first running tdpkg in order to create the cache. If this didn't solve the problem you are maybe using an untested platform. Debian uses eglibc and tdpkg has been tested on i386 and amd64. Since tdpkg does wrapping around glibc calls it might happen to not wrap the right functions. If you want tdpkg to be ported to your platform please comment here with the result of these commands:
objdump -T /usr/bin/dpkg|grep open
objdump -T /usr/bin/dpkg|grep stat
objdump -T libtdpkg.so|grep open
objdump -T libtdpkg.so|grep stat

3) Should I put the alias also for apt-get and aptitude?
Yes you have to. Aptitude and apt-get bypass the shell so the only alias for dpkg won't work.

Another thing I'd like to say is that dpkg/experimental has a patch that speeds up a lot database reading by asking the kernel to cache .list files... i.e. dpkg will avoid cold start. This brings timing from 14 seconds to about 3 seconds! At all, using tokyocabinet you get 1 second. Think that including a cache inside dpkg would mean even less than 1 second.

Have fun... :)

Monday, March 15, 2010

Tdpkg 1.0 - speed up reading dpkg database

Hello,
you may have noticed that dpkg takes a long time reading the database the first time you run it (e.g. through apt). This is because of the huge number of /var/lib/dpkg/info/*.list files (1700+ on my desktop machines). It can take up to 14 seconds and more at cold start to install/remove a single package.
Since 2007 in dpkg mailing list a first proposal (by Sean Finney) to using sqlite as cache has been posted, then a couple of weeks ago I reproposed it. No reply since then from the maintainers.

My first idea was to fork dpkg and only change the part about reading the list files. This means you had to install another dpkg version, and I haven't done it for two main reasons: most of people wouldn't have replaced dpkg and it'd have been too hard to maintain it.
The solution is tdpkg, a shared library that wrappes around glibc function calls of dpkg. You'll find in README to backup your /var/lib/dpkg/info but tdpkg is robust enough to not fuck it up.

Tdpkg comes with tokyocabinet (faster) and sqlite (handles concurrency better) cache backends. I've managed to bring cold startup time from about 14 seconds down to about 2 seconds. I will definitely have fun installing and removing applications back again.

Sunday, March 14, 2010

Vala and Graphviz

Hello,
it's often useful for Vala hackers to have a graphical representation of the code tree and control flow blocks. Therefore I've created a simple application called Valag which generates four types of diagrams using Graphviz for each state of the Vala compiler.

This is the first release, there're many things to fix and enhance (like command line options) but it is working quite good already to give support when hacking Vala.

Homepage, screenshots and download here.

Friday, March 05, 2010

Google search wrong again

Hello,
sometimes ago I posted twice about google search having wrong results.
Now it happens again after a few months (it's like google breaks page weights like every 4-5 months).
The search is "debian dpkg list", I really expect the mailing list info page but after 3-4 pages of google search (and also bing this time) I couldn't find it. With yahoo search it's at the first position (lists.debian.org/debian-dpkg).

Like for the previous posts, using different search engines matters and matches your needs.

Wednesday, March 03, 2010

Debian/GNOME bug triage ended

Hello,
I'm writing about the work done in the bug triage weekend of the Debian/GNOME team, started at 27th Feb and ended in 28th Feb.
The result is great, 167 bugs have been closed and many more have been triaged and forwarded upstream.

Thanks to everybody who contributed, especially to whom has done it for the first time (well, you can still continue working on the remaining bugs ;) ).

Tuesday, February 16, 2010

Secure and Decentralized Chat

Hello,
I'm writing to let you know of the first release of SDChat.
It is a protocol with libraries and programs to create secure IM networks using GPG and RSA.
All the stack is written in Python but the page says it will be rewritten from scratch to provide a C API.

It features a GTK+ interface with many plugins (unfortunately audio and video are being broken due to gstreamer updates) and a simple server for routing. No installation is required.

Wondering if this can be any useful for Iranians.

Thursday, February 04, 2010

Vala 0.7.10 released

Hello,
I'm lately following the Vala development and finally we got a new release with plenty of bug fixes and enhancements which makes Vala even more interesting and usable as general purpose language.

Here's the announcement.
I'd like to point you to the new Vala journal, a good resource to stay tuned with Vala changes periodically.

News:
* Support coalescing operator ??.
* Support to_string and bitwise complement with enums.
* Return handler id when connecting signal handlers.
* Support struct comparison.
* Support constructor chaining in structs.
* Enforce protected member restrictions.
* Improve performance of flow analysis.
* Support automatic line continuations in Genie.
* Improvements to the .gir reader and writer.
* Add --enable-mem-profiler commandline option.
* Many bug fixes and binding updates.

Sunday, January 24, 2010

Fetch web page with Vala and Soup

Hello,
I'm lately using the Vala language widely. I find it a great and well designed language.
You may know I'm the maintainer of Freespeak. This program is written in Python. Now I'm rewriting it in Vala, both for providing a good and really simple API in C and for learning Vala.

I will now paste a snippet from the new freespeak code that I use for creating a cancellable asyncronous operation for fetching a web page using libsoup either with a GET or a POST method.

Friday, December 25, 2009

Happy Holidays

I wish you all a Merry Christmas and a Happy New Year!

Monday, December 14, 2009

Facebook and Berlusconi

Hello,
today many people are getting subscribed (with NO authorization) automatically to this group: Sosteniamo SILVIO BERLUSCONI contro i FAN di massimo tartaglia. You have NO notification that you've been subscribed to this group.

Also consider the geographic position (screenshot) of the group contact.

Also consider that the group can't be signaled to facebook, because the feature looks like out of service.

It's clearly a mafia group, beware of!

Lua for Pythoners - Dictionary

Hello,
as promised this is the second post, this time for dictionaries. The most important thing to notice is that tbl[key]=nil means deleting the entry from the table, while in python dict[key]=None is still a valid entry with None value.

Here's the snippet you can launch in a lua interpreter and this is the catalog of python dictionary examples.

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.