I hate to do a disservice to things which I feel are significant, which is often the reason I don’t write. I feel that if I can’t say what deserves to be said then it would be best off to say nothing (which is undoubtedly a greater disservice). To avoid this I will post a series of short entries on recent events.
Disclaimer
August 7, 2011I’m Back!
August 6, 2011OK, so it has been a little over two years since I’ve posted on here. What can I say, I’ve been busy. Meaningful content? Not today, but soon.
A Quick Review of the End of the Semester
June 3, 2009Well, I am into summer now and as usual it has been sometime since I’ve written an entry. Here is a quick overview of how the rest of the semester went:
Mobile Programming
- The rest of the home works for the course consisted entirely of Tic-Tac-Toe games. First we did it using TCP, then using UDP, and finally using Bluetooth
- My project was awesome, I did a home automation remote control program. Long story short – I could control Infrared devices and power outlets using my cell phone.
- Got an A+ in the course, yay!
Analysis of Algorithms
Easily my favorite course of the semester. I didn’t write anything about it because it is very mathy stuff, and this isn’t really the best forum for that type of discussion. My favorite part was the section on graph algorithms. A+, yay!
Software Engineering
For this class I did a very cool project that focused on distributed computing using Java RMI. It was a lot of fun, made even better by being part of the best team ever. A+, yay!
So that pretty much sums it up. I successfully made it out of school with a 4.0, which I am pretty happy about. Now I am in the process of job hunting, which of course no one actually enjoys. So if you happen to see this, and you are an employer in the Dallas-Fort Worth Metroplex seeking a bright and talented computer scientist, then look no further.
Two New Mobile Apps
February 24, 2009I just completed the second of two new mobile apps for my mobile development class. The first was a distributed calculator intended to demonstrate the Model-View-Controller pattern and to provide experience with sms messaging. The basic idea is that you have one calculator spread over three phones. One one phone you have the calculators buttons. You press a button and the phone sends the button you pressed in an sms message to the second phone. This is where all of the actual calculating takes place. After the second phone receives and processes each message, it in turn sends an sms message to the third phone containing the contents of the accumulator. I’m not really sure this program really demonstrated MVC as I understand it, and it felt a little contrived, but it was still a lot of fun. Ultimately, it was a class project and not all class projects have to be particularly useful outside of the class room.
The second project, however, was both very fun and and provided some experience with some very useful topics. The program accessed a database of information through a RESTful web service and displayed the information on the phone. While working on the project I felt like my understanding of xml parsing and threading both got a lot stronger. Speaking of threading, the calculator project made extensive use of threads for communication as well. I has messed around with threads several times prior to this class, but the need to use threads throughout all of the projects thus far has made me much more comfortable with them.
While working on this project, I actually wrote it and then rewrote it from scratch twice. The first version sucked but worked, the second version was acceptable, and the third version I am really proud of. In general I feel like the code I am writing in this class is the best I have ever written. I’ve made a strong effort to be very conscientious about my work on these projects, and I feel I have some very clean and well written programs to show for it.
My First Mobile App
February 1, 2009I spent the better part of the day finishing a homework project for school. This particular homework, however, was a little more exciting than mos. The main reason for this is that was my first serious mobile application. Being my first program of this type, it was not all that impressive, but still a lot of fun to write. All it really does is access and modify a database. It did however provide some good experience in dealing with persistent data storage and creating user interfaces in J2ME.
What I’m most proud of, however, is the design that went into it. I’ve been trying to take Andrew Hunt and David Thomas’ advice into consideration while programming, particularly their advice to always think about your work and how it could be better. With that in mind I decided to more than just throw something together that works, but instead try to really design something. I read a book over break about design patterns, and I realized that this would be the perfect place to test out some knowledge. What I ended up with was a Model-View-Controller design consisting of a database class (the model), two gui classes (the views), and the MIDlet class (the controller). It’s really nice in that the gui never touches the database, the database never touches the gui, and everything could be easily extended or totally replaced with very little effort. Granted, it took all day to write what could have been banged out in a couple of hours, but I really feel like I stepped my skills up to a new level with this project. And after all, isn’t part of the purpose of school projects being able to test out ideas and try out things you’ve learned in an environment free of budgets and hard deadlines?
In general this is turning out to be a really cool class. For our first project we got to play with robots. That’s right, robots. How cool is that? In fact, I really like all of my classes so far. I’m going to be working on a really cool project in my Software Engineering class involving distributed computing using Java RMI, and my other course is primarily a math course, which I always love.
My other personal goal for the semester is to get comfortable with version control. I know that any serious project uses version control, so I might as well get a leg up on learning it now. Plus, it’s just a good idea to use it. The particular flavor I settled on is Subversion. I’ve been able to get it set up and I’ve done some testing with it, but I’ve yet to really use it on a project. The good news is, it looks like Netbeans has great subversion integration. Once I get it down pretty well, I plan to move on to learning JUnit for unit testing and Ant for automated builds.
Setting up Netbeans for J2ME Development
January 28, 2009I’m currently taking a class in mobile computing, and this was the week I decided to get my programming environment set up. The Sun Java Wireless Toolkit is nice, but for someone used to the extra power of an IDE such as Netbeans or Eclipse, it can be a little underwhelming. I personally am a Netbeans fan, so did some googling and set up my Netbeans for mobile development. Getting things working wasn’t particularly difficult, but I did notice that it was hard to find all the necessary instruction in one place. To remedy this I created this little how-to. I hope this helpful to people trying to accomplish the same task. Suggestions for improvement are welcome and encouraged.
- Download the Sun Java Wireless Toolkit from http://java.sun.com/javame/downloads/index.jsp
- In the terminal: CD to the directory where the file sun_java_wireless_toolkit-2_5_2-linux.bin was downloaded
- Make the file executable: chmod 755 sun_java_wireless_toolkit-2_5_2-linux.bin
- Run the executable: ./sun_java_wireless_toolkit-2_5_2-linux.bin
- You may need to specify a path to the Java Interpreter. For me the path was /usr/lib/jvm/java-6-sun/bin/
- You will need to tell the installer where to place the folder for the Toolkit.
- Download the Netbeans 6.5 IDE from http://www.netbeans.org/ (You can choose to download a version which contains J2ME support, but I prefer to Download the Standard Edition and add the Mobility Pack later)
- In the terminal: CD to the directory where the file netbeans-6.5-ml-javase-linux.sh was downloaded
- Make the file executable: chmod 755 netbeans-6.5-ml-javase-linux.sh
- Run the executable: ./netbeans-6.5-ml-javase-linux.sh
- Follow the instuctions in the installer
- Install the Netbeans Mobility Plugins by going to Tools –> Plugins –> Available Plugins and selecting the plugins in the Mobility catagory
- Add a new platform by going to Tools –> Java Platforms, and clicking Add Platform, then select Java ME MIDP Platform Emulator, then click next and select the directory you installed the Sun Java Wireless Toolkit to. For me this was /home/bill/WTK2.5.2
- To test, go to File –> New Project –> Java ME –> Mobile Application, click next then name your project HelloWorld. Be sure to uncheck the box that says Create Hello_Midlet
- Go to File –> New File –> MIDP –> MIDlet, click next and name your file HelloWorldMidlet.
- Delete all the text in the editor and replace with this
- Build and run the project.
Ubiquity
January 27, 2009Ubiquity from Mozilla Labs is definitely one of the coolest things I have seen in a while. They describe it as
“An experiment into connecting the Web with language.”
I could try to explain it but you should really see for yourself.
http://labs.mozilla.com/projects/ubiquity/
Note: Ubiquity is currently in an early release and is only a sketch of what it is to become. As of now I would only recommend it to early-adopters.
I’m a Geek
December 20, 2008It’s true, and heres why.
There is a site out there called Project Euler, which is basically a collection of math problems that (most of the time) require a computer to solve them. The idea is that you get an account, and then set about solving problems, and after you successfully solve a problem you get access to a forum thread where you can discuss your solution with other geeks. I would be lying if I said this wasn’t one of the funnest things I’ve ever encountered. I actually discovered it during the semester, but I wasn’t able to spend any time on it due to school work. Now that I am on break, I decided to try my hand at some problems. As of the beginning of break, I had solved two problems. Now, I have solved 25 problems. This is a particularly important number, as you have to solve 25 to officially obtain level 1 status, which the website informed me 79.89% of members do not do. So yeah, I did it, and I enjoyed it.
This experience has also served to make me and even bigger Python fan-boy that I already was. I have used Python for nearly every solution, and have been nothing less than amazed by the power of the language. I mentioned in my last entry that I didn’t think Python was a replacement for Java. Let me clarify that statement quickly. Java is tops in my opinion for building big, carefully designed, object-oriented systems. It offers convenient language constructs for taking advantage of all of the buzz words associated with object-oriented design (encapsulation, inheritance, polymorphism, etc.). However, for smaller projects, which make up 99% of what every programmer I know does, most of that stuff is total overkill. Using Java to write a little app for personal use, or to sketch out an idea for a program, is like trying to kill a fly with a jackhammer. For just about anything I can think of, short of building a industry level project or some kind of speed-intensive application, Python is a much better choice.
I also think that Python is a much better choice for education. My reason for this is that I think what we are primarily studying as computer scientists is problem solving. The computer comes into the picture simply because it is the single best available tool for solving problems. In this way one can think of computer science as simply being applied mathematics, only with a massive scope of problems. When I think of mathematics, I think of the following statement by Alfred North Whitehead:
By relieving the brain of all unnecessary work, a good notation sets it free to concentrate on more advanced problems, and, in effect, increases the mental power of the race.
Python, I believe, is a good notation in this sense. One of the main problems people face when programming computers is that computers are very stupid and must be told exactly what to do and must be given explicit directions on how to accomplish these tasks. This often causes people to spend more time fighting the language than thinking about the problem. The expressiveness of python combined with its compact and intuitive syntax allows programmers to turn their attention back to the problem and let the computer really help them with the problem.
For example, there is a guy I go to school with who is in his second year in the program. He is a bright guy, but not very experienced with computer programming. He was asked to do some independent, out-0f-class work on a project for out school’s Bioinformatics Research Group. We were talking about it and I suggested he consider using Python for it. He decided that it would be a good opportunity to pick up a second language and started simulataneously learning Python and writing his program in it. The results were somewhat amazing. He, in one semester, managed to put together a prototype of a application that does some fairly sophisticated analysis on DNA sequences. The seriousness of the problem he solved with this program and the difficulty in solving it was miles above anything he had done previously, and far surpassed anything his peers were doing. This, I believe, was primarily because he was able to use all of his creative potential and problem solving ability in actually solving the problem, and that was due to his language choice.
So in conclusion, Python is awesome, and so is Project Euler. Hooray for geekiness.
Break Time
December 13, 2008The semester has finally ended, and not a moment to soon. Don’t get me wrong, I love school, but it’s definitely time for a little break. So what have I learned this semester? Heres a brief rundown:
- I really like programming networked applications
- I’m not so crazy about doing computer graphics stuff
- Java is an outstanding programming language, despite what its critics say
- Python is a great programming language, but no replacement for Java, despite what its proponents say
- A less ambitious project that is finished and works is better than a potentially amazing project that isn’t finished and doesn’t work
- Operating systems programming is very difficult
- It’s easier to blog about some topic you are interested in than to give random updates on your life
I am pleased with the outcome of this semester. For one, I got to do a lot of really cool stuff. I got to do an independent study project and learn a lot about operating systems, I got to compete (and get seriously humbled) in a programming competition, I got to present my work at a research conference, and I got to accept an award for all of the above (and more). Now I get to relax a while, hang out with Tab during the day, maybe play some video games, and I get to read some stuff just for fun. Granted, most of what I read will probably be about computers and programming, but the point is I will be doing it just because I want too. In particular, I plan on doing some reading on data structures to get prepared for my algorithms class next semester and I just bought a really cool book on design patterns. In general, I feel like the amount of stuff I want to study is just overwhelming. There is really no possible way I could learn about all of things I would like to learn about, so I just try to pick out things that I think are the most essential and start with them first.
Another exciting note, I just totally wiped Windows off my laptop and installed Linux on it. You would think that after three years of using Linux it would be old hat by now, but I am still totally amazed at its superiority over Windows. To indulge my geekiness a little, I didn’t just toss in a Linux install disk and install over Windows, instead I downloaded a copy of Dariks Boot and Nuke and performed a complete and total annihilation of all of the data on my hard disk. Was this necessary? No. But I like to play with toys, and what’s more fun than a toy that so thoroughly destroys a hard drive that not even the most sophisticated of data forensics devices can retreive anyting from it (can you say a ridiculous number of passes over the entire disk using a psuodo-random number generator)?
Well that ends my rant, I hope to cover some of the things I mentioned a little more thoroughly later, but until then, this Wii isn’t going to play itself.
mmmmm…tasty
December 7, 2008
If you are a fan of beer, and you don’t mind spending a little money ever now and then to enjoy something really excellent, then let me recommend Samuel Adams Chocolate Bock. Sam Adams has always been known for producing some really great seasonal beers (the winter lager is also highly recommended), and occasionally they produce an outstanding special brew. After finishing a couple of major projects for school I decided to treat myself with a bottle of this, and it was indeed a treat. It is dark and rich without being too heavy, and the chocolate flavor is clearly present but not sweet or overpowering. Again, it is a little pricey, but if you are wanting to try out a really great beer, then it is a good investment.