A list of some commercial GNU/Linux games

I thought I’d be nice to make a little list of some of the GNU/Linux games I’ve tried out this past year. I’ve tried to keep the list heterogeneous (different game genres, all from different producers, some freshly released and some quite older…).

I’ve also decided to only include commercial games in this post; if it gets positive feedback I may also post a list of my favourite free games.

Anyway, here it goes:

Vendetta Online

A massively multiplayer online first-person space-combat game featuring possibilities in trading, mining, combat, warfare, piracy…

Price: $9.99 / month (free 8 hour trial)
License: Proprietary

Lugaru HD

A third-person action game featuring a rabbit on a fight to save his fellow rabbits from slavery in a fight against corrupt rabbits and wolves.

Price: $9.99
License: Open-source code, proprietary data
Humble Indie Bundle #1

And Yet It Moves

A platform game in a world of paper collage you can rotate at will, turning walls into floors, slides into platforms and moving stacks of rocks (or even enemies).

Price: $9.99 / 8.99€
License: Proprietary

Savage 2

A fantasy first-person shooter, action role-playing game (in player role) and real-time strategy (in commander role) multiplayer game.

Price: Free / $9.99 (Premium Account)
License: Proprietary

See also Heroes of Newerth, a fantasy strategy game inspired in DotA ($30).

Enemy Territory: Quake Wars

A futuristic, objective-driven and class-based multiplayer first person shooter featuring the fight between the Earth’s Global Defense Force and the alien Strogg.

Available at shops
License: Proprietary

Penumbra (Overture, Black Plague)

A series of exploration-based horror games.

Price: 16.20€ (demo available)
License: Open-source code, proprietary data

See also Amnesia: The Dark Descent.

World of Goo

A physics-based puzzle game. Truly a work of art.

Price: $20
License: Proprietary
Humble Indie Bundle #1

Bionic Heart

A science-fiction visual novel with interactive scenes (you can choose between different actions which change the ending of the story).

Price: 12.70€ + VAT (demo available)
License: Proprietary

Revenge of the Titans

A tower defense game with RTS elements.

Price: 10.66€ + VAT
License: Open-source code (not yet available), proprietary data
Humble Indie Bundle #2

There are many more GNU/Linux-compatible games out there. Check out the other Humble Indie Bundle games, for instance. You may also follow LinuxGames to keep up with the latest news.

Apunts de Sistemes Operatius

Introducció

Un sistema operatiu és un programa que gestiona el maquinari d’un ordinador, proporciona una base per a d’altres programes i fa d’intermediari entre l’usuari de l’ordinador i el maquinari (fent així el seu ús més fàcil, eficient i segur).

El primer sistema operatiu va ser creat el 1956 per General Motors, per a un mainframe d’IBM. Per a més informació: History of Operating Systems, per Ayman Moumina (versió PDF).

Crides a sistema

El diagrama d’una crida a sistema és el següent:

Mode d’usuari (User Mode) Mode privilegiat
Programa Llibreria del llenguatge Llibreria del sistema Trap (crida al sistema) Codi del sistema operatiu
printf() write() x86: INT 0x…

El sistema disposa d’un vector anomenat Interrupt Descriptor Table (IDT) que determina la funció a invocar per a cada crida al sistema (o excepció per maquinari).

Processos

  • Un procés és la unitat bàsica d’assignació de recursos i té com a mínim un fil.
  • Un fil (també flux o thread) és la unitat bàsica de planificació per a l’execució d’instruccions.

Per defecte, els processos no comparteixen recursos (memòria, descriptors de fitxers ni fils) entre ells. Algunes de les seves propietats són el PID (identificador del procés) i en UNIX l’UID (usuari propietari) i el GID (grup propietari). En sistemes Linux també poden tenir personalitat, el qual permet canviar el comportament d’algunes crides a sistema per motius de compatibilitat.

Al llarg de la seva vida un procés passa per diferents estats. En termes generals, aquests es poden representar amb el següent graf:

