30 Dec 2014

Project Ara: Changing mobile computing as we know it.




Mobile Computing has come a long way since its conception in 1984 at Motorola. We’ve seen a plethora of game changing products and concepts in these 30 years. But in 2015, we encounter an idea that could impact every form of consumer computing, let alone smartphones and tablets. An idea that has been quintessential to the survival and recent resurgence of desktop computers. An idea that could revolutionize the mobile computing market. Modular smartphones, perusers, are a mere year away.

Forgive all the beating around the bush, but the fact remains that Project Ara’s immense potential is enchanting. Every smartphone/tablet user has, at some point, gazed longingly at the new flagship and felt angst at the computing behemoths that short changed them, even though they had laid down hefty sums for the incumbent flagship just months ago. Companies charging premiums for newer models every year (or in Sony’s case, 6 months) has never been a rational concept. Yes, technology grows exponentially. Yes, the competition is intense. But so is customer exploitation. Project Ara seems the panacea to this ravaging exploitation.

So, what is Project Ara? Here’s the official description, from the project’s official page. Excuse the sad attempt to mask my laziness. 
“Project Ara is a development effort to create a modular hardware ecosystem--rivaling mobile apps in the pace and level of innovation--around smartphones, with the goal of delivering the mobile internet to the next 5 billion people. Put another way, Project Ara aims to enable users to create a modular smartphone that is precisely tailored to their functional and aesthetic preferences.
It all starts with an endoskeleton, or “endo”, the structural frame and data backbone of the device. The user can populate the endo with “modules”, the building blocks that make up the vast majority of the phone’s functionality and features. The modules can be easily and safely inserted and removed at any time, even while the device is powered on. The modules also have user-replaceable covers or “shells,” which provide a creative canvas for users to make their phone look exactly as they wish. Ultimately, customers will be able to buy a complete Ara phone, configure one from scratch, or buy additional modules through the Ara Module Marketplace.”

In a nutshell, Project Ara smartphones would be just like desktop PCs. Pick your modules, slot them together and you're ready. Upgrade by simply swapping out modules. You could even by extra modules and swap them in or out as necessary.

The possibilities seem endless. Imagine how convenient it would be to carry around a space battery module in your bag on a particularly long journey, swapping it in as needed, eliminating all the fretting about battery life. Find the high megapixel camera on your current smartphone pointless? Fancy a larger speaker instead? Project Ara would allow you to swap out the camera for a larger speaker. Phone getting slower? Need more Storage? Desire a faster processor? Happiness is a swap of a module away.

If smartphones came about with the goal of making people’s lives easier and consequently empowering them, Project Ara would seem the enforcer of these ideals. Giving users complete power over their smartphones, allowing them to pick exactly what they want and what they don’t, sans compromise (in terms of hardware, at least), is what Project Ara would engender. For all of you who craved Samsung’s stunning AMOLED screens, Sony’s Exmor-R image sensors and HTC’s brilliant Boomsound speakers in one phone, your prayers are soon to be answered.

Prototype Render by Garrett Kinsman
Ultimately, Project Ara has profound implications not only for Smartphones and Tablets, but Laptops too. And quite a few other accessory markets, but more on those in a bit. Much like tablets (the iPad more like) in the early 2010s, Ultrabooks are the rage in the Laptop market right now. Beautiful, pixel-laden screens, Efficient, silent and quick processors, decent battery life and the ever important size-0 body, they’ve got them all. The catch? A motherboard with every component permanently soldered to it. Once you configure your ultrabook at a store or online, that’s it. You’re stuck with the same configuration until you deem a new laptop necessary. But if smartphones make the jump to Modular components, it can only be a matter of time before laptops do too. And I don’t mean the current icky struggle of pulling a laptop apart for a new stick of RAM. I mean complete modularity, like an Ara smartphone. The day an Ara-esque laptop is announced, Tech geeks, Designers and Macbook-toting Hipsters will sing the praises of the lord.

We’ve also got to consider accessory markets that have become so prominent over the last few years. External portable batteries, external storage for smartphones and tablets, external flashes and many more are in quite the parlous state with the advent of modular smartphones. Most of these accessories would be redundant, considering that users could very well invest in modules and swap the modules in or out as needed, rather than buy and lug around external accessories. 

While I have portrayed Project Ara as the messiah who can’t come soon enough, an ounce of pragmatism and patience is requisite, along with all the teeming optimism. 
Ara will face numerous challenges on its path. Getting established market giants to potentially give up enormous profits for consumer empowerment, gaining traction amongst the masses uninitiated in tech, ensuring that modular smartphones withstand rigors of everyday life, let alone waterproofing and dustproofing, are all said easier than done.

But after dreaming of modular smartphones ever since the greed of a faster processor befell me, I cannot wait for the day they become reality. It’ll be a golden day for technology.

26 Dec 2014

Web Crawler Primer





Search Engines! - For most people, this term immediatly translates to Google! 
But almost 60% of the people don’t know how it works. So I thought of making this document about the basics of a search engine…. A web crawler!

A Search Engine Spider (also known as a crawler, Robot, SearchBot or simply a Bot) is a program that most search engines use to find what’s new on the Internet. Google’s web crawler is known as GoogleBot. There are many types of web spiders in use, but for now, we’re only interested in the Bot that actually “crawls” the web and collects documents to build a searchable index for the different search engines. 

The program starts at a website and follows every hyperlink on each page. So we can say that everything on the web will eventually be found and spidered, as the so called “spider” crawls from one website to another. Search engines may run thousands of instances of their web crawling programs simultaneously, on multiple servers (like the one shown above). When a web crawler visits one of your pages, it loads the site’s content into a database. Once a page has been fetched, the text of your page is loaded into the search engine’s index, which is a massive database of words, and where they occur on different web pages. All of this may sound too technical for most people, but it’s important to understand the basics of how a Web Crawler works.

