Archive for the ‘Programming’ Category

wget hack

Tuesday, December 19th, 2006

Today, I recursively downloaded a web site to my web server using wget, and for some reason it didn’t work well. Some of the immediate files are missing. After running through the original site source, I realized that it’s about the files inside the style sheets. So, I made some quick modifications to the wget source.

It’s just a hack to get my download working, however it will also work on some other sites as well(I hope ;-)). errr…. Sorry about the quality of code.

Unfortunately, I lost the original source code(I have no intention to download it again using my dialup; ah! I forgot to tell you, I’m enjoying the vacation at home; Ratnapura), so I can’t create patch files. wget version is 1.10.1. Download recur.c and html-url.c.

Number Puzzle Changed - It’s 15-Puzzle now!

Tuesday, October 31st, 2006

I changed the Number Puzzle plugin a bit and renamed it to 15-Puzzle. The new download links is http://www.sandaru1.com/15-Puzzle.gg. The older link also contains the same files now.

Number Puzzle - A plugin for Google Desktop

Monday, October 23rd, 2006

Number Puzzle is a plugin for google desktop. Click here to download. You can download the source code from here. (It’s the same file, just with the extension of “zip”. Just forget it if you can’t understand).

An AJAX mistake

Sunday, October 22nd, 2006

Yesterday (Saturday) I was running the IOI grader on university of moratuwa for their ACM selection tests. As far as the grader functionality is concerned, it worked perfectly. But unfortunately the grader interface was damn slow. There were only 26 contestants and it was on a 100 Mbps LAN. So, I had to restart the server time by time. So, I just looked at the log files and found out there was a huge number of requests. But why is that? Because our grader is using AJAX to grab the latest status. The AJAX script was generating a request for each 2-3 seconds. To make the things worst, those were keep-alive requests. So, not only that the server was using the maximum number of threads, the script keeps sending the requests to the same connection so the connection doesn’t break until it meets the maximum number of keep alive requests. When several guys are sending requests others have to wait in the queue. I simply changed the refresh time of the AJAX script and the number of maximum threads on the apache server. After that restarting the apache server solved the problem, more or less.

Jigsaw

Monday, August 28th, 2006

Download jigsaw.js samples.zip
Jigsaw is a small javascript framework for AJAX.

First you need to download the prototype library from http://prototype.conio.net/. Then include the javascripts in your header like this :

<script src="prototype.js" type="text/javascript" language="javascript"></script>
<script src=”jigsaw.js” language=”javascript” type=”text/javascript”></script>

After that you just have to call the request function.

<script>
var request = new Ajax.Request(’test.xml’);
</script>

It can be either a static xml page or dynamically generated one, it doesn’t matter. The xml file describes what to do next.

Here is a sample xml.

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<element id=”header”>World!</element>
<element id=”header” attribute=”style”>font-size:16px</element>
<element id=”image1″ attribute=”src”>picture2.jpg</element>
<script>alert(’Text inside script tags are executed’)</script>
</response>

Your html page should have two elements like this :
<div id="header">Hello</div>
<img id=”image1″ src=”picture1.jpg” />

It’ll update the content of the header div to “World!”, make the font size larger and the change the picture to “picture2.jpg”.

You can also create javascript objects.

<?xml version="1.0" encoding="iso-8859-1"?>
<response>
<object>
<attribute name=”name”>Person1</attribute>
<attribute name=”age”>20</attribute>
</object>
<object age=”30″>
<attribute name=”name”>Person2</attribute>
</object>
<object name=”Person3″ age=”40″ />
</response>

Then you have to create a function to process the objects.

function process_objects(response) {
for (var i=0;i<response.objects.length;i++) {
alert(response.objects[i].name+” = “+response.objects[i].age);
}
}

The request should be like -

var request = new Ajax.Request("objects.php",{onFinish:process_objects});

You can also access the XMLHTTP Object from response.transport

This function is called after the pre-processing, if you want to process something before pre-processing use onComplete option.

