Learning

Written on August 25th, 2009 by Shawn Sparks

If I had the time and the university would not complain, I would sit in on a lot of classes. Currently, I am sitting in on Software Engineering thanks to Dr. Wallingford being nice and the fact I have already taken the class. However, a person can learn an unbelievable amount by simply becoming one with the inner sponge. By listening to people more knowledgeable than one’s self, a person gets introduced to new ideas. Unfortunately, it is not enough to simply sit on these new ideas. They have to be put to practice. I do not know where this quote comes from anymore, but it has been a favorite of mine for a long time:

It works in theory, but fails utterly in application.

It is easy to think I understand something only to try to implement and find out I have no clue what I am doing. Other times, I find the original idea is only applicable to specific situations. Sometimes, it is just a bad idea from the start. Pondering an idea is often a good start, but the approach which often has the most success, and is also the most fun for me, is to put the idea to practice. This website is one such example. I get to play with web development ideas as I learn about them. Some of them work. Some of them suck. Sometimes I write about them and people laugh at me. Sometimes I write things, and people agree to the point they talk about it in their classes. The end result is more feedback from which to learn.

Learning is not passive. Many times people are told to be quiet and just listen to lectures. Maybe they are supposed to read some assigned readings. This is what I referred to earlier as becoming one with the inner sponge. It is a good place to start. It is not the finish line. The most knowledgeable experts in any area tend to live, eat, and breathe their interest. Ask a professional tennis player how long they are on a court, hitting a tennis ball, doing physical training, debating nutrition, dealing with media, et cetera. They did not become good simply be sitting on their butts listening to someone tell them how to hit a serve. They got out on the courts and did it.

Eventually those engaged in a field will become the new experts. Then they will share what they have learned with the next generation. It may simply be by communicating with an old friend who happens to be a university professor. It may be at a conference with their peers. It may be via a blog. Regardless, they share the information in some ways. This is how knowledge has been passed down for millennia. The key is to get in on the scoop rather than being left by the wayside.

Last Hurrah

Written on August 23rd, 2009 by Shawn Sparks

I realized a couple of days ago I am at the end of the last summer vacation of my life. I will graduate college in December and enter the working world. To get a day off, I will have to wait for a holiday, or use ever precious time off. Fortunately, I have spent this last week making the most of it.

Friday, August 14, was the last day of my summer internship. I had spent the last three summers working in IT for the same company. I changed teams after the first year, but only moved a couple cubicle rows down. In other words, I saw the same floor of coworkers every summer for three years. It was interesting as I was packing up to leave because it hit me that I will never work as a student employee again. Students are always treated a little differently than normal employees. In every job I have had, student employees have been at least mildly protected from some of the mind-numbing tasks every job entails. Instead, I have been allowed to pursue the job tasks that interested me the most. I have also been able to avoid some of the red tape and bureaucracy slowing down some of my other team members. When in doubt, the simple line, “I didn’t know. I am only an intern.” will go a long ways. The trick is using it in a way to benefit the team I worked with everyday. It is seen as taking the initiative to get a job done with other coworkers are being a bit stringent. I was taught this clever technique by one of my leaders my first summer who used to me to contact business associates for information while being unable to give it myself since I did not know any details in which they were interested. There is a possibility I return to the same company to begin my career, but it is still up in the air at this point. Coincidentally, “Broken” by Seether was the last song to play on Pandora before I shut my computer down for the last time. The lyrics can be found here.

My three summer internships meant a summer spent in a city separated from my hometown and college. It was a blast. My sister and her family lived nearby which resulted in lots of summer evenings grilling food and hanging out on their back deck. I had a few friends from high school in the area which I would meet up with on occasion. There was also tennis and videogames. Perhaps the best part of it all was getting out on my own. I am one of those people who gets claustrophobic when I am constantly around people. Moving to a city seems like it would be a problem, but it was easy to tuck away in my apartment. Rather than having to make efforts to get away from everything, the inverse became true. I was making efforts to get out and do some things. Having an evening with nothing to do and being completely free to decide without anyone nagging may be one of the greatest experiences of all time. I have always loved driving across towns late at night in the summer when I am returning home from being out with friends. Being able to roll the windows down, turn up the music, and just cruise is amazing. Having my own apartment in a city was a parallel sensation. Of course, “Good Riddance” by Green Day had to come on the radio as I was driving out of town to move my stuff back to college. As before, the lyrics can be found here.

Then I got a week off before classes started. In that time, I have played nine holes of golf in which I shot my lowest score yet. It was the consistent round I have been looking for all summer. I have played tennis a couple of times. I have gone disc golfing for the first time in years. I have played Rock Band for a handful of hours. I had to get a shower mat to put down on the hardwood floors in my current house to keep the drum set from sliding across the floor. There have been countless hours of playing Call of Duty 4 including a few of the most epic moments yet. This all after two years spent playing the game. According to the statistics in game, I have logged almost two full weeks of my life playing the game. It is one of the greatest of all time in my opinion. I have taken some time to edit some video from the game as well. An afternoon was spent on web development. I have watched the movies Marley and Me, King Arthur, Jaws, and Eddie Izzard’s Dress to Kill. Last night brought several friends around a bonfire in our backyard until the whee hours of the morning. Last, but not least, I have gotten to spend several hours in the evening hanging out with my girlfriend after she has gotten off work. She will be much busier during the semester so it is nice to spend some time now. Something about double majoring, working, and being a collegiate athlete takes up a lot of time during the school year apparently.

