Wednesday, 15 December 2010

Cloud Computing 2. Ground level

‘Cloud computing is a type of computing that provides simple, on-demand access to pools of highly elastic computing resources. These resources are provided as a service over a network (often the Internet), and are now possible due to a series of innovations across computing technologies, operations, and business models. Cloud enables the consumers of the technology to think of computing as effectively limitless, of minimal cost, and reliable, as well as not be concerned about how it is constructed, how it works, who operates it, or where it is located’.

This did not help much though when it came to a complete non-tech person. So, I again use an example that was used in the seminar I attended. Consider your work place in an IT company, you may be availing a lot of services such as email and intranet sitting at your computer. If you are accessing a leave management system like I did some time ago, you could look at the back of your computer and see a network cable. Following the cable you end up on the socket on the wall and then you plough out the lines and still follow them to a switch then to a router and you finally find yourself in the server room of your company. Then, you follow the cables to the server that, was hosting the leave application software for everyone in that location. So you have pin pointed the fixed server/hardware, the room, the air conditioning, the people who maintain that (by this time you should have met them), saw the power supply, back-up and the like. Now you get the general idea. You, the user, located it feeling.
Now, if you ended up in huge warehouse with containers upon containers (holding the cable of course), and you see that, there is a lot of hardware with thousands of network connections going to as many stacks and you simply cannot pin point which one is your application server by yourself then, you are dealing with a cloud. Basically, you may have ended up with something like this.

http://www.youtube.com/watch?v=K3b5Ca6lzqE

There is a video of the Google Datacenter too.

Notice/see the mentioning of network, storage, cooling, power supply etc which you might have located in your server room too but, in a minute scale compared to this. So your data, application are on some server that is in this huge software + hardware infrastructure. There might be someone else’s data, application residing there too.
So did this explain the concept? It does not seem to be so very new outright but, the approach as we will see to utilizing such hardware software infrastructure and deriving advantages from it is new.

Cloud Computing - 1 The beginning

I have been reading up on a number of stuff the past couple of months and have consolidated stuff to put on my blog. One of the topics is cloud computing. This was rather vague in the sense that, if, I referred to any material couple of years back I used to get different ideas. But, a seminar I attended recently helped me to get some basic ideas to build upon.

What is there so much to understand about cloud computing? You may ask. Rather than being able to work with it in all its glory, you would be better off if, you can explain simply and clearly to an executive, preferably from a non-IT background, about the what is, how, why of cloud computing. Not agreeing to this? A lot of literatures just do this and only this. Why? Because as long as the execs don’t see the up-side, no computing is going to take off. So explaining the whole idea, selling cloud seems to be challenge I am facing now. So who started all this? A colleague some time ago asked how I would explain cloud computing to my grandma and expect her to figure out some advantage on her own. I am never going be able to explain to my grandma because, she is not around. But, the idea was still hanging around. After this, I just continued with my reading to understand cloud more and pursue some development too.

The rest of the stuff such as developing something to run on the cloud for an example, using the Google App Engine etc is left to books and technology literature directed at the tech people. I am going through these too and will put on some stuff as I progress. These will be totally technical and nothing in the direction of the para above.

The next few blogs would focus on specific aspects/points that, I got from my literature review which I did not come across in general.

Wednesday, 27 October 2010

Fun Fun Fun with Robotics

This is yet another part of a new interest I developed. Its Robotics Again. I was building the walking mechanism for the alpha rex on Mindstorms.

It took me a while to build it manually, and the VPL program was larger than most other examples.
It was all worth the effort. Why? There are a lot of reasons for a software engineer to be happy with this.

- First, not a single line of code has been written!! All the instructions are using the VPL that comes with the mindstorms studio. Yes, it does compile and all that stuff but, hey I did not have to type in the code. I was dragging 'logic blocks' to get the job done.

- Second, with this a software engineer can imagine something and he has to imagine not only the logic but, also dream something that is mechanically feasible.

- Third, you have to build it mechanically!!. Finally, something tangible compared to the programs and processes.

The walking mechanism is here in this video

http://www.youtube.com/watch?v=s9h9i2o8YnU

The touch sensors usage is very very impressive so is the technique used to walk. Stuff written on the package is true. 'Only three motors, 2 touch sensors, ultra sonic sensor, color sensor but a lot of possibilities'

Monday, 25 October 2010

Visual Programming Language - Lego Nxt2.0 Robotics Kit

