Tuesday, November 27, 2012

Quick take on Lumia 510

I take all the opportunity to covince people to get a Nokia device, it seems. My experience with the Lumia 800 has been great, even when I won't be getting the new Windows Phone 8 update. So this time it was my uncle, who had an old Nokia C-200, and was looking for a device with somewhat big screen and supper for office docs as well as navigation (as he travels a lot). So I convinced to get him a Lumia 510. Mostly because it fit his budget and had a bigger screen than the Lumia 610, even when the on device free memory is about 2.2 GB and is not expandable.
Lumia 510 along with my Lumia 800. The display feels really big on 510, but the clear black curved glass makes 800 look gorgeous in comparison. The photo was taken using a Lumia 710.
 
 After installing couple of apps and all India offline maps for Nokia drive, the space left was about 1.7gb. Next my uncle needed to transfer some of the music he had on his older phone to the new one. Being space constrained, I converted the mp3 files into mp4 format and synced via Zune, which saved quite a lot of space. After all these the free space on the device is 1.12gb, sufficient space for many docs and photos. Also the extended 7gb of storage on cloud is quite useful, especially for backing up the photos.

My uncle doesn't play games, so none were installed. Althogh I can guess that because of hardware limitations, many highend games may not be compatible. Also some of the apps like Skype are not compatible for low memory Lumia phones yet.

Overall, my uncle and I liked the device. The UI is pretty responsive. Some third party apps takes noticeable time to launch, but once loaded they are pretty responsive. I would recommend this device to first time smartphone buyers, who are looking for a valuable and stable experience from a smartphone.


 Sidenote: This post was entirely written on my Lumia 800, only using the IE9 browser.

Saturday, October 20, 2012

UI research question: Do old users become conveniently blinded by radical new usability improvements ?

A few days ago I posted this question over my Twitter stream, syndicated to my Facebook account. I got a few responses:



Recently, we had made an internal release at my current company of a new version of our flagship product. The version introduced some prominent user interface related improvements, along with other core improvements. The usual way we introduce a new version is by sending an e-mail to all internal users, highlighting important, and enlisting other changes introduced. The e-mail ends with a link to the internal Wiki, that has more detailed information as well as further links to the setup / update builds. Being a small group, we also arrange a subsequent demo / one-to-one meeting with each internal user to explain the new features and take 'instant' feedbacks.

Time and again, I have observed a few things:
  • People almost always do not read the e-mails properly. At-most this is what they do:
    • The e-mail has come from me
    • The subject line says 'updating ... ' or 'new ...'  (don't even care to read the version number, and sometimes even don't care whether 'update' or 'new' is mentioned)
    • Skip the mail straight to the Wiki link
    • And click straight on to the Update  / Setup link
    • Continue using the product as usual, oblivious of the fact that there are tons of improvements we added (and which I meticulously mentioned about in the e-mail!) to make your life easier
    • Shout at me if something goes missing (OK, I made that up ;-))
  • In the subsequent demo / one-to-one meeting
    • 'Oh that's a cool feature..', 'That's very useful..', 'You removed this feature??!!', 'Oh this way is better!', 'You suck, how can you change the way I work?'
    • And, at the back of my mind, I am always thinking : I listed all this in the e-mail I sent you before. Sure, a demo is more engaging, but I thought people always read my e-mails, as obediently as I read theirs!
Now, all this is probably not new to people working in product development for long time, but to me this is quite a learning experience. At the same time, I had this question at the back of my mind, 'Do old users become conveniently blinded by radical new usability improvements?' To that, I got an affirmative answer as a result of response to some of the recent UI related changes we brought into our product. Although the changes were quite prominent (at-least that is what we all in the dev-team thought), these were completely ignored by almost everyone, until we told each of them about the new changes. Another, curious observation was of one the respondents I know closely and is a colleague at my current company. He recently switched to using Windows 8 Pro from Windows XP. Though he liked the new interface, he took pains to make the installation look like his old XP interface, rarely ever uses the 'new apps' and is almost always glued to the desktop. He even didn't think of giving time to adjust to the new interface, just ignored it.. and that too from a person who uses a Windows phone!



All these observations are either solitary or statistically in-significant to make any far-reaching conclusions. But they are definitely pointers to me to curate the way I work in product development. I would definitely love to hear from more experienced people of their thoughts on the same.

Obligatory NoteAlthough the current post directly relates to my day job, this post and its contents is in no way endorsed by my current employer and is solely my personal view point.

Thursday, October 18, 2012

bit of fun with C++ virtual functions