So there are basically three steps that are involved in the web crawling procedure. First, the search bot starts by crawling the pages of your site. Then it continues indexing the words and content of the site, and finally it visit the links (web page addresses or URLs) that are found in your site. When the spider doesn’t find a page, it will eventually be deleted from the index. However, some of the spiders will check again for a second time to verify that the page really is offline.



http://s.hswstatic.com/gif/search-engine-chart.gif

The first thing a spider is supposed to do when it visits your website is look for a file called “robots.txt”. This file contains instructions for the spider on which parts of the website to index, and which parts to ignore. The only way to control what a spider sees on your site is by using a robots.txt file. All spiders are supposed to follow some rules, and the major search engines do follow these rules for the most part. Fortunately, the major search engines like Google or Bing are finally working together on standards.

Here's a short video by Google explaining their search process




14 Dec 2014

The Future of Web Development




The stuff that dreams of are made of ” ~ The Maltese Falcon
Web Development is a fast paced, highly competitive and creative field. Commonly, there are two big parts to any web-based thingy. The front end, where the pretty stuff is. This falls under web design. Then we have the back end, where all the heavy machinery nestle. Technically only the back end falls under web development, but one cannot describe a house, without showing where the front door is. In this article I have tried to collect the views of the people working behind in the concepts discussed, from many web posts. At the bottom, are a few resources you can look at if you are interested.

Going a little into the annals of computer history, we find that the Internet, despite growing rapidly, did not grow in chaos. It was developed layer by layer, each step taken in a logical sequence. The development of the Internet, began with the creation of efficient data transfer systems. With the creation of the World Wide Web, came the key components of our present Internet - the web browser and the web page.

Sir Tim Berners Lee (All Hail!) also created the Hypertext Markup Language - HTML - along with the web. The first few versions of HTML were, to put it in a nice way, severely lacking. If it weren't for CSS, the Internet would be ugly.


Web Apps will dominate the market

Across the world, there is great belief that web based applications will be the future - of not just the web - but also smartphone and desktop apps. The arguments put forth for proclaiming web apps as the next conquerors are quite simple. Web-browser based applications are easy to create - they primarily use the languages and technologies used to build regular websites - and will run on a multitude of platforms with just some minor adjustments. Today, with the rise of several mobile and desktop operating systems, each with their own system type, each with their own specific set of programming languages to develop with, more and more people (developers to be precise) are clamoring for a unified technology that allows one to build an app once, and get it to work everywhere. Putting it all together, the general idea, is that why not make applications which are run by a web browser as opposed to them being run directly by an operating system - To create what is quintessentially an operating system which is run on top of another operating system.

Oh if it were only so simple ~ Aleksandr Solzhenitsyn

Unfortunately, the world functions in mysterious ways. Or in this case, in very clearly defined, but still mind-numbing ways. There are a host of problems in such a model. If one were to make a list, of all the hurdles we would need to cross to implement this idea fully, topping that list would be Performance.

Native apps (Normal apps run by the operating system directly) are able change a variety of system settings in order to fit in exactly, so as to utilise as less system resources as possible, and yet function smoothly and give a rich user experience. Currently while it is possible to some degree to create an app that can run on a particular browser, with some effort on all browsers, and maybe with a lot more effort on all browsers on all mobile and desktop OS’s (The time, human drudgery and expertise required will be high), such an app, will not be able to run nearly as well as a native app.


Google is spearheading the effort to integrate web and system apps, into a hybrid environment where BOTH native and web apps are treated on an equal level. It has designed an entire javascript based framework called Polymer (Explained later in this article) for the development of web apps, as well as another javascript based framework, Angular.js for the front end of web applications.

Here is a more detailed and well explained article regarding Google and Web applications : The future of the web according to Google


Flash of Death

RIP Flash

One thing anyone can say for sure, looking at the present scenario, is that Flash will be driven to extinction. In 2010, Apple sounded the death knell for Flash by making iPads and iPhones incompatible with Flash. Google followed, and all versions of Android past ICS, do not offer any native Flash support. However HTML 5 is not replacing Flash at a rate which would be expected. Presently most browsers offer only limited compatibility with HTML 5, despite it being having more performance benefits. The vast majority of video streaming sites use Flash player, rather than HTML5 based solutions. Even Youtube, still uses Flash Player, although it’s rapidly going HTML. It looks like Flash is not going to go down without a fight.


Javascript is the Future - JQuery, Node.js, Angular.js, Polymer.js

It looks like Javascript will be the Most-Wanted-Language of the next phase of the Internet. Javascript is currently the most used client-side scripting language. JQuery, a javascript library, is widely used for interaction and animation. Now, with the rise of several pioneer projects all based on javascript, javascript is set to be the true programming language of the web.

I will go a bit into scripting languages here. All interactive, motile parts of a website or web app (barring hyperlinks and css effects) are powered by scripts. There is more than one way to skin the proverbial cat, and web-developers use mainly two different techniques to run scripts.

<Warning> Textbook definitions up ahead!

Scripts can be run client-side, meaning your device takes instructions from a piece of code, and processes data accordingly. Client-side scripting languages mainly include javascript, VBscript, and flash - Honestly flash is just for games - a measly 12% according to w3techs. The other way of running scripts is from the server, where everything you feed to a website or app (location, clicks, hovers, text-entry) is sent to a server, where a server-side language, such as php or asp.net (by Microsoft) or python processes it, and sends data back to your device. The vast majority of websites use client-side and server-side scripts in tandem for maximum efficiency, security and speed.

Node.js

