Here's an update to my Javascript Thaana Keyboard library which provides easy entry of Thaana on web pages without the involvement of OS-based keyboard switching. Hit the demo page to see it in action.
This release is solely a bugfix release addressing an issue with the display of newly entered text in multiline fields where text exceeds the size of the visible area. I originally cut this release in February but decided to hold back on a public release till I had further issues to fix or had new features added, neither of which has come since...
Thanks goes to Ahmed Ali for bringing the bug to my attention.
Changelog
+ Fixed issue with the display of newly entered text in multiline fields where text exceeds the size of the visible area.
It's been a while since I posted an update of the Dhiraagu e-Directory data. So here is one from today...
Statistics
The Dhiraagu e-Directory now lists 421,407 entries, with a number distribution across the various prefixes as follows:
I must note that a comparison of this data set with the last one I had posted indicates an increase of a mere 209 numbers during the two months that separate the two data sets and hence is very likely a sign that something is amiss with this new listing. It may very well have something to do with the fact that Dhiraagu had recently made some changes, most visibly in the addition of a CAPTCHA verification stage, to the e-Directory service. It may also have something to do with the fact that I had to use a slightly different method to grab the e-Directory data because of the changes to the service.
Unlike my old method of grabbing the data, the new method does not limit itself to the 3, 6, 7 prefixes only and so it was a small surprise when the new data set listed two entries under the prefix "9". These two numbers almost certainly belong to ex-customers of Wataniya who had switched providers and chosen to retain their old numbers as facilitated by Mobile Number Portability (MNP). MNP allows customers of Dhiraagu, which hand out mobile numbers with the prefix "7", and the customers of Wataniya, which hand out mobile numbers with the prefix "9", to switch between the two mobile telephony providers without having to give up their number.
Download
Here's the data as the usual Tab-Separated Values (a.k.a CSV) format file that can be opened in Excel, OpenOffice or imported into Access or any other database.
I had occasion last night to revisit the Blogger to Serendipity importer script I wrote a few years ago, while helping someone move from Blogger to something that packs a bit more punch.
Serendipity has been carrying the script I wrote bundled as part of the importers available in its core package, thanks to Garvin Hicking (lead developer at the Serendipity project) who had done the dirty work of integrating my code into the project. Anyway, last night when I got about to importing the blog on Blogger into a fresh install of Serendipity, I found myself annoyed by the tediousness of the process required by the very importer I'd authored. Blogger didn't have any export feature back then nor did it provide API access. As a result, the (popular) method for exporting a blog from Blogger had involved setting a special template as the blog's layout and tweaking around a few other settings, after which the blog is published and the output parsed to extract what is needed.
Things have, of course, changed dramatically and for the good in the years since, as Google has continued to open up its services for developers via public APIs. Encouraged by the simplicity of the API, I ended up spending a little bit of time to rewrite the importer almost from scratch. The highly desirable "export blog" feature in the Blogger Data API allows obtaining an XML based dump of the entire blog, which can then be moulded however to fit ones needs.
- Extract the contents of the Zip file.
- Upload (or copy) the file "blogger.inc.php" to the folder "include/admin/importers" under the main Serendipity installation path. Make sure the old file is replaced with the new.
Usage
The new importer script can transfer posts (both published and drafts), comments (including comment moderation settings) and authors, without breaking sweat. The process for importing a blog is simple:
1. Login to Blogger/Google and login to Serendipity Administration Suite.
2. Navigate to "Import data" using the menu and select Blogger.com as the type of import.
3. Click the "Go to Google" link to jump to a special authorization request page that allows the importer to access the blogs. [Image 1]
4. Click the "Grant access" button and wait to be taken back to Serendipity. [Image 2]
5. Select the blog to import from the list. [Image 3]
6. Optionally, select the category for the imported posts, set desired trackback behavior, select a charset. [Image 3]
7. Click "Import now!". (see Image 3]
8. Posts (and its comments) are processed and import results displayed.
Image 1
Image 2
Image 3
Enjoy!
Update (17-Feb-2009): This has been adopted into the Serendipity code base and would be available bundled-in with future releases from the project.
The Dhiraagu e-Directory service as of today lists 421,198 entries (made up of 370,880 mobile numbers, 35,403 landline numbers and 14,915 island/resort numbers). Compare that with the 338,371 entries (made up of 305,198 mobile numbers, 24,423 landline numbers and 8,750 island/resort numbers) from October 2008. That works out to what seems a very impressive growth (mobiles 22%, landline 40%, island/resort: 70%) in the past 3 month period, especially given there is an economic crisis underway!
Anyway, here's the data as a Tab-Separated Values (a.k.a CSV) format file that can be opened in Excel, OpenOffice or imported into Access or any other database.
Here's a minor update to my Javascript Thaana Keyboard library. This release, version 4.2, amounts to a single bugfix addressing an error in key translation for some keys when operating under the "Phonetic-HH" keyboard mode. Everything else remains as per the earlier v4 series releases.
Thanks goes to Nattu for bringing the bug to my attention.
Changelog:
+ Fixed handling of keys when in Phonetic-HH keyboard mode
I released Javascript Thaana Keyboard v4.0 only 10 days ago but I've since been made aware of a few bugs in the script that had gone unnoticed during testing back then. I decided to cut another release to fix those bugs which, although minor, could potentially be annoying to end-users. This new release also crams in a few tweaks to improve performance.
Changelog:
+ Fixed handling of Delete key and other special keys
+ Added correct handling for Thaana brackets "()"
+ Improved performance
Here is an update to my Javascript Thaana Keyboard (JTK). This 4.0 release packs in a bunch of new features, making JTK much more powerful and more flexible than any of the earlier releases.
Keyboard support:
Most notable on this new release is the introduction of support for the various different types of Thaana keyboard in use. JTK now supports the following keyboard layouts:
Phonetic (Segha version): This keyboard is perhaps the most popular Thaana keyboard layout. JTK identifies this keyboard as "phonetic".
Phonetic (Hassan Hameed version): This keyboard is similar to above but notably differs in its mapping of alifu, abafili, aabaafili, gaafu and the sukun. JTK identifies this keyboard as 'phonetic-hh'.
Typewriter: This is the standardized Thaana layout used on typewriters. JTK identifies this keyboard as 'typewriter'.
Browser support:
JTK 4.0 adds support for IE5.5, which has a very significant market share still. Hence JTK should now work perfectly well on Microsoft Internet Explorer 5.5+, Mozilla Firefox 1+, Opera 9+, Apple Safari 2+ and Google Chrome 0.1+.
Basic usage:
The basic usage allows for fast and easy integration of JTK on your Thaana web pages.
1. Link the file in the HEAD section of the page:
2. For any element accepting input (i.e. INPUTs, TEXTAREAs, content-editable DIVs), assign them the special class name "thaanaKeyboardInput". JTK will automatically handle text entry to any element with that class name. You can assign further classes to the elements without ill-effect, if needed.
3. There are two ways to set the keyboard used for an element. defaultKeyboard method: This method allows setting a default keyboard to be used on all elements handled by JTK. To do this, add the following to the HEAD section of your web page but make sure it is added after the code inserted from step 1 above.
thaanaKeyboardState method: This method allows per element control on the type of keyboard used by an element handled by JTK. To do this, add a form element (can be a radio, checkbox, select, hidden or text field) with its name set to the text entry element id suffixed with the string "_thaanaKeyboardState". The value of these fields should specify either 'off', 'phonetic', 'phonetic-hh' or 'typewriter', indicating the status and the keyboard in use.
So, if you had a text entry field with the id "fullname" then the keyboard could be specified using a hidden field as follows:
4. Make sure that the text direction for the Thaana fields is set to "rtl". This can be easily achieved using CSS, by adding a class definition for the "thaanaKeyboardInput" class or by any other method of your choice. Adding the following to your CSS definition should suffice for most uses:
If the above instructions are followed correctly, the JTK Thaana functionality would be in effect soon as the page has loaded!
Advanced Usage: The JTK object, methods and properties
To facilitate advanced integration functionality for developers looking to have (finer) control over its behavior, JTK now makes itself available as a public object named "thaanaKeyboard".
The following properties and methods exposed by the "thaanaKeyboard" object:
defaultKeyboard: [property] The Thaana keyboard layout type to default to when JTK enabled elements do not have a keyboard specified.
Valid values are: 'off' to keep Thaana disabled, 'phonetic' to use the standard phonetic layout, 'phonetic-hh' to use the phonetic layout by Dr. Hassan Hameed and 'typewriter' to use the typewriter layout.
setHandlerById ( id, action ): [method] Sets the state of the JTK handler for a page element.
The id argument should be a string containing the id of any content-editable element. The action argument should specify either "enable" or "disable" depending on whether input handling for Thaana should be enabled or disabled, respectively.
setHandlerByClass ( class, action ): [method] Sets the state of the JTK handler for a set of page elements.
The class argument should be a string containing the class name of any content-editable element (i.e input, textarea etc). The action argument should specify either "enable" or "disable" depending on whether input handling for Thaana should be enabled or disabled, respectively.
License:
JTK 4.0 is released under the MIT License, allowing its use in both personal and commercial applications as long as the copyright and license permission notice remains intact.