Tuesday, September 23, 2008

SFW & WTF ...

Note: The following post is organized into five sections: Boring, Bad, Interesting, Personal, TechNotes. Pick the kind of news that you dig into most!

Boring Stuff:

Although the official date of my appointment as the Campus Ambassador in VIT for Sun Microsystems is August 1st, I officially was handed the reins from September 1st, and real work started off on September 8th, the day I returned from the Sun Induction & Training programme, Noida. The task at hand, the first order of business, was the "Software Freedom Day" that each CA had to organize in their respective colleges and universities and spread awareness about Open Source and impart knowledge etc.

Organizing large scale events at short notice is a rather dangerous thing to do, especially when you have an elephantine "bureaucrazy" ready to thwart every move of yours.

Bad Stuff:

We had a pretty bad false start in our Software Freedom Week where the administration decided to, without fore-warning, re-allocate the venue of our "Inauguration & Intro to Open Source" event to some Embedded Systems class, and we had thus move event to another timing. This was indeed frustrating and embarassing, but we explained the deal to the assembled audience and informed them of the revised schedule.

Interesting Stuff:

We had a great installfest today, and the revised Open Source introductory session. The folks turned up and were real innocent about Linux & Open Source, and we had a nice time explaining to them the difference between Open Source and Freeware, and so on. I probably did get a little emotional about Open Source at one point when a guy asked me, "Why do we need Linux when we have Windows which fulfils all our requirements". Imagine that. Any person reading this who doesn't see this question as absurd, is pretty seriously naive!

We also showed people "Big Buck Bunny", a short animated movie made using Blender, and was a great hit among people. The movie is absolutely hillarious!

Personal Blabberings:

Anyhow, this was Day 2 of the "Software Freedom Week" here at VIT University, and battling new catastrophic problems everyday and nearly ruining events and then miraculously managing to pull off a great show is something that is now something really really very familiar and all-in-a-day's-job occurance for me and my friends. Can't say I really enjoy this kind nerve-wrecking event management anymore -- am quite a veteran now, after 2 years at it; but I have better and newer plans for getting Open Source a greater reach among students out here, instead of just organizing Plain-Jane events like today's. This is the Participation Age, not the age for delivering sessions and telling people how and what to do. More about this unconventional idea in my next blog post!

Tech Notes:

On the other hand, my messing-arounds with my iPod hacks (here) has been getting more productive. I recently got some nice programs of mine running on Rockbox, and have decided I like iPodLinux once again! :-) Nothing wrong with Rockbox as such, but I feel that with iPodLinux having the comfortable "Linux structure", it makes more sense porting the nicer features of Rockbox to Podzilla and maybe in the process bring some things back to Rockbox as well. The other major interesting iPod-related thing is the in-depth reading-up I've been doing about the "Apple Accessory Protocol" (AAP), the set of commands iPods use to communicate and allow the world to control the iPod remotely through the Data Connection Port. This makes the critical part of my iPodMouse project pretty easy! :-)

Cheers!
Shashank

Friday, August 29, 2008

Upgrade to a dial-up!


Well, here it is finally. Internet in my hostel room. And man, is it fast? I rejoiced when my download speed finally managed to reach 10 KBps at 2 in the morning, and average far worse during regular "earthly" hours. Yet, adaptation is the key to survival. After having paid a substantial amount for this wireless datacard (Reliance NetConnect), I am finally on the internet which is a highly liberating experience, regardless of the speed of connection. Hard to describe in words! :-)

I've been messing around a lot with Rockbox, another OS-type thing for an iPod, and was thrilled to see real video files being played on my ancient iPod Mini 2G (4 GB)'s tiny, monochrome screen. Who said that video was the domain of expensive iPod videos only?! Take an iPod nano or something with a color screen, install Rockbox and BANG! you have excellent videos being played, and with capabilities of extending the codec base. I've been trying to get hold of the various components required for compiling for ARM6-processors, which is rather hard to do without a proper source of unrestricted fast internet. Rockbox allows you to write your own "viewers", which are programs that can process specific types of files, like associating .mpeg files with the mpeg-Viewer, .txt files with the text_editor viewer etc. You can also write plugins to provide new applications. Once my development environment for ARM6 (and Rockbox specifically) gets set I can work on some of the interesting stuff I think can be put in. I would rather like some simple HTML viewers, and a Java virtual machine on it. KVM (released by Sun microsystems) does something of that sort, but hasn't been running all that well for me. Infact it has run at all.

