A network of sites, tools, and technology to bring ideas into reality.

The Digital Tumbleweed

Just another WordPress weblog

BZR: Push and Update

You always assume that the tools you use on a daily basis are the best for the job. There comes a point when you realize that there could be more… I had one of those moments today.

I was hacking on some code and thought, it would be great if when I commit and pushed my changes back to the main branch, that it also updated the branch with the latest changes.

Enter “bzr-push-and-update“.

To get the tool working, I branched the copy from Launchpad, renamed the directory, and put it into my <python_location>/site-packages/bzrlib/plugins directory and it worked. No hitches or anything.

It’s great when awesome tools can be easily enhanced. :)

The Nerd Handbook

For whatever reason, I’ve only recently stumbled across a post from @Rands at Rands In Repose. It’s called The Nerd Handbook. I found it to be hilarious and true in many, many ways. It is certainly worth the viewing. Enjoy!

I Want My Olympics Too

I thought, in the spirit of the Olympics and all, that I’d write a post about the Olympics. But, obviously I wanted to throw a new twist on it. I’m not going to talk about the current Olympics in Beijing. Instead my curiosity lies in the fact that no other field has the equivalent, that I’m aware of. Why is it that athletes have a venue to compete in every X number of years such that they are awarded medals and the likes?

Maybe it is that we compete daily for survival in the world. Companies go head to head in an attempt to stay in business. Obviously I’ve over-dramatized it, but beyond this is there any competition setup similarly?

The reason I ask this question is because competition is healthy. What if we had an IT Olympics? What would it involve? Black hat vs. white hat, windows vs. linux, etc.? I’m just trying to entertain the idea.

What do you think?

N.A.D.D. and A Spindle of Prototypes

Many times in development we get crazy ideas. Not the ones like dancing naked on the bar in the latest club, but the one we think will allow us to rule the world. In those brief moments we envision pyramids, giant aligned rocks, and extremely good apple pie…with ice cream all served to us on a silver platter. When reality creeps back into consciousness we begin to think about the construction of that idea. This is where the prototype comes in.

Unfortunately, or fortunately, I have these kind of ideas every now and again. It leads to some entertaining day dreaming. When I snap to I begin thinking about how I could create that which I’ve daydramed about. It often leads to half attempted portions of an application. By the time I’ve finished hacking I have a subset of the functionality I imagined would work. This is the nature of the prototype; see a post I wrote earlier this year on prototyping.

Now, the constant Attention Deficit that I have due to my self-diagnosed N.A.D.D. means that as soon as my next big idea comes along I drop what I’m working on to persue that. This doesn’t work very well. It leads to a handful of half hearted attempts to produce anything worthwhile. Here are a few tricks that I use to make my day go more smoothly.

Break the monotony: In order to harness my ideas I tend to need to be fully engrossed in the concept. If I don’t have full confidence in what I’m doing then I lack the focus and attention required to be 110%. So, the way I combat this is by taking breaks. If I’m not fully into what I’m doing I give myself 5-15 minute breaks every 2 hours or so. This lets me recharge my focus by switching gears quickly over a short interval. Sometimes I’ll get up and walk around the office and chat quickly with someone about a random topic. But, it gets my mind moving in another direction such that when I return to my desk, I’m refocused.

Solve a problem: I try to solve problems. What I mean by this is not that I’m a problem evangelist, but instead that I work on the problems at hand rather than just trying to architect like crazy. I rather like not being an astronaut and prefer to stay that way. Plus, I tend to be far more interested in challenges, and problems present challenges.

Calling all units: When you code in pairs you have the interest levels of others to feed from. If you and another person or two other people are working together to solve a problem then you’re one step head of the game. I like to bounce ideas off others even if only for the brick-wall effect, it helps me to think through issues. When I grab another person to code with we usually end up being very productive pushing each other forward.

