Your Google Profile

10. May 2011

If you've ever read anything about getting a job in a technical field, you've probably heard about potential employers looking you up on Google or through various social networks. You put yourself out there, so don't be surprised when they hunt down that information. Now, gearing a Facebook or a Twitter account to show off your skills and play the part of a digitial resume is pretty easy, yet there's still Google and all the things that it could dig up that you may not have put on the resume. It's much harder to control what comes up in a Google search, but not entirely impossible. Here, I'm going to talk about ways to craft your "Google Profile," the first few pages of what shows up when somebody searches your name (with or without quotes).

More...

Advice , , ,

I've (re)Discovered Project Euler

29. November 2010

I've heard about ProjectEuler.net over a year ago and it quickly slipped my mind. Last week I rediscovered the site and finally registered with them. Project Euler (according to Wikipedia, pronounced "Oiler") is a site of over 300 mathematical problems with the intent of them being solved through creating an efficient algorithm and programming it out to get the result, read their about section here. Once you register, it'll keep track of which questions you've completed and what the answers for those problems were. Upon completing a problem, you can also access a forum thread about that problem. There, you can see how other people solved the problem. Usually other users will post their code or explain their approaches.

I have created a solution in Visual Studio that all my projects for every problem is going into and I'm taking on the challange of getting as many done as possible. At this time of posting, there's 311 problems and I've completed the first 18. I'm slowly working my way through them and I'll keep you all posted. They're constantly adding new problems so reaching 100% will be short lived if it happens.

I highly recommend this site to developers looking to stay on their mathematical game or mathematicians who are looking to learn how to program. Regardless which you are, you're going to better learn to develop algorithms. I know I've learned quite a few ways to interact with numbers. The biggest surprise for me was how to count the number of divisors a number has when you know it's prime factors. Anyway, have fun with this site.

Advice, Code Optimization, Misc , , ,

Threads: Doing Them Right w/GUI

28. November 2010

I did an article over threads in a command line project. In a command line project, there are less complications than it's GUI alternative. Here, I hope to go into enough detail to put to rest the confusion that threads can introduce to a GUI application. The big hurdle is around the limitation that the only thread to interact with a control is the thread that created the control. In the beginning, I saw this as a silly rule, one not worthy of throwing an exception.  The more and more I use threads, the more obvious it becomes that this is less of a suggestion and more of a golden rule. So, the question begs, how do we create a thread to do something that we need a result back from? How do we get any information from a thread that's been started, such as progress, or state of operation? With callbacks, events, and the Invoke method! If we take some of the concepts I discussed in threaded CLR projects, like a payload struct, and use them here, than this will be an easy concept for you.

To start, I'll say that there is a long-named boolean variable we can set to false in the constructor of a form called "CheckForIllegalCrossThreadCalls." When set to false, is does just what you think, it will not check for illegal cross thread calls. To break down what that means, when true it will check to see if a thread tries to access a control it did not create, and when false, it will allow it. In simple applications this may be all you need, but any amount of complexity and it quickly becomes a bad idea. The problem with threads is their unpredictability. Should two threads happen to be editing the same control, things become unstable. From unintended outputs to crashing programs, it's not something you want to test, it's just better to do it right the first time, and every time. This variable, CheckForIllegalCrossThreadCalls, should remain true, by default it is.

For my little example here, the UI will consist of two progress bars and a button. Upon clicking the button, one thread starts per progress bar and they will update the progress bar they're associated with over time. This will leave the GUI thread to do nothing, at least until each thread calls their invokes. In addition to these controls, the form will have two delegates, two events, and a list of all the running threads. The events and delegates are paired. One pair is to update a progress bar, the other pair is for when a thread completes. There is also a struct to act as the payload for the threads, as defined here:

More...

Advice, C#, Development, Source Code , , ,

Android vs. iPhone: Day One Development

5. November 2010