AJAX, wow it’s getting really popular

Saturday, June 24th, 2006

Yesterday, I was browsing through digg.com programming channel. Mmm.. Impressive, more than half of the stories are related to ajax. So, I decided to write about bit of ajax today.

The main advantage of AJAX is that it works like a desktop application; instead of refreshing the page every time you change something, you can interact with the server then and there. When we talk about the disadvantages, there are a lot; bookmarks, back button, search engine incompatibility, etc (there are hundreds of articles in the internet regarding these.. so, I’m not going to repeat those ;-) ). But use of some hacks will help you to avoid those problems.

There are plenty of AJAX frameworks, both client side and the server side ones. I have gone through many of them and found out that one of the bests is rico. This simple javascript client side framework also contains some animation effects and drag and drop feature.

If you had a careful look at the popular javascript frameworks, you’ll see that most of them are based on prototype. Prototype is a really powerful javascript framework which allows you to create classes.

When we consider about the server side languages, using php is really easy. It’s a simple light weighted language and php applications can be executed in almost any web server (of course only if it supports php).

So, this great combination of tools will make you ajax life easier; prototype, rico and php.

P.S. : As I have mentioned in an earlier post, firebug will help you a lot on debugging.

16F877A - MicroChips. PIC programming.

Thursday, June 22nd, 2006

Last few days, I was busy with programming a PIC. First, I downloaded some documents from Microchip site, and played around it bit. Then, I created some sample programs using assembler; even though I’ve prior experience with assembler, I found that it is not efficient enough as in man power. So, I decided to go for PIC Basic. Whoa! That seems to be nice, easy to code with it’s built in functions such button debouncing, etc.

The first effort of programming didn’t workout, because of the serial cable, after fixing the cable; it was the circuit. Lots of debugging fixed the circuit. WOW! It works.

I wanted to do some floating point operations. Since, the PIC basic compiler doesn’t handle the floating point operations itself, I decided to multiply the numbers by 1000, do calculation and divide them again. But multiplying the number by 1000 overflows the 16 bits word variable. So, I downloaded an external library, worked nice so far, but haven’t tried out it on the PIC yet.

Just wondering, is there a PIC Basic compiler for linux?

Rico = Javascript + XML = AJAX

Saturday, June 10th, 2006

After successfully finished an AJAX project (a simple AJAX Content Management System), this time I’m going to create a complete AJAX site. The CMS was created without using any 3rd party frameworks, and had a great time debugging the javascript code. So, this time I decided to use a framework.My choice was Rico – A client side javascript framework. It also provides some javascript animations and drag n drop features – haven’t tried those yet. Actually, this made my work much easier. If I want to update the value of an element, then I just have to create a piece of xml code, the framework parses it and updates the element automatically. But it only supports updating an element value, if I’m doing something outside that, I have to parse the code manually and do it. So, I created my own mini framework using Rico:). Now, it’s really easy.

When I was creating the CMS, the alerts did a great job ;). It really helped me to debug the javascript code. But this time, Rico blog directed me to a nice extension for firefox – FireBug. It’s really cool. Actually, the main advantage is, it captures all AJAX events. Simple and Useful.

GDS Plugin Update

Tuesday, May 2nd, 2006

Google has pointed out few bugs in my plugin. I managed to fix them easily enough but the changes them self started an another series of bugs;-).

Anyway, with some effort I managed to fix them and meanwhile improved the core functionality of the plugin.

You can still download it from the old url.

http://www.sandaru1.com/clipboard.zip.

Clipboard Manger - My Google Desktop Search plugin.

Saturday, April 22nd, 2006

Finally, After a lot of failures, I manage to complete my GDS plugin. Basically, it keeps track of previous clipboard data and show them in the desktop slidebar. Then the users can click on any item, and it’ll be put into the clipboard again.

Click here to download.

Of course, still it’s beta and may(rather should ;-)) contain few bugs here and there.