All told, it has been a great summer. I have been wanting to write this blog post for over a week now. Funny that I am getting to it on the very last night before classes start. I remember when high school was getting ready to end, I was ready to kick back and just enjoy the end of it. I probably could have done a little better in the activities I participated in, but I doubt I could have enjoyed them much more. While I had a great time, I was ready to move onto something new. I planned my college schedule to have an easy semester to wrap things up. To the point I have two classes, one of which may very well be one of the easiest classes I will take at UNI. The other is just going to be pretty darn cool. Then I will be doing my undergraduate research which should be fun. Finally, I will be sitting on a third class so I might actually know something about the topic, software engineering, since my degree’s emphasis is in it, and the professor who taught it when I took it knew nothing about the matter. Needless to say, I have four months of sports, videogames, football, computers, and friends. It will be a good time.

IT in Big Companies

Written on August 13th, 2009 by Shawn Sparks

When it comes to information technology, big companies are slow. The cause of this is all the structure added to prevent someone from breaking the entire system. It is a ton of overhead plain and simple. Remember when people used to write code, compile it, run it for five minutes, and call it a new version? When developing for a large company, the maintenance cycle is a little different. A user finds a bug and calls tech support. Support confirms the bug and reports it. A resource manager assigns a priority to it and puts it in a queue for a developer. The developer gets to it after finishing all the other tasks in front of it. He fixes it and performs some very basic testing. Then the QA resource gets their hands on it for regression testing. Finally, the new code is pushed out in the next deployment. Then another user finds a new bug and the process repeats.

There is a benefit to all of this overhead. It becomes very difficult for an individual to accidentally break something. There is a cost to all of this overhead. It becomes very difficult for an individual to intentionally fix something. When does the need to create something new override the need to prevent something being destroyed? I believe those of you who have written code in both Java and a scripting language such as PHP or Ruby understand what I am talking about. There is something to be said for preventing stupid mistakes. It also happens to be true that when challenged, someone will step up to the plate and still manage to find a way to break things. At what point do we assume people are smart enough not to let stupid mistakes get into production so they can focus on enhancing a product rather than processing red tape?

When it comes to application security, no one can ever guarantee their application is one hundred percent secure. They can only mitigate the risk in the most effective means possible. In the security industry, cost and usability are the primary factors. A similar parallel needs to be considered in software development lifecycles. No one can ever guarantee their application does not have a bug. They can only mitigate the risk in the most  effective means possible. The primary factors here seem to be cost and maintainability. On one extreme, we could allow code to never be changed. The good news is everything that works would continue to work. This is under the assumption the world around it is not changing. The bad news is everything that does not work will never work.

With a big company that has a lot invested in their current processes, they want to be sure a change is going to be worth it in the end. There will have to be manpower invested to convert current processes. Resources will have to be pulled away from the current system to research new possibilities. Big companies are big because people have come to rely on them. They do not want things to break because they do not want to break the trust their clients have in them. However, if they do not evolve, a smaller, more agile company will replace them. Because of this, such companies must continue to press forward. Keen discretion must be used to pick the right opportunities for moving forward.

Ultimately, it seems all sizes of companies are needed. Small companies to drive the industry forward. Big companies to keep the industry afloat. The companies which will excel are those which can balance these forces within themselves. By breaking organization down, the fluidity of a company can be increased, but it comes at the cost of efficiency. Efforts will undoubtedly be duplicated without proper management and oversight. Learning to share resources, and yet, at the same time, be independent will be key.

Programming Environment

Written on August 12th, 2009 by Shawn Sparks

I decided to get back to using a proper environment for software development. What does this mean? Mostly, that I started using a fancy IDE and version control again. The advantages I get are extra features to make my development life easier and not having to worry about losing any code. Essentially, I put in some extra work up front to negate headaches down the road.

My IDE of choice is Eclipse. I went with the latest version to see how well it works. In the little bit I have used it so far, I am impressed with how far plugin installation has come since the last time I touched it. I used to keep my plugins in separate directories and link them into the application because it was the only way to keep any sort of order on installation, upgrades, and removal of the third-party software. I have used this improved functionality to install the PHP Development Tools plugin which is dependent on the Web Tools Platform. These two packages combined give me almost everything I need to do web development. I will likely add in some things for database design when one of my projects takes me that direction. The C/C++ Development Tooling plugin will almost certainly be added along with other language-based plugins over time. Some day I intend to look into some source code analyzers to discover potential security vulnerabilities in my code. The other plugin I have installed at this point is Subversive to integrate Eclipse with my version control system.