Then I also got this idea of controlling my iPod through my PC, maybe write a simple mouse controller program in Rockbox, which can take inputs from the data-cable connecting it to the PC, and therefore permit me to move my real physical mouse of the PC to control the cursor on the iPod screen. This could later be expanded upon to eliminate the PC by writing mouse-drivers in Rockbox and then using a USB mouse and connecting it directly to the iPod via the iPod data-cable. That would make life tonnes easier for using advanced applications in iPodLinux/Rockbox.

Anyhow, more later. I am too busy sitting idle, waiting for "Google.com" to open. (*rolls* eyes).

Shashank

Saturday, August 16, 2008

I had hair...


Don't mistake me. I still have hair, albeit, 8 inches shorter. Farewell my dear long locks. At my prime, I had hair till my shoulder-blades. Now they barely are an inch long. Two and a half years without paying a visit to a barber; feels like I've lost an arm or something. But anyway, why am I boring you with my story of locks lost behind?

I've been studying. No really, I finally have been studying new stuff. Not academic stuff related to what's taught at University (who cares?!) but new interesting stuff. More specifically, I've been enjoying myself by playing around with Mandelbrot sets, Julia sets etc. With the result that I've started manufacturing a sequence of rather spectacular wallpapers by applying various color filters and mapping different parts of the above mentioned sets.

The other things include a compulsary mini-project as a part of our 5th semester curriculum, and we're working on simulation of artificial personality in software bots. You can poke, hit, pat, feed bones etc to an artificial dog and view its responses according to the selected personality, and it will vary over time depending on the past interactions. I'll post on some demos once we have a decent build ready. This time, as it is compulsary and there is a strict deadline, I will finally actually complete something rather than touching it and leaving it to bide time once the interesting parts are done.

Oh, and I finally got iPodLinux installed on my ancient iPod Mini 2G, and it is really great and Awful. Great because it is Linux running on an iPod, and all the cool demos and stuff that can be done with it. Awful because the input method is limited to a dumb touch-wheel, so to input text, I have to circle through a list of alphabets each time. Use it, and you'll know how painful that extra-sensitive touch-wheel is. Another reason it is awful is because it is difficult to program for it as I have to use ARM6-gcc for it. And there is no Java on it. And arm6-gcc is hard to install correctly on my openSUSE machine back at the hostel because I have no internet which effectively makes installing any package with millions and zillions of cross-linking dependencies a nightmare.

Finally, I'm planning to take an internet connection at my hostel room, which will make life "normal" for me again. I have been selected as the Campus Ambassador for Sun Microsystems, which means that I represent Sun in our University, and had to go through a rigorous process of interviews etc. Anyhow, I am supposed to promote Open Source and Sun stuff in our campus, which should be fun I guess. And I get a stipend for it too! :-)

Shashank
PS: The image at the start of the post is from a specific region of a Julia set.

Sunday, June 08, 2008

Back to the 'Drawing Canvas'


I've been checking out the new canvas tag that's scheduled to be a part of HTML 5, the next specification of the web markup language. And I'm pretty impressed. The Mozilla guys have been doing some neat work with the Canvas and have a nice documentation ready for Canvas 2D: here. If you're reading this in Opera, Safari or Firefox, you've already got Canvas supported and running in your browser! Internet Explorer, of course, doesn't have it. But the folks at Google have written a neat thing called Ex Canvas, which allows you to just include an extra javascript file and have your code running in Internet Explorer too! I think the Canvas tag has some potential of being really accepted and supported by all the browsers, which means that its good for developers like us who crave for atleast ONE technology supported properly across all the browsers, apart from the standard (or rather, now not-so-standard) 'b'; tags etc. :-) So I think developers can actually put their money on the Canvas tag and not worry too much about support and implementation across browsers. Face it: three out of the four 'major' browsers have Canvas already running. And there is a Google hack that lets you run it in the fourth (now) so-called 'major' browser.

