Older blog entries for dangermaus (starting at number 51)

There is an interplanetary internet, and there may exist an internet between civilizations running at tachyonic speed. This time I ventured into

Another Internet

It starts with configuring the DNS servers with ones published at the OpenNIC project. You need to configure both primary and secondary DNS. Configuring only the primary DNS does not work, as the algorithm always chooses the DNS entry with lower network latency. After configuration, you still are able to surf on the usual Internet, but you also opened a little door to domains like .geek, .bbs and .telnet.

On the wiki of OpenNiC there are very few links, and in the beginning I was disappointed of such few links. Then I learnt of the specular search engine http://grep.geek. By searching for keywords like Blog or Chat you get to view some of the most accurate blogs and interesting chatrooms, especially for people who like to code.

Pioneer Anomaly solved with heat model

Pioneer space probes are the farthest human made objects from the Earth. In a previous post I explained how to connect to the JPL server via telnet and get their current distance from Earth.

Pioneer space probes feel an additional force towards the sun in the order of magnitude of about a_pioneer ~= H*c, which is also the one predicted by Modified Newton Dynamics theories to empirically explain the flat shape of radial velocity curves observed in galaxies. Currently, the the best theories to explain the galactic radial velocity anomaly are ones that look at the Universe at as inhomogeneous sponge. I hope the dark matters theories will be then finally wiped out, as to me they look as a revival of the theories on ether used before Einstein to explain the Michelson-Morley experiment. Also to have so much dark and heavy things passing through my body without interfering with it does not make me feel confortable at all. Springtime is time to give a compete cleanup to the Universe, it's needed once in a while :-)

The GPU project was looking for a solution of the Pioneer Anomaly. It ported source code from the Orsa Project made by Pasquale Tricarico from C to Delphi and experimented a bit with special physics without further success. It was not possible to replicate the linear shift of the signal received from the Jet Propulsion Laboratory dued to the pioneer anomalous acceleration towards the sun.

There is now an article here, that explains how the anomaly can be explained with 1970s computer graphics (basically a more advanced heat model as the one presented in the original Anderson et al. paper about the anomaly). The paper with the heat model explanation is on Arxiv and awaits confirmation from other scientific teams.

How seismic waves tell us about the inner Earth core

The GPU project was also experimenting with seismic sensors. Nanobit built one (picture) and I also built one with a 3D accelerometer on top of a coil. This series of 6 videos on seismic waves by Khan Academy explain very well the types of seismic waves, why Secondary waves travel only into solids (and in pudding :-), the curved path of refracted waves due to the density differences, the S-Wave shadow zone beginning from 105 degrees, and the P-Wave shadow zones. The seismic waves indirectly tell us how the inner Earth core is made, even if none of us digged that deep. Humankind only scratched the surface of Earth!

Learning the periodic table of the elements

The Fukushima accident made me courious of chemistry, and I sorted out an old periodic table of the chemical elements I was using in school. It has a list of the radioctive elements and their half decay time. I then realized that I did not understand anymore why the table was organized in this way. To be honest, I never understood it! I then took time to watch the introductory course on Chemistry by Khan Academy. The first ten videos explained me much more in detail how the periodic table works. In particular, I can do electronic configurations which was never taught in my chemistry course, and I understand a bit why metals are placed in the 'd' configuration. Metals and salts I already knew from before. And the f configuration at the bottom is for the heavier elements, which in principle should be moved between earth alcali and transitive metals, for the electronic configuration process.

IRC chat primer

I use on Gentoo weechat-curses as IRC chat terminal (emerge -av weechat-curses to install it).

  • Connecting to an IRC server: /connect irc.oftc.net
  • Connecting to an IRC server without certificate: /connect pari.para.net:9999 -ssl -ssl_verify=false -password=****
  • List available chat channels: /msg ChatServ list *
  • Join a channel: /join Debian
  • Leave a channel: /leave
  • Change nickname: /nick dangermouse
  • Register nickname: /msg NickServ register yourpasswd your@email.com then follow instructions on email you receive on how to authenticate
  • Bind nickname once registered: /msg NickServ identify yourpasswd
  • Exit weechat-curses: /leave or /exit
28 Mar 2011 (updated 29 Mar 2011 at 13:06 UTC) »