#include ...
class A {
public:
   A() {  f(); }
   virtual void f() { printf("A func!\n"); }
};

class B : public A {
public:
   B() : A() { }
   virtual void f() { printf("B func!\n"); }
};

int main() {
   A a;
   B b;

   return 0;
}

I had written a code similar to the above template. I had naively thought that the above code will print 'B func!' when the instance of B is created. However this is not the case. I guess the issue here is that if you tend to call a member function that is virtual from a base class constructor, the base class implementation will be called as the v-table initialization has not yet been done (this is at-least the case with g++ compiler, not sure how other compilers work). This is further clear when you try and make the function f() in base class A pure virtual, the compiler complains with an error.

Have fun!
 

Tuesday, September 18, 2012

Calling external Python function from a C/C++ routine

An aricle by Jum Du at CodeProject (see: http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I) gives a very detailed overview of how to call a Python function from C/C++ routines in an embedded interpreter using CPython interface. While this quite useful, however, one needs to keep the .py file at the same place where the C/C++ executable resides.

I needed a solution where the .py file could reside anywhere on the local file system. Turns out that the modification is quite simple, you just need to make sure that sys.path is appended with the correct path at runtime where the .py file can be found. The follwing is the pseudo(C++)-code of how I do this:

PyObject* runFunction(std::string scriptFilePath, std::string funcName, PyObject *arglist)
{
    // this code is based on http://www.codeproject.com/Articles/11805/Embedding-Python-in-C-C-Part-I
    try {
        PyObject *pName, *pModule, *pDict, *pFunc, *pValue = Py_None;
        std::string thePath = // .. your code to extract the path, for '/home/ganeshv/pyfiles/my.py' : path is '/home/ganeshv/pyfiles/'
        std::string theModule =  // .. your code to extract the module, for '/home/ganeshv/pyfiles/my.py' : module is 'my'
        // printf("importing [%s] from [%s]\n", theModule.c_str(), thePath.c_str());
        // first extract the file name and file path
        std::string code = "sys.path.append(\"" + thePath + "\")\n";
        // add the path
        PyRun_SimpleString(code.c_str());
        // Build the name object
        pName = PyString_FromString(theModule.c_str());
        if (pName == Py_None) return Py_None;
        // Load the module object
        pModule = PyImport_Import(pName);
        if (pModule == Py_None) {
            Py_DECREF(pName);
            return Py_None;
        }
        // pDict is a borrowed reference
        pDict = PyModule_GetDict(pModule);
        if (pDict == Py_None) {
            Py_DECREF(pModule);
            Py_DECREF(pName);
            return Py_None;
        }
        // pFunc is also a borrowed reference
        pFunc = PyDict_GetItemString(pDict, funcName.c_str());
        if (PyCallable_Check(pFunc)) {
            pValue = PyObject_CallObject(pFunc, arglist);
        } else {
            PyErr_Print();
        } // end if
        // Clean up
        Py_DECREF(pModule);
        Py_DECREF(pName);
        return pValue;
    } catch(...) {
        return Py_None;
    }
}

Saturday, September 15, 2012

The Growth of Online Computer Science Programs

Today’s contributor, Olivia Leonardi is a writer and researcher for a website that helps students decide between computer programming schools and programs. However, this post focuses on alternative avenues of learning web skills as they are increasingly viable and, many would argue, a better way to acquire these skills. Besides, some of the most influential figures in computer science like Alan Turing, a man discussed by this blog, did not have access to traditional programs and turned out alright.

The Growth of Online Computer Science Programs

As technology has become more prevalent in our society, numerous online education opportunities have been made available for aspiring computer scientists. While these programs offer a number of improvements over the traditional college experience, for instance the ability to be creative in a noncompetitive environment, many educational experts argue that there are drawbacks to this format as well. For this reason, each student is encouraged to consider many factors before deciding between web-based curricula or brick-and-mortar studies.

Students today can choose from a myriad of online computer science programs from traditional and elite American universities. Many online bachelor’s and master’s programs mimic the traditional curricular structure of college degree paths and allow students access to university resources. According to Education-Portal, the finest online CompSci programs are offered by the University of Illinois at Champaign-Urbana, UCLA and Florida State University.
However, many feel the confines of the ivory tower and inadequate in teaching students skills that require, above all else, creativity and thinking outside of the box.
If a student wishes to forgo the degree path entirely, they can still learn a particular skill related to computer science as many prominent colleges and universities offer free online tutorials and a growing number of open source universities have been springing up. Schools such as Stanford University, Massachusetts Institute of Technology and Carnegie-Mellon University offer complimentary courses that introduce code languages, complex operating systems, software applications and other CompSci-related fields. Non-university-related programs have also been explosively popular and give students access to communities of aspiring programmers to bounce ideas off of. For instance, Codecademy (which was launched one year ago) allows students to sign up for free classes and learn about various technological concepts at their own pace while boasting an online community of more than 100,000 students.