These couple of things help me to be as productive as possible. I try to use these techniques often as tools, just like my editor, in the sense that they can help me to be as effective as possible. When I’m done, I have a number of full featured prototypes that can be equally evaluated. This makes it easier for me or anyone to assess whether the idea really is something that can takeover the world…mwahaha.

Getting It Done “Write”

The software development industry has a problem. Most of us are lazy. In this cling to the “do as little as possible” attitudes, we lack the necessary desire to document what our code does. Granted, if you are anything like me and write “perfect” code then you shouldn’t need to document your code right? Wrong. Documentation is the sort of effort that proves fruitful later on in a couple of ways.

The Example

Lets assume for a minute that you are the star programmer. As such you are a wanted person. The team developing Flaglets wants your time and effort to write a backend API that allows access to the database and that the team developing Rewquicks needs you to write an AJAX toolkit that supports loading of everything in under 3 seconds from request to finish.

You know you can do this work. Hell, for you it’s easy! So you throw on some tunes, and start pounding away. In the sprint you have managed to finish both tasks plus some. Again, you have reasserted your position as company superstar. All is good in the land of you and you move on to your next set of tasks.

The Maintainer

The product has been working for some time but a client found an issue with the way the Flaglets API is working. The data seems to be coming back mangled. You can’t work on the bug as you are fully allocated to all the current projects at the company.

Insert The Maintainer. This individual will have to run through your code and fix your bug. Oh and did I mention this is a P1? Well it is. Now s/he has to trudge through code to figure out what the internals mean. Leaving aside any inherent problems with the code itself…how am I to start working with this code?

The Maintainer can ask questions but that generally doesn’t provide enough context to get rolling. That then means that s/he is left to either return to the developer with more questions, which is not always possible, or fight with the code. The latter is usually the case.

You as the Developer

So, you are still that amazing developer. You are a code ninja, but you’ve been away from this code for quite some time. It starts to eminate a distinct odor; the scent of “code stink“. You start thinking that it’s about time you reworked parts of your code. But you start to run through that wretched smell and although you are and were the awesome superstar…you got better. You have realized that you really did not know what you were doing when you wrote that piece of code.

I bring this up because it’s important. Your code will develop this stink. If it doesn’t, you should be concerned for your job as you are likely on your way out. ;D

Anyway, the point is that you have to figure out what you meant when you created this piece of junk so that you can make it better. This now puts you into the same situation as The Maintainer.

Why It’s Important

Your documentation may help save the day. Not only will it save time and effort, but it will save a few hairs from quickly turning gray! Think of the hairs! When you document your code you are preparing any future readers for whatever it is that your code does. The main reason that documentation is so important is that it can help prevent bugs!

There have been many occasions where a decision was made to implement something a certain way because of a limitation or something else. Without commentary, anyone looking at that code without context might think to refactor it, but that could be detrimental to the functioning of the code.

Also, I am in a position where I review a good deal of code for quality so that we are doing things efficiently and effectively. I often have to ask what the purpose of some code is when a little notation would go a long way and save me from having to ask.

Digest in Moderation

Now, if you do no documenation, then get to it, but keep this in mind. As with anything, moderation is going to be your friend. Putting useless or obscur comments in your code can actually harm your effort. Find the balance. If something is not obvious by the code or you are unsure as to whether to comment, write a comment. Err on the side of caution. But, in all of this you need to make sure that you are writing useful documentation. Making a note about something that happens 15 lines down is fairly useless, but stating that the parameters should be a value of type X and will throw an exception otherwise is great.

Happy documenting!

The Myth of the Expert

Second semester of my junior year in high-school had started and I was fairly eager to return to classes and not do the homework that was assigned to me. My last class of the day was a math course, pre-calculus if I remember correctly. I sat next to my friends and we began talking when the teacher walked in and wrote this on the board, “mean what you say and say what you mean”. He then turned to the class, told us to take out a piece of paper and write about what this meant. I looked up and began questioning his sanity… What in the world did this have to do with math?!?