Some topics in maths I did not knew or refreshed with Khan Academy are: Laplace Transforms, Convolution Theorem, Dirac Delta function, Taylor Theorem, Implicit differentation, insights in Chain rule, Conic Sections (foci of Ellipse, Hyperbola, and Parabola with Directrix), partial fraction expansion, l'Hôpital rule, surface integrals... I also learned a bit finance on forward contracts, futures and the margin mechanism I can use on the job. Sal, you are great!

Useful git hints

These git hints are taken from the Linux Magazine, article "Git in der Praxis".

  • Initial configuration:
    git config --global user.name Danger Mouse
    git config --global user.email dangermaus@users.sf.net
  • Coloured output:
    git config --global color.diff auto
    git config --global color.status auto
    git config --global color.branch auto
  • New repository:
    cd myproject
    git init
    git add .
    git commit
  • Ignoring files: put your entries in a file .gitignore
  • Clone Linus kernel's repository:
    git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git linux-2.6
  • Push changes to repository:
    git commit -a -m "these are the changes"
    git push
  • Retrieve changes from repository with git pull
  • List existing branches: git branch
  • List existing tags: git tag
  • Create new branch:
    git branch Refactor
    #switch to branch
    git checkout Refactor
    #back to master
    git checkout master
  • Create new branch and switch into branch:
    git checkout -b Refactor
  • Merge from branch Refactor into master:
    git checkout master
    git merge Refactor
  • Create a tag:
    git tag -a "Tag_1.3.6" -m "new tag at version 1.3.6"
  • Retrieve uncommitted changes with git status
  • List latest commits with git log
  • Create a patch:
    # on branch Refactor
    git commit
    git checkout master
    git pull
    git checkout Refactor
    git rebase master
    # repair conflicts
    git commit
    git format-patch master --stdout > mybugfix-patch.diff

I am also trying to understand a bit of this book:

Indra's pearls

The book is centered around Möbius transformations and Schottky circles. Möbius transformations

f(z) := (az+b)/(cz+d)
are visualized as compositons of affine projections (az+b) and of projections on the Riemann's sphere 1/(cz+d) of the complex plane. They are at the ground of Beltrami disk (on page 379) and represent a non-euclidean geometry for which the parallel postulate is not valid. Schottky circles are generated by two Möbius maps which project one circle a into a circle A and another circle b into a circle B. With a breadth-first or depth first algorithm all set of reduced words (e.g AbBb reduces to Ab) are generated, and interesting pictures come out. Like the glowing gasket by Apollonius, invented in 220 BC, which is also the best way to pack as many tangent circles as possible (apollonian packing). The most famous fractal (Mandelbrot's apple) shortly appears at page 291.

Debian Squeeze

When installing Debian Squeeze, the partition with Windows XP was not recognized. Normally I adjust /boot/grub/menu.lst but this time the file was missing.

did it....

As "scientist of information", you might find these tricks with M$ tools useful:

Creating SQL statements out of an Excel table with data
An insert:
=CONCATENATE("INSERT INTO tbdata(id, name, address) VALUES(";A1;"'";A2;"'";"'";A3;"'";");");
Or an update:
=CONCATENATE("UPDATE tbdata SET name='";A1;"');");

Lookup table in Excel

This formula looks up for the value in C3 in the table $L$2:$O$25 and returns values in the 3 column where C3 was found. It's a vertical lookup.

Importing Excel tables into access With File->Import->LInk External Table it is possible to import Excel tables into Access and then with SQL queries to extract data from them. However, I learnt that there is a limitation in the complexity of queries you can launch. I always switch from 'Design view' into 'SQL view' when creating queries.

For the interoperability of the Deltasql project, I setup a MS SQL server 2008 instance...

Installing SQL server

Downloading and installing it is easy, but at the end you need to assign a port to it, else the thing won't work. Might sound simple, but I assumed this step was automated by the install procedure. At best, you install it without touching defaults and as last step tweak it to open say port 2345 on TCP/IP protocol. Only after this step, you'll be able to connect with SQL Server Management studio client.

I still think that Oracle and Postgres are the high end of the database offer. However, I see once again how Microsoft is eating more and more of the lower segment. I know many little companies (10-30 employees) which now use some accounting solution based on SQL server. Still, sometimes at work I am puzzled and wonder if the transaction integrity of SQL server is always guaranteed, when under heavy load...

Tips to install Gentoo

I used an old CD to reinstall the latest Gentoo on andromeda, but failed due to some kernel issue with udev after several tries. I then decide to install Debian Squeeze, as I did not want to recompile everything on this old toaster (1GHz, 512 RAM) :-) As side effect I learned that it is always best to use the latest image of Gentoo install CD to get it running 8-)