The other (really) interesting thing I've been checking out is the next-step: Canvas 3D! The guys at Mozilla have been working out the basics of a simple 3D library and have so far adopted a wait-and-watch strategy i.e. have implemented a basic library (which is scheduled to be shipped with the Firefox 3 release) that exposes the API of the OpenGL ES specification and makes use of hardware acceleration where possible and are watching what kind of uses the developers put it to, in order to determine the next features to add. Now this is really interesting news, as OpenGL ES is something I've been looking into for the past few days, and find it a tad better for me than the standard OpenGL implementation, as it is lighter and more streamlined. OpenGL ES by the way is OpenGL for Embedded Systems, which means that all the extra bloated code and old deprecated methods and fat around the OpenGL standard has been stripped off, leaving a light API for systems with limited resources. The guys at Opera have been working on a different approach however. They too have implemented a Canvas-3D implementation, but they don't make use of OpenGL bindings, instead provide a higher-level of abstraction allowing platform neutrality, i.e. permit non-OpenGL programmers to be able to use it too. While this is a nice idea, trouble will arise if the two major browsers decide to implement their own versions of Canvas 3D. And where does Microsoft fit in? I think they'll be willing to Open Source all their Windows code before they will ever think about implementing OpenGL (arch rival to their proprietary Direct3D) in their browser. So they might either make D3D bindings, or adopt a 'high-level/neutral' approach similar to Opera. Which essentially means that Canvas3D, as such, is still volatile and is a high-risk platform to develop for. But it is the most promising of the upcoming technologies as it incorporates hardware acceleration which will make life tonnes easier.

For instance, I wrote a simple z-buffering system in Javascript for a non-canvas based experiment, and it simply is TOO slow as the DIV hacks, as I mentioned in a previous post, are just not feasible for even a thousand triangles. Z-buffering, however, can be made to run really well in the Canvas2D platform. The Useless Pickles 3D demo crawled to a halt (0.4 fps) when I fed it with objects with slightly over 200 triangles, which is peanuts. And that 3D library/demo is the best attempt I've found so far on the internet. Agreed that when I looked under its hood, it didn't make use of anything other than simple backface culling for optimization, but even if approaches like BSP Tree with front-to-back rendering or Octrees for optimizing Frustum Culling etc are applied, there is only so much that you can do. The potential for the sort of things that can be done with Canvas & Canvas3D is far greater and I think its better to push with new technology than be really clever with the old one and remain at the stage of just proof-of-concepts.

PS: The picture at the start of the article is the Apple Mac OS X Webkit's icon. The entire concept of Canvas started with them.