In 2008 I attended a career exhibition at Cardiff City Hall. There were a lot of companies who had put up a booth to guide to-be-grads in the room . One particular company Texas Instruments got my attention with their equipments (looked more circuit like) on the desk. I gave them a visit and the guy there eagerly explained to me how their equipment measures my temperature, heartbeat ... while I was holding a metal wire!! Then, we struck a techie cord and he started talking about other stuff like Visual Programming Language and then about Lego Mindstorms Robotics kit. After listening to all that, I thought that, I should get to know this VPL thing and Mindstorms Nxt.

I had a copy of MS Robotics Studio and played around with the studio. Missing was the sensors and motors i.e a robot kit.

Recently, I got a Nxt2.0 Kit and started doing some VPL programs and running it on the servo motors, sensors in the kit.

1) It is really nice to see and use the VPL studio that comes with the kit.
2) Even though there are only a limited number of sensors and motors, there is a lot of things that can be imagined and programmed.
3) Not to mention that, MSRS is compatible with this kit and we can code specifics in addition to the VPL capabilities.

When you read a books on Robotics, you see terms like actuators, sensors, services, concurrent execution etc and it was upto imagination to piece them together. But, with a kit like this it makes understanding things a lot more easier.

I tried out a few of the vehicles and really enjoyed building and programming with VPL. One of the sensors I really like is the Ultrasonic sensor that can be used to measure distance. The shooter robot was really interesting. The technique to shoot the colored balls is really impressive. (old pool game idea). My bot was ready and I gave it a try.

The video is here ---> http://www.youtube.com/watch?v=bhB_lYPPCto

It senses when some thing comes closer than one foot and fires. Simple. The villain was the only thing I can get my hands on before the batteries ran dry, a rolled up carpet.

Next would be Finishing the alpha rex humanoid and then moving to using custom code with this.

And yes, there are a lot of other robots and kits you can get your hands on these days. But, this is definitely a good place to start.

Wednesday, 22 September 2010

Comments on Two books.

Here are my thoughts on two books that, I have been through.

1) Code: The Hidden Language of Computer Hardware and Software. From Charles Petzold.

After hearing a lot of praise for this book, I decided to give it a go myself. During my bachelors, I had gone through books in basic computer science, operating systems, computer networks etc. As an eager-to-learn reader, I felt, this book from Charles Petzold is different in the following ways

- It does not start with a chapter 1 scare about computers, digital world taking over your life.

- Enjoyed the progress from Chapter 1 - 15. Things like Braille, Morse code, Telegraph, relays
are described from a different perspective. Without having the end result/objective defined,
the chapters build on what is simple and available to expand concepts. This is absent in all
other books I have been through.

- Earlier attempts at code / represent data are interesting.

- The book is a progressive sequence of thoughts leading to understanding computers, from oh! to ah!. If you already had taken subjects like digital logic/electronics during study, you might find this a replay. Only that, in semester study you get air-dropped right in the middle of details and learn from there.

Only downside is, I felt that,

- the fine-grained description of what each company / corporate / individual did could have been avoided. It was enough for me to know that, XYZ inc came up with yet another approach/processor. If I wanted to dig into that, I would read another specific book. Just that, such descriptions are out of the scope of this book. Not to mention that, it is enough to kill the spirit of reading the rest of the book and put you to sleep.

- This book should have come out 10yrs ago as the author says. I wish it had.
This is must have for High-schools', colleges' libraries or anyone who is interested in understanding how computers work and see through the layers of abstraction.

2) Practices of an Agile Developer by Venkat and Andy.

What can I say? At least, the authors don't guarantee success with agile.

- This book is for people who don't understand that, software engineering involves great people/teams empowered by good enough process/methodology. Even agile can't help if this is not understood.

- If you are a developer with discipline, skip this book. You are already way ahead.

- A plus side, you can finish it in hours!!

Wednesday, 25 August 2010

Protect Shred Throw away

2 softwares that are useful if you are protecting information on your machine.
1 Software for storing passwords for users.

1) True Crypt.
This software allows you to protect information with encrypted container files, hidden volumes and hidden operating systems. Simply you follow the instructions to protect your data files with encryption.

2) PGP
I was under the impression that, the software turns features off after 30 days. But, the pgp author mentions that, it would simply continue to work. So, I am trying this especially the shredding part. This software can shred empty spaces in the disk or files.

Both these softwares can be used when you a throwing away your hard disk. Cryptographically erase data.