Another update on Fukushima nuclear accident by Barry Brook is here. Also look at the site made by the students of the Department of Nuclear Science and Engineering at MIT.

An update on Fukushima Nuclear accident by Barry Brook is here.

In my humble opinion, the events shaking the world now, the nuclear accident in Japan and the arabic spring are epochal events, comparable to the fall of the wall in 1989 and 11 September attacks in 2001! They will shape the next decade...

14 Mar 2011 (updated 14 Mar 2011 at 22:17 UTC) »
Fukushima Nuclear Accident

I am chatting with a friend of mine in Japan, and found this interesting article for her, as I unfortunately can't do more from here: Fukushima Nuclear Accident - a simple and accurate explanation. The article states that there will be no risk, as the nuclear reactor is protected by three protective shells, which are still intact. The inner most shell is designed to contain the meltdown, if it should occurr. The building blasts which occurred in reactor 1 and 3 is simply hydrogen leaking from vents, and radiation is not a threat as it is easily dispersed in the time you spell R-A-D-I-O-N-U-C-L-I-D-E. The blasted building itself is just to protect the reactor from weather.

So, according to the article, there might be another explosion in reactor 2 due to hydrogen, but without further consequences. This because the control rods entered the core when the earthquake occurred and stopped uranium decay, and now it is a matter of removing the residual heat produced by reaction collaterals, which is done with seawater.

The building itself resisted an earthquake 7 times bigger than what it was designed to stand for. The problem was that engineers did not build a wall high enough to protect the diesel generators of the emergency cooling system from the tsunami.

I think openness shown by Japanese authorities is a major help in preventing the complete catastrophe. Exactly the opposite happened during Tschernobyl disaster. Workers sent out to manually insert control rods into the reactor came back browned by radiation reporting there was no reactor anymore to put the control rods in, but they were not believed by their chiefs. Also readings from dosimeters were ignored. Well, the smaller ones reported an 'E' for error, while the bigger ones broke immediately when they were powered on, as the watch hand jumped away. And there was the graphite everywhere around the building as witness that the core exploded. Not to mention the blue hyonized air on top of the reactor building!

Missing openness in chain of command is also the cause of another disaster in history (in 1686), the Vasa ship maiden voyage. The test for the ship's stability completely failed when sailors run on the ship's deck from one side to the other, but nobody dared to inform the king as he was behind the lenghtened ship design.

And remember that such disasters can happen in big software projects as well!

Deltasql 1.3.5

Deltasql 1.3.5 is released with some neat features: diffing of edited scripts implemented by phptreegraphext library and plotting the development tree of a project with PEAR Text_Diff library, both released under LGPL.

14 Feb 2011 (updated 14 Feb 2011 at 22:16 UTC) »

One of the pleasures of living in a small village in the mountains is to light the fire in the evening. Me and Marti, we like to watch flames and we straighten arms and say 'hhhhh' when we finally sense heat. Virgi is also happy to see that we managed to put fire only in the oven and not to the entire house.

Khan Academy

Salman Khan is kind of modern Prometheus who stole fire from Zeus and brought to humanity. This time, instead of a torch he brought youtube videos with him, where he explains on a blackboard calculus, algebra, analysis, physics, biology and history from the simplest concepts to the advanced topics. The videos are for free and distributed in the best 'Open' manner. You can download 30 giga of videos if you like, or watch them on youtube. I personally am working through the 'Laplace Transform" videos, stuff which I never learnt before. I think the videos (and examples to work through) are very useful both to students but also for people who already attended university and would like to fill some leaks in their knowledge.

To enter Khan Academy, click here, pick out some video, I am sure you'll enjoy the relaxed style used by Khan to teach about anything, even the most advanced topics. To read more on wikipedia about it, click here.

* I was recovered three days at the hospital to cut off the cystifellea as I had too much fast food when I was student. They should put on any fast food the photos of my cystifellea and the stones they found in it to better advertise their meals. WhenI was waiting for operation, I "repaired" the laptop of my room's neighbour by simply taking off the battery so that it could restart. He called me a "PC doctor" :-) I think it is easier to repair computers than humans. In fact they do not cry if you do something wrong, nor they need anaestesia. Anyway, this is the introduction to the next paragraph :-)

Heart Transplantation for Andromeda