He told us that we would need to be able to express, clearly, the ideas and concepts that we had to in our lives. That understanding the meaning behind that phrase would help us to better ourselves. However, that he would help us to understand this through math. The remainder of the course turned out to be great and we didn’t talk much about this, but I would always attempt to tie what we learned back into it.

Gears

It struck a chord with me. Now, I can thank him for presenting the question. I’ve had to deal with a handful of very sticky situations that require the truth and brevity.

With this in mind, how does one manage being truthful and concise while doing something such as marketing or advertising? Both of these professions tend to lead to the twisting of words such that new and hidden meaning is applied. So, how can, in good conscience, people do these professions if they follow the rule of “mean what you say and say what you mean”?

Ultimately everything comes down to marketing and advertising does it not? If I have a task that I need done, I have to market the task to the person(s) doing it such that they feel an important role in the success of the task. If I have to mow the lawn, I can sell the idea to the neighborhood kid such that they can make a quick buck. But, how do I go about doing this? It’s easy enough to say, “Hey kid, you want to make a couple bucks”. However, I’ll likely have to make a second pass at some point because it has a higher chance of being done poorly.

If I now turn that into something like, “I’m looking for an expert grass cutter. Are you that someone”. The kid can take some pride in what s/he is now doing. Plus, they will make a buck and likely make more for doing a great job. But, does this really make them an expert landscaper? No. In fact, it would be absurd to say such a thing.

This being the case, I’m beginning to wonder why in the world we have so many “experts” in any field. Surely Einstein was an expert in his field, but what about the rest of us that are in the back 95% of the bell curve? Can we truly call ourselves experts? The obvious answer is no.

I remember when I graduated from college fully believing that I was a programmer extraordinaire. Man, I was good…I’m tellin’ you. In fact, I was one of those 5% in the world. Once I got into the “real world”, I realized that I’m probably at about 50%…and that is likely pushing it. But, I am expected to market myself in such a way that I portray an expert. I’ve always been confused by this.

Don’t get me wrong, I love coding. I love diving into a problem and coming out on top. But, that sure does not prove me to be an expert. I’m not sure whether it is a fad. that people have attached themselves to or whether it is just something that H.R. people eat up, but it seems to happen far too often. As a hint, when interviewing, don’t tell me you are an expert unless you are ready to prove it.

Be honest and upfront with what you know how to do, and be modest with what you do not. The vast majority of us are not experts by any stretch of the imagination and while you may fool someone into hiring you, there is a high likelihood that you’ll be asked to do something out of your ability. Modesty would have served you well in that case.

In addition to people needing to understand that overstating their abilities is taboo, people making judgment calls need to stop jaw-dropping over the ultimate. There are very few around and you are unlikely to see that resume. Provide a more granular view of the information they are providing to you so that you can assess the true validity of said “expert”.

What are your thoughts? Are experts overrated? Is there a myth? Am I just part of the inept 5% way to the left of the bell curve? Throw it at me. I’m curious to know what you think.

Updated Site

I decided it was time to get with it and upgrade my blog software. I’d been on a very old version of wordpress for since this blogs inception. In the spirit of security and such I decided it was as good a time as any to upgrade my stuff. That being said, let me know if you find anything that is borked.

Enjoy.

The Internet: How to Protect Your Privacy

All Seeing EyeIn lieu of my last post, Well Done America: Privacy Owned, I wanted to provide some information about how to protect yourself. Now, there are few things to note about everything that I’m going to say here. This protection only goes as far as you do, if you leave something open, well…good luck to you. It’s like what Thomas Edison said, “I found 2000 ways not to make a light bulb”, he only needed one. All security is about the weakest link, right? So long as I can find one way in, I’m in.

Also, any method of encryption I mention here can be cracked by the NSA. There are some brilliant minds working there, but in the spirit of being “big brother”, they put restrictions on the level of encryption that is _legally_ allowed. Thus, if you want to use something outside of the encryption algorithms that the NSA knows…happy hunting. :) Ok, lets get into it shall we?

