The year

I had no idea what to expect from this course when the semester first began. I understood that the whole course took place on line so I figured it would be a set of memorize and regurgitate assignments but I have been pleasantly surprised. The class assignments have been both interesting and challenging in a design oriented way. The one discrepancy I do have is the lack of structure regarding assignments. I understand that as engineers we are expected to be able to scour the web and educate ourselves for assignments but I believe there was too much of this happening in this class. If more resources had been provided to us regarding each assignment then we could have developed a more deep and certain understanding of different topics without the wasted hours wondering which of the multitude of ways available on the web, to solve our problem, the instructor would prefer we use. Besides this issue which only occurred a portion of the assignments this semester has been a great learning experience and has opened my eyes to a new philosophy with many good reasoning.

Assignment relevance

In the following fall I plan to begin work as an IT consultant for Deloitte. Up until recently I had no intentions of entering this field but have recently become enthralled by the opportunity. I have began to read articles and forums regarding the different kinds of programming languages, hardware, and operating systems commonly used in enterprise systems that help companies operate efficiently. This has all brought me to the conclusion that I wish we had been more formally introduced to these topics through out our undergraduate studies. I am the type of person who needs to know a topics worth before becoming fully invested in learning that topic. In the case of our Unix class I wish that we had spent more time discussing Unix and Linux’s roles in the business IT world are today. I would have liked to see assignments more realistically correlated to real life examples. I tried to do my assignment in such a way and I believe that students will find it interesting. When there is a solid understanding of how the current assignment could make you more competitive in a work environment then I believe the passion with which that assignment will be completed is greater.

LINUX and Google

There are rumors in the pipes about Google creating its own OS. If and when this does happen, they plan to emulate and collaborate with the open source community and in specific the Linux community. They have clearly shown their support for such a system through their intense relations they have generated with the open source community, and for good reason. If Google where to attempt to develop an operating system they would want to do so similar to how they developed android. In an open market where all can contribute and all can view the source code. This allows for the quickest growth and the most revolutionary ideas. They plan to leverage the open source environment for just this by releasing beta versions for coders to download and test, returning notifications of bugs and issues the same way that Linux is refined. The author of the article feels that this move would be extremely helpful to the Linux and Unix communities because it would bring a large player into the field to help orchestrate this collaboration. His believe is that this OS would not hurt other Operating Systems such as Ubuntu but instead stimulate the community to grow these Operating Systems as well. It can be best summed up with the common phrase: “A rising tide lifts all boats”.

Python over C++

This class was the first time that I had ever been introduced to the programming language of python. I have grown up knowing C and C++ as the standards of development in the computer Engineering world but as I have spent more time with python both for class assignments and on my own I have begun to notice some superiorities. C++ and especially C are extremely restrictive with respect to data types. If for example you simply assign the value 3 which has been stored as a double to an integer value the outcome will be wildly off and if you try these conversions between data types as different as integers and characters the result will most likely be compile errors. This, in my opinion does not seem right because it does not follow the natural thinking of the programmers and that is the purpose of high level languages such as C and C++.  They are supposed to remove the nuances of programming so programmers can focus on the complexities of the problem and use the code as a tool rather than a hurdle. Python handles this issue much better. When you try to assign values of different types it almost always correctly makes this conversion and makes extraction of the value much easier. I believe, that while it may cause some unfound bugs in the long run implementing this kind of data type management for C++ and especially C would simplify the programming process and improve the quality of coding solutions.  This, to a degree follows the linux philosophy that every piece of data should be a character array because this is what is easily understood by humans.

UNIX, the lesson Robotics never learned

Robotics is a field which I have grown to become very familiar with, if maybe only from a distance. Lacking the technical expertise of a tried and true researcher but having spent many years around them, I have developed my own opinions about the field. In particular, after this semester of learning the UNIX philosophy I have noticed many areas in which the robotics community could learn a thing or two from the open-source and in particular UNIX communities. The most obvious characteristic of the robotics community that does not match up with that of the UNIX community is a centralized organization. Now surely there are conferences and journals and even some rudimentary communication protocols such as the Department of Defense’s JAWS but these organizations merely organize information not useful software. The organization of the UNIX community, where the masses are able to write useful, simple, single function applications that can later be reviewed by more senior members of the community and eventually integrated into a single, fully functioning operating system is both a realistic and desired structure for the robotics community to adopt. It seems typical that when creating algorithms for robots whether they are for anything from path planning to object detection, every researcher feels the necessity to re-create the wheel in a more efficient manner that fits only their particular needs. This comes at the expense of the big picture and is why the UNIX philosophy believes in “choose portability over efficiency”. If the robotics community began creating generic solutions that required slightly more computing power I believe that this would be more cost and time effective on a utilitarian level. The same way that every time a person sits down to use a computer they do not re-create the operating system to optimize efficiency for the programs they plan to run.  Along with this idea the robotics community must also embody the philosophy that one must “make each program do one thing well”. This allows for modularity and customization which the robotics community highly desires but this also allows applications to be easily judged for their capabilities and easily integrated into a larger more capable system. The most useful attribute of the UNIX organization that could be ported over to the field of robotics is the ability for senior members of the community to help assemble these building blocks. Similar to how expert UNIX developers grade programs for compatibility in the UNIX environment, senior researchers and scientists in industry can more clearly judge what is a valued application for the majority of robotic needs.