The screen on my laptop "andromeda" broke about three months ago after 9 years of duty. It is an XE3 HP laptop 1GHz, 512 MB RAM, 40 GB of RAM, on which I developed most of my Open Source projects. It was one of the first laptops sold with Windows XP, on which I installed first Red Hat 8.0, Suse 9,9.2 and 9.3, Debian 5.0 and ended with Gentoo. I also used the laptop during my study in Zürich, computed stuff with Maple for physics and maths courses, wrote "Hubble in a Bottle" for the zBox supercomputer, deltasql and GPU. . By chance I found an older XE3 laptop with 900 MHz, 256 MB RAM, 30 GB hard disk and decided to execute the operation "make one out of two", which works with basically any device of the same or similar kind (my uncle did it with 2 BMWs). The main advantage is that no matter how you work you end up with lots of spare parts and the disadvantage is you need space to store them.

There were two possibilites: 1. take the screen of the older laptop and put into the newer, or 2. take memory and disk from the newer to the older. I did it in sequence, as the newer laptop is faster (although the plastics has so many rips), but when I exchanged the screen, the laptop mainboard answered with a beeeep which basically was the official last breath of the newer laptop.

I then chose the second option, not really a choice as the newer laptop died. So that now I am writing this blog entry on the older laptop, which was by the way almost never used, plastic intact and shiny. It has also a robust appearance. I hope to keep this one for another ten years :-)

The point of developing software on old things is that if you get it working reasonably on it, you know that on newer hardware it will fly ! Also it remembers you that the heuristics you choose is way more important than the hardware you are on top.

Fractal dimension of Internet

* This is left as an exercise for the reader:

Write a bash script that rolls 4 dices with 255 faces (quite a big dice!) and concatenate them with a dot. Scan the obtained random IP number to verify if there is something behind it. If you find very weak computers with IP numbers starting from 127.x.y.z try to break into them (when you realize that you are attacking your own 'localhost', you can leave this part of the exercise). From the ratio of computers which answer compute how many computers are attached to the Internet. Call this number N.

Next modify the bash script so that instead of scanning the IP number, it traceroutes the random IP number, so that you get the distance from your computer to the other computer (in 'hops'). Compute an average distance and call it 'l'.

Ok now take Mandelbrot formula N ~ l^d/d and solve numerically for d. d represents then the 'Fractal dimension' of Internet. Well, according to Wikipedia, the Internet is not fractal, only the WWW is :-(

Feynman Lectures on Physics

I bought the books three years ago, and now finally found a bit time to read among them. Some things which I understand a bit more are: how Maxwell completed Faraday law when applying it to the condensator; how Einstein looked at the problem of a moving charge feeling a magnetic force if moving in proximity of a rod with electric current: for reasons of symmetry, if the rod is moving with current and the charge stays, the charge should still feel a force, but there isn't any force in classical physics which does it. Einstein then put an electric force and explained its existence with a relativistic argument (- charge are travelling, plus charges are at rest, - charges are travelling fast, therefore there is contraction of length, which implies an overall positive charge of the rod which generates an electric field which attracts the charge). The quantization of spin discovered by the Stern-Gerlach experiment and how spin states relate to linear algebra in quantum mechanics, how Schrödinger wave equation explains the valence model, how the heat equation works, Green and Stokes theorems applied to Maxwell equations...

* and I should rewrite the heat equation in simclimate as well...

GPU II preview for developers

* This is taken from the project news:

GPU is currently undergoing its 4th rewrite, codenamed freedom (3th was named solaris which reached version 0.963, 2th polaris, 1th unnamed). The preview package has version 0.5.0. This package is solely intended for developers as there is still no client working, just a bunch of unit tests.

The package should sketch the whole idea of the next generation GPU. Some people might be disappointed that GPU moves away from peer-to-peer to become a client-server architecture, but we believe this is the only drawback. The highlights of the coming release (probably 6 months from now) are:

- client/server architecture should allow scaling of nodes up to several thousands of clients

- client is in Freepascal and can be compiled on Windows, Linux and Mac OSX

- Server is in PHP/mySQL and runs everywhere where LAMP stack runs

- All software used to develop GPU II is Open Source and available freely

- The plugin architecture of GPU I is retained, although the plugin layer has been rewritten (available in preview) and plugins need to be ported as well

- Communication is entirely over HTTP, workunits can be downloaded, and resulting workunits can be uploaded via HTTP back to the server (available on GPU preview package)

- HTTP makes GPU transparent to most proxies, so that clients can run also in companies and not only at home

- GPU II retains features like channels (to run whiteboard, chat and sensor networks), job management, clustering services, all rewritten in light of the experiences done with GPU I (available on GPU preview package)

- GPU II will stay a multipurpose distributed computing architecture, so that any client and any server will support any computation (unlike the BOINC architecture)

- Each server should be able to support 40-100 clients according to some initial computations, the network should scale with number of servers

- One superserver will manage the whole network of servers

The package contains most of the server, communication layer client and server side, plugin layer clientside. we hope the release will fuel some more interest into the GPU project. Have fun!

* I read the book Crypto by Dan Brown and end up thinking how I would build my 'Digital Fortress' algorithm

Digital Fortress à la dangermouse

Depending on what to cipher, I would first choose the best compression algo, e.g. for text .zip, for pictures PNG or JPG (with loss) and apply compression to the 'plain text'. Then generate a hash of 'plain text' and append it. With ISAAC, a good pseudorandom algorithm I had the chance to analyze (initialized with some PBKDF2 of the 'key') I would generate a pseudorandom sequence of the same length of the compressed 'plain text' plus hash. Then XOR 'plain text' plus hash and pseudorandom sequence and finally execute a set of predefined statistical tests to ensure that at least the standard properties of white noise hold.

* To conclude I would cipher 'I love you' and send it to Virgi so that she can cranck on it :-)

