Firefox 2.0 Released

Goodness! Now this is the better news.

I’ve been checking on it days before, even hoping it would go head to head with IE7’s release. My wish wasn’t granted. However, nearly a week after, here it is.

Firefox 2.0 has now been released by Mozilla.

Downloads are now available from the mirror sites for Linux, Mac, and Windows. You won’t see announcements on the main page as there is no official release yet. But news says we can expect it anytime today.

We are also hours away from the newest serving of one of the hottest Linux distribution.. Fedora Core 6 arrives on 2006-10-24, 14:00 GMT

Now there! Two of the most loved open source software are/will be available for public usage. Cheers to the community!

Wireless Experiments

I was playing with the wireless routers on Saturday. By that statement, I meant…

(1) flashing new firmware
(2) verifying the left and right antenna for use in antenna select
(3) experimenting with varying transmit power with different types of antenna

As such, i thought it best to document it. Forgive me if i had to do it here. I forget easily.

Flashing a New Firmware

For the WRT54G, i flashed DD-WRT v23 and OpenWRT. I easily fell in love with DD-WRT’s web interface and the number of added features that come with it, that i don’t even know where to use it (given the current setup). I’m not surprised it’s a fave among firmwares.


OpenWRT is not much of a hooker, but it provides better command line functionalities. Likewise, i still enjoyed its gui. The tabs look minimalist as it contain only basic functionalities. It doesn’t try to fit in everything in one, thus, is good enough for normal usage. There is also a choice of three install types: micro (no gui), bin (web+ppoe), and pptp (web+pptp). You also have a choice of using .bin or .trx firmware files. One thing i learned from its wiki page, use bin if upgrading from default Linksys firmwares. If from an older openwrt version, it is best to use trx.

There are still other firmwares available: hyperWRT, or its continued development HyperWRT Thibor or HyperWRT+Tofu (never tried and never knew the differences), as well as different flavors of Sveasoft – Alchemy, Talisman, Freeman – with downloadables here.

Antenna Select

Which is left and which is right? I took time to discover myself as forum posts give unreliable (i.e. contradicting) answers. Using netstumber, i came up with the ff. graph as i changed the antenna select from left to right (looking from the front).


Varying Transmit Power

HyperWAP boosts the transmit power to of 84mW maximum. DD-WRT simply provide 251mW max. With the TX power set to max, i checked which will give me better results. Interestingly though, and quite disappointingly, i got the same signal-to-noise ratio a.k.a. SNR. (I need to review my EE notes to explain this.) However, increasing the transmit power from the default value to its maximum gives the ff:


Open Source Firmwares

This is an update to my post Upgrade on October 16. This is for those who still use WAP54G. Bet there’s not too many of you…

As i said in the previous post, i need to have another firmware installed in a Linksys WAP54G v2 to accomplish the following (since i attached a Hyperlink 15dBi omni-directional antenna):

(1) adjust the transmit power

(2) select TX and RX antenna

Upgrading to the latest version offered by Linksys (v3.04) won’t suffice. Thus, i should turn my head to firmwares offered by the community. Here are some:

HyperWAP is intended as a power boost firmware. When installed in a system with default Linksys firmware, the difference is negligible unless you open the Advanced Wireless tab. It has the ff. added features: ajustable transmit power, antenna select, 13 wireless channels, and a ‘Boot Wait’ flash protection. HyperWAP v1.0 is based on Linksys Firmware 2.07 and is compatible only with WAP54G v1, v1.1, and v2. (note: Do not install on a V3.)

Upgrading from 2.07 should be piece of cake. However, if running on Firmware 2.08, there may be little trouble (but not reason enough to panic!). Don’t worry if this message comes out:

“You cannot downgrade the firmware.”

I’ve had this message too since the device i’m using right now is 2.08. One forum suggested to just wait for newer release for HyperWAP since current release is based on 2.07. You will die waiting, as no new release have been available since 2004, probably because WAPs are already defaced with WRTs. A HyperWAP forum suggests going to


For example, it can be Then, disable “Downgrade Header.” Go back to the firmware upgrade window (the link can be found at the Help tab) and proceed with the upgrade.

For reference, follow these steps:

1. Download HyperWAP v1.0 here then decompress.

2. Open a browser. Open the link and disable Downgrade Header. Go back to main page.

3. Go to Help. A link showing Firmware Upgrade will open a new window. Browse for the HyperWAP_v.1.0.trx. Click ok. This will flash the new firmware onto your device.

4 . Remember to follow the warning: Do not turn off the device. Just sit down and wait for the upgrade to finish or you may suffer from bricking your device.

5. Refresh your connection. If successful, you should see

Firmware Version: 2.07 – HyperWAP v1.0

MustDie firmware 2.07.1 is based on Linksys 2.07. It can be downloaded here. Again, this was released in 2004. It offers the same features as HyperWAP. There was another Sveasoft Freya, but i think it’s no longer available for download.

A quick note: When updating firmware, ALWAYs reset the device to factory default setting and use a wired connection.

More on WRT firmwares on the next post.

IE7 Released

Internet Explorer 7 has now been released by Microsoft. Users with licensed Windows copies can now download from Microsoft download site. Or wait 2-3 weeks and it will be available as an automatic update. IE7 boasts of the following features: new “streamlined” interface, tabbed browsing, RSS feeds, print options, instant search box (and a choice of search provider), and improved security with “report phishing” add-on.

I’d say i’ve seen pretty much of these in Firefox. Specially with it’s very large community, Firefox has almost any extension you can think of. Well maybe not everything, but it’s quite a large (and growing) collection of extensions. IE7’s look is okay though, and i like it. In fact, i have it installed in my system since the beta and RC releases alongside Firefox (my default browser).

