LearnG™ – The Learning Genius?

LearnG™ 2 is finally out! And I’m loving it.

LearnG™ is a plug-in for Microsoft Office PowerPoint (2003, 2007  and 2010) that can help one create learning nuggets with ease.

I now use it to record all my training sessions. Currently, it can record the presentation, audio and video and create a synchronized output. It has a simple but extensive template engine that can be used to create output in any desired structure. Well, the output is in a format that can be pushed onto web.

And the best part… it can create AICC and SCORM compliant nuggets.

I use it as a multimedia content authoring tool — no pre-production setup, no post-production editing. All that I need to do is incline my laptop screen appropriately so that it’s focussed at correct location (of course, I can change it during recording), turn on the mic and start my presentation. It records the entire slide-show as I do with the audio+video synchronized.

The default template that comes with it has support for:

  • Branding (I can have my own logo on the page)
  • Video (default – AVI file with Windows Media player for windows, VLC Media Player for Linux)
  • Presentation Slidese
  • Table of Contents (automatically inferred from the slides — of course, can customize)

On the recording options side, I have a variety of options available:

  • Select video-input device, specially if there are multiple connected
  • Select audio-input device, specially if multiple available
  • Select the audio codec with compression options
  • Select the video codec with compression options — can create DivX videos also (say, using Xvid or DivX codec)
  • Configure all device properties (brightness, contrast, blah blah blah)
  • Configure capture properties (frame rate, video size etc)
  • Well, I can do an audio mix also — from mic + audio-being-played-on-machine

I’ll try to upload a sample video output from the application. It’s simply amazing! And guess what… it’s not as pricey as TechSmith Camtasia (which costs around US$ 300)!

Contact me if you want to purchase a perpetual license. Screen-shots on the way… :)

Blogs up and running again

After months of hard-work and some mail exchanges with my hosting provider, I finally got my blogs up and running again.

The problem that I deciphered from the error logs, that took a while to be enabled, was that upon migration to the new server, the UID / GID was not set appropriately and hence the Apache web server was unable to access the files and ended up in throwing a 500 error.

Anyway… better late than never.

Long time no see… a primer

“Long Time No See”

Phrase. Can be used as a full sentence.

n: State of absence, non-presence, non-visibility.

Hindi: चौदवी का चाँद

Example: I wrote my last entry in September last year. It’s been around 5 months since. The world has changed. My world changed. I changed, but my blog did not.

Nuclear Supplier Group – NSG Waiver, China, India and the World

On Saturday night, I watched the interview with Dr A P J Abdul Kalam and if he feels happy about the deal, I know we have really made a breakthrough.

I would have never believed any politician about the goodness or the adversity of the NSG waiver – be it from Congress, BJP or any other party.

But when the Nuclear-Man of India feels satisfied, it definitely would have made sense.

In the interview, I noted something intersting – the Thorium reserves that we have at the southern-tip of the nation; and also the Uranium reserves that a few of the states have. And I think the only thing that we really need is technology. And of course if we can get high-quality Uranium supply from other countries, we can keep our reseves and use them only in emergency – something what USA has kind-of done with their petroleum reserves.

China, undoubtedly tried to play spoil sport. And I am – probably for the first time – proud of India’s External Affairs Minister – Pranab Mukherjee by sending strong words to China. However, as I see the his interview at CNN-IBN with Rajdeep Sardesai, I feel a little sorry. Anyway, at the highest levels, diplomats need to be diplomatic. “Whatever has to be told, has been told”, says Pranab. :)

And I am really amused – though not surprised – when China demands NSG waiver for Pakistan for “geopolicital balance”. Ha ha ha ha! What a joke! I really pity such remarks… it’s like reading Dilbert or R K Laxman’s “Common Man”. God Bless!

Dojo & GWT – Templated Widgets

We had – and still probably have – a tough time porting Template-Based Widgets in Dojo for Google Web Toolkit.

The reason is – Templates defined attach-points and attach-events, variable names / function names that are to be made use of at runtime. However, GWT optimizes the Java function names and as such one does not know what will be the function name at runtime.

And hence the conflict and an area of problem.

The DWT team has posted a writeup at their blog that outlines the problem and proposed solution.

If you find the problem interesting or have an opinion, please do write in.

Trip to Shirdi – Traveling to Manmad

This time I am not alone. Infact, I will soon be joining the entire family. Renu and I left Bangalore yesterday night for Manmad. And so did Papaji and Mammi from Lucknow. What more, Vaibhav will join us from Mumbai!!

So, a full family gathering at Manmad – a half for us en route Shirdi.

Yesterday, when I looked at the final reservation charts, I was a little confused as to what is PQWL and that too two people were alloted the same seat. Then it turned out that the other person will board at Manmad.

That was 7pm yesterday evening.

And then the compartment where our seats were confirmed, the remainder of it was alloted to a family from Tamil Nadu but now settled in Bangalore.

So, we shifted for “seat exchange”.

That was a live compartment because of family and kids. And this is a real dumb one with people confined to themselves.

Anyway, that’s how the life also is – a journey with lots of twists.

Because of cold and no-pillow head-rest during sleep last night, Renu’s back – neck specifically – is in pain. She just can’t turn her head around right now.

Waiting for Manmad to get down and get some medicines for her.

So, we should reach by 3pm. My parents should arrive by 2pm while Vaibhav by 12-1pm! Hurray!

