+91-9464001760
29-404, LPU, Jal-Del G.T. Road - Phagwara, PB, India
09:30 am – 05:30 pm

Blogposts

IoT-based HTTP Webserver (DIY)

Monday, February 18, 2019 9:43 AM

Hello Everyone!

 In this post I am going to talk about an Internet of Things (IoT) project which demonstrates the HTTP web-server functionality (just like regular web-servers which run on powerful desktops) on way less powerful hardware. I chose NodeMCU board based on ESP8266 microchip which integrates GPIO, PWM, IIC, 1-Wire and ADC all in one board! It has USB-TTL included with plug & play and has around 10 GPIOs where every GPIO can be PWM or I2C... Well, without getting too nerdy about it, let me explain what I did with it.

 Any IoT device should be designed with a Service-oriented Architecture (SoA) to offer its core functionality to the end-users. If you look around any smart device usually comes with some way of communicating through either via Bluetooth or WiFi, so I was thinking maybe to use NodeMCU to act as a HTTP webserver since it comes with inbuilt WiFi, and let a service designed for the end-users to trigger an event on the device itself. In my case, i decided to use a small inbuilt LED which is conveniently placed on the NodeMCU board itself which comes prebuilt with the board.

 Thereafter it took me a couple of hours to put together and test code using the Arduino IDE and used serial monitor tool to review the internet communication activity on the NodeMCU, which to less of my surprise it just worked!  

 The code enables persistence for auto-connection to the given WiFi Router using pre-supplied login credentials for obtaining an Internet Protocol (IP) address. This means that the moment there is power, the IoT device would auto-connect or keep trying unless it does that! Having an IP address and the whole system listening on port 80 means any third-party device or system can connect to it and exchange information or data. In my case, I just used my laptop’s web-browser to connect to the NodeMCU’s IP address and be presented with following screen:

  

Turning on the LED on board was simply a matter of a click on the button!

 

Thank you for reading and I hope you’ll find this post useful and in case if you have any questions then please feel free to drop a comment below!


Blog News Update – February 2019

Monday, February 18, 2019 4:04 AM

Hello Everyone,

 Just a brief announcement regarding the new and upcoming content on the blog. Last year or so was spent on Internet of Things (IoT) related areas where I wanted to experiment more on Internet of Things (IoT) and mixing and merging it with Blockchain technology.

 Blockchain technology had kept me interested for a while before I decided to build one application using it. The purpose of the application was to just have a decentralized chat server for the blockchain network consisting of nodes. Basic idea was simply to implement software application for the nodes participating in network and keep the ChatLedger database file updated with chat transactions happening between various nodes/clients. Following shows the network nodes communicating with each other and discovering new clients/nodes joining or leaving the network:

For some reason, I got obsessed with IoT and it struck me really badly that I wanted to somehow combine it with the blockchain technology as it made lots of sense for these technologies to work together. At one point of time, I decided that I need to start teaching a course about IoT which I am currently teaching at the University to third year undergrad students since January 2019. So far it has been a great experience tinkering with IoT, Sensors, and Electronics and trying to build an IoT device with a purpose.

 I thought it would be a good idea if I start posting about some of the advanced projects I am working on and make this blog little bit more useful for my students among others.


State of Artificial Intelligence Today

Monday, February 18, 2019 2:23 AM

Hello Everyone!

 In this post, my desire is to pen down few thoughts on elusive artificial intelligence to describe current state and somewhat ponder over big claims made by tech companies competing in this market space. If you look around seriously in tech startup scene, most of the new upcoming tech product companies are ‘claiming’ to have figured out the AI puzzle and worked out-kinks to implement the technology.

 AI-driven systems must have an ability to process large amounts of knowledge. I mention 'knowledge' and not 'information' for a reason in this statement because having knowledge of something enables someone to follow the shortest logical path to attaining success. On the other side having just information about something merely enables awareness at best. A system built using AI must have or be capable to extract and differentiate knowledge from ‘information’ where information must be seen as a fundamental requirement for the AI system to start work.

 Here I would like to also point out two variations of knowledge which needs to harvested on-the-go. I classify it as dynamic knowledge vs. static knowledge. Dynamic knowledge is derived, extracted, and analyzed in real-time from raw data as soon as the system goes live and information is processed for further action. Static knowledge on the other hand is, as on date, the hardcoded knowledge as static information which doesn’t change often. For extracting actionable static knowledge, machine learning techniques have been developed to produce actionable insights from vast amounts of raw data. But we know as humans, that static knowledge won't serve us in every situation we're facing. Imagine as humans if we experiment this static knowledge in a social scenario as a rule of "One should be nice to other people" and apply this rule to all interactions, then even in situations where "One should not be nice" e.g. someone is trying to kill you, you can't be nice then. This means that the knowledge is subjective to the situation. Rules of engagement with other people change.

 Clearly, the emphasis needs to be on being able to produce dynamic knowledge from information gathered. There is a downside to all this and that is the well-known Utility Problem. For an AI system to be smart, same system needs to be designed with AI architecture capable of learning relevant knowledge from raw data or plain information without the nasty consequence of slowdown in overall functionality using clever optimization-related algorithms.

 Thank you for reading and I hope you’ll find this post useful and in case if you wish to add any additional point to the post, then please leave a comment below.