For version control, I installed Subversion (SVN) on Ellinore, my server which has a RAID 1 mirror. Not only does this make sure I have my code should a hard drive fail, but allows me to easily revert to previous versions when my radical idea to solve the world’s problems fails horribly. I have had problems integrating SVN and Eclipse before, but Subversive made it rather easy minus a complication due to licensing issues.

I am trying to separate the components of my projects as much as possible when defining SVN repositories. This will allow me to more easily integrate different versions of different components as they become ready. To accompany this focus, I dabbled with Ant some today. Ant is a build tool which makes it fairly simple to pull versions of software from various SVN repositories along with performing other necessary tasks to produce a working piece of software. I will likely be spending the rest of my night putting together a build file to allow me to recreate an entire website from a dozen SVN repositories and a couple scripts. When I get it working, I will only have to run a single command to completely rebuild a test website.

This post is intended to be a simple overview as well as an update on what I have been up to lately. If you would like more details into any particular area, let me know, and I will see what I can do.

What’s New

Written on August 3rd, 2009 by Shawn Sparks

First off, you should check out my Future Enhancements page if you have not already. As of right now, I am hoping I can knock off most of those things if not all of them by the end of the year. Of course, there will likely be new items on it by then so I doubt my work here will ever be done.

Another hobby eating up a lot of my time is how much I have been getting back into Call of Duty 4 on the Playstation 3. This entails a little more though than people might think. Considering I am an active member in a videogame clan, we have started to look at playing the game semi-competitively again rather than just dominating random people in regular games. This means I spend at least an hour dealing with administrative work for every match we play, but I think I will save the details for another post. Things, unfortunately, got a little rough this past weekend due to a hack released on the internet allowing opposing players to be able to fly as well as being invincible during that time; though, they cannot shoot. It was enough to put a damper on the game unless playing with a strong party capable of embarrassing these players.

In conjunction with all the game playing and competition overhead, I have started to dabble some with recording video from my play. I have around two to three hundred gigabytes of video sitting on hard drives from last summer. This used a rather bland recording rig so the quality is not very good. Nonetheless, I have finally started going through it in order to build some video editing competency. It will be posted on youtube for all to see once it is complete. Do not expect any quick turnarounds on it. However, before I could do the editing, I needed to find some good software. Sony Vegas exists, but it costs a lot of money unless you want to pirate it. Even then, it is primarily a Windows-based application unless time is spent finagling with it. I managed to come across kdenlive which is more than enough for my needs. I think so far I have only found one feature in Vegas that is not in kdenlive, and yet, I am easily able to workaround it. In addition to all of this, I bought a new bit of hardware back in April that allows me to get much better quality of video. Did I mention I am also able to use it from linux? My previous rig required me to boot Windows on a machine. I was not even able to get the old Hava to connect with a Windows vm. I probably could have if I had spent more time tinkering with the vm networking, but I never did. My Hauppauge took me about a day to get working on an Ubuntu server. I used a website and then posted on the Ubuntu forums for a bit of help. I had it working within an hour of coming home from work the next day.

I also got a new phone almost two weeks ago. If you feel you should have my number, email me and I send my number to you if I feel like you deserve it. My phone is an LG EnV3 on the Verizon network. Despite some interesting news about how insecure Verizon is, I decided to go with them since the other providers do not seem to be any better. The nice part about my new phone is I have unlimited text and picture messages, 3.0 megapixel camera, email and web with unlimited data, as well as a national plan. This means I am connected to the internet pretty much wherever I am. I have discovered though that my website crashes my phone’s browser. Needless to say, I will have to update the list of future enhancements to go mobile.

I went out golfing yesterday and shot fairly well overall. I actually shot amazing for four holes, mediocre for two holes, and terrible on three. The highlight of the day was by far my near eagle on hole six. I was sitting out roughly 130 yards from the pin in the next fairway. Distance was hard to judge because the markers were terrible and impossible to find. There was a tall tree directly between me and the pin. I figured if I hit a 7-iron, I could make it over the tree, but I would have to hit it strong to make the green. I went for it and absolutely crushed the ball, hitting it just over the top of the tree. The ball landed short of the green, bounced twice, and rolled into the pin before deflecting a couple feet away. I made the short putt for the second birdie of my life. I also put the ball on the green off the tee on both par 3′s and hit one of the prettiest drives of my life off the tee at hole 9. I still need to work a bit on avoiding water hazards and losing my ball into the brush. I could have dropped four strokes or more with that alone.

Those are the events of the past couple of weeks. I will be heading down to Kansas City for some fun this weekend before moving back to college the following weekend. I am looking forward to the week I have off between work and classes starting. Best part about this fall is I am only taking two classes, doing my undergraduate computer science research, and sitting in on another class. In other words, I will have a lot more free time than is normal for me. That being said, I am sure I will still be busy with personal projects and hanging out with friends.