Read more of the news here.

How-To: Learning PHP XML-RPC

This post is inspired by a friend’s recent project on web service.

SOAP is the W3C standard for web services. However, as a friend pointed out, XML-RPC is a better alternative for simple implementations.. for starters as well. XML-RPC is a remote procedure call which uses XML for encoding. You can google tons of tutorials on the subject so i will not deal much with it. Some useful sites are the XMLRPC Homepage and the Build Your Own Web Service Using XML-RPC by Sitepoint.

If you can sit comfortably with PHP, a library implementation of XML-RPC protocol written in PHP (read: PHPXMLRPC) is your gateway to web services. The ff. steps documents my learning experience in learning PHPXMLRPC (with a lot of help from my tutor):

–Before we proceed with coding, here are the basic stuff —

1. Download the latest stable release (currently at 2.1 as of August 28) from sourceforge to your server.

2. Decompress to your main web directory: /var/www/html/.

3. Copy the contents of xmlrpc-x.x/lib/ to your php’s include _path.

— Learn the client environment —

4. Open a browser. Go to path-to-xmlrpc/doc/ch11s01.html to view an xml-rpc client example.

5. Copy the example and save anywhere in your web directory. I made a folder test and saved the file as client_state.php. Remember to include and using the require_once(“…”) php function.

6. Using the example, you can study the important classes used for the client – such as xmlrpcval, xmlrpcmsg and xmlrpc_client – together with their corresponding methods – send, scalarval, serialize, faultCode, and faultString. Use the documentation to find out the functions of each. You can try to make a client at this point.

$msg = new xmlrpcmsg(‘methodName’,array(new xmlrpcval($input, “inputType”)));

$client = new xmlrpc_client(“server_path”, “server_address”, server_port);

— A showcase of the client-server interaction —

7. The easiest way to test a server is through the debugger. On a browser, open path-to-xmlrpc/debugger.

8. Fill in the address, port, and path fields using the parameters in the line with xmlrpc_client from the sample code. Select “List available methods” then press Execute to see the available methods in the server.

9. Click “Describe” beside examples.getStateName. You will see a description of what the method does, its expected inputs and outputs.

10. Click “Load Method Synopsis.” This is the XML payload that the client passes to the server. (Note that the sample code above does the same thing.) Enter a value between <int> and </int>. You can use the value of $stateNum in the sample code to verify.

11. Click “Execute.” The return payload/response should be displayed in the lower frame. An error in the server will commonly result in an “invalid return payload warning” (however, it’s not restricted to that error message). You can play with other methods to get you familiar. The methods with system in its name are built-in methods in all xmlrpc servers.

— Now, for the server part —

12. Now that you have a feel of both client and server, it is time to code for the server part. XMLRPC provides a sample code under demo/server/ folder. View server.php in a vi editor. The length of the code may be overwhelming at first. Don’t try to understand them. Just proceed to the bottom most portion of the code.

13. Check out only the relevant parts first (i.e. what you need for examples.getStateName). The important classes are xmlrpc_server with its service and setDebug methods. These are found at the bottom – everything from $s= new xmlrpc_server(“..”) down to $s->service. You also need the first element of the associative array $a (the contents, also in array form, of the index examples.getStateName). Finally, the function findStateName, and the variables findStateName_sig and findStateName_doc. It’s important to note the structure of array $a and its parameters:

$a = array(“methodName”=>array(“function”=>”functionName”, \ “signature”=>$functionName_sig,”docstring”=>$functionName_doc)

$functionName_sig = array(array(outputType, inputType, […]));

*methodName is what the client sees. functionName is what you use in the server. For simplicity, you can use the same name for both.

*functionName_doc gives a description of the method.

*functionName_sig shows the input and output types.

*Type can be Array ($xmlrpcArray), String ($xmlrpcString), and integer ($xmlrpcInt). [I think there are more types, but i only know these three atm].

14. Use the debugger. Point the address and path to your own server. This works just like steps 9-11, except that this time, it uses the web service you provide.

15. Following the sample server code, you should be ready to make your own server.php. Think of a simple service (such as a function that returns the value of the factorial given an integer input) that you can implement. Place the file in the folder test and name it as xmlrpcserver.php. Remember to include the relevant parts stated in Step 13. Also include and in your code using require_once(“..”).

16. That should do it. You may test your server using the debugger or by using a client.

17. Set $server->setDebug(“2”) to view debugging information in the client. This is very helpful since it’s difficult to find the exact error when you only see a generic faultCode.

There! You’re done. The next step is to try using arrays as output (such as database information given a studentName). I had a hard time with this part. Read more on the 4th xmlrpcval constructor type, simple array in the case of an XML-RPC array or an associative array in the case of a struct. Note that the elements of the array must be xmlrpcval objects themselves. For a general array return payload, the ff. code can be used:

$param = new xmlrpcval(
“A” => new xmlrpcval($row[“a”], ‘string’),
“B” => new xmlrpcval($row[“b”],”string”),
return new xmlrpcresp($param);

If it can’t be avoided to add new rows to your array, you need addStruct or addArray.

$param1= array(“A” => new xmlrpcval($row[“a”], ‘string’));
$retval = new xmlrpcval();
$param2 = array(“B” => new xmlrpcval($row[“b”],”int”));
return new xmlrpcresp($retval);

There you go. I hope this helps… Again, it’s always important to read the manual. But for a start, don’t try to digest everything, just pick up the good ones. 🙂 Or better yet, ask for help, just what i did. 😀