In 2009, we witnessed the birth of Node.js, a server side scripting language based on Javascript. Node.js is being showcased as the successor the world’s most widely used server side language PHP. It is possible to dismiss this as an absurd notion if we consider the vastness of php in terms of market-share, but we must keep in mind that Node.js is a very new language, and very efficient and light as compared to php. Linkedin does the back end of it’s mobile apps using Node.js. Paypal (Gasp!) uses Node.js, and so do all these guys. What is most important of all, is that Node.js is getting developers hooked.

Node.js

Angular.js

Let me start off the introduction to Angular.js with this picture :


That’s the story, in a nutshell. Angular is designed for dynamic views, the way HTML was designed for static pages. Angular is already insanely popular. Just head over to the homepage to start a simple tutorial right within your browser (Link below). Angular depends completely on your knowledge of javascript and HTML, and it allows for the creation of remarkable interfaces and functions for web apps. Angular provides pretty much the best framework for developing web apps right now, be it interfaces, services or communication with servers.

Polymer.js

Polymer is another project by Google, and it is, I have mentioned before, made for building web aplication components. Polymer is a new language that is still very much in development - I forgot to mention earlier, that it was launched in 2013. Polymer basically helps in building components, which together work to form a web app, or can directly be used in websites as modules for extra functionality. While Polymer is a great concept, it is still looks like it’s way ahead of it’s time.
An article sounding alarm bells for Polymer : Is Polymer.js the future of web application development?

On a final note, I would like to remind you that Polymer’s dependencies, although non-existent in the present, are already being made and standardized. Polymer uses several powerful features of HTML5 not yet approved by the W3C, but hopefully, Polymer will succeed.

Back to Javascript

So I just listed three amazing javascript-based projects, all of which seem set to play a big part in next-gen web development. Now javascript-based here means a keen background knowldege of javascript, along with HTML and CSS will be required to do anything serious.
One last thing about javascript - Khan Academy’s programming tracks are largely javascript-centred too. The Hour of Code movement teaches js (A skinned version) along with a few other languages.

CMS (Content-Management Systems) on the rise

A rather small, but interesting thing to note is that the use of content management systems is on the rise. A CMS is generally used when there are large amounts of data to be posted on a website, or a large number of users post data to a website. Most blogging platforms like Wordpress, Weebly and Blogger use CMS, along with e-commerce sites which use specialized CMS’s such as Magento. If you want to use a CMS for your website (not one that is on a blogging platform) Drupal is highly recommended, as it is open source.

Conclusion

The Web is now a shining beacon for all other fields of computer technology. Some of the greatest people in the field of technology and programming are developing for the web. There is a lot of room for ideas, and is a great area to point one’s computer skills at. If you are interested web development, now is a great time to get creative. Check out the resources page of the KHMD blog for some general resources pertaining to web development. Below are some resources specifically regarding the technologies discussed in this article.

This article is crosspublished on my super-duper blog, The New Age Tech Connoisseur. Check it out for some more articles.

Thanks to Gautam Padiyar for all the ideas.

Resources

Before you start anything, head over to the homepages of these great projects. They give links to great learning resources, as well as lots of info concerning how why that project is really useful




Enlightening posts


  • Rey Bango’s Post on how to create basic elements in Polymer.
  • Angular and Polymer are very very similar. Here’s a post laying out the differences : Polymer vs. Angular

Here are a few links to detailed lists of great goodies


  • Node Cloud This website contains all the possible resources you will ever need to get started with Node.js, including details of different frameworks and IDE’s.
  • Github list of Angular JS Resources From what I infer after opening a fraction of the links to resources provided here - and they are great ones too - is if you want to begin with Angular Js, visit this page.



Design. Functionality at its best

(drumroll)

It can mean a million things, but lets restrict ourselves to the more graphical oriented section. case in point, I would define design as the process through which a problem is solved efficiently, and in a simple manner

Dieter Rams (Google him. DO IT), a legendary designer, has explained good design in ten points:
https://www.vitsoe.com/gb/about/good-design

All this seems to have gotten a bit deep, so here's some cake.

Again, DESIGN is applicable to anything. Wherever a problem exists, design solves. It could be designing a Crane, baking a cake (CAKE!), making a video, photography and logo's.

Take the KHMD logo for example. It was created to solve the problem of providing our community with a visual and brand identity, Something with which all of us can identify with. It's whole structure helps it to do just that:



It can be a compass, guiding us in the right direction. It can be infinity, for the infinite ideas inside our heads. It can also be unity, with the tightly knit structure symbolizing our community. And it doesn't hurt that it looks cool.

the color orange is said to stimulate creativity. Color is a very important part of design. Colors evoke feelings in the mind of the viewer. They place great power in the hands of the creator. Use responsibly.

So that's an introduction into design. 
A very helpful skill in this field of thought is drawing. The ability to draw can transform ideas into actual workable models, and is a wonderful medium for propagation of ideas. And again, everyone can draw.

I really don't understand people who say "I can't draw well".
Everyone. can. draw. Well. 
Start drawing things everyday, and you'll be surprised at yourself. Seriously.


On another note, A tool which I personally consider important in a designers arsenal is PhotoShop. or any substitute graphical editing software.
You can create ridiculously amazing things with just a computer in front of you. Everyone needs to know how to use it. it is an indispensable tool, which is ridiculously easy to learn and operate. Well, at least the basics. And that's all one needs.

So there it is. Let's fill the world with better design and cake, and live in a better place

The End.

10 Dec 2014

Negabinary

Thought you knew all there is to know about number systems? Well, here's something new to that list - Negabinary numbers. These are numbers that are written to the base -2 (negative two). What's so great about these numbers? There is no need to put any + or - to denote whether it is a positive number or not. Let's check these numbers out.