My life is a Journey – Journey of my life

A journey ends and another begins. That’s the journey of my life for the past 3 years or so. Today, I’m on my way to Ernakulam. Yes, it’s the train once again. Open windows allowing me to have a closer look at the countryside.

The lush green farms. The dense forest-like trees. The hazy clouds. The cool and cold breeze. The wet soil. The सौंधी odour. It’s back to be in self again.

I seem to have found the lost touch.

Tomorrow it will be trainings once again. It will be consulting, product development, biz plan – all the nasty stuff again. But right now, I stop writing.

Let me enjoy the real life!

Trip to my hometown – 2: The Action Begins

Good Morning!

We are in train en-route to hometown. Just crossed Secunderabad – where “The train does not halt presently” – but still stopped because of change of engine. And we hope something similar at Jhansi. Let’s see how and what happens.

The next halt is in Nagpur at 5:20pm. And it seems to be in total control of time – at least as of now.

What a journey! Across the countryside. With all windows open – Hey! We’re in the Sleeper Class and not A.C. Gotcha! :)

Trip to my hometown – 1: Let the action begin

The day is over with the training? No really! The action begins now.

There is already a curfew in Shivajinagar because of Hindu-Muslim riots. Don’t really know when these people with learn. As if they don’t have any other work.

There we – Ashish and myself – need to leave for Lucknow tonight. Couldn’t get a ticket in Ktka Express. Got in Sampark Kranti. Have to get down at Jhansi. And the best part is – the train does not stop at Jhansi!

So, there is a lot of action already waiting for me.

4-Sutras to work with JavaScript

(Sutra: noun, that which runs through and holds things together)

JavaScript is a fantastic language to work with. I will, personally, prefer to work with runtime dynamic language like JavaScript than compile-time feature constrained languages like C++ or Java (well, C# is still far richer than C++ and Java).

However, working with JavaScript is not – quote-unquote – trivial noting that majority of the developers start with C/C++ or languages evolved from them.

I’m not here to talk about JavaScript, but 4-Sutras that I’ve developed that one should keep in mind while working with JavaScript.

These sutras are:

  1. All data-types are infinitely flexible.
  2. All objects are infinitely extensible.
  3. Objects are associative arrays.
  4. It’s all about functions.

Let me explain them in some detail…

In JavaScript, we can provide more functionality to any data-types, including the predefined ones through the prototype object. Infact, there exists a JavaScript library with this very name. For example, we need to add a function insertAt to the Array object. Here’s how we can accomplish the task.

Array.prototype.insertAt = function(item, index)
  if(index >= 0 && index < this.length)
    this.splice(index, 0, item);

And then, I can do:

var a = new Array();
a.insertAt('two', 0);

alert('Item at index 0 = ' + a[0]);

So, what I meant in “flexible data-types” is that we can add (infact, remove and change as well, at will) the functionality to any data-type (native JavaScript object) irrespective of whether the code for the type is available or not. Isn’t it great?

Coming to the next point – properties / methods associated with any object (instance) is totally configurable. Assume that we have a reference obj to which we want to associate two properties – exx and vayee – and one method checkPoint, we can add that!

Note that this is different from the flexibility of the data-type. Here, only obj will have these properties, any other object obj2 will not have these properties and methods.

var obj = new Object();
bj.exx = "Value x";
bj.vayee = "Value y";

obj.checkPoint = function()
  if(this.exx && this.vayee)
    return true;
  return false;

What do you gain out of this? Well, this extensibility allows you to grow your objects – at runtime, on demand. And that’s one of the features that I love in JavaScript.

Everybody loves OOAD because it helps us relate programming to our real life – objects with attributes and functionalities. However, it fails to address one key issue – objects in real life grow. They grow as themselves not requiring a child. However, this is absent in almost all languages barring JavaScript and Smalltalk.

btw, do you remember Smalltalk? The world’s first object oriented language. But somewhere, C and C++ grew more popular and we really lost the fun and power of Smalltalk. Sad. :(

So, I am assuming that you’ve understood what I mean when I say that all objects are infinitely extensible.

Let me proceed to the next item. It may or may not be classified as a sutra, because it’s a very basic feature of JavaScript. However, we tend to forget about it while working with JavaScript. So, I thought about making it a sutra so that it’s not forgotten.

Objects internally are implemented as associative arrays, or whatever alternate name you want to use. The effect is that you can use any object in two ways, as given below:

var obj = new Object();
//Assigning as a property
obj.x = "Ex";

//Assigning as an associative array
obj['x'] = "Ex";

//Similarly, assining a function
obj.fn = function()
  alert('Hello, World!');

//And calling it

The two ways to work with properties, as given above, are identical. So, don’t worry if you do not know the name of the method or property at design time. Just store it in a variable and access it using the format given above!

Voila! So easy! And damn powerful! Isn’t it?

And finally, never forget about functions. JavaScript is all about functions – to start with and till the end!

The attributes associated with JavaScript functions are:

  1. Functions are the ways to create data-types: Encapsulation
  2. Functions can be nested, any level deep: Some kind of private functions?
  3. Functions can be used as simple functions as well as constructors
  4. Instance functions (associated with any object) can be called with any context, so that the value of this can be changed on the fly! Voila!
  5. And there’s a lot more magic that you can do with functions in JavaScript.