Continue reading →

Sending messages to BlackBerry Push API from PHP

<?php

	// Source:
	// http://supportforums.blackberry.com/t5/BlackBerry-Push-Development/Push-API-sample-code-needed/m-p/471216#M109
	
	// create a new cURL resource
	$ch = curl_init();
	$messageid = microtime();
	$appid = '****-******************'; // Your App ID
	$password = '********'; // Your Pwd

	$data = '--mPsbVQo0a68eIL3OAxnm'. "\r\n" .
	'Content-Type: application/xml; charset=UTF-8' . "\r\n\r\n" .
	'<?xml version="1.0"?>
	<!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 2.1//EN" "http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd">
	<pap>
	<push-message push-id="' . $messageid . '" deliver-before-timestamp="2010-11-09T16:32:44Z" source-reference="'. $appid .'">
	<address address-value="push_all"/>
	<quality-of-service delivery-method="unconfirmed"/>
	</push-message>
	</pap>' . "\r\n" .
	'--mPsbVQo0a68eIL3OAxnm' . "\r\n" .
	'Content-Type: text/plain' . "\r\n" .
	'Push-Message-ID: ' . $messageid . "\r\n\r\n" .
	'This is a sample message' . "\r\n" .
	'--mPsbVQo0a68eIL3OAxnm--' . "\n\r";

	// set URL and other appropriate options
	curl_setopt($ch, CURLOPT_URL, "https://pushapi.eval.blackberry.com/mss/PD_pushRequest");
	curl_setopt($ch, CURLOPT_HEADER, false);
	curl_setopt($ch, CURLOPT_USERAGENT, "BlackBerry Push Service SDK/1.0");
	curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
	curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
	curl_setopt($ch, CURLOPT_USERPWD, $appid.':'.$password);
	//curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	curl_setopt($ch, CURLOPT_POST, 1);
	curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
	curl_setopt($ch, CURLOPT_HTTPHEADER, array(
		"Content-Type: multipart/related; boundary=mPsbVQo0a68eIL3OAxnm; type=application/xml",
		"Accept: text/html, *",
		"Connection: Keep-Alive"));

	// grab URL and pass it to the browser
	curl_exec($ch);

	// close cURL resource, and free up system resources
	curl_close($ch);

?>

GPG Key Transition Statement 2010

So, to make the Debian keyring maintainers happier people, I’ve created a new 4096 bit key. Below you’ll find a transition statement signed with both the new and my previous key.

Incidentally, I’ve also revoked my first (1024 bit) key which I had transitioned away from a year ago.

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA256

Sun, 07 Nov 2010 15:46:51 CET

For a number of reasons, I've recently set up a new OpenPGP key, and
will be transitioning away from my old one.

The old key will continue to be valid for some time, but I prefer all
future correspondence to come to the new one.  I would also like this
new key to be re-integrated into the web of trust.  This message is
signed by both keys to certify the transition.

the old key was:

sec   2048R/363DEAE3 2009-05-16
      Key fingerprint = 7C0F F088 052C 082B 4424  5417 1CFC 22F3 363D EAE3

And the new key is:

pub   4096R/10BCFB7A 2010-11-07
      Key fingerprint = 8A27 8DE4 8CC7 AB20 0694  974F 77A4 3288 10BC FB7A

To fetch my new key from a public key server, you can simply do:

  gpg --keyserver pgp.mit.edu --recv-key 10BCFB7A

If you already know my old key, you can now verify that the new key is
signed by the old one:

  gpg --check-sigs 10BCFB7A

If you don't already know my old key, or you just want to be double
extra paranoid, you can check the fingerprint against the one above:

  gpg --fingerprint 10BCFB7A

If you are satisfied that you've got the right key, and the UIDs match
what you expect, I'd appreciate it if you would sign my key:

  gpg --sign-key 10BCFB7A