The normal way a number is defined, works here as well. There are "b" number of digits in a number system of base "b". Here, we just have to change the definition to: there are "|b|" number of digits in a number system of base "b". The definition works perfectly after that. Then, we can just use the following equation:


Using this we can thus generate the first few numbers (0, 1, 2, 3, 4, 5...) in negabinary: 0, 1, 110, 111, 100, 101... (Sequence A039724 on Online Encyclopedia of Integer Sequences (OEIS)) where 0 and 1 have usual face values.

How do we convert a number to this base then? Write the number down in binary first. Then, going from right to left, at every odd place (i.e. x1, x3, x5 ...), if the bit is one, propagate a carry to the next bit. Also, while moving from right to left, add all the carries.

For example:

To convert 15 to negabinary:
  1. Convert 15 to binary
    • 15decimal=1111binary
  2. Propagate from right to left
    • 1111
    • 1111
    • 1211
    • 2011
    • 2011
    • 10011
    • 10011
    • 10011negabinary
  3. Done! (This is correct since 16-0+0-2+1 = 15)
Conversion to decimal (or any other base) just uses the original formula.

Addition is kinda done the way conversion is done, except that carries are propagated (one bit extra to the left, since 2negabinary = 110).

We can similarly define the other operations as well.

Let's take this onto another level itself: how about a number system that takes care of complex numbers as well (as digit strings)? I leave that upto you to figure out and comment about.

PS: This post is cross published on my blog http://jaybosamiya.blogspot.in/2014/10/negabinary.html

7 Dec 2014

Android FAQ + Tips + Resource Guide (PART 2)

Continued from PART 1

This post can be read before, during and after getting started with Android Development. It is written as a ready reference. 


General Tips

  • Check only for Beta or Stable builds of Android Studio in the updates window. 
  • Do not start with Fragments until you have built a few small apps yourself. (Not by Copy-paste coding)
  • Forget sqlite databases in the beginning. The fact that you need to have 3 java classes for a single database can be a turnoff. Use alternatives like the Java collections framework till then. 
  • As I said before, do not quit whatever happens. It's only normal that you take time to get used to this.

Beginner Guides 

  • Vogella - Start with the basic tutorials and development starters. Reading only.
  • myBringBack - The videos may seem like a blast from the past, but that's just how quickly Android evolves.
  • slidenerd - Indian YouTuber. One of the best approaches to Android I have found. He stays up to date with all the latest Android developments and is currently bringing out a comprehensive series on Material Design.
  • Udacity - If you have enough time at hand (4-6 hours every week for 10 weeks). Taught by instructors at Google. But keep in mind that this one has a very steep learning curve and not the best suited for beginners.
  • Once you get a little comfortable, get into the habit of reading the documentation on developer.android.com . Soon this should become your bible. 

Random FAQ

Q)  Why doesn't my button do anything !!?
A)  You probably didn't program the button to do anything. This needs to be done in your activity.java file after defining in activity.xml. (Extremely silly but happens to first timers)

Q)  How do I avoid common Gradle build problems !!?
A)  Assuming your Gradle installations were done properly, Just restart Android Studio. If it doesn't go, update Android Studio. If there is no update available, You are stuck till you get the update. 

Q)  Why is my activity not starting !!? [Most important]
A)   You probably did not add the activity to the Android manifest. This step is very important.

As you saw most of the questions turned out to be silly. But these are exactly the kind of problems people face. All of these have been answered on StackOverflow . So I will not continue this further.

A more comprehensive guide for troubleshooting IDE related Problems can also be found here.

Intermediate Level Resources



p.s. I just realized that I emulated something called as "Externalizing resources" that is used in development. I'm sure you'll hear it when you start Android Development.

Please '+1' if you liked it, comment if you want to point out a mistake.

Getting Started With Android Development (PART 1)


This was intended to be a very long post. Deal with it.

Still Waiting for Lollipop? 


Crazy about Android, Rooting your phone and pushing your Android to its limits? No? That's fine. That was just how I got started off with Android Development. Believe it or not, I started programming only because of my passion towards Android and XDA. Allow me to take a small detour before getting to Android Development.

I started exploring and researching about android devices just as I was finishing my 8th std. For about one solid year it was just getting to know about android and the devices on the market. You could literally ask me anything about android devices and I would know. I still remember that epic MWC 2012 where the HTC One X and the Xperia S were unveiled along with their smaller brothers. .... You get my point.

Around that time I got my own Android device. It opened up infinite opportunities for me to try new stuff and I did exactly that. One month after getting it, I rooted it and for almost the next 6 months , I was flashing a Custom ROM once every 2 days. Very soon I was a senior member on XDA .... Again, you get my point.

Along the way, I was fascinated at how these developer-legends were taking time off their busy schedules and writing code to support a device they truly loved. I decided that I too wanted to build a Custom Rom and post it on XDA. Tried and failed (obviously). Advised to start with writing Android apps, thus I began my journey. My objective has changed since then.

OK That's enough. Let's get down to business


There is one fundamental thing you need to ask yourself - Do I want to start Android development because I want to learn it or because I want to build an app as soon as possible. These may seem to be the same but believe me. They're not. The difference also lies in whether you are willing to compromise on the quality of your apps.

If you want to build an app as soon as possible, You should probably stop reading this and read Aniruddha's post on the Future of Web Development (Coming soon) (Since it never came - Google Phonegap or "Android Apps using Javascript").

Traditional Android development is what you should start with if you don't want to compromise on quality and/or are learning for the long term experience. Read on.


JAVA

Your first hurdle is to learn a new language : Java. It's not the easiest language to learn, but then it's not the toughest one to learn too. If you do know Java, good for you. But you may ask , how much Java is enough. Valid question.