According to CBT Planet, online computer science programs offer several benefits to students. Most of these programs are structured to be flexible, and can provide the ideal educational platform for people with other commitments (such as full-time jobs or families). Cost is another factor; while online degree programs are not free, they tend to be much less expensive than traditional college tuition. Finally, the wide range of available programs allows each prospective student to find a program that best matches his or her experience and skill set. For this reason, e-learning can be an effective for novices hoping to learn the basics or experienced individuals who wish to learn a supplemental skill or competency.

However, writes Jacquie Berry of Education Training Info, web-based programs also have notable drawbacks. Independently structured courses, while convenient, can also work against students who do not exercise a high degree of self-discipline. Another disadvantage of learning from home is the lack of opportunities for face to face interaction with classmates, professors and other individuals one encounters on a college campus. This can lead to frustration and anxiety among students if they are unable to grasp certain concepts, and then have no one to consult face-to-face. Some programs have attempted to mitigate this deficit by developing courses with an interactive element; some include video tutorials from professors, forums that enable students to communicate with one another and various forms of multimedia. Still, studies show, many students prefer real-life interaction with teachers and students.

In order to get the most out of computer science education, each student must determine which educational factors are most important. Some thrive within the online setting (and greatly appreciate the flexible schedule these programs afford), while others prefer to learn within a more structured, face-to-face environment. Everyone has a different college experience – but careful consideration of where and how one wishes to earn a degree is the surest way to achieve career goals in the long-term.