31 Dec 2010 (updated 28 Jan 2011 at 09:31 UTC) »

arxiv Droid is my favourite Android app to see science progress. I like the 'Astrophysics All' and 'Computer Science All' categories where the latest papers on those topics are submitted. It is cool to see papers on exoplanets, gravitational anomalies and crazy algorithms costantly flowing :-)

New sync algo for deltasql

Wednesday of last week I had a WebEx session with three people in a company in India who are actively using deltasql. For me it was 7pm, for them it was 10:30pm, and they still were in the office! For me it was a honour that they waited so long to speak with me. Also strange that with India I have three a half hours time shift. I never hard of half an hour time shifts before.

The company they work for does software for hospitals in India and the US, and has as an inspiration a spiritual leader named Mata Amritanandamayi or Amma for friends, and she has many. Among big hospital in India, their company serves also an hospital of a nuclear facility.

The software they ship is a J2EE/mySQL framework based on Jboss, roughly the same architecture used in the company I was previously working for. Being all technology based on Open Source software, for them it was natural to use deltasql to manage the burden of keeping database schemas in sync. The deltasql server was customized with Amma's face and had 2070 scripts in it when they showed it to me in the Webex session.

Their software has a complex history of branching and the source code is managed by Subversion. They pointed out, that in deltasql the information from which a branch is originating is missing, which was the real reason why SQL synchronization on branches of branches never worked. The change in datamodel and the changes in the synchronization algorithm scared me first, beside the fact that I want to keep focus on the GPU project, which at the moment undergoes a full rewrite. Therefore I stated: I will think about it, maybe for end of 2011...

One and a half week later deltasql version 1.3.0 is published: it has a brand new synchronization algorithm which is implemented as a tree traversal from leaf to root recording each segment, and a tree traversal back from root to leaf generating the synchronization scripts for each segment. The final step collates the scripts generated in each segment and presents them to the user. Documentation and FAQs are updated as well.

Starwars ASCII

To complete the underground trip in the last blog entry, the ASCII movie of Star wars:

telnet towel.blinkenlights.nl
30 Oct 2010 (updated 30 Oct 2010 at 08:17 UTC) »

Martina is now 10 month old and while Virgi is at work on weekends I have to look at her. Fortunately, she is now opening a drawer and reordering its contents (mainly my pijamas), so that I have time to blog this entry! 8-)

git is faster than light

git is really fast, faster than my shadow and faster than cvs. I therefore moved deltasql repository on git and created a new git repository for what will become GPU II.

On gentoo, emerge git will install it. On ubuntu, sudo install apt-get gitcore will do it. On Windows, I use git extensions.

A good introduction to git is on the progit book. There is also a git plugin for eclipse, which I did not test until now.

Continouus database integration with deltasql

I finished the bash client for deltasql server, which can be used for continouus database integration. The bash client included in Release 1.2.0 supports Oracle and mySQL. The next release should support postgreSQL as well. I did an additional effort to document deltasql, trying to explain why there is need of projects and modules and how the synchronization mechanism works.

