I was puzzled why Apache 2.2 returned the following error upon installation:
Installing the Apache2.2 service The Apache2.2 service is successfully installed. Testing httpd.conf.... Errors reported here must be corrected before the service can be started. (OS 10048)Only one usage of each socket address (protocol/network address/port) is normally permitted. : make_sock: could not bind to address 0.0.0.0:80 no listening sockets available, shutting down Unable to open logs
You can check if the port is indeed in use by opening a command prompt and typing:
If you can find a row containing port 80, then it is in use. For instance:
Proto Local Address Foreign Address State TCP 0.0.0.0:80 0.0.0.0:0 LISTENING
If you're having difficulties discovering which application is using the port, run the command prompt as administrator and enter the following command, which will report the executable file that is responsible:
In my case, it turned out to be Skype. Check that your Skype settings aren't blocking the port and close Skype. Restart the Apache service and everything should be working.
Skype may be the source of your Apache problems; you might want to consider unchecking this option
Tuesday night it soon became clear that, much to my delight, Obama was going to win the election. I enjoyed watching the ensuing victory speech, where the president-elect reiterated the hopes and promises of positive change for the next four years, but also emphasized the severity of the problems the United States is facing.
Below is a short montage I made of my favorite part of his speech.
Just like last year, and for the past several years, Eigendomweg 53 in Soest is a sight to see on Halloween! My family has been promoting the holiday ever since we moved to the Netherlands by expanding our spooky horror show a little bit each year.
This year we had more than one hundred little witches, monsters, grim reapers, skeletons, zombies, devils, vampires and ghosts. We were happy to also see more original and home-made costumes, like princesses, divas, an Indian, Luke Skywalker, a bumble-bee and even a Chinese dragon!
It's a challenge to maintain our neighborhood reputation of the spookiest house on the block. Good friend and business partner Mathijs Lagerberg joined in with the fun again this year!
Our neighbor was kind enough to take many photographs, which you can find on his website, eigendomweg.nl.
One of the key technical highlights of QuickGene is its threaded-based architecture. Concurrency has been exploited to ensure that the user is provided a responsive interface despite performing computationally difficult operations.
In CrimsonBase applications, the interface always runs in a single thread. Other operations—may it be loading, saving, searching, drawing or updating—are run in separate threads. This construction is nothing new to seasoned software engineers, and much has been written in the literature about avoiding dead-locks and race conditions.
Even with a well-defined, synchronized construction, interesting problems arise from separating the interface from the operations that are produced by it. Suppose, for instance, that the user wishes to save the current project. Once the save button is pressed, a thread is instantiated that performs the task. As the interface remains responsive, it may be possible for the user to make a quick change to the project and hit save again before the operation completes.
The question now arises how to handle this issue. There are two conventional approaches to this problem:
Have the first thread lock the operation. Upon completion, unlock the operation and notify the next thread; the second thread then saves the project again. This construction is slow: all save operations need to complete one after the other.
Alternatively, one could consider ignoring any parallel threads and only letting the first finish. The second (or any other simultaneous save thread) is then aborted. This is faster than the above method, but the last changes are, to the confusion of the user, left unsaved!
We were quick to realize that neither of these approaches provided the desired functionality. Ideally, the operation would proceed as follows:
The first thread is outdated; the project has been modified and a newer save operation is in the queue. Therefore, all but the most recent thread is interrupted and the last thread is permitted to execute. This is essentially as fast as running only one thread, but ensures that the most recent changes are saved as the user expected.
This construction is implemented in CrimsonBase applications under the class TerminatingThread, which controls the synchronisation of threads. Each operation class, such as saving, loading, redrawing or searching, is uniquely identified so that TerminatingThread can keep track of which thread belongs to which "class" of threads.
In essence, to maintain synchronization, prior to actually performing a thread, a synchronize() function is performed to ensure that no other threads of the same class are running. If it is safe to proceed, the thread's mainLoop() is run that contains the functionality of what the thread is intended to do. Finally, upon completion, the end() is called to notify the thread manager that the current thread has completed.
To illustrate this, consider the following schematic to be a thread using the above construction:
With this construction, multiple threads of the same class can be started without causing concurrency problems. The synchronize() function will sort out which threads are outdated, and interrupt them and wait for them to acknowledge their termination. It will also detect if it is not the most recent thread, in which case it will quickly terminate. Furthermore, when a thread is interrupted, end() will notify any threads waiting and allow them to proceed.
Various areas of QuickGene have benefited from a improved performance and feedback by using this framework. Most interestingly, complicated redraw operations are passed through a specialized subclass, PaintThread, that further enhances fast visual feedback through buffering and multi-step drawing.
Being so busy with school and work, I haven't updated my blog for over a month. In August I went to see Iron Maiden together with my brother and two cousins, which I had very much been looking forward to.
While Luminos just moved virtually, the other company I co-founded, CrimsonBase, is moving physically. Today Eric, Mathijs and I — the three owners — visited our office space in Utrecht University's Kruytgebouw that is still busy being renovated.
My appologies for the poor quality images; they were taken with my cell phone.
The building is still being renovated. Since the west wing (shown above) will only be finished in September, we looked at completed offices in the south wing as a temporary workspace.
Our office is opposite the also newly renovated lunchroom.
This is the office we finally chose for. It is big enough and despite only having two windows, lets in more light than most of the neighboring offices.
The high ceiling, matte wall and colorful carpet give it a very homely feeling.
Although the building looks dull from the outside, from within it is colorful and aesthetically pleasing.
Eric, Mathijs and I briefly sit down to discuss which office we want to move in to.
Until this wing is finished, you can find CrimsonBase in office Z110.
When the west wing is be finished, a larger, 30 m² office will constructed here which we will consider moving in to.
Some time back, I set up an SVN server for Luminos on a virtual server at XLS Hosting. I've gone ahead and moved the entire server tonight since we no longer find it necessary to have our web server separate from our intranet.
The good news is that I now have root access for this subdomain and some more space. This server is also faster, which is a welcome bonus.
If you run in to any issues related to this move, please let me know.
I've been doing some post-processing on the data I captured from several test subjects for my experimentation project. Each subject was put in the motion capture lab, where they simulated some movements that mimic "dynamic peephole" navigation. The idea here is to be able to navigate large amounts of data on a device simply by moving it around in space, instead of having to interact with it in the conventional manner (i.e. pressing keys or touching the screen).
Here is a large resolution sample video I made of all the data playing simultaneously. On the top left you can see the video stream recorded by the phone. On the top right are the motion capturing markers as recorded by Vicon iQ. Finally, the graph indicates the three axis data output of the phone's accelerometer, where red line is the x-axis, green line is the y-axis and blue line is z-axis.
Het lijkt best goed te werken trouwens! Het gezicht is constant te zien (of liet je dat haar express doen?) En de assen lijken toch iets meer informatie door te geven dan je dacht? Of ben ik daar de leek voor en snap ik het niet? (a)
Succes met verwerken!
Friday, July 4 2008, 0:12
Ja, dat is Annemieke! Charmant, hè, met dat brilletje op?
Ze kon zichzelf trouwens niet zien; dat in een later experiment wel, waarna ze centraler in beeld bleef, interessant genoeg.
Nou, van de accelerometer valt mijns inziens alleen de z-as te gebruiken gezien de gebruiker het toestel kantelt. Horizontale versnellingen zijn tussen de ruis nauwelijks waar te nemen tenzij dat met grof geweld gebeurt. Daarnaast is het beeldkwaliteit niet fantastisch; de ernstige artifacten in de video hierboven zijn niet door de compressie van deze site, maar oorspronkelijk van de camera zelf, helaas.
Wellicht valt hier nog wat aan te sleutelen, maar ik ben ook maar pas begonnen met ontwikkelen van software voor Symbian.
Ik ben nog op zoek naar proefpersonen, dus je bent van harte welkom in het lab!
Sunday, July 20 2008, 13:02
That is very interesting, what you just said rararbol and labingda... Seems your spam filter is getting cracks again
Sunday, July 20 2008, 14:12
Thanks for the heads up! I had already noticed it myself (I'm getting contact form spam as well).
It's all related to the recent move to a new server. I had forgotten to set up the file permissions correctly, but it should be fixed now. We'll soon find out!
While developing an application for my ongoing experimentation project using a Nokia N95, I ran into a mysterious problem that was causing my application to crash. No message; it simply disappears.
This phenomenon is known as a panic. You can discover the code associated with the panic using one of many on-device tools, but popular existing ones presently do not work with S60 3rd edition and require signing of the SIS file.
Since I don't have a publisher ID, and I don't have the money to pay for one, I found a great free alternative: Y-Tasks.
Download and install the Y-Tasks application along with it's Crash monitor plug-in onto your device.
In the menu, locate the directory "DrJukka.com", and start up Y-Tasks.
Open "Crash monitor" and be sure to select "Set On".
Press and hold the Switch Application button () to open the task manager to switch to different applications. In my case, I switched to the standby screen, opened my application, and observed the panic code returned by Y-Tasks.
Finally have I found the perfect opportunity to see one of my all-time favorite bands perform. I was a faithful Iron Maiden fan for years and years, and although my flavor in music has broadened and moved on, I still enjoy listening to some old school heavy metal.
I've been talking about going to a performance together with a nephew of mine for some time now and since he's going regardless, I decided to join him and bring my brother and a niece along. Four huge Iron Maiden fans, from past and present, are going to Assen this summer!