3) Password Safe from Bruce Schneier
This is an extremely useful piece of software for people who have loads of ids and passwords.
Instead of using a commercial application that drags your system down, this can be easily used with little or no performance hit. It allows you to create a username, password, tag to describe where this is used, credential groups. Simply drag the name / password to the corresponding edit boxes in other windows. The password data base is itself encrypted and just remember the master password.

Extremely useful software.
Google it. Download it. Try it


Wednesday, 21 July 2010

Development environment

If you are embarking on software development or programming seriously then you need a environment, as George Carlin would say, to "put your stuff".

My requirements for a development environment are.

1) It must be reasonably fast. Windows Xp? not a chance. Have tried.

2) As I progressed over the years, doing coding projects as learning and now after 4 months tops, the file system is confusing to even myself. tons of versions of jre, shell scripts add to the confusion. On a short notice I want a clean system. i.e No installation of any sorts allowed. I don't want to worry if my previous pet project is gnawing at the current one.

3) Backup ! If something goes wrong on a monday morning, I want to just revert back and continue breaking things.

4) I should be able to make things tick with scripts when ever necessary. I hate windows scripting.

5) Need a strong, flexible shell.

6) Make private networks without the physical machines.

I have used linux in the past and found it to be the best. I was not going to install a development environment on my Xp laptop. Definitely not for Java development. If it was for visual studio then, ok. But then, linux as a VM seems to be my choice for quite a long time now. The reason is that,

I found a number of ways to make this OS fast from other blogs. Search for it on the web!. Some things to do are

- change swappiness
- services. Used Yast to disable unwanted ones.
- Look and feel for best performance
- on Vmware server settings make sure that the entire vm memory is on physical memory.
- visit inittab and strike off unwanted stuff.
- Allocate all the disk space. Some blogs say this is unnecessary but, I found it to be otherwise.
- list all processes and continue filtering.
- Disable CD drive.
- Disable USB.
One way to see the changes is to list the number of processes running on your vm. Mine has 56 processes and without X windows 38. The vm is more responsive with heavy IDEs like RAD. Well, faster than my friend's Ubuntu on physical machine!. (My VM has only 1.3 GB RAM)

So to be precise

1) Use a Virtual Machine.
2) Use Linux.
3) Use Xming or Similar tool and avoid UI on your VM.

Sunday, 6 June 2010

Elevate thinking on Software Development Models.

If you have been to presentations on Software development models then, you have been exposed to this.

a) Someone is talking about a new model.
b) The benefits list is longer than your shopping list.
c) There are also convincing Wow! Wow! examples.
d) It is some thing very different from all the models you have ever seen, heard or used.
especially that mean Waterfall model.

Then, the all time champion false claim

e) The model is promised to deliver you success at all times !!.

Here is what I think.

1) The Waterfall model gave us the basic stages of software development. That's the truth. Face it. It is NOT a guaranteed to fail. It might fail.

2) Every Software model has all the stages laid out by the waterfall model. Rarely do you see a new phase in the new models.

3) It is how you string these phases together, how much effort you spend in these stages, that makes the difference and the different models.

The questions to answer before adopting a new model.

1) What is the process you are following now?

2) What precisely is wrong with that process?
- Look for answers in Cost, Effort, Schedule.
- Get the numbers straight for the above three.

3) How much is the new process profitable in the above three?
4) Is this worth the shift?
5) Above all, Is your business process, team process compatible with the new model??
i.e can you map it to your processes?

These basic questions can set things really straight.

Monday, 17 August 2009

Windows Server 2008

http://blogs.msdn.com/vijaysk/archive/2008/02/11/using-windows-server-2008-as-a-super-desktop-os.aspx

http://h0bbel.p0ggel.org/windows-server-2008-as-desktop-laptop-os

Tuesday, 7 July 2009

ShopEasy v1.1

I am happy to release this software for Windows mobile devices.

About ShopEasy v1.1:

Ever been to a super store, walked through all the isles and been back home just to find that you forgot to buy something? or simply don't have the memory to remember the long list of shopping items. Then this is for you.

ShopEasy is a software designed for Windows Mobile 6.1 devices and helps you to shop!
It helps you to maintain your shopping list in a simple and easy to use manner. Before you go shopping, just run the software, select them items you want to shop and away you go, never to forget an item. You can keep track of items as you buy using the software so that, you are never in doubt if you have bought it or not. 

Features:

1) Easy and Simple way to maintain your shopping list.
2) Help Facility for software.
3) Fast and efficient.