You don't need to go too deep into Java. Let me just list the most important concepts. You can learn the rest as you need them.

  • Basic Syntax (obviously!)
  • Writing your own methods (aka functions)
  • Object Oriented Concepts of Java (It does vary a little by language)
  • Creating Your own Classes , Interfaces , Abstract Classes , Objects 
  • Extending / Implementing these
  • Generics and Collections Classes   
Hands down the best Java video tutorials I have found.

NOTE : If you are completely new to programming, Pay special attention to the syntax part and give enough time for each of these topics.


The ANDROID IDE

Now You have a choice. No actually you don't. This is 2016 and you have no reason to not use Android Studio. You can follow any other guide on the internet to set up Android studio and its dependencies. 

Take your time and understand how the process of writing an android app works. If you don't understand something, just skip it. If you don't understand anything at all (It can happen in the start), ask around in the community or contact me personally. Some beginner questions may be 
  • Why are there so many different folders and files ?
  • Why doesn't my button do anything ?
  • How do I avoid common Gradle build problems ?
  • Why is my activity not starting ?
Don't pull your hair out. There's always help around. I'll answer these and a few more in the FAQ post.

PLEASE NOTE : Patience is key here. Android Development is not easy to learn without any decent programming experience. It will take time. Now Go have fun with Android.



BTW You can still find me on XDA . Though not active anymore, Waiting for an opportunity to be back. Please '+1' if you liked it, comment if you want to point out a mistake.

Continued in PART 2

30 Nov 2014

Evolution Of Smartphones

Smartphones, they are our every day tool. We cannot live without them. They are now a part of our lives. But how did these smartphones come about? Here's a brief history.

First things first: What is a smartphone? A smartphone is a phone that has the functions of a computer, a touchscreen, internet access and has an operating system capable of running third party applications.

Starting with just phones, Motorola was the first company to invent the mobile phone, and these phones were very big. This is the picture of the Motorola DynaTAC 8000X
(source: Google Images)

Yes, can you imagine putting phones like these in your pockets? Thankfully, our smartphones have evolved over the years.

Many say that the first smartphone was the IBM Simon, but at this point of time (in 1997) and even a decade later, smartphones weren't popular. The smartphone revolution began in 2007, with the release of the iPhone. Dubbed the 'Jesus Phone' due to its passionate launch, it was the first phone to run iOS. Then came the iPhone 3G releasing in July, 2008 with minor improvements and a year later, Apple unveiled the iPhone 3GS (here, the 'S' stands for speed).

Two months later, HTC announced the first Android phone called the HTC Dream or T-Mobile G1 in the United States. Now this phone had a touchscreen and used a QWERTY keypad and it ran on Android 1.6 (Donut). Other features included were a 3.2 inch screen with a resolution of 320x480 giving it a pixel density of 180 ppi. It had 192 MB of RAM and 256 MB of ROM. It used a Qualcomm MSM7201A chipset, a 528 MHz ARM 11 CPU and an Adreno 130 GPU.

The Nexus devices (excluding tablets) released were the HTC Nexus One, Samsung Google Nexus S, The Samsung Galaxy Nexus, Nexus 4, Nexus 5 and the Nexus 6.

Fast-forward 2012, HTC came up with the One X, a smartphone that was to compete with the iPhone 4s and the Samsung Galaxy S III but it did not sell too much as it was not as popular.

Before the smartphone revolution, BlackBerry phones were the most popular. However, after the iOS and Android became more popular over the years, BlackBerry's sales crashed. BlackBerry tried developing a new OS and released the BlackBerry Z10 in January and the Q10 a few months later. However, this was not enough to keep up the sales of BlackBerry and they went tumbling down. BlackBerry now has it's new BlackBerry Passport, a large phone with a big screen and a QWERTY keyboard. It is an Amazon.in exclusive in India and it is being bought my consumers (surprisingly).

Let's go back to the iPhone. Long story short, it was a huge success and it still is. The iPhone 4 was a huge success. It was covered in glass- the front and back with a stainless steel edge as the antennas. Remember "antennagate" ?

The iPhone 4s (here, 's' stands for Siri) was unveiled a day before Steve Jobs' death. This came with an upgraded chip and Siri, Apple's voice assistant.
Then came the iPhone 5, which was much thinner than the 4s and it had a bigger screen. It went from a 3.5 inch screen to a 4 inch screen, only increasing the height. Other differences include an upgraded chip.
The iPhone 5s (here, 's' stands for Sensor) came with a Touch ID and an upgraded chip. A new colour was also unveiled- a champagne gold colour. Apple also unveiled the iPhone 5c ('c' stands for colour), which had the same specs as the iPhone 5 but was available in different colours along with a hard plastic back shell.

The iPhone 6 and 6 Plus came with a change in design, thickness (a funny story), NFC, bigger screens and a better display and Optical Image Stabilization in the Plus. The iPhone 6 has a 4.7 inch screen and the 6 Plus has a 5.5 inch screen. Some iPhone 6 Plus users complained that the iPhone 6 Plus would bend in their pockets and this was termed "bendgate".

2009 was the year when the smartphone uprise began. Samsung announced its Samsung Galaxy S in the same year Apple released their iPhone 3GS. The Samsung Galaxy S used Android 2.1 (later upgradable to 2.3 Gingerbread) and Touchwiz 3.0 and from here on, Samsung ranked second in terms of Smartphone sales, just behind Apple.

I hate to say this, but Android (at least in India) became popular due to the Samsung Galaxy SII. While Samsung has truly "innovated", it has also come up with innumerable gimmicks which the general public somehow seems to love. Remember S Voice, Air View... all leading to one thing LAG.
We have more and more Samsung phones coming out at least once a month- all of them with the same or similar design as the Samsung Galaxy S III. However, they have now began changing their designs... by copying the iPhone. The Samsung Galaxy Alpha is one example. However, Samsung's sales are now falling (thankfully) due to Chinese smartphones and smartphones from brands like Motorola and Asus.