Websites

When you visit a website you have a few ways of seeing the information. By this I mean there are a few protocols that your web browser understands. The two prominent ones are “HTTP” and “HTTPS”. HTTP is a protocol that pushes content around the internet. HTTPS, also known as HTTP with SSL, is purely an extension of that but it is _encrypted_. Using Public Key cryptography, when you visit a site the whole session is encrypted. This is very powerful and very useful. What happens here is when you go to the website you are sent a public key from the website. This public key allows you to see the contents of the webpage by decrypting the unreadable content. The website encrypts the content before sending using a private key. Such that when it passes the data along to you it appears to be jibberish. The private and public keys are linked together, meaning no other public key can work to decrypt the contents of the site that the private key encrypted. It’s a nifty technology that we’ll talk more about later.
Imagine this scenario: You want a different perspective on the “War on Terror”. You decide to hit up some Google for “Hezbollah” and then for “Jihad”. It is likely that a number of these sites will be offshore (assuming you are in the US) and so your traffic will be under the watchful eye. So, to in an effort to protect what you are viewing you can try to go to sites that only support HTTPS. Meaning if you type “https://” in front of the domain rather than typing “http://” you’ll know whether it is supported. If it is supported you can access the site only through that protocol and are therefore better protected from people snooping into your traffic.

Email

There are numerous times when I hear someone say to me that they sent their phone number or credit card number in an email. When I hear this I cringe, and I’m sure at that point they understand that something is wrong and that it isn’t lunch. One of the things that most people don’t realize or understand is that email is transfered in plain text. Meaning, when I send “Hey, how was your day?” over email, anybody that is between my computer and where it’s headed to can see that communication. It’s a very similar problem to the website problem, just a different originating source. So, again we come to private and public key encryption.

EncryptionBecause the email protocols do not care what format your email is in, they will pass bits along to wherever you ask. Thus, you can encrypt the body of your message such that nobody is the wiser and you now have secure communication. This means that I now cannot sniff your creditcard information out of the tubes and even if I were able to I wouldn’t know because it would look something similar to “$#Svdfg345$%#&*@Ded,mlpo(lo”. Catch my drift?

So, this being so great and all you need to figure out how to implement it. Because the purpose of this post is not to be a tutorial I’ll post some links.

This all being said, STOP EMAILING CREDIT CARD NUMBERS AROUND!

Personal

ZoolanderThere are a number of times when you will want to have files on your system encrypted. Say your real brother wants to take a quick glance at your journal, diary, whatever and spill all your secrets? What can you do? Well, since I’m the oldest in my family, and the brother…not much, my sister never stood a chance. But, with this information she may have.

Truecrypt is a tool that allows you to make a volume on your system that is entriely encrypted. That means, you can essentially create a folder for all of your word documents, saved emails, and so forth. You can encrypt that folder. Then, when your arch nemesis tries to see what lowly secrets you behold, they will be stumped…Think Ben Stiller in Zoolander.

Lifehacker has a good article about the latest iteration of Truecrypt. I recommend this software to anyone. In fact, I use this software with clients because I trust it more than anything else. You basically tell it how large you want your volume to be and then which level of encryption you would like and it’s done. It’s impressive and powerful.

Anonymity

This one is somewhat stretched. The reason I say that is because nobody is ever fully anonymous on the internet. But, in trying to keep with the theme, I’m just providing you with some information. The Tor Project is a project focused purely on internet anonymity. I’ve actually used this tool to access sites that have been blocked from me before and so forth. It’s a great tool and provides a nice level of anonymous browsing.

Tor works like this: you request a website, that request is forwarded to n number of machines. The last machine in that chain makes the actual request to the site you are visiting. The data from that request is then sent back to you. By the way, when I say request I am talking about when you type in “http://google.com” and press enter or click the “go” button in your browser. You are, at that point, making a request for a web page.
Now, this gets a bit hairy when you talk about Web 2.0 interaction based sites and AJAX based sites. The reason is that one request may go through the chain A->B->C->D and the next request may go through B->C->A->E. This means that your session information which was associated with machine D is lost and that you need to open a new session with E.