Shocking Flaws in Our Education System

Thursday, December 20, 2018 10:10 PM

Hello,

 In this post I am going to highlight and pen down few fundamental flaws of higher education system in an easy-to-digest manner for the minds. Here I have attempted to describe few core issues, and will be making a case as to why, by the year 2030, none of the Indian educational institutions will be in top-20 or 50 or even in the top-200 universities in the world.

 Fundamental Flaw No-1: Factory Model of Education

     Sir Ken Robinson, in his brilliant TED Talk, described the biasness of our education system towards producing industry centric outcomes. In his words, “the whole education system was designed to fulfill the needs of the industrial revolution”. He’s right. We do classify our students in batches, process their learning in a manner similar to what is done in a typical factory’s assembly line. Defective parts are generally chucked out with marginal attempts to recover their value in the final product. Figures show rise in the percentage of students who drop-out or commit suicide because they can’t cope up with the mind-bending realities of the educational system [1].

        In the past, if you had a degree then you could easily land a job, now degrees are everywhere. Economic realities of educational system is producing academic inflation. Therefore, the value of degrees have fallen down substantially over the last few decades to the point that corporate houses have started to overlook qualifications due to the industry-academia gap. Finally, the output from current factory model of education is, quite literally, a big zero. Lack of employability is a major concern across India [2].

 Fundamental Flaw No-2: Lack of Understanding of Human Creativity and Learning

      Humans as intellectual creatures develop themselves organically. They learn from their mistakes and become better overtime with experience. Education system on the other side, by virtue of being split into varied levels of education, produces a nasty consequence where it expects certain level of pre-existing academic ability from a student. Anyone not having the required academic ability suffers tremendously and is further pushed down the pipe labelled as a ‘poor’ or ‘below average’ student.

      Furthermore, there is very little attention given to human creativity during the learning process. Imagine a student is able to reach an answer to a question, the evaluative judgment for marks is mostly based on the given final outcome, i.e. the accuracy of the answer. We lack a better tool to judge ‘how’ that student resolved the internal ambiguities of his mind and creatively reached the conclusive answer. There is no measure employed or devised to be used at this massive scale for measuring an individual’s creativity. In fact, on the contrary a creative individual can be perceived as a non-conformist or ‘poor’ student.  

 Fundamental Flaw No-3: Knowledge delivery and Meritocratic Measurements of Academic Ability

     To understand this, If you think of education system as a delivery vehicle for disseminating scientific knowledge. If you compare it to any religion, you’re going to have to conclude that religions outperform our education system in terms of effectiveness and learning outcomes.  Religions do something quite similar in a much more effective way than the education systems. Utilizing most senses of mind/body to deliver the message they intend to deliver using auditory, visual, and verbal means exceptionally well to engage and disseminate knowledge from scriptures. Furthermore, they utilize celestial events to impart daily discipline and employ concept of communicative repetition for reiterating or reinforcing the prescribed teachings to their followers. Almost seems too good to be true, but religions employ better and varied knowledge delivery mechanisms than our current education system.

        For lack of a better way to find out whether or not a human has learned the knowledge, we have put the evaluation systems to strictly measure the elusive academic ability. Beneath lies the idea of meritocratic academic achievement, which states that only those human should rise in societal hierarchy who possess the most amount of academic ability. The Reality, however, is much different as there aren’t many top businessmen, politicians, and successful wealthy humans who became who they are today just ‘because’ of their academic ability. Honestly, If you look around, you’re more likely to find someone successful ‘because’ they didn’t take education system’s promises seriously than those who had stick to it, and in the end, couldn’t achieve success as they once wished for.

 Fundamental Flaw No-4: Lack of standard metric to gauge ROI from investment in formal education

       Purpose of the higher education system is to equip us with required knowledge, skills, and competencies and help us progress into the future that we can’t grasp today. People invest massively in the education system while at the same time no one has a clue how the world will look-like in coming 5 years, obviously everyone is supposed be educated for it.

        Preparing for future isn’t necessarily a bad strategy. But the key question is whether you are better off without the long-term investment in educating yourself?  The answer to this question lie in analyzing Return-On-Investment using a standard method. This standard method of measuring ROI is missing.