In recent years, Chinese brands like OnePlus and Xiaomi have been known for their smartphones with flagship specs and a low price. Xiaomi's popularity increased when Hugo Barra left Google for Xiaomi.

Indian companies like Micromax are also expanding. The implementation of Android One by Google started in India, producing budget phones that are to receive regular updates for two years.

Since the smartphone revolution, we have seen a huge evolution of this industry. Smartphones started off as having 528 MHz single core processors with 192 MB of RAM and now we have Smartphones with a 2.7 GHz quad core processors with 3 GB of RAM.

Modular phones like Project Ara by Google and Puzzle Phone have been in the news recently, but we will not be seeing them in markets anytime soon. This is a huge step for smartphones as users will be able to replace any part of their phones, making it usable for a long time. They have the option to change the battery, the camera and other components to boost the performance of their phone.

But how would a smartphone look like two years from now? I designed a rough diagram of what a smartphone would be like two years from now. (I apologize for my photoshopping skills not being as good as +Aabharan Hemanth's.)


Major upgrade in specs in two years is what I predict along with new Android versions (first Android 'M' and then 'N') with more or less the same Material Design UI. Dual speakers are now becoming more popular, as we have seen in the HTC One M8  (Boom Sound Speakers) and in the Moto X 2014. Some features I haven't mentioned are gesture controls and voice commands.

So, this is the end of my first post on The KHMD Blog. Feel free to +1, comment (that includes pointing out my mistakes) and or share this post. More content to come.

29 Nov 2014

Electronic Serendipity


Let me start of by telling you how my weird obsession with electronics all started off. Once upon a time, in a land far far away, nothing happened. But simultaneously, in a parallel universe, my house had its doorbell jammed, which was just a matter of scaevity and will of God, I presumed, but my curiosity failed to accept this, it took full control of my body and it got me dismantling it and getting to the bottom of this. I spent that day experimenting with that sad piece of electronics but at the end of the day, I was still nequient about the productivity of the day just when there was a spark. The spark was both in the doorbell and in me. The one in the doorbell caused a burst of excitement and adrenaline for that moment but the spark in me got me working on many many more projects in the future, of course with a bit more success than that doorbell.

That was somewhat how I started working on my projects but before I blew up the next thing in my house, I did read a lot about this field of science and engineering.

I'd like to pass on a condensed version of what I think is required for you to know before you break open or blow up stuff, and finally build something that people will go "Ooooh!" about.

The first thing I'd like to put out for you is      

The difference between  electrical devices and  electronic devices.

Well, the question seems simple until you try to answer it yourselves and when you ponder over those two word-electrical and electronic, the difference seems inexplicably hard to describe in words. Let me save you the effort of doing that and give you the answer. The answer theoretically lies in how devices manipulate electricity to do their work. Electrical devices take the energy of electric current and transform it in simple ways into some other direct form of energy ( most likely light, heat, or motion). The motor in your washing machine, which swirls around your clothes once you get them dirty converts electrical energy to mechanical energy. The heating elements in an iron box turn electrical energy into heat so you can press your clothes once they're done drying.

In contrast, electronic devices do much more. Instead of just converting electrical energy into heat, light, or motion, electronic devices are designed to manipulate the electrical current itself to coax it into doing interesting and useful things.

One of the most common things that electronic devices do is manipulate electric current in a way that adds meaningful information to the current.

What used to be simple electrical devices now often include some electronic components in them. For example, your washing machine may contain auto detergent release mechanism based on time intervals that attempts to keep the clothes clean with the perfect amount of detergent. But yet again, things which may seem complex, for example your mobile phone, has simple electrical units like batteries in them too. This is the primary reason that the distinction between electric and electronic devices is a bit blurry.

Now it may be easier for you to comprehend what we're talking about when the two terms we talked about are mentioned ahead in time. Though for this section, we mainly deal with electronics and electronic devices.

"Other kids went out and beat each other up or played baseball, and I built electronics."


were the exact words of Robert Moog, an American inventor famous for his Moog Synthesizer. The significance of the mention of this quote is not to inspire you to give up sports, or anything for that matter, but rather to give you a bit of an inspiration to explore and admire the implementation of electronics and technology in various fields right from robot boxing to exploring Mars. The scientific amalgamation that has ameliorated situations in history.
 Electronics is everywhere around you, which is precisely why it is required to innovate and invent keeping up with the technological expectations of mankind for which you don't have to be a factotum nor have hypermnesia but just be quite who you are.
The first thing i suggest you do is have an insight on electronics with a bit of "What?" and "How?" after which you can work on your first project to give you the motivation and satisfaction helping you climb up the ladder of success. One more important thing is that, I think you should have an aberrant thought process which will greatly help you in this field of learning.

I suggest you watch this video to get a basic ideas in few concepts you'll need for your projects.





You can also check out this link for more on the same topic.

The next step to build your first project would be to get the required materials you need.
Here's a checklist you may use.
1) 1K ohm - 1/4 Watt resistor
2) 5mm red LED
3) SPST toggle switch
4) 9V battery connector
5) Breadboard

NOTE: To purchase the parts listed above, you can either buy them online at () or at an electronics (not electrical) store. I usually buy my parts at SP Road, Bangalore, where you will find a large number of electronics stores.

If you look at the schematic you will see that the 1K resistor, LED, and switch are all connected in series with the 9V battery. When you build the circuit, you will be able to turn the LED on and off with the switch.