P.S. Darren, I understand that you are involved with robotics research. So, I am very interested in hearing your opinion on the adoption of such a system.

Out of Order

I am currently finishing up my final Fall Semester at Virginia Tech. For the typical Computer Engineer this is a very late time to be taking a 2000 level class on one of the most used, powerful, and influential operating systems ever created. I neglected to take this class because of other necessary pre-requisites and in doing so forced myself to take the series of 2524 and 3574 out of order. The implications of this have only become more obvious as we have now moved onto the topic of multi-threading and pipes. Initially I believed there was little to no correlation between the classes, at least nothing beyond the fact that in 3574 we programmed in a Linux environment but I have come to realize there are many benefits to taking these classes in order. For example, when I began 3574 I had no idea how to operate the g++ compiler and therefore found myself scouring the web for clippings from blogs and forums. I believe, had I learned these skills the proper way, as I am doing now I would have gathered a much clearer understanding. For example, I had used multiple makefiles in both 3574 and 3504 but did not have a clear understanding of what was truly happening when I ran the file. By far the most significant reason for taking these classes in order is the introduction to pipes and multi-threaded programming which I had never been introduced to before our full-fledged use of them in 3574. Once again I had found myself surfing the internet’s many forums and blogs for snippets of information that I could paste together into a coherent understanding of a topic much too complex to be mastered in such a way. I can only imagine how much simpler 3574 would have been if I had had the opportunity to listen to lectures on forks, pipes, and exec as well as a chance to implement such programming methods in simple exercises such as “Heard it on the Pipeline”. This is why I believe that the 2524 class should be a pre-requisite for classes such as 3574 where a strong understanding of both the Linux environment and the use of pipes is necessary.



single trait each keeps

but quickly combined to make

the most free OS


command line difficulties saddened

but gave way to python parsing which gladdened

all intermittent with the philosophy of simplicity

this class has been a joy to me

and now that it closes c++ is where we are focused




LINUX and the law


The article on  mixed two of my favorite areas of life technology and law. It discussed the litigation history of the programming language Linux. Linux, right now is a free software system that is used on just about every data management system in the world, from UPS to Starbucks, but while its technical prevalence is huge its financial stake is very small. Many companies have taken the Linux software and reworked it into their own systems or used it as the basis, most notable RedHat but there is no large centralized producer of pure Linux. Most of the money in the market is from companies which have modified Linux to make it their own. This is why litigators have had so much trouble suing for patent infringement. Even once you put aside the legal difficulties of winning a lawsuit against a company involved in the Linux space you are still left with the social ramifications. If a company were to win a patent lawsuit against a particular aspect of Linux then most companies in the world would have to overhaul their Linux machines. The global economic stress that this would cause is only rivaled by the anger it would cause. This anger at the company that brought down Linux would most likely have a very negative effect on the company itself. So for now Linux is safe but there is no knowing when some company will feel the urge to file a lawsuit.

Unix and Linux, everywhere

I recently began the job interview process in search of a job in the areas of tech consulting. Some of the large companies in this area are: IBM, Deloitte, Accenture and CGI. Most of these companies either create large data management systems or help companies decide which systems to use and afterwards help with the integration process. Regardless of which side the particular company is on one theme has held constant, Unix and Linux based systems are a huge part of the market. For companies like IBM which design and create the architecture that runs on their servers, Unix and Linux are obvious options. I image this is for two different reasons. First, Linux is much lighter than Windows or IOS regarding memory and process usage. Secondly, Linux is designed to work with data. Inside the Linux philosophy it is stated that all programs or functions should be able to easily handle strings. This is extremely useful to data management needs because almost everything can be stored as a string. Also as an added benefit programming and working in Linux tends to be easier and more efficient for people who have taken the time to learn how to manipulate the OS.

Preparing For the Midterm:

I just completed the midterm and felt as though I did reasonably well. I began my studying by covering the presentations from the in-class discussions.  The in class presentations had many examples, so I used this opportunity to practice some commands to make sure I forgotten what we had learned thus far in the semester. Looking back, now that the test is done, I should have given a lot more attention to the ls function which allows you to print folder and directory names to the prompt. I struggled with the correct way to use this function and ended up actually piping its output through to a grep command. It may have been possible to answer the question regarding hidden folders and directories without piping but due to my lack of understanding about the different ls commands, piping an my great understanding of the grep command allowed me to find a solution. I also noticed that the idea of piping or running multiple commands to get a result was heavily used throughout the test. While this topic was by no means new, a little more time discussing which functions interact well with each other would have been useful.