Saturday, March 18, 2017

Mistakes do not stop me


I am very sure I'll be committing mistakes, it will not stop me.

Mistakes are consequences of doing, they should not prevent anyone to move further. If you acknowledge a mistake before it happens, you will have the presence of mind to avoid it. If not, it's an accident.

No matter, a mistake, as a result of an action, should also not be taken lightly. Be responsible by acknowledging it, internalize by knowing why and how it happened, and learn from it. Any repairs or actions related to it should be proactive moves such that you are committing to strive at least to avoid another in the future.

Further, mistakes makes us human. Do not aim for it, try to avoid it, and just keep moving forward. There is no justice for mistakes than the lessons it offers after if it happens or not.

Endure through mistakes and no mistakes will be greater than the success you will soon harvest.

Persist and never cease to strive and be better.

Thursday, February 2, 2017

Measuring the performance of a software developer

Sometime last year, I was asked to evaluate and identify the best programmer from a number of graduating IT students. The projects have been preselected by the faculty members. The criteria for the selection is not specifically defined. They trusted me, being in software development for sometime, that I will be able to gauge who will be awarded of the contested award given to graduates of the Information Technology bachelor's degree.

To provide me with some insights on how to go about the evaluation, I had to ask some of the faculty members who identified me to be the "judge". One of them presented that the best programmer should be the one who used a well-known development framework in their projects. Another argues that someone who developed their own framework is the better programmer -- having "invented" his own framework.

Another faculty favors the programmer who had developed the most number and more complex system features will determine the best programmer. Another expounds to include the scope of the system -- the system solves a wide variety of problems.

All the projects started at about the same time. Each project are developed by about two to five individuals. From each team, one stands out to be the project leader -- most often, the developer-lead of the team. The cohesiveness of the development efforts vary from each team with the complexity of the individualism among the members. Some instances, from among the team, only one is doing the programming, while the rest will do something else - financial support, documentation, etc.

The determination of the best programmer ignores the collective effort of the team. Be it that the system is developed by one person or by the whole team, the selection dictates the completeness of the presented system. Technical expertise as a baseline criteria was also not considered.

I pity those good developers, idealistic, all-knowing, but are unable to produce a near-complete product by the due date.

In my selection, I had to consider, the development journey of the system by the developers concerned. The best programmer should be someone who delivered the finished product by applying the lessons learned in their earlier years. Having the best project, having used or developed their own framework, are factors in the selection. The measure of performance is the extent of effectively applying what was learned.

Tuesday, January 17, 2017

A new web-interest

Web system development is one that I consider to be the major industry I belong.

This means that I need to be able to setup, configure, and mostly develop systems that work on a browser from a web server. Open source is a major consideration in pursuing this "passion" and implementation. Everything should be achievable and done by my own hands and mind to be able to mention that I can support it.

WebRTC had been around for a while and only now that I grasp some interest in pursuing its features and benefits that it promises to provide.

WebRTC allows peer-to-peer connection for audio, video, files, and/or simple data.

It's high time to get a taste of how dirty and messy to achieve an implementation.

Monday, January 16, 2017

Device Fingerprinting Challenge

A client requested to provide information about the visitors on a website I am working.

The client's request includes the following:

  • Add MAC address
  • Computer/device name
  • Local IP address
MAC address (machine access control address) is a unique identifier assigned to a network interface. Network interface could be physical or wireless. MAC address is also known as the physical address to a network device. (more info)

The computer/device name is the name of the device identified usually during installation.

Local IP address is the IP address defined for the network interface either statically or through a DHCP (dynamic host configuration protocol) server within a local area network (LAN).

Taking the "possibility" challenge, it lead me to many other information. The challenge involves the use of the browser and its relative technologies. The website is developed in PHP and Javascript. Imperatively, getting the above information can be done with PHP and Javascript.

Initial searches on Google lead me to answers leading to "not possible" outcome. However, it also lead me to a number of tools for future projects like: ClientJSBrowserSpy, DetecDevice, and a number of almost similar leading information.

Further in search for a solution, 3rd-party software are also considered including extension, plugins, and client-installed scripts.

With any breakthrough, it'll be posted here.

Friday, March 18, 2016

Failures, Mistakes, Errors.... Moving On

All my life, I have crossed so many mistakes, errors, and failures -- in one word: failures.

Most of these failures, I have observed, are unlikely to happen early on. Best intentions get the best of me, that these failures will not likely to happen. It is like going for a walk, a simple walk from one point to another, and out of nowhere, you are robbed or even worse.

Failure is evident when we don't have a plan, not all of us are like Indiana Jones whose adventure is mostly of luck. Failure is also while we're doing it -- say cooking, you wanted to put some salt so to blend the taste, but the lid of the shaker is loose letting all the contents out as you turn it over. Failure is also at the consequence -- the wrong spice/ingredients mixed up.

Coincidence, fate, destiny, or other words that they are called, I am blaming them. However, as I grew up and hurdled more and more of these failures, I had come face to face, in many instances, their nature. It is like facing a transparent glass that is so transparent, you cannot see the glare. You will not know that it exists until you bumped onto it. It is not like you are traveling in darkness, in fact, the light encourages you to walk or head on faster than you intend, you do it step by step.

The shimmering light, or simply a lamp or fire on a stick, is much needed in our travels through the dark -- to the most unlikely nature of life. We need confidence, encouragement, motivation, satisfaction, and all the nice words in the world of words, to keep moving. These words I refer to as light. Like the brightest natural light on earth -- the sun -- brings forth a lot of these words into concrete application. I'd like to jog when there is sunlight, but I hate the heat that it accords me -- the early sunrise or the late sunset is the better time to do it.

