Working on NeoSudoku

This is the current J2ME/MIDP project I’ve been working on at my spare time since the past weekend: An implementation of the known game Sudoku.

It’s not published yet, because I want to enhance it a bit more and at this moment it contains some sudokus borrowed from a copyrighted book, so publishing wouldn’t be a good idea…
Currently the project is at version 1.1, having the following features:

  • Complete implementation of the game rules, with detection of illegal number placement and end of game. The game is playable.
  • Several pre-stored sudokus can be chosen for playing.
  • Special hints available:
    • List of available values that can be put into a square.
    • Board map showing the number of values eligible to be put on each square (good to detect the squares that can only be filled with one single value).
  • Special solvind tools avaliable:
    • “Reduce” tool, that detects all free squares with only one possible value, fills them and repeats the process until no more of such squares are remaining.
    • Limited “solve” tool, that tries to solve the sudoku using a backtracking algorithm. Unfortunately, the phone goes out of memory very soon, so this tool is very poor. I’m working to optimize this algorithm in order to enhace the decission path and to lower the memory footprint of the “context” of each step.
  • Tested on Nokia 3100 and Sony Ericsson T630.

From now on, I would like to enhance the following points to reach version 1.2:

  • Optimize the solving algorithm until it’s useful.
  • Write a sudoku editor and give the user the ability to store input sudokus into RMS memory (resource management system) on the phone.
  • Make possible for the user to push and pop the current game state on a stack, to do backtracking by hand.

And now, enjoy some screenshots. I’ll keep you informed. Stay tuned…

NeoSudoku1.png NeoSudoku2.png NeoSudoku3.png NeoSudoku4.png NeoSudoku5.png NeoSudoku6.png NeoSudoku7.png

Experiments with WMA (JSR-120)

This night I’ve been doing some tests with Wireless Message API (JSR-120) that, surprisingly, is supported by my cheap Nokia 3100.

I was expecting that this API lets me examine the SMS inbox folder or something similar, but it doesn’t. It “only” provides a way of data interchange (as in a network socket) using SMSs as transport layer. You can open a connection to a url like “sms://666123456:5000” (yes, I don’t know what a port means :-m) and, on the other side, listen to “sms://:5000” and receive data.

I wrote a small test midlet and was able to “send” one of such messages (the phone showed me a confirmation dialog), but it never reach the destination phone. Maybe it can only be received by another Java midlet, I was expecting a normal SMS.

I’ll continue to do more testings when I’ve time enough…

P.S.: Dape has discovered today that WMA doesn’t make possible to access to sms inbox (for security reasons?), and can only be used to receive sms sent by another midlet using WMA. Phones that are able to receive WMA sms on their inbox are implementing the specification in a wrong way.

Password card utility in MIDP 1.0

At last I’ve improved and published NeoPwd under GPL. It’s an utility to store and query electronic bank access passwords (coordinade cards) into a mobile phone.
It’s written using CLDC 1.0 and MIDP 1.0 API. The package has a text file where you can write an authentication password, your card number and all the password coordinates data. Then, you should build the application, create an obfuscated package (it takes less space) and download it to you cell phone.

In order to use this utility with your own passwords, you have to unzip NeoPwd.jar (yes, a jar is in fact a zip), edit the data.txt file inside it, put there your passwords, zip all the stuff again as NeoPwd.jar and download it to your cell phone. The format of data.txt is explained in the source code (NeoPwd.java).

Enjoy it!

Using GPG with KMail

Every time I need to use GPG, I do it from the command line, but now I am wondering how to configure KMail in order to use all the GPG features from my favorite mail client.

To configure KMail, I followed the instructions at KMail website, but with some variations to make it work in Debian Sarge.

I already had KMail, gnupg, kdepim, etc… installed, so, the only packages I had to install were pinentry-qt and gpg-agent. I didn’t have to compile gpg-agent, because it was already in Sarge.

I had to configure .gnupg/pgp-agent.conf as said in the link but putting the right pinentry path, and had to create the .kde/env/gpgagent.sh containing the “eval” line.

That’s all. I did all the tests and it worked well. The only thing that I couldn’t do was to cipher using S/MIME, because the public key list was empty. I’ll do more research on that when I’ve more time…

