Added on 07-Jan/2006: Please note that a new version has been released in the meantime! Please read this blog entry on installing/using it!
New Version of Free, Great Bandwidth Saver, Toonel, is Out – now, With Huge Image Downsampling Savings!
Ever wanted to reduce bandwidth usage to reduce, for example, mobile communication (GPRS, EDGE, UMTS etc.) costs? Yes, you CAN do this, even on a Pocket PC and using free services!
There're two main types of bandwidth reduction services: Web-based and proxy-based ones. Web-based online services like Skweezer or MobileLeap are well-known, referenced and documented. (Please see the article linked from this blog entry on them.) To-run-on-the-PDA, proxy-based services, which are far superior to the previous online service, bandwidth usage- and easiness-of-usage-wise, on the other hand, are very scarcely known in the Pocket PC community. Except for the articles and posts by me, there are almost no mentions of them, let alone any tutorials on setting them up.
The Toonel service is probably the best of the very few services that Pocket PC users can use. The client for the latest version, 0.0.50.45, has recently, some days ago been released with some very nice features; for example, settable JPEG quality:
Click for screenshot
This new feature makes it possible to greatly reduce bandwidth usage with images otherwise uncompressable. Commercial Toonel alternatives (mainly, OnSpeed) have been offering this for long, but, again, they're
- commercial (costing you several tens of dollars a year)
- offer no E-mail traffic compression, unlike Toonel
A Simplified Tutorial on Setting Up Toonel
Please note that this section is as simple as possible. This is why it doesn't discuss, for example, installing the Java Virtual Machine to alternative memory types, the other Toonel versions available or acquiring the IBM J9 JVM in its original form. These questions are all discussed later and/or in other, linked articles.
- get this file and transfer it to the root directory of your Pocket PC
- get and install a Java Virtual Machine (JVM) to the (default) RAM. You have the following choices if you haven't installed any JVM before:
- - CrEme 4.00 beta (30-day trial version): the fastest, most optimal solution
- - Mysaifu 1.0.9 (latest version as of 17/Dec/2005) – not very fast/memory-friendly, but free
- - IBM J9 PE (30 day trial version) – pretty good and very cheap JVM; not as good as CrEme, though
- - if you have any version of the Esmertec Jeode JVM around (it's no longer directly sold), you can use it too
- get this archive file, extract the link file that has the name of your JVM in its name (for example, if you have IBM J9, extract Toonel-J9.lnk) and transfer it to \Windows\Start Menu\Programs on your PDA so that you can easily
- just click the link file so that Toonel starts
- depending on which Pocket PC Web Browser you plan to use through Toonel, you'll need to configure either the Pocket PC operating system (with Pocket Internet Explorer) or the browser itself (with NetFront or Minimo). Note that the fourth Web browser, Thunderhawk, can not use Toonel. Please read the Configure Your Web Browser to Use The Toonel HTTP Proxy section for more information.
- if you, in addition to reducing Web traffic (see previous bullet), also want to reduce mail traffic by compressing the mail communication too, step to section Configure Your E-mailer Application to Use Toonel. In this, you'll also need to configure Toonel (unlike with the plain Web browsing case); for this, please see the Using The Web Interface on your Pocket PC to Configure Toonel section first because it's the easiest to configure Toonel via its Web interface, right on the PDA, without editing any configuration files and/or running the application on the desktop.
And now, for a more elaborate discussion:Three Toonel Versions Currently Available – Which one to Choose?
Note that there're three Toonel versions directly runnable on a Pocket PC: the latest, Swing-based 0.0.50.45, and two different builds of the slightly older, half-year-old version, 0.0.50.30.
Much as it's impossible to make it run in an "official" way, the former (that is, the latest, 0.0.50.45 version - .45 for short) can be run on a Pocket PC making use of all its advanced features, including JPEG compression. In this article, along with a lot of additional stuff, I explain how this can be done because it's the version you will want to use – except for very rare cases.
First, get the latest version from here and also make sure you install a Java Virtual Machine (JVM).
JVM's are meant for running Java programs. Toonel is written in Java; this is why you need a JVM to run it on your PDA.
There're several JVM's for the Pocket PC, all dicussed in this article (alternatives: FirstLoox, PPCMag, BrightHand). Jeode, the IBM J9 (the Personal Edition-compatible one - not the MIDP!) and CrEme will all work. Note that Mysaifu, the only free JVM for the Pocket PC, isn't able to run this version. If you really want to use it, that is – I wouldn't! After all, the cheapest commercial JVM, IBM J9, costs five dollars, and Mysaifu is, unfortunately, much inferior, compatibility, speed and memory usage-wise. If you still have/want to stick to Mysaifu, get the Personal Java version of Toonel from here.
Finally, you can (but you shouldn't) also download the version meant for Pocket PC's. (Again, note that this, as with the Personal Java version, isn't the most optimal solution. Try to stick to version .45, which will work flawlessly with Pocket PC's with all JVM's except for Mysaifu.)
(See all the downloads here if interested).
After choosing it, install the JVM. Most of them can be installed right on a storage card, except for all versions of Jeode: they all require post-install hacks to be relocated to a memory card. Please read this article (alternatives:
iPAQ HQ, AximSite, PPC Magazine, FirstLoox, BrightHand) on relocating Jeode from the main RAM. As they take up a lot of storage memory, you won't want to install them in RAM.
After this, transfer the single, about 100 kbyte long JAR file you've downloaded from the Toonel homepage, toonel.jar (all the three versions are named toonel.jar), to your PDA. It can be located anywhere: both in RAM, in the File Store and on a storage card.
The next step is creating a lnk command file to start up the JVM and pass it the name of the JAR file (and the so-called class file to be invoked). These lnk files should be one of the following, depending on the particular JVM used:
CrEme:
255#"\Windows\creme\bin\CrEme.exe" -Ob -classpath \toonel.jar <start class name>
IBM J9:
255#"\Program Files\J9\PPRO10\bin\j9.exe" "-jcl:ppro10" -cp \toonel.jar <start class name>
Jeode:
255#"\Windows\evm.exe" -Djeode.evm.console.local.keep=true -cp \toonel.jar <start class name>
Mysaifu:
255#"\Program Files\Mysaifu JVM\jre\bin\jvm.exe" -Xmx5M -cp "\toonel.jar" <start class name>
Note that all these example link files
- refer to the standard, RAM-based installation directory. You will want, therefore, to edit the path that immediately comes after 255# and is enclosed between " marks to point to the location on the JVM executable file on the storage card. If you are unsure, just peek into the contents of \Windows\Start Menu\Programs\CrE-ME\CrEme.lnk (CrEme) / \Windows\Start Menu\Programs\Mysaifu JVM.lnk (Mysaifu). Note that Jeode needs to be manually relocated to alternative memory location (see above) and the IBM J9 doesn't have any link files – this is why I don't provide the command files for these JVM's.
- assume toonel.jar is in the root directory of the PDA; hence the leading \. If you put it elsewhere, change \ to the new path and also make sure to enclose the new path inside " marks if the path contains space(s).
- shouldn't be used without further modification – these link files still lack the main class name to run (this is what the <start class name> placeholder shows). This will be either client.WebUI (with all the three versions) or gui.ClientForm/guiswing.ClientForm with the Swing/Pocket PC version, respectively. (Again, note that the latter isn't the ONLY version that you can run on your PDA. I recommend the latest, Swing version, .45, instead.) That is, if you want to, for example, run the Personal Java (PJ for short) version under Mysaifu, with Mysaifu installed into RAM and toonel.jar being in the root directory, the full link file should be 255#"\Program Files\Mysaifu JVM\jre\bin\jvm.exe" -Xmx5M -cp "\toonel.jar" client.WebUI
Configure Your Web Browser to Use The Toonel HTTP Proxy
Now, all you need to do is configuring your browser and/or mailer application and/or Connectivity framework to use the new proxy. To do this, do the following, depending on your Web browser of choice:
Pocket Internet Explorer
If you use Pocket Internet Explorer (PIE) in any post-Pocket PC 2000 operating system, then, you must do the following:
1. go to Start/Settings/Connections/Connections/Advanced/Select Networks. You will see something like this:
Click for screenshot
Note that you may see something else than Bluetooth Settings there. If anything else than 'My ISP' is visible in the upper drop-down list, go on. If 'My ISP' is chosen in the upper drop-down list, then, try moving your active connection(s) off My ISP to another connection group because you can't define proxies in the My ISP group. This will be almost never the case, however – for example, if you add a Bluetooth Dial-Up Networking connection in Bluetooth Manager, it'll be placed in the above-shown Bluetooth Settings group and not in My ISP. Similarly, if you use specialized GPRS set-up applications like Running Voice GSM (RVGSM) 3.2, the case will be exactly the same. Please see this article for more information on connection groups if interested.
2. click the Edit button at the top (in the above screenshot, it's the currently highlighted one) and, on the next screen, tap the Proxy Settings tab (please, again, note that it will be missing from the My ISP connection group):
Click for screenshot
3. check in the "This network uses a proxy server to connect to the Internet" checkbox and, now that it's clickable, click the Advanced button :
Click for screenshot
4. enter 127.0.0.1 in the Server and 8080 in the Port field in the HTTP record:
Click for screenshot
Please note that, as can be seen, it takes quite a lot of screen taps to set up a PIE proxy. You may want to read this article (alternative here) on making this much easier if you want to switch it off/on on a regular basis. If you doesn't want to do so, you don't need to read the linked tutorial.
Also note that if you define a HTTP PIE proxy in the just-discussed way, there're some other things to keep in mind:
- MSN Messenger also gets its SOCKS proxy information from the same place. As Toonel isn't a SOCKS proxy, you won't be able to use MSN Messenger when the operating system is configured to use the proxy. There're several ways of combatting this (none of them is particularly easy):
1. switch off the proxy every time you want to use MSN Messenger
2. create an alternative but non-proxied connection for MSN Messenger. That is, every time you want to fire up Messenger, you will need to use this, non-proxied connection.
3. set up a private (on your, say, desktop computer at work; see for example this tutorial on WinGate, one of the best proxy + firewall + port forwarder applications) or subscribe to a public SOCKS proxy. (Or, if you don't mind constantly switching and testing public, free proxies, check out this page for some free ones.)
- by default, Pocket Inbox / Messaging (from now on: Messaging) won't work either after setting up a proxy in the above way. This can be, however, very easily fixed. Start Messaging, go to Accounts/ Accounts... and click (one of) the account(s) you've defined. Click Next three times until you get to the last ("E-mail Setup (4/4)") page. There, press Options and choose the connection that has a "cryptic" name (and not the pre-defined My Work Network/My ISP/Work/The Internet), assuming your connection is defined in a new connection group. For example, on my Pocket PC where the GPRS connection set up in the Bluetooth Manager is put in the "Bluetooth Settings" connection group, a new entry, "{8831E4CC-C397-4337-B08D-0C66A6347D2F}", will be shown here. Just choose it instead of the default "The Internet":
Click for screenshot
Do the same for all your POP3/IMAP accounts.
NetFront
If you use NetFront, you can safely rely on the setting above: if the "Auto-retrieve" checkbox in Tools/Browser Setting/Network is enabled (as is by default), NetFront will retrieve the proxy information set in Connectivity as outlined in the previous, PIE-related section:
Click for screenshot
If you, however, would like to define a local proxy instead of the above (to avoid it being used anything else or the MSN Messenger problems outlined above), go to Tools/Browser Setting/Network, uncheck "Auto-retrieve" and enter the above-mentioned 127.0.0.1 in the Address and 8080 in the Port fields:
Click for screenshot
Minimo
Finally, if you use Minimo, go to Preferences and click the globe. Then, check in the "Use Proxy" checkbox and enter the above-listed two values in the URL and Port fields:
Click for screenshot
Please note that if you configure Minimo to use a proxy and the latter isn't working, Minimo (as of the current, 0.011 version is concerned) won't present any error message, unlike PIE or NetFront – it just won't load anything.
Configure Your E-mailer Application to Use Toonel
Unfortunately, configuring your E-mailer application is a bit more complicated and, with the built-in Messaging application, restricted. The reason for this is that, unlike the HTTP protocol behind accessing the Web, the POP3/SMTP/IMAP protocols used in accessing mail don't allow for using proxies by default. Therefore, unlike with HTTP, you must 'wire in' the target address of each POP3/SMTP/IMAP server into the Toonel configuration file so that you will be able to access it through Toonel.
With Messaging, because you can only give it the Internet address (but not the port number) of a specific mailbox, you can only access one mailbox (and one SMTP server) through Toonel. All the other mailbox access needs to be done without compression.
If you only have one mailbox / outgoing mail (SMTP) server that you really use (even if you have other servers with much less usage), this restriction won't be a problem. Then, the vast majority of your (or the entire) communication will still be compressed, resulting in huge bandwidth usage savings.
Let's assume I want to set up compressed access to my mailbox located at winmobiletech.com. The POP3 server:port is mail.winmobiletech.com:110 and the SMTP server is at the same address, with port number 25. In Messaging, you would enter this information as follows:
Click for screenshot
Now that we have a proxy server for both the incoming (POP3) and outgoing (SMTP) mail, we need to enter the above information to Toonel instead of Messaging. If you want to do this on the desktop (because, then, you won't need to manually edit toonel.ini, the configuration file), start Toonel, go to the Mapping tab, highligh POP3 Server, enter the POP3 server address in the hostname field and press Apply.
The same stands for the SMTP (outgoing) mail: do the same, now with highlighting SMTP Server first:
Click for screenshot
This will insert the following two rows in toonel.ini:
25;mail.winmobiletech.com;25
110;mail.winmobiletech.com;110
Again, I need to emphasize you don't need to use the GUI to set up this mapping. You can directly edit toonel.ini too – or, alternatively, you can use the Web configuration page on your PDA. (More on this later.)
After this, you will need to configure Messaging in that it "thinks" the SMTP and the POP3 servers are both on the local PDA – that is, in the two fields you define the POP3/SMTP server, just enter 127.0.0.1 (that is, the address of the local machine):
Click for screenshot
With WebIS Mail, the major alternative PPC client, you can access any number of mailboxes through Toonel, all compressed, because you can also set the port number of the given mailbox from inside Web IS Mail:
Click for screenshot
This is definitely much better than with Messaging.
Making Use of Image Downsampling on the Pocket PC
Note that this is only possible with the latest, .45 version.
By default, image downsampling is disabled. If you want to enable it, edit toonel.ini and insert the following row:
PictureQuality=x
where x is an integer number between 0 and 100, depending on the quality. (Note that no matter what setting I used in my tests, the Toonel service returned the same downsampled image. That is, these settings may not change much. In addition, it is unable to downsample large images – I've tested it with >1M images. These will be returned to the client verbatim, without any changes.)
After this, JPEG images will be downsampled, saving you a lot of bandwidth usage.
Alternatively, you can just configure Toonel on your desktop computer, assuming it has a JVM – that is, a JVM meant for desktop computers. If you don't have one, go to, say, this Web page and download the JRE (or the JVM) for your desktop operating system. After having installed it, just enter the command
java -jar toonel.jar
in the same directory where the downloaded version .45 toonel.jar file resides. Then, just go to the Mapping tab, highlight 127.0.0.1 in the 'available configurations' list and set the needed JPEG downsampling quality in the JPEG Quality drop-down list:
Click for screenshot
Also, it's here that you will want to configure your SMTP/POP3/IMAP settings too.
After having finished your settings, just transfer the newly created (modified) toonel.ini file to the root directory of your PDA and you're set. After restarting version .45 of Toonel there, it'll already see the new JPEG compression setting.
Using The Web Interface on your Pocket PC to Configure Toonel
If you want to avoid manual toonel.ini hacking/copying/setting up a JVM on the desktop PC to create the file, after starting Toonel, enter http://127.0.0.1:7999/ in any Pocket PC browsers (except for Thunderhawk) and click the "port mapping" link. Then, as with the Swing GUI-based configuration screen, just fill in the fields (after choosing the right element in the list at the top). An example of configuring the HTTP proxy:
Click for screenshot
Incidentally, it's here, right after going to http://127.0.0.1:7999/, that you can also see a detailed rundown of your data traffic. It's very handy if you, for example, want to see whether your browser/mailer clients really use Toonel to reduce bandwidth usage. It both shows the total traffic and the traffic since the last refresh of the page. Note that you shouldn't try to render this in One Column mode so that the chart is well-formatted.
Click for screenshot
The Comparison Chart
Finally, a compatibility/benchmark/Swing hackability comparison chart of the different (three) Toonel versions and the JVM versions: the two Jeode versions I have access to, the latest CrEme, IBM J9 and Mysaifu.
Note that CrEme has absolutely the best speed and moderate memory consumption. Jeode (both versions) and IBM J9 have passable speed. Mysaifu is the slowest and most memory-hungry JVM and is, in addition, unable to run version .45/the WM version of .30 of Toonel.
For the speed test, I used this 600 kbyte test page I also use in my other tests. Feel free to repeat my tests if you are really interested in which JVM is the fastest. Note that in my article on developing & compiling ON the Pocket PC, I've also compared the speed of CrEme to that of Jeode. At compiling, CrEme proved to be much more faster than Jeode.
All the four JVM's are common in that it's impossible to run the Swing GUI of version .45 under them with any kind of hacking. I've tried to include the 1.3/1.4 javax.swing and javax.accessibilty classes in the Java CLASSPATH on the PDA. As can be seen, Toonel makes use of JDK 1.3+ methods in standard (that is, rt.jar) classes like java.awt.EventQueue; this is why it's impossible to run the Swing version with just putting the additional packages in the classpath.
Nevertheless, the lack of any GUI isn't a problem in my opinion. If you do all your configuration by just directly editing toonel.ini or, if you prefer not to edit any configuration files, make all configuration changes on your desktop in the above-shown way and only copy the modified toonel.ini back to the Pocket PC, or just use the local Web-based configuration, the lack of the GUI can even be outright advantageous: by not using any GUI on the PDA,
- you win about 300-400 kbytes of dynamic RAM
- the GUI won't be spawn as another Pocket PC process; that is, you converse a lot of system resources (see this blog entry on the importance of this.)
Note that the Jeode 1.9.3 bechmarks have been done on a 400 MHz WM2003 iPAQ 5550 because 1.9.3 is locked to the iPAQ 5550. It's a slightly slower PDA than the Pocket Loox 720 used in other tests; however, the test does show that Jeode 1.9.3 is still slower than CrEme.
Also note that with the Swing .45 and the Windows Mobile .30 versions, which both have their own GUI (not only the Web-based one), I've made tests of both running the native GUI version and the simple, textual, client.WebUI-based one. As can be seen, no Pocket PC JVM can run the Swing .45 native GUI but, except for Mysaifu, all can run the 'simple' client.WebUI-based one. As far as version .30 meant for Pocket PC's is concerned, all JVM's (except Mysaifu) can render its native GUI. Mysaifu has severe problems even with the non-GUI-based version of this; therefore, you won't want to use this Toonel version either if you want to stick to Mysaifu. Finally, the Personal Java .30 (textual-only) version is compatible with all PPC JVM's.
| Toonel version/ test case | Swing .45 | Windows Mobile .30 | Personal Java .30 | Dynamic RAM usage (in Mbytes) | Time to load test page (minutes: seconds) | Swing/Accessibility add on test (for Java gurus only!) |
| GUI? | Swing-based only + Web | AWT-based; runs on PPC + Web | No native GUI + Web | N/A | N/A | N/A |
| Main class to invoke | guiswing.ClientForm / client.WebUI | gui.ClientForm / client.WebUI | client.WebUI | N/A | N/A | N/A |
| Jeode 1.7.3 | - (CNFE: javax.swing.JFrame)/+ | +/+ | + | 2.37 | 0:60 | 1.4: unsupported classfile version; 1.3: NSME: java.awt.EventQueue.invokeLater(Runnable) |
| Jeode 1.9.3 | - (CNFE: javax.swing.JFrame)/+ | +/+ | + | 1.63 (measured on the iPAQ!) | 0:75 (measured on the iPAQ!) | 1.4: ClassFormatError; 1.3: NSME: java.awt.EventQueue.invokeLater(Runnable) |
| J9 PE | - (CNFE: javax.swing.JFrame) /+ | +/+ | + | 3.56 | 0:60 | 1.4: NoClassDefFoundError: java.awt.Frame$AccessibleAWTFrame; 1.3: same |
| CrEme 4.00b8 | - (CNFE: javax.swing.JFrame) /+ | +/+ | + | 3.16 | 0:26 (faster than direct access, which is 0:36) | 1.4: NPE at java.awt.Toolkit.getEventQueue(); 1.3: same |
| Mysaifu 1.0.8 | - (NPE at guiswing.ClientForm)/ - (CNFE: client.WebUI) | - (CNFE: gui.ClientForm) /- (CNFE: client.WebUI) | +; OutOfMemoryError with default settings; -Xmx must be supplied! | 6.20; with -Xmx5M: 8.28 | 1:50 | 1.4: NPE at guiswing.b; 1.3: same |
Recommended links
In addition to the links above (especially the ones pointing to my other articles), I really recommend my previous article on bandwidth saving techniques. It's not Toonel-centric; still, it explains a lot.
My older article on configuring Toonel, on the other hand, is no longer recommended – it's really outdated.Additional stuff - after closing the manuscript...
EDIT on Dec-16-2005 12:04PM GMT: In the meantime, the version 1.0.9 of Mysaifu has been released. It, unlike version 1.0.8, is able to run version 0.45. New benchmark data:
Dynamic memory consumption of Mysaifu: 10.7 Mbytes
Page loading speed (full refresh), with NetFront:
0:29 without any proxy (as opposed to the 0:45 of PIE)
Mysaifu 1.0.9: 0:52...0:55
CrEme: 0:33...0:35
J9: 0:34
Jeode: 0:34...0:41
That is,the speed advantage of CrEme certainly apparent with PIE is non-existing with NetFront – this means the very cheap IBM J9 is a really decent JVM Mysaifu is still the slowest JVM by a factor of two; also, it consumes a lot of dynamic memory. Still, at least it is able to run the latest version of Toonel – this is certainly an advantage over the previous version
EDIT on 17-Dec-2005
An important remark for CrEme users: you can safely remove quite a few files from CrEme if you only want to use it for running Toonel. That is you can reduce the static storage consumption of CrEme to 2.2 Mbytes. Then, only the following files should remain in there:Directory of bin 03/06/2005 07:42 PM 34,304 CrEme.exe 03/06/2005 07:41 PM 797,184 jscp.dll 03/06/2005 07:42 PM 50,688 jscpconf.dll 3 File(s) 882,176 bytes Directory of lib 03/06/2005 06:15 PM 1,304,014 VMclasses.zip