Going underground...

After reading the book, I went underground for a while, and I discovered these interesting things:

1. Facebook anno 1987

If you want to see how facebook looked like in 1987, telnet to the server mail.encompasserve.org and register an account for free following the given instructions carefully. It's an old but respectful VAX machine (OpenVMS Alpha Operating System). Then go and read the mails in the forum with these commands:

telnet mail.encompasserve.org
READ ...

To disconnect, follow this sequence:


2. The Rogue game

The precursor of Dungeon and Dragons which was also featured in Scientific American. In the Italian version 'Le Scienze' I found the article for April 1985, edition number 200. I remember playing a version of this game named Moria on MS/DOS, when I was young and healthy 8-).

With this command sequence you can watch people and robots playing the game:

telnet nethack.alt.org

To exit, press three times 'q' on your keyboard.

3. Retrieving positions from celestial objects from NASA server

Instead of hacking into NASA as suggested by the book, one might enter NASA by its front door. Assume we want to know how far from the Sun the most far thing built by mankind is, then we need to ask HORIZONS.

telnet ssd.jpl.nasa.gov 6775
Pioneer 11
... scroll down until 100% with Enter ...
... scroll down until you see ...
... JDCT  ...
... X  Y  Z
2455499.500000000 = A.D. 2010-Oct-30 00:00:00.0000 (CT)
   1.538965002087235E+01 -7.644892272720375E+01  

It means that Pioneer 11 is distant from sun 15.38 AU in X direction, -76.45 AU in Y direction and 19.95 AU in Z direction as of 30 October 2010 (today). Calculating the distance with Pythagoras gives a distance from the Center of the Sun of 80.49 AU. An AU (Astronomical Unit) is defined as the average distance between Earth and Sun, it's about 100 million km. So Pioneer 11 is distant from us 80.49 * 100E6 km, 8.049 billion kilometers!

Sending a signal to Pioneer 11 should take 8049E9 m / (3E8 (m/s)) = 26830 s = 7.45 hours of travel in the empty darkness of space until it reaches the space probe. So as last exercise, execute this command, but you need to wait 2*7.45 hours until you get an answer as the signal needs to travel back:

telnet spaceprobes.jpl.nasa.gov 6775
enable redshift adjust
connect Pioneer 11
echo "hi little green man, please do not touch the 
antenna, thanks!"

Just a joke ;-)

I found the Underground book of wikileaks founder online in text format. Cool!

Volcano Eyjafjallajoekull

I finished coding the climate simulation frontend for the GPU project. It has some neat features like ashes of Volcano Eyjafjallajoekull which in fact cover Europe during Summer and CO2 cycle based on population density data of U.N. The nuclear war feature still needs some improvements, though.

The atmospheric model is quite simple and do not now if it can stand scientific simulations. The frontend has plenty of parameters which affect the simulation. Inverting earth rotation will also invert coriolis effect on winds, for example. It is possible to put Earth in Mercury or Iupiter orbit and see what happens. Go stop earth rotation or revolution around Sun, or change water density!

To test the climate simulation, it is suggested to download GPU and upgrade it via menu point "Tools->Autoupdate to latest version".

This frontend is completely written in Lazarus/Freepascal. To me, it looks like the Lazarus project is close to production stage, and it is even more powerful than Delphi itself.

ASURO robot

I had a chance to play with the Asuro robot. It was my first experience with the 8bit Atmel ATmega8L microprocessor. Until now I only looked at the PICs microprocessor family without doing anything concrete with it.

One thing to know about ASURO is the behaviour of the PollSwitch() function. The switch sensors return unreliable data. In forums, it is possible to read that only if PollSwitch() returns several times the same value, this value is reliable. Therefore our C-code changed like this:

unsigned char test1, test2, test3, test4;