Edit: I have been trying out the Google Ex-Canvas that enables code written for the Canvas tag to run in Internet Explorer too, and all I can say is: It is SLOW! Just to warm up the testing, I made it draw 60,000 (i.e. canvas size = 300 x 200) single black pixels at each position in order to fill the canvas block entirely with black (yes I know it can be done with a single fillRect command, but I'm testing things here remember?), and Firefox 3 (rc2) did it within 400 milliseconds, while Internet Explorer 6 took almost 7-8 seconds, not to mention hung while doing it. Can't expect much out an emulation, can you?

Wednesday, June 04, 2008

World Domination... and beyond!


This one is for all the Doom gamers, old or new. The Official Union Aerospace Corporation (UAC) website made by iD software's web designing team:

http://www.doomrpg.com/n.x/UAC/Home

Enjoy!
Shashank

Weekly round-up


Here's a round-up of the things that I've been working with a great deal over the past one week:
  • Google Sketchup
  • BSP Trees & 3D Rendering
  • Javascript
  • SDL & Projective Geometry
I might have something pretty interesting coming up within a few days, so if anybody who's into this stuff reads this, come back in a few days for an interesting Proof-of-Concept demonstration on this blog. It might be really dumb, but it does look pretty good to me.

Also, I was looking up into hacks of Nintendo Wiimote (thanks to my friend Roshan Shariff who got me interested into this - he's doing some pretty interesting Wiimote hacks too), and I think I'll get a Wiimote sometime soon when I save up enough for it. Till then, I'm looking into the sensors and libraries for interfacing it, and being a gamer myself AND a programmer, I can think of really nice things to use it for. :-)

Also, me and Roshan got into discussing how iD software's new game "Rage" implements the Megatexturing feature for rendering and texturing such HUGE landscapes etc, and found it to be an application of "Clipmaps", that are (as far as I understand, I'm still figuring it out), a way to use the Mipmaps concept (see below) and clip a cubical region from the Mipmap pyramid to get a series of landscape textures of decreasing quality (i.e greater zoom out).

So in effect, the "MEGA" Texture, often reaching into dimensions of 128000 x 128000 (which is really big), is used to construct the clipmap stack:
[Texture 1]
[Texture 2]
[Texture 3]
.
.
[Texture 'n']

In this, 'Texture 1' will be a say, 512 x 512 texture of the segment of texture (from the original 128000x128000 texture) that is right in front of the viewer. This one has no zoom effect, and is of therefore the best (original) quality. Then next texture, Texture 2 will also be 512 x 512 in size, but will be a "compressed/zoomed out" version of 1024 x 1024 segment of what is front of the viewer from the original texture, so this would be a 2x zoom out. Then Texture 3 would be another zoom out and so on.. and by Texture 6 (I think), the entire 128000x128000 texture will be compressed and represented by a 512 x 512 texture. Now, the renderer will just interpolate between the textures at the various levels the stack to render portions of the texture and show the required Level of Detail only. This also enables parts of textures to be streamed from an external disk when required, instead of loading the ENTIRE texture into the memory (which is dumb, not to mention almost impossible if your texture is 128k x 128k). I posted this here in order to make sure I understand properly myself, so there might be loopholes.

Useful resources:
Shashank
PS:
The picture at the start of the article is a screenshot of iD software's RAGE game, demonstrated at QuakeCon 2007 by John Carmack.

Saturday, May 31, 2008

Of Al-Google and the Silicon Valley rantings


I have two thoughts, and am too lazy to write two separate posts so I clubbed them into one.

Al-Google:
Google is funny, really. I was just taking a trip down ego-boosting lane, and did a Google search for myself, and found that searching for "Shashank Shekhar" (which sadly appears to be quite a common name nowadays) returned a reference to Me first on #15, and my current blog at #17 and my old blog at #20. Then, I did a search for just "Shashank", and Hey Presto! I jumped to #7! I thought adding descriptive keywords narrowed searches!
(PS: Yeah yeah, before you SEO geeks start giving me the reasons, the reason is that the #7 position is occupied by my old blog which is called just "Shashank's Blog", with no mention of Shekhar, so..)

My second topic is entitled: "Silicon Valley of India: A Miracle"

Well, I was reading a nice article about the coming together of the original Silicon valley, a paper actually, (here) and I agree with his explantion that the Silicon Valley came together because of a rare co-occurrence of a lot of events that catalysed such an event. The Venture Capitalists were there, the Infrastructure was there, the Research places and great Universities were there, all mostly in the same San Francisco Bay Area
in Northern California. The setting was just right for something amazing to suddenly come up. The university people came up with great ideas, the area had sufficiently high academic cultured people living around to encourage such innovation and if someone felt that some money could be made out of those ideas, the venture capitalists were there to be sold to the ideas. The spirit of risk-taking was enhanced by some early successes and the smell of money being generated. And people had garages which could be used as offices, and small rooms could be rented for the same purpose too. And employees had places to stay nearby and basic infrastructure like roads and transport pre-existing due to the existence of older residential areas in the neighbourhood. Yes, this is an over-simplification, but these points will come into play in my next paragraph.

Now how Bangalore came to become the Silicon Valley of India is indeed a puzzling thought. Lets see, Bangalore did have residential areas pre-existing, but I think that really was IT (no pun intended). No great Venture Capitalists prowling around, miserably tiny roads and basic small-town transport facilities, and most of all, no Stanford-like great Universities in the neighbourhood to fuel ideas. Therefore how the great start-ups of Bangalore came up, attracted investors, got clients, performed their day-to-day activities with the miserably lacking infrastructure is something that is nothing short of a Miracle. Even today, companies have their own internal power generators as depending on Bangalore City's own rickety power supply would effectively lose them deals worth millions of dollars everyday, they need to find ways to work around the terrible chaos existing in the cramped roads of a city that just grew too fast. Oh and when it rains (which it does for 3 hours every evening), the city halts to a standstill as it is impossible to drive with the pot-holes, broken roads and impossible to work with the power-cuts. I'm still wondering how this Miracle came about. The only possible explanation I see is that
a) The people who started the first start-ups were incredibly clever at attracting investors,
b) The Indians are willing to slave for really long hours with considerably lesser pay (which is true). Hence India is the hot-destination for a cheap-workforce, hence a great deal of investment in off-shore development.

PS: The building in the picture is the Infosys Headquarters.
PPS: If you're interested in reading some interesting stuff related to Silicon Valley, check out some interesting SV blogs I follow as often as I can spare time: