Warning: include_once(/home/sankarshan/sankarshan.randomink.org/blog/wp-content/plugins/wp-super-cache/wp-cache-phase1.php): Failed to open stream: No such file or directory in /home/sankarshan/sankarshan.randomink.org/blog/wp-content/advanced-cache.php on line 10

Warning: include_once(): Failed opening '/home/sankarshan/sankarshan.randomink.org/blog/wp-content/plugins/wp-super-cache/wp-cache-phase1.php' for inclusion (include_path='.:') in /home/sankarshan/sankarshan.randomink.org/blog/wp-content/advanced-cache.php on line 10

Deprecated: Return type of WP_Theme::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-theme.php on line 554

Deprecated: Return type of WP_Theme::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-theme.php on line 595

Deprecated: Return type of WP_Theme::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-theme.php on line 535

Deprecated: Return type of WP_Theme::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-theme.php on line 544

Deprecated: Return type of WP_REST_Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/rest-api/class-wp-rest-request.php on line 952

Deprecated: Return type of WP_REST_Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/rest-api/class-wp-rest-request.php on line 972

Deprecated: Return type of WP_REST_Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/rest-api/class-wp-rest-request.php on line 984

Deprecated: Return type of WP_REST_Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/rest-api/class-wp-rest-request.php on line 995

Deprecated: Return type of WP_Block_List::current() should either be compatible with Iterator::current(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 151

Deprecated: Return type of WP_Block_List::next() should either be compatible with Iterator::next(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 175

Deprecated: Return type of WP_Block_List::key() should either be compatible with Iterator::key(): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 164

Deprecated: Return type of WP_Block_List::valid() should either be compatible with Iterator::valid(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 186

Deprecated: Return type of WP_Block_List::rewind() should either be compatible with Iterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 138

Deprecated: Return type of WP_Block_List::offsetExists($index) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 75

Deprecated: Return type of WP_Block_List::offsetGet($index) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 89

Deprecated: Return type of WP_Block_List::offsetSet($index, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 110

Deprecated: Return type of WP_Block_List::offsetUnset($index) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 127

Deprecated: Return type of WP_Block_List::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/class-wp-block-list.php on line 199

Deprecated: Return type of Requests_Cookie_Jar::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Cookie/Jar.php on line 63

Deprecated: Return type of Requests_Cookie_Jar::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Cookie/Jar.php on line 73

Deprecated: Return type of Requests_Cookie_Jar::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Cookie/Jar.php on line 89

Deprecated: Return type of Requests_Cookie_Jar::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Cookie/Jar.php on line 102

Deprecated: Return type of Requests_Cookie_Jar::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Cookie/Jar.php on line 111

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 40

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 51

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 68

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 82

Deprecated: Return type of Requests_Utility_CaseInsensitiveDictionary::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/Requests/Utility/CaseInsensitiveDictionary.php on line 91

Deprecated: register_widget_control is deprecated since version 2.8.0! Use wp_register_widget_control() instead. in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/functions.php on line 4861

Deprecated: register_sidebar_widget is deprecated since version 2.8.0! Use wp_register_sidebar_widget() instead. in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/functions.php on line 4861

Deprecated: ltrim(): Passing null to parameter #1 ($string) of type string is deprecated in /home/sankarshan/sankarshan.randomink.org/blog/wp-includes/wp-db.php on line 3031
Random thoughts and serendipity | A collection of jottings on various issues that excite no one else | Page 4

Context,subtext and inter-text

There are two points with which I’d like to begin:

  • One, in their Credits to Contributors section, Mozilla (for both Firefox and Thunderbird) state that “We would like to thank our contributors, whose efforts make this software what it is. These people have helped by writing code and documentation, and by testing. They have created and maintained this product, its associated development kits, our build tools and our web sites.” (Open Firefox, go to Help -> About Mozilla Firefox -> Credits, and click on the Contributors hyperlink)
  • Two, whether with design or, with inadvertent serendipity, projects using Transifex tend to end up defining their portals as “translate.<insert_project_name>.domain_name”. Translation, as an aesthetic requirement is squarely in the forefront. And, in addition to the enmeshed meaning with localization, the mere usage of the word translation provides an elevated meaning to the action and, the end result.

A quick use of the Dictionary applet in GNOME provides the following definition of the word ‘translation’:

The act of rendering into another language;  interpretation; as, the translation of idioms is  difficult. [1913 Webster]

With each passing day innovative software is released under the umbrella of various Free and Open Source Software (FOSS) projects. For software that is to be consumed as a desktop application, the ability to be localized into various languages makes the difference in wide adoption and usage. Localization (or, translation) projects form important and integral sub-projects of various upstream software development projects.

In somewhat trivial off-the-cuff remarks which make translation appear easier than it actually is, it is often said that translation is the act of rendering into a target language the content available in the source language. However, localization and translation are not merely replacing the appropriate word or phrases from one language (mostly English) to another language. It requires an understanding of the context, the form, the function and most importantly the idiom of the target language ie. the local language. And yet, in addition to this, there is the fine requirement of the localized interface being usable, while being able to appropriate communicate the message to users of the software – technical and non-technical alike.

There are multiple areas that were briefly touched in the above paragraph. The most important of them being the interplay of contextsubtext and inter-text. Translation, by all accounts, provides a referential equivalence. This is because languages and, word forms evolve separately. And, in spite of adoption and assimilation of words from languages, the core framework of a language remains remarkably unique. Add to this mix the extent with which various themes (technology, knowledge, education, social studies, religion) organically evolve and, there is a distinct chance that idioms and meta-data of words,phrases which are so commonplace in a source language, may not be relevant or, present at all in the target language.

This brings about two different problems. The first, whether to stay true to the source language or, whether to adapt the form to the target language. And, the second, as to how far would losses in translations be acceptable. The second is somewhat unique – translations, by their very nature have the capacity to add/augment to the content, to take away/subtract from the content thereby creating a ‘loss’ or, they can adjust and hence provide an arbitrary measure of compensation. The amount of improvement or, comprehension a piece of translated term can bring forward is completely dependent on the strength of the local language and, the grasp over the idiomatic usage of the same that the translator brings to the task at hand. More importantly, it becomes a paramount necessity that the translator be very well versed in the idioms of the source language in additional to being colloquially fluent in the target language.

The first problem is somewhat more delicate – it differs when doing translations for content as opposed to when translating strings of the UI. Additionally, it can differ when doing translations for a desktop environment like, for example, Sugar. The known user model of such a desktop provides a reference, a context that can be used easily when thinking through the context of words/strings that need to be translated. A trivial example is the need to stress on terms that are more prevalent or, commonly used. A pit-fall is of course it might make the desktop “colloquial”. And yet, that would perhaps be what makes it more user-friendly. This paradox of whether to be source-centric or, target-friendly is amplified when it comes to terms which are yet to evolve their local equivalents in common usage. For example, terms like “Emulator” or, “Tooltip” or, “Iconify”being some of the trivial and quick examples.

I can pick up the recent example of “Unmove” from PDFMod to illustrate a need to appreciate the evolution of English as a language and, to point to the need for the developers to listen to the translators and localization communities. The currently available tools and, processes do not allow a proper elaboration of the context of the word. In English, within the context of an action word “move” it is fairly easy to take a guess at what “Unmove” would mean. In languages where the usage of the action word “move” in the context of an operation on a computer desktop (here’s a quirk – the desktop is a metaphor that is being adopted to be used within the context of a computation device) is evolving, Unmove itself would not lend itself well to translation. Such “absent contexts” are the ones which create a “loss in translation”.

The singularity here is that the source language strings can evolve beautifully if feedback is obtained from the translated language in terms of what does improve the software. The trick is perhaps how best to document the context of the words and phrases to enable a much richer and useful translated UI. And, work on tooling that can include and incorporate such feedback. For example, there are enormous enhancements that can be trivially (and sometimes non-trivially) made to translation memory or, machine translation software so as to enable a much sharper equivalence.

(The above is a somewhat blog representation of what I planned to talk about at GNOME.Asia had my travel agent not made a major mess of the visa papers.)

FAmSCo elections and so forth

This is the season of elections and, the one that I’d like to talk about is the FAmSCo one. This time around all the 7 seats are up for elections and, an ensemble cast of Fedora folks have put their hats into the ring.

The FAmSCo, along with the other *SCo in Fedora land offer the finest opportunity to demonstrate leadership, show commitment and, work in one of the front-line roles of the project. I took sometime in reading up the statements of the candidates and, one of things that struck me (besides those mentioned here) was the recurring theme of making the FAmSCo process more “open” and “transparent”. Among the important duties which are owned by FAmSCo, encouraging communication is a noteworthy one. I hope that the candidates, once part of FAmSCo, will take time to bring about a change in the way communication is handled. I am sure that there are ways it could be made better and relevant.

The other aspect is the need to have goals or plans that are measurable. I hope that this comes up in the town-hall, and, the candidates think over how they would like to measure their impact on FAmSCo in specific and The Fedora Project in general terms based on their plans. From a personal perspective, I have been incredibly pleased to see FAmSCo initiate plans and processes that would lead to the most awesome bunch of Fedora Ambassadors – be it a structured mentoring program or, through a follow-up on learning from events. I’d like to see that continue with more vigor. Working with folks to facilitate bringing out the best in them has its own reward.

This time around there are a lot of friends in the fray and, that makes me very happy. It is always good to see folks stepping up and desiring to do what they are really good at. So, mark the calendar and, remember to vote.

Glitches in collecting book data based on ISBNs

Over the weekend I snagged a somewhat cheap and, easily available hand-held barcode scanner – an iBall LS-162. Fairly nifty device and, works plug-n-play on Fedora.

The reason behind this was to finally collect and collate information about all the books that is stashed around me and, create a nice list based on the ISBN data. Which is here I ran into a glitch I did not anticipate. A number of the technical books which I buy (yes, in spite of the Safari, ACM and IEEE subscriptions, sometimes I do buy books) are Indian reprints and, using the ISBN to look-up the metadata isn’t working out as planned.

Does anyone have a pointer to what I should be looking the data up against ? Additionally, does anyone know of a small tool which can take in a list of ISBN numbers and, pull down the metadata for the books to output to a CSV ? I tried traditional tools like Alexandria, it did not work out. If you want a sample list of the ISBNs, leave a comment on this entry and, I’ll point you to a download link or send it over email.

The post is brought to you by lekhonee v0.8

Looking forward to some improvements

I have been using Transifex based systems for a couple of days/weeks now. And, in line with what I did mention on my micro-blog, Transifex and Lotte make things really easy. The coolest devel crew makes that happen. And, since they lurk online and engage with their users, every little tweak or, improvement that is suggested and considered makes the consumers feel part of the good work they are doing. Good karma and awesome excitement all around.

At some point in time during the week, I’d put them in the tickets as feature enhancements. However, for the time being, here’s a couple:

  • Lotte should allow me to click on a file that is not yet translated for my language and, add it to the collection. If I recall correctly, the current way to add it is to download the .pot, convert to the appropriate .po and, upload it with comments etc
  • Lotte needs to allow “Copy from Source”. This should accelerate translation by removing the extra step of having to actually select, copy and paste. This comes in handy when translating strings within tags or, brands/trademarks and so forth
  • Handling and using translation memory could be built into Lotte. For a particular file in a specific language within a project, it could perhaps provide suggestions of translated words. In the future, allowing teams to add their glossaries would make it a more powerful tool too. Having said that, I’ve always wondered what happens when team glossaries are created from files across various projects – is there a license compatibility soup problem that could crop up ?
  • A Transifex installation could provide notifications of new files or, updated files for the language. This could be limited to the files for which the last translator is the person receiving the notices or, ideally, could be for the language itself.
  • Statistics – providing each language a visual representation of commits over time or, per contributor commits would also be a nice addition

So much for Transifex, in fact, I need to write out all of that in a nicer way so as to allow the possibility of these turning into GSoC projects within Transifex.

Coming to Virtaal. With lokalize being unbearably useless for me (it adds garbled text or whitespaces into files when using the stock F11 supplied one) and, before it is commented, no I haven’t filed a bug yet, getting the files done was a bit more important at that specific point. So, mea culpa. But I do check with every yum update and, it is still the same. The specific issue with Virtaal is that each time one gets a new string loaded for translation, the text input area loses the input method details. Which means that it is a constant game of switch back and forth between the inputs. Sadly enough, this is the only software that currently works for me (I don’t want to set up a local pootle/transifex instance and, do web based translation)

GPS data logging and, a nifty data logger

Primarily due to Kushal’s enthusiasm, I got myself a GDL-3204 GPS Data Logger from Sparc Systems Limited. In spite of the somewhat “home brew” looks it is a nifty little device with great accuracy. Kushal has been having fun with it during his recent visit to Malda and, we (Runa and me) have been learning how to get tracks and waypoints done using the simple manual that comes with it.

At some point in time I should start getting familiar with the JOSM application and, upload the logged data using the script here.
For now, it is great fun.

Kushal holding up the device

The post is brought to you by lekhonee v0.7

A bunch of stuff

  • Recently, I had the chance to use Lotte to translate and, it simply blows me away. The Transifex crew deserve some well earned applause for including elements that make it incredibly helpful for those involved in the work of translations. There is a slight annoyance which has now been turned into a ticket.
  • Read off Planet Sugar that “several weeks ago”, activities.sugarlabs.org has exceeded 1 million downloads of activities. That’s just too awesome not to talk more about. As is mentioned in this tweet, imagine an activity developer who sees a steady increase in download and consumption going up to 20000 downloads. That’s just so amazingly sweet.
  • The thread here looks to be an interesting one with regards to securing professional translations and, getting an open source project translated via community building. Should be good to see how it pans out.
  • From the time I micro-blogged this, the thread has gone ahead and had more discussions. And, reading it early in the morning, it does appear to be a good thing to have. Those who are coming on to a Desktop Spin from other OS should have an easier way to adapt to and adopt the desktop. Good stuff.
  • In other news, here’s a picture from our diwali celebrations this year

Diyas from this year

Two of my favorite songs

আমি কান পেতে রই         ও আমার আপন হৃদয়গহন-দ্বারে বারে বারে
কোন গোপনবাসীর কান্নাহাসির গোপন কথা শুনিবারে — বারে বারে ।।
ভ্রমর সেথা হয় বিবাগি নিভৃত নীল পদ্ম লাগি রে,
কোন রাতের পাখি গায় একাকী সঙ্গীবিহীন অন্ধকারে বারে বারে ।।
কে সে মোর কেই বা জানে, কিছু তার দেখি আভা ।
কিছু পাই অনুমানে, কিছু তার বুঝি না বা ।
মাঝে মাঝে তার বারতা আমার ভাষায় পায় কি কথা রে,
ও সে আমায় জানি পাঠায় বাণী গানের তানে লুকিয়ে তারে বারে বারে ।।

and…

কী পাই নি তারি হিসাব মিলাতে মন মোর নহে রাজি ।
আজ হৃদয়ের ছায়াতে আলোতে বাঁশরি উঠেছে বাজি ।।
ভালোবেসেছিনু এই ধরণীরে সেই স্মৃতি মনে আসে ফিরে ফিরে,
কত বসন্তে দখিনসমীরে ভরেছে আমারি সাজি ।।
নয়নের জল গভীরে গহনে আছে হৃদয়ের স্তরে,
বেদনার রসে গোপনে গোপনে সাধনা সফল করে ।
মাঝে মাঝে বটে ছিঁড়েছিল তার, তাই নিয়ে কেবা করে হাহাকার —
সুর তবু লেগেছিল বারে-বার মনে পড়ে তাই আজি ।।

I realized that I had nearly worn down the LP during my childhood listening to the above two songs along with this song. In fact, my favoritism to Debabrata “George” Biswas’s songs came immediately after this phase. These days, every trip to Kolkata is a hunt for the CD versions of my favorite LPs. Sadly, not all of them are available. Which is a shame really. Not that the current crop of singers aren’t good. Just that one tends to hang on to those singers one grew up with.

Education and, educators

Around 4 days back, I had an interesting conversation over micro-blogs with a friend. When he was at Pune, we spent a small part of the evening talking about education, educators and, the process of educating as observed here and elsewhere. It did boil down to a (somewhat idle) lament that “the system isn’t performing according to expectations”. I thought over this over the weekend and, while I am not an educator, I am a “person interested in education”, and, it makes sense to attempt to try and see what the expectations are.

Any functional education system has to provide the participants with the tools and constructs that allow them to have independent streams of thought. While it teaches the formal discipline and rigor needed to pursue new topics, its scope should ideally encourage original thought. More importantly, it should encourage creativity, be intolerant of casual approach and, be ruthless in demanding excellence.

The problem is that reality isn’t always like that. There are a significantly high number of education institutes, some of them of past repute, who are sliding down the slippery slope of mediocrity. This fall is aided by the fact that the “education system” doesn’t lend itself well towards measuring the quantum of knowledge passed on to the students by the educators. And, it is compounded by the sad truth that the prolific growth of institutes have encouraged a somewhat exponential fall in the quality of the staff. The final nail in the coffin is the datum that the system of measuring “education” is around the results of an examination. The fact that the examination pattern does not encourage “thinking” is somewhat of a greater problem.

It is true that the better educators have not involved themselves within the system as much as hoped for. It is also true that the students have been lax in bringing themselves up to speed. The refusal to be aware of whom to benchmark themselves leads to a sort of navel gazing that is self-destructive at best and, a society-exploder at worst. With the current trend of public-funded schools not getting the number of teaching posts at the expense of wider inflow of private education (both at primary and, higher education levels), it does mean that the situation is possibly going to take a larger turn for the worse – a significantly higher section of the school-ready population is going to be unable to get decently functional education.

I don’t have any solution. That rankles. I do observe with rising alarm the somewhat inevitable slide. That needs to change.

The post is brought to you by lekhonee v0.7

A collection of jottings on various issues that excite no one else