while (1) {

test1 = PollSwitch(); // retrieve data from LED test2 = PollSwitch(); // retrieve data from odometric sensors test3 = PollSwitch(); // do some more logic test4 = PollSwitch();

if ((test1==test2) && (test2==test3) && (test3==test4)) { if (test1>0) { // at least one of the six sensors is colliding with an object } else { // no collision }


In case the code mentioned above does not work, than try this piece of code we found on the net by hai1991. The code checks if resistors in front of the switches are soldered correctly. Pressing the switches lights LED lamps in a funny way.

#include "asuro.h"
unsigned char taste;
int main(void)

Init(); while(1) { do { taste = PollSwitch(); } while( taste != PollSwitch());

switch(taste) { case 1: StatusLED (GREEN); break; case 2: StatusLED (RED); break; case 4: FrontLED (ON); break; case 8: BackLED (OFF,ON); break; case 16: BackLED (ON,OFF); break; case 32: BackLED (ON,ON); break; default: StatusLED(OFF); BackLED(OFF,OFF); FrontLED(OFF); break; } }

return 0; }


About one year ago, Virginia and me hided this geocache called Lago di Poschiavo close to where we live. Until now it was found 36 times. I wonder if Martina (now 7 months old) will like Geochache. I asked her, she answered me with "ta ta ta", but I am not sure of what it means :-)

23 Jun 2010 (updated 23 Jun 2010 at 14:23 UTC) »
Texturing a sphere in OpenGL?

I am writing a simple climate simulation which will be released soon as frontend for the Global Processing unit project.

One of the tasks is about plotting the Earth in OpenGL, for this I have bitmaps with continents, clouds, temperatures, etc, which I would like to project on the sphere.

I read through documentation on how to texture a sphere. After a while, I decide to go for this approach instead (in Freepascal, which is a phantastic Open source substitute for Delphi):

I create first a "sphere grid" in an array called sphere3d:

procedure init3DGrid(var w : TWorld; var clima : TClima);
var i, j : Longint;
    p1   :T3DPoint;
    lat, lon, altitude : Extended;
 for j := 0 to 179 do
     for i := 0 to 359 do
         lat := YtoLat(j);       //-90..+90
         lon := XtoLon(i);       //-180..+180
         lat := lat/90 * Pi/2 + Pi/2; //0..180
         lon := lon/180 * Pi + Pi;  //0..360
// adding half a degree to longitude for triangles
// in each second row
         if (j mod 2 = 0) then
               lon := lon + 1/720 * 2 * Pi;
         p1.x := - radius * sin(lat) * cos(lon);
         p1.z :=   radius * sin(lat) * sin(lon);
         p1.y := - radius * cos(lat);
         sphere3D[i][j] := p1;

function XtoLon(x : Longint) : Double; begin if (x<0) or (x > 359) then raise Exception.create('x on array has to be between 0 and 359 but was '+IntToStr(x)); Result := x - 180; end;

function YtoLat(y : Longint) : Double; begin if (y<0) or (y > 180) then raise Exception.create('y on array has to be between 0 and 180 but was '+IntToStr(y)); Result := 90 - y; end;

And in the Paint method of my extended TOpenGLControl I do a call to plot3d with my color bitmap and the vertex array computed in the previous procedure Init3dgrid:

procedure plot3d(vertex : P3DGrid; colors : PGridColor);
var i, j,
    target_j : Longint;
    p1,p2,p3,p4 : T3DPoint;
    r, g, b : Extended;
  for j := 0 to 179 do
     for i := 0 to 359 do
          target_i := i+1;
          target_j := j+1;
          if (target_i>359) then target_i := target_i-359;
          if (target_j>179) then target_j := target_j-179;
          p1 := vertex^[i]  [j];
          p2 := vertex^[target_i][j];
          p3 := vertex^[i][target_j];
          p4 := vertex^[target_i][target_j];
          r := Red(colors^[i][j])/255;
          g := Green(colors^[i][j])/255;
          b := Blue(colors^[i][j])/255;
          glVertex3f( p1.x, p1.y, p1.z);              
          glVertex3f( p2.x, p2.y, p2.z);              
          glVertex3f( p3.x, p3.y, p3.z);              
          glVertex3f( p2.x, p2.y, p2.z);              
          glVertex3f( p3.x, p3.y, p3.z);              
          glVertex3f( p4.x, p4.y, p4.z);              

For my limited knowledge of OpenGL, this is easier to setup (and for me to understand) than loading a texture and using a cubic or cilindric projection on a sphere. The performance of this solution is also acceptable, at least for my Earth surface with 129600 (360x180*2) triangles.

42 older entries...

New Advogato Features

New HTML Parser: The long-awaited libxml2 based HTML parser code is live. It needs further work but already handles most markup better than the original parser.

Keep up with the latest Advogato features by reading the Advogato status blog.

If you're a C programmer with some spare time, take a look at the mod_virgule project page and help us with one of the tasks on the ToDo list!