Specifications and Requirements:

Devices: Windows Mobile 6.1 devices. Screen shots from HTC Touch Diamond.

You will need: 1) Microsoft .Net Compact Frame work 3.5 to run the software. You can download this from Microsoft Website.

Your experience and suggestions in using ShopEasy are welcome. Enhancements will added and new versions will be uploaded soon.

Download:

v 1.1
-----
Link: http://www.filefactory.com/file/ahb4046/n/ShopEasyInstaller_CAB










Friday, 24 April 2009

To prototype or not to prototype

All engineering disciplines frequently use scaled down models to prove a concept before actually building something real or the real thing. This is the case, be it related to building architecture, bridges or aircraft manufacturing. So what about software? As an answer comes up the word, prototyping. The question is whether to or not to prototype? The question deserves special attention in software domain. This is due to the following reasons. First, software is created by developers who are unfortunately not the end-users of the product. Second, the end-user is not usually involved in specifying what they want, be it to see, type in or interact. In addition to that, the so called requirements get passed through quite a lot of hands and is perused and interpreted by the lot too. The funny thing is that, each will have an idea of what needs to be done, let alone how and with what. When this comes to the developer again there will be an interpretation of what is to be done. Finally, what the user wants is in his/her head and cannot be elicited in one go or so. The end result of this can be an unhappy user who thinks the software is useless or an irritated client who thinks the real objective was not met. For the developer this result can manifest as anything from, burning down new screens the user wants, dealing with the so called ‘changes’ to re-doing the whole thing.

If you have been in any of the above situation then you need to think of prototyping. First about what benefits it brings. Prototyping can help in the following ways

- If your team has thought of a concept which is core to building the solution. Prototyping can help in proving this concept. If the prototype proves your concept wrong, then you are in a position to plan accordingly rather than having to re-trace in the middle of development. It can also uncover any mistakes in your concept.

- You might have designed the solution with application layers and so on. Prototyping would be helpful in making sure things will get along as they were planned in the first place. If things do get along, you have something to look at when you build the real thing, a distinct advantage.

- It can help in comparing technologies that can be utilized to deliver a solution.

- You can identify bottle necks earlier which otherwise unnoticed will surface as impediments. i.e you make things as risk free as possible at an early stage.

- Above all, the user/client when presented with the prototype will start talking more than you expected. You will get a clear idea of ‘what they want to see’ and how they want to interact with the solution. I.e your interface will be change-proof as much as possible. There will be a better understanding between the two.

As for the downside of prototyping, besides the fact that it takes time, there is nothing horribly wrong with the idea at all. The problem stems from the fact that, not many people in the field understand the need to prototype and if they do, they lack the knowledge of how to prototype. The followers of the perfect world of waterfall model where things go in order or anything similar fall into this category.

In short, prototyping does help a software development team to move in the right direction based on facts and deliver what the user wants in the first go itself. i.e if you have not been able to deliver the right product in the first pass, you should think about prototyping.

Sunday, 15 March 2009

Six Sigma and Software Development

The software domain has its own set of tools, concepts and management processes, techniques to ensure quality and the success of a project.  Some of these are development methodologies like Agile development and others are process management techniques like CMM and its process areas. But, Six Sigma, its ideas and concepts did not evoke an interest in Software engineering domain as it did to the manufacturing doamin. In fact, software engineers and IT project managers are still confused as to how and where to apply this concept and related tools in software 'product' development. 

At the end of its life cycle software is a product that, is used by a user/client to realise their goal. Quality, reduced variation from user requirements, reducing cost, well informed decisions, increased customer satisfaction are all important to the IT software industry as it to the manufacturing industry. These are things that Six Sigma aims for and the way to do this is even better in Six Sigma. If so, then software engineering and management can adopt quite a lot if not all, from this strategy. The initial skepticism can be removed by replacing the terms client/user (in Software domain) with customer (Six Sigma), issues (Software) with defects/variations (Six Sigma) and Software/System with product.  The only hurdle in the case of softwares is tangibility.  Again, 'Changes' are common to software development processes. Also, it is most unwelcome and software engineering processes tend to be brittle when it comes to managing changes. This is because most of the process models such as CMM tend to keep processes prognosticative. So they are uncomfortable with Changes. This 'Change' is also core to Six Sigma and But, is addressed very effectively.  In short, Six Sigma should not be alien to Software Engineering companies which in turn can definitely reap great benefits by applying this strategy.