You can look up the color code for a 1K resistor using the graphical resistance calculator. Also, remember that the LED needs to be plugged in the right way (hint - the long leg goes to the positive side of the circuit).

If you decide to use the switch, open and close it to see what happens when you make and break the circuit.
To tell you the truth this wasn't my first project but I wish it were.

At the moment I am working on a small scale IoT project (Internet of things). Here's a short video to give an insight on that.



IoT is one of the most probable near future technologies that is going to run our worlds and everything around us.

For any complex electronic integration system, there always is an amalgamation between software and hardware. The simple projects and electronics basically comes as one part of technology, the hardware section mainly but when you start exploring into technology, coding and programming became a considerable part of your project. One of the main reasons that i started of with programming is electronics. This is exactly how electronics got me learning so much more than the stereotypical boundaries that comes with its name. So I'd like to tell you this, work with electronics regardless of whether you find it interesting or not when you start off, trust me it will trigger a spark in you and at the least, help you navigate to what you love eventually in the field of science and tech.

"DO NOT FLOCCINAUCINIHILIPILIFICATE."


23 Nov 2014

A programmers best friend is "man"!


Yes, it maybe true that a dog is man's best friend, but if you ask a programmer, he will tell you that his best friend is indeed man.


Man? Am I saying that a programmer's best friend is another man, as in another programmer? No, what I am talking about is this nice little utility that comes with most linux distributions ( a good reason for you to switch to it if you're a programmer, not using linux), called "man".

"man" is command-line tool that can be used to access documentation for a wide range of topics, from the linux kernel to programming language reference manuals like the "user-contributed perl documentation" etc.  

By now, I assume that you have guessed that our good friend, "man" is actually short for "manual". So it naturally follows that each of the pages accessible from "man", are called "man pages". 

So this is what wikipedia has to say about "man pages":

man page (short for manual page) is a form of online software documentation usually found on a Unix orUnix-like operating system. Topics covered include computer programs (including library and system calls), formal standards and conventions, and even abstract concepts. A user may invoke a man page by issuing the man command.

Now, what is a man command, and how do we command this "man" to show us documentation?

Well the syntax so to speak, for looking for a "man page" using man, is as simple as typing:
user@linux:~$ man foo
at your terminal and  hitting return, and "man" will run through all its "man pages" and find you the entry for in this case "foo", if it exists. And if it couldn't find it, our "man" will reply with the message: 
No manual entry for foo
Nice! So how does a "man page" look like if we actually ask "man" for something more sensible? Say printf?

man printf

That was the man page entry for printf using man (version 2.6.3)

Great, we now have a tool that helps us find information about printf! Yes, it has documentation for printf, but theres a whole lot more! You can find information about header files in c, or some function in say perl(if the perl-documentation is installed in your system), or you can even find information about man itself!




As a side note, if you have a linux computer, try using man to find the man page for something like stdarg.h (which will reveal the secrets behind printf), or something as simple as time. To do this, all you need to type is man stdarg.h or man time, and you will get some interesting results!

So the next time your coding on linux, and reading some code or maybe writing some, and your not quite sure what a function does, or don't remember its syntax, remember this: "man is your best friend!" and magically you will have all the answers! 

Cheers!

20 Nov 2014

Anybody Can Learn

Programming is, in a way, like writing poetry or music. It is an intellectual activity where one creates structure out of nothing. And the things one creates can have significant value to others.Some people enjoy taking things apart and figuring out how they work. Programming takes this to another level--not only do you figure out how things work, but you can also figure out how to write code to make them do things differently. It is intuitive and results of your work are known instantly. And you are learning new things constantly.If you are bored, you can always inject new life into a problem by trying to abstract it, or otherwise solve a larger problem simultaneously.

This is what got me into web development and here is some stuff that I've created:



See the Pen jEIqg by Sameer Kolhar (@kol123) on CodePen.

Now Go ahead and paint "I know Code!"

See the Pen Oil Paining by Sameer Kolhar (@kol123) on CodePen.

So if I was able to do it! Then you will also be able to it too! The only thing you need is a goal.This goal that you set for yourself and is specific to you and should be achievable in the time that you are willing to devote to it. It can be really fun if you get the hang of it and start to make yourself better at it. Reading and understanding code is very important in making you better programmer. Mathematical skills are required to simplify your programs and make them more efficient. 

The most important of all is that "you DO what you love and love what you do". I know you would've heard it from a lot of people but now it's high time you put it to practice. Just have fun! 


Technology is the building block of the next-generation and which you are going to be a part of and build for. This is your time. This is your canvas.

Go ahead! have fun! :D

I would also recommend you to read the following: How to have fun Programming

To get started with web design, check out our previous Guide to Resources


19 Nov 2014

This is CS50!


"Demanding, but definitely doable. Social, but educational. A focused topic, but broadly applicable skills. CS50 is the quintessential Harvard course."

Those were the words of an ex-CS50 staff member, describing CS50 in a truly apt manner. So what is CS50 really, and why is it on this blog?

CS50, in the words of its instructor David J Malan is "an introductory course to the intellectual enterprises of computer science and programming". Its a course taught to undergraduates at Harvard University, but is in no way limited to an undergraduate audience. It is a course intended for people with no prior programming experience, and has audiences all the way from the age of 8 to 70+.

The course dives into various branches of computer science, covering a wide range of topics like  abstraction, algorithms, data structures, encapsulation, resource management, security, software engineering, and web development. Languages include C, PHP, and JavaScript plus SQL, CSS, and HTML. Wow, low level programming in C all the way to abstract web programming, and that too all in one package? How can it get better than this?  Well the best way to find out, is to take the course!

For those of you already excited to close this tab, and google cs50, I'll save you the pain of scrolling by  quickly  describing the ways to take CS50 online, at the comfort of your homes!