Thank you for reading and I hope you’ll find this post useful and I will post more about our education system in the future.  In case if you wish to add any additional point to the post, then please leave a comment below.

3 Practical Rules of Software Development

Friday, October 19, 2018 9:10 PM

Hello Everyone!

 I am going to enlist 3 most important rules of software development from the perspective of a programmer. These rules are not presented in any sequence of preference, however these rules are a part of future posts I will make regarding software development.

 Rule No 1: You must always continue to learn concepts about programming. This is very important as most of us programmers tend to stop learning once we reach a certain learning threshold, often achieved after mastery of one technology. New knowledge brings new possibilities and problem solving measures.

 Rule No 2: Plan and prepare Software Requirement documentation of all the features (feature-wise and version-wise) before coding. There is an inherent tendency in us programmers to not plan much and just jump into coding first, which is okay if you’re working on a temporary concept or idea, but it’s really not a good practice if you’re working on a serious project requiring diligent planning. The challenge is to stop the first urge pushing us to begin coding, and instead focus on painting a picture of how the software would work. Using a mind-mapping tool is absolute essential to begin planning the software requirements for the intended features.

 Rule No 3: During your big programming project, if you hate going back to coding, then love of developing software needs to be ignited again. It so happens with everyone that after putting so much effort and energy into a project, the damn thing becomes boring to continue on our own. Then we start looking for external motivation and lose the interest and zeal to accomplish that ‘To-Do’ List of problems to be resolved thought earlier. This is normal and a part of software development process. When this happens, make sure you take a break, put your mind off to something else, i.e. listening to music, watching videos, exercising etc. Then later on think about the reasons why you started this project and not get bogged down in the details of the project. Look at the big picture, plan, and attempt coding again. If you’re stuck, then move on and try a different approach.

 I hope you’ll find this post useful and I will keep posting new practical rules of software development in continuation to this post in the future.  In case if you wish to add any additional point to the post, then please leave a comment below.

Open Source Technology

Saturday, August 18, 2018 9:10 PM

Hello Everyone!

 Today, I wish to elaborate on few things about open source software and the importance of creating and sharing it for the benefit of all.

 Just like any other commercial product, most software comes at a cost with detailed legal copyright claims restricting any third-party modification, distribution, or utilization. In most cases, it is expected that anyone with an intent to lawfully violating copyright would obtain explicit permission from the legal owners. Large corporations have benefited from such legal mechanisms which, while protecting the intellectual property, allows generation of revenue through sale of proprietary software.

 Open Source software comes from a different notion that all technology should be free and made available to anyone without any cost. Just like the internet, the open source software is available free of cost to the end users. You may think that internet is not free since you pay your ISP (Internet Service Provider) a hefty sum each month. You’re right and wrong at the same time. The internet is in fact free, but the process of accessing it is not. Open source technology enables the use of software in the same way we use the internet. Just as internet serves the need of free communication for humans, the open source technology serves the need of free functionality.

 Technology makes us better when we make better use of technology. The better use requires us to create better quality software but to have the impact we need, the software needs to be offered free of cost. You may think that developing quality software would take lots of hard work, effort, time, and money; then why offer it for free?  Following are a few reasons: 

1.       Eliminating dependence on internal or external paid quality assurance service providers.

2.       Developing the software free of cost or getting paid to develop free software.

3.       Obtaining training, exposure or experience via practicing prototype stages before the production run.

4.       Free feedback from the early adopters and enthusiastic beta-testers.

5.       Setting the platform for the next big thing out of your garage.

 

I hope you’ll find this post useful. In case if you wish to add any additional point to the post, then please leave a comment below.

Keeping your Windows PC Healthy!

Friday, May 18, 2018 7:13 PM

Hello Everyone!

 

In this post I am going to talk about keeping our computers running at optimum level in terms of performance, speed, safety, and ensuring maximum availability of resources. This post mentions certain guidelines for achieving the same.

 Let’s begin.

 Your computer is a breathing machine. It needs free RAM, CPU and Hard-disk resources to accomplish the necessary computational tasks that you, the user, throw at it everyday. Therefore, if you wish to have your computer performing at the optimum level, you need to take care of it.

 Following are certain guidelines regarding general care of a Windows PC: 

1.       Determine what you need to install instead of installing everything. There is an inherent tendency in us to collect resources for our virtual survival. We tend to collect tools, resources, and knowledge a lot more compared to what we actually need or will use. Typically, most people just require a basic set of tools, i.e. a browser, word/spreadsheet processor, media player etc. Advanced users may need to extend capability of their computers by installing certain additional tools but again installing what you need is still applicable. Be wary of the random pop-up windows offering to install that very important software you really need desperately for free. Remember, when a software product is offered free, then it’s you the user the main product.