Lastly, if you could upload these signatures to a public keyserver, I would
appreciate it.

  gpg --keyserver pgp.mit.edu --send-key 10BCFB7A

Or you may send me an e-mail with the new signatures (if you have a functional
MTA on your system):

  gpg --armor --export 10BCFB7A | mail -s 'OpenPGP Signatures' siegfried@gevatter.com

Please let me know if there is any trouble, and sorry for the
inconvenience.

Thanks,

	-- Siegfried-Angel Gevatter Pujals (RainCT)
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBCAAGBQJM1sEZAAoJEBz8IvM2PerjiowH/RCDp2jp6sOl302FikoVJpOk
o+UfHadWekRXL/aNSunYisuaATnbvUe7LoHOlmAXhS1v7WZjiUaKUXmcjC19ZJ/c
fdVALTMvS+MSD4iG56bm3nb7L7USKK+gGCVhsqjoE+AKdtKT2NiTAzC18aaiggFg
hB3S1FbRY02wTKq9cTSflLM2/cdBPdz2SPrI8b7q0POQ0rz+mAcY7d/pVgHm3dUG
A2kB4/3QSlzuZmes6nrdrjqVpdx/EXSv3kV7D2WkERu+ZK6KCyFDYQpd5JjUMkKj
AFP9E1QMbsA36QO9oC+/fasKCGPUt3Bl4JUVwgWht+Bame7YpfsiEfelP0nKukKJ
AhwEAQEIAAYFAkzWwRkACgkQd6QyiBC8+3qKjBAAqLTWOrBTr2sfnx+7W3UKNWIl
Ju72nm8X8Y+I92sOY+5dwpA3RkQUPcriaT0069Y/LYGOhow66FrpFqxzg0IDEtJV
8KLYfiK2aD6n88vJZzqOTXwsZjVJQvWQedl4CARykNzhQn/K8kP9pnGqywN+qY6V
TU933S8Jbx3OChbfqaO+tY2qqFtUh2CBE9PblaeGRIN++KbOnpzXlCuxGbpxnwXB
ebzwxiOFePfnfRNn7Szet1d7RZJ48LgbivcfQBy4+00nniWKqt+Sop4H2V1ivTE7
DR/vSAP4wCmglTXHiTo6pkezRcmQv8nIUtOAiw8An5Gqbb7H08R7XM8KJnix8sBj
U2GO05CUPuDcoOeSxdB4QpZJsZ1fvm3rvw8z+8nF0yLPLvgrEExZ82RTfHAZU3hg
x0I66aJqMLWSu6bIqpQFEmoyxshdrUF8momTbTOR167D8/LlXZHpa0spuGO6v3cJ
Rao9Y1yOklPaIsNayWX7aD14bGq3IAR8p1nqZF3D6tGZzf9JbgqvpWPw24iA5o7b
7FoKWyx2dtTFpNUA0ppVgh7nyBvpLuq8aTUsEwIBGmj3G9kxQE3kHJhmhJMDMZtj
vZJPY91VQ26u8wXwz92aaQEZR0r0qQb+UVy2ZavY0lnNkUC5F5FsT2PrFBQ8CPY+
3JEF5eDU47V0j7giHj0=
=wyUj
-----END PGP SIGNATURE-----

Triggers in MySQL

DELIMITER $$
CREATE TRIGGER messages_ins_recipientuser BEFORE INSERT ON messages
FOR EACH ROW
BEGIN
SET NEW.recipient_user_id := (SELECT users.id FROM users WHERE users.mobile=NEW.recipient_mobile ORDER BY id ASC LIMIT 1);
END;
$$
delimiter ;

Run this in the MySQL prompt; MySQL Administrator (MySQL Query Browser) won’t take it.

To see all the database’s triggers:

SHOW TRIGGERS;

Other useful hints:

  • Auto-incremented primary keys aren’t set in BEFORE INSERT triggers. It is possible to get the ID this way: (SELECT AUTO_INCREMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='table_name')
 
Skip to toolbar