How does one take up CS50? ( Link )

The course is primarily taught to harvard undergraduates on campus, but it is also offered  online, for free on the edX, platform (A joint initiative by MIT and Harvard, to offer courses from various universities online.). There are two ways to approach this course on edX, either go for an ID verified certificate ( Costs a few dollars, you will get a certificate on completion of the course, which verifies your identity), or go for the Honor - Code certificate ( Free of cost, but they don't verify your identity, but give you a certificate in your name if you successfully complete the course.), or just audit the course (Watch the lectures in your free time, and not really aim at finishing the course as per the deadlines). The on-campus version of the course contains lectures, and other sessions, which are recorded, and put up on edX, for the edX version of the course called CS50x. To use edX,,  you will need to sign-up for an edX account or login through either a google or a facebook account.

Links to CS50x's homepage on edX.
Course's official harvard website: cs50.net

The course will begin on edX in January 2015, with updated content from this year's course iteration at harvard. The current course on edX is based on last year's version of the on-campus course.

I suggest that those of you interested in completing CS50, start from 2015, as the course will contain the latest content.

Note that the course doesn't have any fixed deadline for the problem sets on edX, but the entire course has 1 hard deadline (usually the end of the year), where you will need to submit all the problem sets, and 1 final project.

About the course ( In more detail now)

The course is structured over a period of 12 weeks, each week covering a new topic. Every week contains 2 lectures ( each about an hour in length, taught mostly by the course's instructor Prof. David J Malan, briefly going over the topic for that week ), sections ( A more detailed approach to concepts highlighted in the lecture taught by the course's awesome teaching fellows), and a problem set.

Problem sets inspired by real-world domains of biology, cryptography, finance, forensics, and gaming. Designed for people who want to pursue computer science and those who just want to get to know the field better,  with or without prior programming experience.

The course starts from scratch, diving into the world of computer programming, using a nifty tool from MIT, called Scratch. Scratch is a graphical programming language, allowing one to build interactive, visually rich programs by using puzzle pieces which only fit together, if the order makes sense, akin to real world puzzle pieces.

Then the course transitions from the world of scratch ( which one can get too familiar with, in a matter of hours), to the world of system programming, with C. Various concepts learnt in scratch are easily extendable to C and any other programming language in general, and this course will highlight the similarities across many languages in the domain of programming. The C part of the course which lasts around 6 weeks, will cover all the fundamentals of programming, and also teach you to read, understand and modify code written by others (which is a must when you actually work on projects with lots of people coding). They will also introduce you to programming graphics in C thereby introducing you to the concept of libraries and APIs, that let you create windows like the one you are reading this blog post in.  After C, the course becomes a bit more fast-paced so to speak, moving away from C, to the rich interactive world of web development. The objective of this part of the course, is not so much to teach you web-development, but to teach you how to teach yourself web-development. The course will introduce you to the internet world, and give you an overview of the various methods you can use to create interactive, dynamic web pages, that look stunning.

The climax of the course, is its Final Project. The final project, is where you will be able to put together everything you have learnt from the course, and come out with your own software application. The nature of the project and its implementation details is entirely your choice, and the edX version requires you to only upload a video of yourself, describing and presenting your project.

Though the course might seem a bit overwhelming, especially if you are just starting to understand programming, remember that Google and Wikipedia are your friends, and members of this community will be able to help you out if you get stuck.

As a side note for those who do take up CS50 on edX seriously, ensure you watch the sections thoroughly, even if you feel its a bit long, as they contain the most amount of details on the various topics.  The on-campus version of the course will have quizzes (like a test paper), but the online version omits this part of the course.

For a more in-depth details about the syllabus, click here.

While, the purpose of this article was to introduce you to CS50, and hopefully inspire you to take this course, we also want to create a group for takers of CS50 in this community, this is only to help you guys out if and when you get stuck, and possibly create an opportunity to showcase your final projects, at school during the annual IT fair. To be a part of the cs50 community, just fill in this google form (Link).


Lastly, check out this video of  Prof. Malan, talking about CS50x and what's in store.





Guide to Online Resources

Here are a few links to the best courses and resources available on the internet. I'm sure a few of them will be new to even the most experienced programmers in our community. 

  • Codecademy - Interactive tutorials that teach Python , php , HTML & CSS , JavaScript , Ruby etc.
  • Code.org - Innovative methods of teaching programming. Want an example? This site features a war game that teaches JavaScript and Python!
  • Java for Android - Crash Course - Perfect build up to getting started on Android without having written code before. Skip the first few posts of this course if you have programmed in C++/Java before.
  • Mkyong - Lot's of beginner level Android Tutorials
  • Vogella - Great site to learn Android Development, Java, Version Control software, Web programming, Algorithms and much more in a truly structured manner. 

Blogs

  • Programming in Ecstasy - The Philosophical views of a veteran "psygrammer".
  • Jay Bosamiya's Blog - A blog written by an Alumnus of SKCH. He's currently pursuing Computer Science at IIT-Roorkee.
  • XDA Developers - Not really a programming related site, but a great place for one to get their hand's dirty with Android custom firmware, Open source projects and gaining experience in a world-class forum. You Don't have to be a programmer to be relevant on XDA. And don't forget to register yourself there.


YouTube Channels

TheNewBoston , Mybringback & Derek Banas - Loads and loads of tutorials on just about everything. 

Stay tuned to read the post written by Arjun Rao talking about a Harvard course that you MUST take at least once in your lifetime. 

I'm sure many of you know about a lot of different resources. Please add them in the comments. This post probably just scratches the surface. Stay tuned for detailed posts for getting started with each track. 


And finally something to leave you inspired