AnonymityThe next problem that I can think of deals with public and private keys. You don’t ever want to use this tool if you are trying to manage secure information. Think about how these things work. If I send a public key to you so that you can decrypt my information but I did so through 5 other servers, if one of those servers is bad, you have just given it access to a key that can decrypt your message. Websites using HTTPS aren’t good to use here. For instance, assume you are viewing your banking information, every machine has the public key you used to decrypt that information. That means that they can decrypt that information.
It is cumbersome and has some risks associated, but if you are only trying to get some non-secure information and not send any data, it’s a nice tool for anonymous browsing. It lets you get past some of those work based restrictions to Myspace and Facebook! ;D

Well Done America: Privacy Owned.

Barack Obama: Owning Your PrivacyNormally I try to stay away from the politics and such. I don’t have much interest in dealing with people who understand very little about technology. In fact, I have very little patience for those who make decisions related to how I use my technology when they understand nothing about it. Today I read a post at Tech Crunch about an amendment to the FISA Act of 1978 that Barack Obama voted for today.

Now, I understand that bills will contain more information than just a specific topic but as Dan Kimerling points out:

Given that each day tens of millions of people have their data go across the networks of some of the larger telcos, the risk that these companies faced by working with the government on extra-judicial wiretaps was extreme. In giving companies that work with the government immunity from these penalties, H.R. 6304, and Barack Obama who voted for it, just took away the only reason stopping AT&T, Verizon, and others from helping the government use extra-judicial wiretaps.

This is a huge problem. How does allowing wiretapping and surveillance of my information help anyone? How is this really in the interest of the general public? I do often wonder what goes through these politicians minds when they are voting on some of these topics. Is it purely about votes? Do they genuinely feel that something as haneous as wiretapping is “good for us”?

Not only does this give the teleco’s free reign on our data, but it protects them from anything in the past! Also, this has given the government more insight into our data. This paranoia has gone too far and on for too long. We as a people need to stand up for what is right. We need to do more than just “believe” or “hope” that things will be O.K. and that our “leaders” will do right by us. We can’t wait for them to make more decisions such as the one Obama and many others did today. Is this the “red scare” all over again? Has it come to that?
Because of this I’ve decided to do some searching around. I realize that I am a bit out of the political loop and so I need to really do some research, but I can’t seem to find anything that would support such a thing. For instance, I saw a video clip over at The Bivouac showing a number of points from the CSPAN report.

What I fail to understand here is that the points made in support of this amendment seem to be things like “fear mongering” and “rhetoric”. How can this sway the judgment of the majority? There has to be something that I am missing here. Can someone clue me into what would make this many people support such bull?

So, as part of my travels across cyber-space I found the text of the amendment. In reading part of this amendment I found a bunch of it appalling. It is to the point where I feel I _have_ to be reading it wrong. For example, how else am I supposed to interpret the following passage:

Now, our proponents will argue that the plaintiffs in the lawsuits against the companies can participate in briefing to the court, and this is true. But they are not allowed any access to any classified information. Talk about fighting with both hands tied behind your back. The administration has restricted information about this illegal wiretapping program so much that roughly 70 Members of this Chamber don’t even have access to the basic facts about what happened. Do you believe that? So let’s not pretend that the plaintiffs will be able to participate in any meaningful way in these proceedings in which Congress has made sure their claims will be dismissed.

WiretappingThe way I read it is that we have people making a decision on the issue when they don’t even have access to the information. Am I wrong? I can’t believe that 70 people don’t even have a classification high enough to see the material being discussed! How can decisions be made this way? Maybe it is my ignorance in the ways of big brother, but can we honestly have a system that supports this kind of behavior? We have to hold our government accountable for their actions. This provides a “get out of jail free card” to those that feel like I could somehow be a terrorist. Hell, I wouldn’t be surprised if after writing this I’m thrown on the list.

