We finally finished out project! Our group was able to successfully implement all of the features we had in mind and get the expense tracker working well. I realized how powerful composition is while doing this project. The main functionality of the project was carried out by the python scripts and we were able to overlay a GUI on top of it. However, the python scripts themselves are quite portable. They can be used with a GUI designed by another person or ported to run on a webserver. If everything was coded in Qt (the GUI) this would not be the case as the code would have to be extracted and rewritten for different applications.
As far as the application goes, I think we have all the basic functionalities that are required for an Expense Tracker implemented. However, I don’t think running as a local application is the best use for such an expense tracker. Rather, it would be far more applicable if the roommate expense tracker ran on a web server network, or website where various different computers or devices can access the program and add expenses and keep track of expenses. This could be the next step for the project if we wanted to pursue in the development of this.
Doing our Linux Final project, I got to experience a little bit of the Linux design philosophy. Our project, basically followed a building blocks structure where there were python scripts written to run in the console level and there was a GUI interface built in Qt that sat on top of that. This is a typical convention for many Unix applications and I wanted to share the various problems and aspects I experienced. For one, since Linux is based so much on collaboration, I noticed it was quite difficult to blindly have a developer working on the console level and then blindly have another developer working on the GUI. More often than not, the developer working on the GUI will need a working console application that he can play with and see how it works so he can implement it in his GUI. However, I was curious to see if there were any projects that have a strict protocol that the developers of the console and GUI both strictly oblige to. For example, if there was a protocol that specified for these specific inputs, you would get these outputs formatted in this way. With that knowledge, both developers can work hand in hand at the same time to get their respective parts working in parallel. I realized that this approach was far more streamlined working on our group project. Tyler and I worked on the GUI and Sasha and Sungha worked on the console python code. Rather than waiting for them to finish their code, we established what kind of output we were expecting from the console and how it should be formatted so that we had a working template and framework setup while they finished their code. This allowed us to have a somewhat working interface that we can fine tune once the console application had been completed.
Researching into how other developers and things handle this method of establishing protocols, I came across the IMAP protocol. This to me seems to be the most standardized and widespread protocol used to this day and it is used for sending and fetching emails. I was intrigued by how millions of various applications, interfaces, web servers, and consoles conformed to this protocol when it came to the implementation of email services. If only there were protocols such as this that can be established for various types of data so that developers can collaborate much more efficiently and quickly.
Browsing the internet you stumble upon a lot of cool things and some of the cool electronics things I have come across involve small development boards that cost about $30 and can run a full Linux operating system on them. I thought this was a pretty cool thing. It allows for you to hookup a keyboard, mouse, and a monitor and acts as a small mini computer. I knew Linux was very versatile in its platform support but I never knew exactly how versatile it was until I found our about the Raspberry Pi.
The Raspberry Pi is a full fledged GNU/Linux box that costs only $30. While Raspberry Pi has its own flavor of Linux that it runs with its own desktop environment and GUI, people have been able to actually compile and run Ubuntu on this device. I think this right here shows how deeply integrated and adaptable the Linux operating system is for it to be able to run on such a small device with such limited resources.
With ARM processors becoming cheaper and cheaper, I think having such a real time operating system able to run on them really opens new horizon’s for embedded devices. I think that being able to successfully run Linux on embedded systems with the help of ARM processors is going to be the next big thing in embedded electronics. While highly technological devices are becoming “smart” now days, this will allow “dumb” devices to also become smart by having a real time operating system at their hearts. For example, we have smartphones and smart TV’s, but imagine having smart remotes, and smart lights. All of these controls and systems can be equipped with a Linux operating system and achieve farm more than they currently do.
Apart from this, I am also excited to try compiling Linux on my smartphone and new tablet I will be getting soon. Ubuntu 12 has support for running on ARM so I wanted to set it up and run it on my smartphone so that I can boot into it and use my phone as a fully capable computer with an operating system that has a desktop environment. I am really excited to see where this Linux on ARM technology will take the electronics world in the coming years.
Today I met with my group for my final project and setup a github to use for our project. I noticed a lot of nice features for github that allows us to collaborate effectively. The way we distributed the tasks was that we had various functions each of us is going to write and then we were going to put the functions together in a main file that would run. This method of organization worked out well for github because it allowed each of us to work on a specific file and commit changes to that file. While I like how user’s can commit changes and upload it to github, I feel that it is a little old fashioned. What if github was like dropbox and it automatically synced all of the changes and automatically kept track of change history each time a file was saved. I understand that in github it allows users to only commit once they have a good working piece of code but it is annoying when multiple users are using the same repository and making changes. Each time the users all have to update or pull their repository to update it. Rather, if it was structured like dropbox in which the files get automatically synced, it would be much more user friendly.
After using Ubuntu quite regularly for quite a long time now, I have grown accustom to the fast boot up, fast processing, and great customization features. I dread the Sunday nights that I choose to boot into Windows 7 to work on my AC Circuit Analysis Lab assignments. Ubuntu without a doubt has a very minimized package set that makes it as quick as possible. Windows 7 on the other hand, is bogged down with a bunch of unnecessary bloat ware and applications. Ubuntu on the other hand, is stripped down of all of this and I notice this via the significant performance difference.
However, after some research, I have noticed that Ubuntu also has some “bloatware.” What does that mean? It means that there can be an OS that can be built that gives an even bigger performance boost than Ubuntu. We do not use ALL of the packages that come with Ubuntu and I think that it is an important part of Unix to be able to have an OS that is as customized and stripped down as possible for the user. As a result, I think Arch Linux is the way to go. Over winter break, I plan on getting a new SSD, partitioning it, having Windows 8 on one partition, and Arch Linux on the other. I think by installing Arch Linux as a core Linux installation and building up your Linux environment package by package, one can acquire a very intricate grasp of Unix and appreciate the platform much more. I hope to do this over winter break and see if I can really push the limits of performance for my computer.
I feel that our homework 2 and the exercises we have had so far did a fairly good job of getting acquainted with the terminal. The Command school exercise actually helped a lot because by writing down the use of each of the functions, I found myself not doing man on the commands I need to use as often. Also I have started to do most of my project work for this class and Applied Software Engineering through the terminal. For both of these classes, I had assignments due this week and I used the terminal for all the file manipulations such as moving, renaming, removing, etc. I feel quite comfortable in working on the terminal to do file manipulations and using it instead of a typical GUI file system.
One skill that I wish I had or would like to develop is to efficiently use VIM. I have used VIM in the past for simple file modifications but in a couple of my past internships, I had observed my employer using VIM and it was beautiful. The speed and effectiveness at which he completes different tasks and does various operations is unmatched on any modern IDE. He was telling me that VIM was invented by engineers at a time where if you had access through the network to a server or computer, every keystroke cost money so it was designed to be as simplified, efficient, and effective as possible with minimized key strokes. While I feel that VIM is a skill for the past generation, I feel it is a tool that would be quite effective even today if harnessed well. I hope to learn to effectively use VIM as I get more comfortable with the Unix environment. I have an extension installed on my Chrome browser called Vimium which allows you to use VIM keyboard shortcuts to navigate through webpage and so on.
This is just my first post to get the blogging assignment started for Intro to Unix. I had a Ubuntu 12.04 installation setup already before this class so I was able to mess around and customize the user interface prior to the start of the semester. I found the GNOME 3 environment to be a lot nicer and simpler than the Unity one so I had that setup. I also have used github for several other projects so I have familiarized myself with git and have that already setup on my computer.
Apart from this class, I am also enrolled in the Applied Software Engineering class which will also be using the Linux environment. I installed the Qt library and IDE for that class so hopefully I will get a good grasp of that library with both of these classes.
I will try to post on this blog approximately every week updating on my Unix progress and my thoughts on Unix.