By the way, you can download my public key from here. Ask me about the figerprint before adding it to your ring.

PHP is my friend :) (and also is NetBeans)

Everyday I enjoy using this language more and more. It’s powerful, it’s easy, and it can be used in everyday life for many more things than simply writing web pages.

Theese days I’m taking part in the development of Sicus, and one of the tasks I’ve to do is writing unit tests of some parts of the application. It’s boring and involves a lot of repetitive coding. Well, that’s where PHP can help…

I’ve written a couple of scripts that take a brief specification of the methods of a class (method, mandatoryness, erroneous values) and automatically write the methods to perform the tests using loops, conditionals and variable substitution. It’s easy because text/template substitution is what PHP is designed for.

The code might not be very elegant, but performs well enough.

[24/6/2006 update] 

Yesterday I discovered a NetBeans menu tool that would had avoided me writing one of that PHP scripts I was talkinf above of (the getter & setter method generator).

NetBeans has the ability of examiining your code, noticing what member attributes haven’t get() and set() methods yet, and generate that code automatically. That tool is available from the menu: Refactor –> Encapsulate field.

Parsewiki, a wiki-to-any converter

This days I’m writing a lot of docs in DocBook format, and the lack of a good editor is a pain. When I say “a good editor”, I mean some tool that avoids these awful and artificially long XML tags, because I don’t want to spend more time typing tags than typing normal text.

So, I did some googling and discovered ParseWiki, a Perl script that transforms wiki text into DocBook, HTML, XHTML and even Latex. This tool is saving me a lot of time. Have a look at it in:

http://paginas.fe.up.pt/~villate/parsewiki/

Corunix website migrated to Community

Taking advantage of a little stall in the project I’m currently working on, I decided to spend all the day doing hackfest tasks.

The task I’ve been asigned for was to migrate the old Corunix website in Drupal to the common TWiki infrastructure shared by all the projects in community.igalia.com so, at this moment, Corunix is one more of those projects.

Drupal was causing us big headache, because updating it was a pain: some plugins weren’t migrated to the updated version, there was database migration errors, etc… In brief, the website is much better now. 🙂

The next task I’m going to do when I have time for hackfests again, will be to create a CVS for Corunix and publish pam_preprofile and maybe also lanzador there. The first one is a project that would benefit many people. I’ll have to notify Andrew Morgan about it to do the changes at PAM website.

Firewall (the movie)

Today I’ve been to see Harrison Ford’s movie. What a surprise! These Hollywood guys haven’t had time enough to make mistakes about computers and hackers, simply because the main plot of the movie isn’t hacking or computing, it’s kidnapping.

The hero is a fifty-some years old director at some lost network security department of an important bank. Everybody wearing suits, a very “corporative” look, and all very serious and boring. There are nothing about hacking, so there aren’t pitfalls about it. 🙂

About the movie itself? Well, if you like thrillers and action movies, it could be for you, but don’t expect much more.

My first Python game

This evening I’ve been doing some testing in Python to see the language power. I love making little videogames, so, why not to try it in Python?

Pygame is a module that makes easier the task, providing classes and functions to manage the display, sprites, collisions, fonts… and has a documentation good enough. Using that documentacion, the Python language reference, a sprite managing tutorial and googling here and there, I’ve developed this tiny example: a number mental calculus videogame.

Number mental calculus videogame

The player starts with the number zero, and collecting some sheets in a particular order, can perform arithmetic operations on his/her base number in order to get the goal number.

The main character in the game has “momentum”, so it’s a bit tricky to have control over it. You can press [ESC] whenever you wish to terminate the program, and then press any key.

If you like, you can download the source code and try it. I would be very proud of reading comments about it. 🙂

2007-03-11 UPDATE: I’ve received a request to make clear under which license is the code published. You can consider the python source code file (and NOT the icon files)published under public domain, as well as under GPL license. The problem about the icons are that they are borrowed from some KDE style package I can’t remember about (and I’ve tried hard). Such package should be GPL or similar also, but I can’t state it for sure.

2008-11-26 UPDATE:
I’ve adapted the source code to run on Ubuntu Hardy. Download the new version from here.