So, I guess I will end with this. If I am missing something please inform my ignorant self because this just seems too far fetched. Yet everything I find seems to support the conclusions I’ve come to in this post. Why do away with our freedom. Why remove our privacy? As the amendment text says:

This framework, which has been in place for 30 years, protects companies that comply with legitimate Government requests while also protecting the privacy of Americans’ communications from illegitimate snooping.”

We have a responsibility to protect our freedom. If the government seeks to take that away then something should be done. We live in one of the greatest nations because many of our laws protect the citizens. Lets keep it that way.

For those interested, here is a list of articles I found while researching this topic:

* UPDATE *

There appears to be a decent amount of traffic related to this topic on these here tubes which is good. This issue shouldn’t be taken lightly. I’ve seen a bit more information and so I thought I’d share the links with you all.

Hire the Meta Thinker

In the past few months I’ve seen suggestions such as fire the workaholics all the way to fire the underachievers. Then you’ll see suggestions about how to hire and what to hire. What I don’t understand is that everyone is looking for specific traits, “has xx years working with J2EE, has handled a project from start to finish, has lead a team of 5+ people, has a 4 year CS degree”. What is the point? None of the above is going to really help when it comes down to producing something good. I say skip the crap and focus on thoughts and thought process. Hire the meta thinker.

Thinking MonkeyI find that the quality produced from meta thinkers is far superior to the contrary. The reason I say this is because the person writing the code cares about asking what and why. Simply asking “What is this method supposed to accomplish?” and “Why am I writing this method?” starts the thought process into what will inevitably be a much more powerful set of tools.

Not only will those tools, functions, libraries, etc. be more powerful, they will be reusable. The reason I say this is because a meta thinker will think about the practicality of the functions or libraries. Meta thinkers aren’t concerned with the number of lines being produced, in fact, it tends to be the reverse. A meta thinker strives to drive the number of lines required down to the optimal level. The optimal level being the most efficient level. This ties into the “what”; the reason I am writing this function is because it allows me to create an object within the database. A meta thinker asks, how can I make this universal. How can I make this work outside of my specific scenario.

The other reason a meta thinker will produce better code is because of the “why”. A meta thinker understands that not everything requires separation, but attempts to see whether it makes sense to do so. To develop great software you will want some people who ask “why am I writing this?” One thing that will come out of that question is the finding of libraries or other tools. Also, you’ll find that the task at hand may be too complex for the purpose and realize and architectural fault in the system…Why am I really required to write ASM for this web app? Is the speed increase necessary? Maybe it’s time for a new framework. A meta thinker will find flaws less obvious than this one.

Beyond this, a meta thinker is someone you want around because you can bounce ideas off of them. A meta thinker will be able to help you flesh out ideas. These people will be able to expose issues or bless your concept. You are nearly always guarenteed to have a good idea of the more difficult parts of the operation once you’ve talked with these people.

Another reason you want to hire meta thinkers is because they are interesting to talk with. Not only do you build your level of understanding, you start to think differently. You learn and adapt your thought patterns similarly such that you’ll find yourself asking why a lot more. You’ll find that, after a period of time, you are the meta thinker.

This process is enlightening. You find that you try to solve a problem before solving the problem. Instead of diving into an issue you will think about it before and then attempt to solve the problem. This produces cleaner code and better performance, both in code efficiency and in the rate at which you write your code. By meta thinking, you find that you are solving the problem of how to solve problems. You are finding out how to write reusable methods by thinking about how to write methods. Your thoughts begin to change and your notion of just getting it done changes because you know that there is a better way.
Now think about it, would you rather work with someone that comes into the office and just does what is necessary for the day and then heads home, or would you rather work with someone that meta thinks about problems and come up with a crazy solution to a problem? I prefer the latter, it is just more interesting to me but, bottom line, I would prefer to gain more value for my buck.