These are exciting times! As an assignment at school, we are writing an iPhone game. It's a simple number guessing game. You know how it goes... Generate a random number, get the user's guess at the number, tell them "too high" or "too low." When the user guesses it right, you tell them how many guesses it took. It's actually one of the most boring games you can play, but it's a great beginning for learning a framework (and in the iPhone's case, a language, too). It has all the great aspects of a first app: input from the user, output to the user, and simple processing with a nice added bonus of learning how to randomly generate a number. I worked hard to do things right. I wanted it to rotate properly, stay centered, respond well to all input, the usual goals. I wanted a market worthy app, even though it'll never make it to the App Store or the Android Marketplace. All the specifications my teacher inparted on us for the iPhone app, I continued to uphold for my own Android project. I'm going to do my best to explain my experiences with both platforms. I have the same experience with both of them. About a month ago I wrote a Hello World app for each of them. School got in the way of looking into either of them deeper, until this assignment. I may seem pre-determined to be better at Android considering my Java history, but I'm accounting for it by saying that I haven't worked in java for years and that I'm currently getting three hours a week being taught iPhone dev and Obj-C. It evens out enough for me! This article will not be as much a walkthrough as it will be a comparison between my two experiences.

More...

Advice, Android, Case Study, Development, iPhone , , , , ,

Threads: Doing Them Right

8. September 2010

Threads... I'm not going to claim to be an expert at explaining all the low level happenings or all the intricate little bugs and/or features of them. I am going to be talking about good foundation code for making threads work right without worrying about races, locks, or GUI halts. First, a basic understanding of what a thread is. A thread allows for multiple lines of execution to be running in one application at the same time. You may need this for many different reasons. With only one thread, that thread is in charge of what's called the message loop. It'll listen and respond to events such as repainting the form and user interactions (clicking a button, dragging the window), if you put that thread to use doing something that takes a lot of time (say you click a button and that does a lot of network traffic or image processing), then the message loop goes unattended, this is how Windows decides if an app is "Not Responding" (when the message loop accumulates events) until it completes whatever it's doing, then it begins responding to the message loop again. With another thread, you can handle the heavy load and the original thread can continue responding to events in the message loop. This can be both a good thing and a bad thing.

There are many problems that can arise in multi-threaded application. Let's say you had an array, and in one thread you're getting element 6 in that array and in another array you're inserting an element into index 2. Different things could happen based on which thread gets there first, and it's impossible to tell which will. You can always use a lock statement to prevent data corruption due to multiple threads accessing it, but that can lead to thread locks and isn't always the easiest thing to do. Instead, design your application to be thread safe from the ground up. It's easier to hammer out the details to a thread safe app first and then implement it than it is to design a semi-working app and fix the thread issues once they've become prevalent. Defining set rules for how to be thread safe is hard. The knowledge comes with experience in many different applications.

More...

Advice, C#, Development, Source Code , , , ,

Soft Skills, Social Networking, and Word of Mouth

3. September 2010

So you can code. Maybe you have a library of language specifications memorized or maybe you can implement MVVM, MVC and other code architectures efficiently in your sleep. Awesome skills like these bear little fruit if you can't get or keep a job. You still need a skill set that applies to the company's needs, but sometimes what you're capable of is not enough to stand out. Social Networking, if you have lived under a rock, is a great tool for getting your name and experiences out there for potential employers to see. The key to social networking is connectivity. Not just connecting you to other people, but keeping all the social networks you use connected to each other. Connect your Facebook to your Twitter and your LinkedIn accounts, whatever accounts you get, try to link them. This will help make social networking easy and efficient by the fact you only have to update one account (probably Twitter) and having all your other networks stay up to date with it. Once you've made your information easy to access by linking accounts, you have to make sure you keep you're content professional and relevant. Don't be one of those people who posts about what they eat or what the neighbor's dog is doing. Nobody wants to read that, not even your most personal friends. Getting your content out there is just the beginning. If you're contacted for a job, your soft skills will make or break you. Soft skills are things like manners, personal hygiene, and basically how you carry yourself. A good developer who's a bit of an ass can be overlooked during the interview process, there are plenty of good developers out there. Just don't be that guy.

More...

Advice, Misc , , , , , ,

What Google Native Client Means For Web Apps

31. August 2010


In my last post I talked about the applications of cloud computing, and my own personal challenge to commit to using them over their desktop versions. What I forgot to mention is what is in store for the cloud computing world. Currently, the main languages that make it to the browser are HTML, Javascript, and CSS. These languages are parsed by the browser and presented to the user for display or interaction. For more in depth content, such as the video I've included in this post (if I can sit through it, you can), these take plugins where the browser passes control to compiled code that generally runs outside of the browser. The dominant choice for functionality like this is usually Adobe Flash, although Java has shown it's uses. The general process is when you want to watch a video, an HTML page is sent to your browser containing an object tag that tells the browser what file to pass to what plugin, the file (the video content, most likely flash video, flv) and the video player code-base (written in compiled ActionScript, I believe) are passed on to Adobe's flash plugin for your browser, at which point the ActionScript is run, which parses the video and displays it frame by frame in the flash control which the browser has next to no control over. A further, more humorous, and probably much more accurate, breakdown can be found here.

More...

Advice, Misc , , , , ,

How I Plan To Live In The Cloud

28. August 2010

Thanks to the internet, information is readily available anywhere and everywhere. From desktops and laptops to mobile devices, even TVs! The internet has expanded beyond just making information available anywhere to include services that let you store some files, manipulate others, share all of it, and be able to access all your information from any computer that has internet access. There are a lot of pros and cons to working in the cloud. The biggest con is that it requires the internet, and usually fast internet. Of the pros, the best seems to be that you can access all of your stuff from ANY computer connected to the internet, and as smart phones get smarter, they can help keep you connected to your Cloud services. This school year, I challenge myself to do as much as I can in the cloud.

The college world can be demanding, but the internet is ever changing; adapting to whatever needs the users can come up with. There will be papers to write, research to be done, presentations to give, group projects, all sorts of of expectations and requirements. Nothing would be worse than a hardware failure and losing all of your projects and data. Last week, I received a frantic call from a web designer friend who was working on images for a site. She would edit them and place the finished images on her external HD. Her HD was brushed off the table and fell two feet, just enough to really mess things up. I did what I could over the phone to help her, but my best advice was to begin re-editing the images as fast as she could for her deadline that afternoon. It goes to show that these setbacks are random, sometimes inevitable, and always inconvenient. So it's better to be proactive rather than reactive. I mentioned to her about services such as Dropbox that would easily let her sync incomplete folder from work to her home computer so she can wrap them up and sync them back with her computer at work. This is part of the reason I want to relocate all that I can into the cloud. To be preventative about losing data.

More...

Advice, Misc , , ,

Motivation and Inspiration

4. August 2010

In order to become a good developer you need to have experience. Some people will start off appearing to be better developers than other people in class or early projects at work, but when the projects get bigger and the tasks get harder, the experienced developers shine. The best way to get experience is to go from job to job taking on a variety of different kinds of projects, but this is too reliant on other people hiring you and the kind of projects they give you. The better alternative is "private research," your own personal projects. I mentioned this before but some of the problems that arise are Motivation and Inspiration. A bunch of Hello, World! applications would provide you with some experience I guess, but obviously not the diversity that it'd take to be a valuable developer and a good colleague. Remember, it's not just important for your boss to like your output, it's equally (if not more) important for your coworkers to appreciate your input. A good quote about this is "write your code as if the developer who works with it after you is a psychopath and knows where you live." It could not be more true.

More...

Advice, Misc

I Have a CS Degree, Now What?

19. July 2010

I had an interesting conversation over the weekend with a grad student who recently received a degree in both Electronic Engineering as well as Computer Science. He was concerned about how he could graduate and still know so little about what Computer Science really looks like when applied to a real job or during research. He has the passion that the field needs, but he doesn't have the direction. I would like to share with you all some of the points of our conversation.

My friend brought up small lists of what languages he knew and what languages he wanted to learn. He mentioned a few of the usuals like Java, C++ and Python, but throughout the evening he never talked of a project he wanted to start or a particular subject he truly wanted to delve deeper into. Knowing a lot of programming languages for all sorts of platforms shows good diversity and will definitely be a great tool for job hunting when he's done in graduate school. I can't say that learning multiple languages is not a good thing or that it's something he shouldn't do, but what he (and all CS majors) should do is find a subject of Computer Science that truly interests him and begin applying himself to that subject. My advice for him was to find a field, his own subject of study that is slightly more narrow than just Computer Science. Data compression, security, compilers, interpreters, games, data mining, data organization, data classification, there are hundreds of places he could apply himself. Of course, I don't mean that he or anybody should restrict themselves to these narrow fields, or even pick just one of these fields, but when you have a real project with goals and struggles, then you're going to start coming across the real experience that books simply cannot teach you. Set your sights high and pick something that you actually care about. You might not even want to work alone. Finding classmates or friends who share your interest in the field can help all who are involved stay interested and leap and bound through concepts of the material. People who have already started studying that field can be a great resource for pointing you in the right direction and explaining details that you may have trouble grasping.

More...

Advice, Misc , ,