2.       Stay organized, use appropriate file/folder names, and develop a logical folder structure. You have to organize your data and files into logical file and folder structures on the hard-drive to yield maximum productivity in the long run. Computers LOVE organized users and allow them to become more productive in their endeavors, therefore it is very important to follow a strategy that allows you to logically add information (files/folders/data) over time into the given folder structure.

3.       Frequently remove or move the junkware, old data and backed up files. Keep an external hard-drive handy to serve as your backup storage location to dump files you no longer need. But remember if you’re not putting them into a logical folder structure, then it is less likely that you’ll ever find what you need in an emergency.

4.       Before using an Anti-Virus software, understand how they work. Most anti-virus software work on the model of general insurance and similarly they provide you coverage over prevention of a certain type of fear, i.e. malicious software or known vulnerabilities. You cannot fully trust any anti-virus software to make your computer 100% safe as they can only offer protection over previously known viruses. Also, don’t forget that anti-virus software are just a piece of software only. That means, they themselves can also become target of hackers or viruses. So, what is the best strategy to deal with such issues? Contrary to the popular opinion, I’ve found out that having no anti-virus software have kept my computer most safe, bug free, and outperforming. Of course, certain system level tools were always employed such as Windows Firewall and Windows Defender, but no fancy anti-virus software was ever installed. I feel the reason this has worked for me in the past is that I trust Microsoft more than any anti-virus software maker since I believe it is in the best interest of Microsoft to have its operating system fully secured with necessary software than to rely on third-party software for safety and security.

5.       Turn-off Windows Features you don’t need. Microsoft Windows OS is a collection of various technologies developed inside or outside Microsoft company, which means it will have added support for certain features that many of its users would never use since Windows OS is designed to fit needs of a variety of users. Bottom-line is that a typical Windows PC user is never going to need many, if not most, of its inbuilt features. So, it would be a wise thing to turn off those you don’t need.

6.       Consider a hardware upgrade for better performance. Some of us have a tendency to extract maximum performance juice out of a machine designed to specifically give a definitive level of performance. It is likely that besides some simple or advanced level tweaks, the computer shall be limited by the availability of maximum hardware resources, i.e. RAM, Hard-disk space, CPU Processing Power, and Video Memory etc. If you find yourself not satisfied in terms of hardware performance, then it is a wise investment to simply upgrade the hardware.

 I hope you’ll find these guidelines relevant for keeping your Windows PC running at optimum level. In-case if you wish to add any additional point to the post, then please leave a comment below.

Effective Use of Tech Tools!

Sunday, March 18, 2018 11:22 AM

Hello Everyone!

 We’re going to talk about ‘Tech Tools’ today, especially the ones which make our technology related endeavors possible.  Tech tools are designed for enabling quick completion of certain tasks which otherwise make it difficult for a user to complete on his own.  Our world of technology today is filled with a lot of them which often get users confused regarding which tool to use among the multitude of similar tools that are available.

 The idea behind effective use of a tech tool is that to filter-out the one you need to accomplish the task at hand effectively out of the clutter of choices that are there to confuse you. In order to make this confusion go away, I’ve developed a list of core practical principles to be used when faced with dilemma of selection of tech tools. For every technological problem, there exist a set of tools which can effectively lower the user’s effort by either automating the task at hand or dissecting the task further into smaller subset of mini-problems that can be resolved individually and easily.

 1. A tool can either resolve a problem, or get multiplied with the problem itself. The hard part for any user is to find the tool and learn it quickly before it can be implemented for a problem. Good tools are simple and effective in problem resolution. But it is to be kept in mind that over or incorrect utilization of a tool can give rise to more problems.

2. Don’t get obsessed with tech tools. It doesn’t matter which company have produced the tech tool as long as it fulfills the intended purpose and requirements of the task. Remember that you’re trying to solve a problem while searching for the tool, so focus on solving the problem and not get fascinated by the tool itself. It feels good to fill your arsenal with great tools, but it’s of no use if they keep on sitting on shelve without ever being utilized.

3. Tools can help you only if you need their help. This basically means that you won’t be able to effectively utilize a tech tool unless you really need its assistance in a project or problem you’re trying to solve. Top-down approach never works as tools can never guide you where to use them, it is the problem which tells you what it needs where you the user needs to figure out whether a particular tool can assist you in your endeavor. Tech tool producer companies try this really hard to convince their users that first get the tool, and then think about the problem. In reality, it works the other way around as think about the problem, find the tool to solve it.

 I hope you’ll find these tips relevant to whatever problem you’re trying to solve. In-case if you wish to add to the post, then please leave a comment below.