---
Editor's Note:
The views expressed as solely of Olivia, who kindly agreed to share them in this blog. I would like mention that many on-line courses such as Coursera (https://www.coursera.org/) are also helpful for students who have been less fortunate of finding quality institute and teachers. ACM has recently published a white paper on the topic and is available at http://www.acm.org/education/WhitePaperOnlineFinal.pdf

Sunday, September 02, 2012

Where is my Nexus S?


Ok, this is funny. I got this email (see above for content) yesterday from no-reply@android.com (looking at the headers they seem quite genuine). But the fact is that I never purchased an Nexus S, and by no means it is available in India. I just hope that this is some kind of an error, and not something billed to my card :( Hopefully Google / Samsung can confirm that this is an email sent by error... until then fingers crossed!

Random thoughts: 24hours without Nokia Lumia


Last week, I had to visit some 'high security zone' where no communication device is allowed in the premises. So I decided to shutoff my Lumia for 24 hours (of the grid) and use another basic Nokia device: the 1280 (which is usually used by my parents), while commuting from and to this high security place. Before going into this place though, I had to hand over my Nokia 1280 to a colleague, who himself was carrying a Lumia 710. That Lumia device and the Nokia Drive were extremely useful to get to many places that day, but essentially for me, I was completely free from grid and my constant companion device. In the retrospect, I thoroughly enjoyed the day and felt no urge what-so-ever of my missing Lumia 800, partly because my colleague was anyway using one when it was needed.

During this off-grid time, it was fun observing how radically different the UI paradigms of Nokia Lumia and Nokia 1280 are. While Nokia 1280 is one of the most basic phones available (monochrome screen), Nokia Lumia 800 is one of the Nokia's flagship smartphones running Windows Phone OS. A while ago, I had written an article on Kosh (building a mobile user experience for myself, part I : http://tovganesh.blogspot.in/2012/01/kosh-building-mobile-user-experience.html ), where I had written about how unintuitive it is to use the most basic function expected form a phone : to make a phone call; on all of the smartphone interfaces available today. I have time and again noticed this with my parents: they never got around being comfortable using Android (even when I had put the contacts on the home screen), they are somewhat comfortable with using my Lumia 800 (probably because of the bigger screen, again pinned contacts are needed, the phone app still looks a bit unintuitive), but they are very comfortable and happy to use Nokia 1280. The phone does one thing extremely correct : make and receive phone calls. When making the phone call, you just need to press the numbers using the keypad and click the call button done. For Lumia, you need to open the phone app and then key in the numbers, so is true for any other smartphone OS. This in itself is a major roadblock. Take the other case: receive phone call. On Nokia 1280, you just need to press the receive button and bingo, start talking. On most smartphone (including Lumia), you have to use some kind of a swipe gesture. These gestures may be so intuitive and cool for most of us (they certainly are for me and I feel comfortable using them), but with my parents this is just a burden. For this is more complex than just clicking a button or lifting the receiver of the landline. In fact, my parents are much more comfortable with landline than the mobile phone. Surely there is a lot of scope for improving the user experience of mobile communication devices.

That brings me to the UI paradigm used in new Asha touch series phones (Asha 305 and Asha 311): the three screens and the drop down. One of these screens is actually the phone app, which is also accessible from the drop down menu. This is so close to what I had enlisted in the Kosh UI design : things like phone (and for that matter any other form of communication) should be easily accessible at any point in time of using the device. To some extent this is what Windows Phone with its Live Tiles help to bring in, but again stop short of integrating other elements like the ones available with the new Asha touch OS. (PS: Just for a thought, I think, the Smarterphone acquisition http://www.itwire.com/it-industry-news/strategy/52030-nokia-nabs-another-mobile-os-buys-smarterphone, played a great role is a substantial transformation of the S40 OS in just a very short period of time).

Saturday, July 14, 2012

Nokia Asha 305 : the right direction

A while ago, I complained about Nokia Asha series being >5 K INR makes no sense (http://tovganesh.blogspot.in/2012/04/why-nokia-asha-priced-above-5k-inr.html). I am now happy to see Nokia release Asha 305 (http://nokia.indiatimes.com/nokia/touch-screen/nokia-asha-305-black-/10011/p_B10811), with just the right price point and just the right features. This is the first full touch phone in the S40 series to be released in Indian market, and I am expecting it to do well, provided it gives substantially superior performance in comparison to budget Android phones. Specs wise it seems great, and I plan to review this device when I get hold of one of these (anyone wanting to lend me a review unit is welcome!).

In the mean time I keep supporting Nokia, and hope that they can come out of the tough times (as well as the Jolla venture). Just last month I convinced two of my colleagues to buy Nokia: one Nokia Asha 200, the other Nokia Lumia 710, and I too got a very basic and lovely Nokia 1280 for my parents (actually I too might use this for some of my travels, when I can't carry my Lumia 800 around).


Update: Well a youtube user DrTechn0logy has already done a pretty indept review of the phone and you can watch it here: http://www.youtube.com/watch?v=aduq2DwQlH0&feature=plcp

Saturday, July 07, 2012

3dcam script app is live on Windows Phone Marketplace

To download search for '3dcam' in the Marketplace, or use the link (http://www.windowsphone.com/en-IN/apps/50758998-0b2c-4d70-ad02-5326823cc783). You might have to check if it is available in your countries marketplace, although I have opted for worldwide publication.

The 3dcam app is actually a very simple script written using TouchDevelop and is packaged as an app using the tools at touchdevelop.com. I had earlier written a blogpost on the script itself (http://tovganesh.blogspot.in/2012/02/fun-with-3d-anaglyphs-touchdevelop-and.html)

The app is absolutely free (and no ads), and depending on interest I will keep adding and improving this script app in my free time. Enjoy!

(Obligatory Note: This is a personal project, and not connected to my current employer)

Friday, June 22, 2012

Alan Turing


It is 100th birthday of Alan Turing, famously known for the the Turing Machine and the one who has been highly influential in the development of Computer Science and modern computer architectures.

To know more about the work and person see http://en.wikipedia.org/wiki/Alan_Turing
Also the ACM (Association for Computing Machinery), gives the Turing Award for the most significant contribution to Computer Science that push the boundaries of innovation, and is considered the Nobel of Computer Science. Visit http://amturing.acm.org/ for more information and the people who are given this prestigious Award.

Google celebrates this day with a cool doodle :)

Sunday, May 20, 2012

Apps I use on my Nokia Lumia

Once in a while a device comes in that you just love, and makes you feel special. Nokia Lumia 800, for me, has been just that. It is simply the most beautiful piece of electronic craft made. And it has been about five months that I have been using this device. So, this is probably good time to give you an idea of the apps that I use on my Lumia device on day-to-day basis.

IMG_4776

OS Apps

Now usually one would forget about these ‘Apps’, but these are actually the apps we use most on daily basis. The phone app, the contacts app (people’s hub), the calendar app, the e-mail app (linked mail-box) and browser app (IE 9) are the ones that I use the most. And I would safely guess that this is the case with most. Naturally, using these apps built into the OS is the first hand experience that you would get of any platform. And I must say that the experience here is absolutely premium, perfect and pleasing.

The second set of OS apps, that I use less regularly are: music hub (Zune and others), picture hub (camera app and others) and of-course the office hub (more on this later in the post). I am very much pleased with the design of music hub, but at the same time miss some important things: An equalizer and ability to create on-device playlists. The camera is good, but the app asks for more usability: the controls are simply not easily accessible. I would, in fact, call out on camera app and make it standout as an outlier in the whole of the Metrofied design world of Windows Phone. It needs a serious re-design.

Productivity

I love OneNote. And I use it extensively. To have it exclusively available in Office Hub was one of the prime reasons for me to choose Windows Phone 7 over other platforms. Though OneNote is quite well done in its mobile version, there are some of the things I miss : save web clip, insert video clip; stuff that I need to get my work done. I do use other Apps: Word and PowerPoint, Evernote, Adobe reader, kindle reader and the amazing offline Dictionary.com app, PC Remote Pro and SSH Client Pro, handyscan. Apart from these I also regularly use Skype, the Weather app and the World time app all of which are well designed and very useful for me. Intermittently, I use the Sports tracker to see how much of my walking/cycling skills have improved Winking smile 

imageimageimageimageimageimageimageimageimageimageimage

Development

Not much to say here except to say that I just love the concept of TouchDevelop. There is nothing on other platforms that brings back the joy of programming the way TouchDevelop does. And that too, you just need your smartphone for your perfect program. Although, I would entirely leave it to you, if you actually want to take up coding. Although, if you ever want to give it a try, TouchDevelop will be a no barrier fun programming experience. To see the ‘scripps’ (script apps, the term I just coined Winking smile ) I have written visit: https://www.touchdevelop.com/wblh

image

Photography

As I said before, I simply don't like the inbuilt camera interface. There is a lot to be improved here. Hopefully Nokia can do something about it. In the meantime though, there are some excellent photo editing apps that I regularly use: Nokia Creative studio, Thumba photo editor, InstaCam and PhotoFunia. I also regularly use Flickr to upload my photos.

imageimageimageimage

Video

The inbuilt cam-coder is good enough. What is missing however is a good in device movie editor like Windows moviemaker. This is very much desired if we are to be able to post edited videos on social media. Without this, strangely, the so-called social features of Windows Phone are incomplete.

Games

Before I got my Nokia Lumia, I hardly used to play games. But this Windows Phone hooked me to many games. And, no, Angry Birds is not one of them (though I have it installed on my phone anyways). The games I love most are: Wordament, Shuffle Party, Breeze and occasionally Chess4All and Packman 7. The Xbox integration seems also to be well done, although I personally don't use one.

imageimageimageimageimage

Social

For Twitter and Facebook, I simply use the People’s Hub. With groups and contact live tiles, this is simply what I need to stay connected on these social networks. There are official apps for Twitter and Facebook, but I simply do not feel the need for them, at least for now. I also use Foursquare and LinkedIn app which are far superior in design and usability when compared to other platforms.

imageimage

The Special Nokia Apps

I regularly use Nokia Maps and Nokia Transport. Nokia Drive is also used occasionally. All these apps are exceptionally useful and are simply not available on other platforms; for that matter even WP7 phones from other manufactures. This was also one of the reasons I chose to get a Lumia device when switching over to WP7.

Music and Instruments

I love to hear instrumentals and especially Indian classical. Zune, with music got from flipkart does the job for me. I occasionally use the inbuilt radio app, the TuneIn Radio (for BBC), SoundHound and PrimeTube (for Youtube). I also love fiddling around with instruments so I use PianoPhone 7, Honey Guitar, Drum Kit and Synth Free. Hopefully, one day, I can create something interesting like this:

Metro : Track created using free Windows Phone apps

imageimageimageimageimageimage

Local Apps

These are apps that are probably of relevance to only Indian users. I regularly use Zomato (the design is just too buttery and the operation smooth) and occasionally Flipkart, ebay India and IndianRail app.

imageimageimageimage

Misc.

Some of the apps that I don’t regularly use but are quite handy and sometimes just fun: Flashligh X, SkyDrive (I use office hub integration), Google search app, Microsoft Academic Search, Face Swap and Face Mask, Fantasia Painter Free, Function Plotter and Jack of Tools.

imageimageimageimageimageimageimageimageimage

Endnote:

1) A lot of people crib about windows phone not having enough apps. After using Nokia Lumia for about five months, I can surely say that windows phone is not short of quality apps that you will *actually use*.

2) Two things I miss is official Google Maps and GTalk app. While there are alternative third party apps, they are not exactly of great quality. While Nokia maps can be any day be substituted for Google Maps, GTalk integration to People’s Hub would be great.

3) All icons used here are owned by respective owners of the apps and are reproduced here for information purpose only.