Going back to failures as transparent glasses ahead of our path, I had observed, that with the right angle of light -- seeing through or bouncing from the back -- provides a clearer view and begs caution as we approach it.

We need a change in perspective.

Perspective is how we see one thing from one location while trying to be on another. Normally, if you are looking at the same aspect and from another point of view -- perspective -- you will see differently. So, to change or influence someone, you have to change yourself -- change your own perspective.

With so many failures, I neglected to count them, I had tried many changes in perspective -- many of which made sense initially -- like out of a book or an author. But just like trading in the ForEx market, not all strategies will work over time, you have to adjust. Continually changing and proving one from the other, could already be a failure in itself -- none accomplished.

Perspective, or a change of it, should be done way before we head on, and not only at the moment of failure. Planning -- anticipating that failures will or may happen -- is now a requirement.

Planning is the best weapon in playing chess, after knowing the game of course. Before you do your next move, your mind will go through drills, situations, consequences, alternatives, and counter-attacks. The more moves you can muster in mind, that will likely happen in the future, will provide you with the better advantage.

Quick reaction -- efficient decision in an instant -- can be an output of effective planning. With the anticipated move, and the right conditions, you adjust your plan with the scenarios ahead of you.

If we stop, I have convinced myself, through the failures -- failure of planning, failure at scenario, failure on effect -- we will remain as a FAILURE. BUT, if we keep moving forward, planning ahead, deciding fast enough -- we may not avoid failure, but at least, by then, we should have accomplished something.

The failures are there to remind us that we are human. That we should learn by them, avoid them, plan for and against them. They will surely come, by fate or by other means. But by then, you are stronger, and you will know how to deal with them to better yourself.

Let's keep moving forward.

Tuesday, January 5, 2016

X and Y of Software Development

Software Development is one of the many things that never stay put. It gets to evolve and continue. Once it stops, it is the end of its life.

As software develops over time, there are distinct two directions that is tracing its progress:

  • X - this is the horizontal aspect of development. This is characterized by the number of features, functions, scope and reach of the output. As you add more to the growing number of functions and features, the X axis is drawn further from the origin. The further it goes denotes a number of modules or usage it contains.
  • Y - this is the vertical aspect of development. This is characterized by the quality, performance, speed, usability, friendliness, and security of the system. This aspect is also gearing to the non-visible part of the system. These developments may sometimes delay the deployment or may break the system all together.
A good balance of the X and Y axis is desired in any development. Any system that has many features but would require a great deal of power to operate is the same with a very secure system that is very hard to use.

At some point, prioritizing one axis over the other is inevitable specially for system developed by less than 3 people. Some features are held off in favor of performance or security. Some usability issues are sacrificed at some point for speed considerations. 

Many of the chances that I have gone through as a developer, is to take the Y axis more priority than the X's. That is, make sure that the system performs better than having to add more features. More features, at many instances, would mean more work for Ys. Say you need to upgrade to a new version of the programming language -- this is a Y -- this would mean that development for the Xs had to be postponed until all areas of the system, in Y, are checked.

Stress and penetration tests are very rarely done during development, not until there is some prototype or feature to specifically test. Imagine a huge system, after so many years of development, it may have covered all business operations and had them automated/integrated into the system, that may have not been tested for security? Chances are, this huge system may just be like trash after proving that it can easily break.

As you improve both axis, you may need to trace back to many of the basic functions for upgrade. At some point, many have to be re-written from a blank file. This is a hold off to the X axis, but making sure that the Y is stretched up to a quality you can be assured of.

To speed up development, one thing to keep in mind is, how much effort you put into the Ys, will lead you to a further stretch on the Xs. That is, with enough thought and consideration on the performance, quality, and security of the system, the easier you can expand the functionality and usage of the system.

Tuesday, September 22, 2015

Backup your copyrighted DVDs

I usually get this request from upstairs about backing up encrypted or copyrighted DVDs. I know I have done it many times but it fails to remind just how to do it every time.

Tools

  1. So I always have this Daemon Tools Lite that allows me to mount .iso file as virtual CD/DVD drives.
  2. I always have the codecs from CCP-Project to use the classic media player instead of the new one
  3. I also have Infrarecorder  to do copying and writing tasks
  4. For those copyrighted and encrypted DVDs, i have DVD Decrypter
  5. For some instances I also have imgBurn. This however may conflict with DVD Decrypter or Infrarecorder if not installed properly
Steps:
  1. Firstly, make sure that the DVD is worthy -- meaning readable and functional, void of physical damage that may ruin the show. You cannot copy if you can't play it.
  2. Copy the DVD to an .iso using InfraRecorder. The read speed may have to be tweaked to use below the maximum.
  3. Try mounting the .iso file using DaemonTools and make sure that it plays just like the original. If problems exist, it's time to call on the other tools.
  4. From the mounted .iso or virtual drive, right click and see "Decrypt using DVDDecrypter". Just follow the next steps, find a nice target location and proceed to extract the content. If it is a DVD video disc, it will copy just the .vob files.
  5. Write the .vob files to a DVD using imgBurn. You might want to save DVDs by writing them to another .iso file
  6. If all is well with the decryption, iso and playing the mounted iso, you're ready to burn to a physical DVD or to another media.
Feel free to post on the comments if you need assistance.