Parallels/Cisco VPN/Verizon EVDO Problem and Solution

I recently got a Verizon USB720 for my MacBook Pro and installed the software that Verizon provides. I frequently use the Cisco VPN software to connect to my clients’ networks to do work and I also use Parallels to test software on Windows.

There’s a little known (as far as I can tell) interaction between the three, where the Cisco VPN won’t allow you to connect anywhere and if it does, only for a few seconds. To get this feature back, all you have to do is disable the network ports that Parallels creates for NAT networking when you’re connecting to the Verizon card.

Go to System Preferences > Network > Network Port Configurations and uncheck the boxes that say Parallels like the image below.

Once you do that, you’ll be able to connect to the VPN just fine.

AntiSamy – HTML In Web Apps

A big problem right now in web application development is allowing users to add in HTML and then protecting them from malicious javascript. Fortunately, someone is working on this problem and giving the rest of us the results for free.

The “AntiSamy”:http://www.owasp.org/index.php/Category:OWASP_AntiSamy_Project library is named after the samy “worm” that hit MySpace and infected many thousands of pages before it was contained.

The page mentions that there is very little interest from the Rails community on this. I know there are plugins like the “whitelist plugin”:http://agilewebdevelopment.com/plugins/whitelist, but AntiSamy looks at least to be a nice compliment to something like whitelist.

Old Software Never Really Dies

I just got a support request from someone today for a web application that I helped to write in college. It was my first Rails project and it was made as a senior class project. We had a client who was a professor from another department. We had to write our own version of backgrounDRb, used an early version of Rails, and wrote Flash as the front-end to an annotating engine for documents.

It was a great success for us using Rails and Ruby for the first time. We easily exceeded all expectations set in the beginning of the 10 week class. We had demo screencasts, a professional looking site, a great code/test ratio (first time ever for me), and a very happy customer. Some departments in our school were seriously considering using it for their document collaboration needs, and apparently, the software found its way around the world entirely by word of mouth.

I haven’t touched the code in several years and the machine that housed the subversion repo is long gone. It got me thinking about how software never really dies. I had no idea these people were using it to this day, but it still lives out there. I don’t even have the original site up anymore, so there’s no place to download the code.

It’s sort of cool and strange knowing that something that I wrote as a class project is being used by people to actually get work done. Maybe I’ll pick it back up and polish off the old code and breathe some new life into it someday. It’s just weird to think of a Flash/Rails app I wrote a few years ago as “old.” There’s going to be more of that in the future and it’s a refreshing reminder that everything old is new again and software never truly dies.

ScreenGrab! For Firefox

I just stumbled onto this little gem the other day while looking to roll my own solution to a problem.

ScreenGrab!

It takes screenshots of an *entire* webpage like Paparazzi!, but in Firefox. It can save directly to a file or straight to the clipboard. It’s a helpful tool in testing and analysis work and is another tool I use every day. Check it out, you won’t be disappointed.

Install Old Versions of Ports Using MacPorts

MacPorts is my preferred way of installing, managing, and upgrading much of the software I have on my Mac.

I’m setting up a new work machine today and I need to install ruby 1.8.5 on my machine for Rails to be happy.

Unfortunately, you can’t do something simple like specifying the version of the port you want to install unless it’s in a local repository.

Fortunately, my friend Stephen Chu had this problem about a year ago and has a nice procedure on how to do it. I’m going to update it for MacPorts and ruby 1.8.5 here.

1) Find out the svn revision number of the Portfile that has 1.8.5 by looking at:

http://trac.macosforge.org/projects/macports/log/trunk/dports/lang/ruby/Portfile

In my case it is 21127.

2) Set up a local port repository. In the file /opt/local/etc/macports/sources.conf, add this line before the rsync line:
file:///Users/Shared/dports and create that directory.

3) Install the port into your local repository.

cd /Users/Shared/dports && svn co --revision 21127 http://svn.macports.org/repository/macports/trunk/dports/lang/ruby/ lang/ruby/

4) Run portindex so that ports now finds your new (old) version of ruby.

portindex /Users/Shared/dports

5) Now you should be able to see ruby @1.8.5-p12 in addition to @1.8.6 by running:

port list

6) Install Ruby

sudo port install ruby @1.8.5-p12

You should be up and running now, so to check, run:

ruby -v

You will see something like this:

ruby 1.8.5 (2006-12-25 patchlevel 12) [i686-darwin8.10.1]

Now, if you want versions of ruby that MacPorts doesn’t have (later patchlevels for instance), you can modify the portfiles by hand, but I’ll leave that for another post.

Update: There is an “official” MacPorts HOWTO on installing older versions of ports here. It may be updated in the future, so I’m linking to it here: http://trac.macports.org/wiki/howto/InstallingOlderPort

Install Old Versions of Ruby Gems

I am setting up a new machine that has some old software requirements for my project this week. A quick tip if you need gems to be installed at an older version (if they are still available).

Use the -v version flag to specify which version you want.

sudo gem install capistrano -v 1.4.1

If you’ve got the newer versions of the capistrano gem, no need to fret. You can specify the version you want to use on the command line like this:

cap  _1.4.1_  deploy

You can alias that to something else in your bash profile by adding something like this:

alias cap1='cap  _1.4.1_'

Laws of Power #31

This law is something that I have been burned by in the past, but can be turned into something good. I think the only real defense against someone with malicious intent is to remember something that a teacher told me some time ago: Consider the source. More after the jump.

Executive Tech Summaries

Is anyone out there interested in some one page tech summaries? I had several occasions where they would have been useful this week and I am ready to write some if they don’t already exist.

They would have basic terminology and usage info as well as pros and cons for an organization.

Comment with what tech you would like covered in the comments.

Books For Business Analysts

I was involved in a discussion recently about books that were good for Business Analysts. Here’s a list to get people started.

The Inmates Are Running The Asylum by Alan Cooper

About Face 3: The Essentials of Interaction Design by Alan Cooper

Don’t Make Me Think: A Common Sense Approach to Web Usability, 2nd Edition by Steve Krug

Domain-Driven Design: Tackling Complexity in the Heart of Software by Eric Evans

The Visual Display of Quantitative Information, 2nd edition by Edward R Tufte

Writing Effective Use Cases by Alistair Cockburn

Patterns for Effective Use Cases by Alistair Cockburn & Others

The Responsibility Virus by Roger Martin

You’ll notice that most of these are design books. As an analyst, it’s often the case that you are going to have to look at an old business process or application interface and design something new. It helps to know the limits of the technologies you are working in, but it is better to get a general understanding of design principles in general so that you’ll never be caught off guard.

Note: All Amazon link proceeds go to charity. If this turns out to be popular, I’ll write up some more book lists my colleagues and I think are good to have on your bookshelf as an Analyst, Dev, QA, PM and consulting in general.

A Lesson In Getting Organized

Someone I know recently took over a housing community board by getting organized against the old board and running an effective campaign. The strategies used to do this can apply in many areas of life. Here’s how they told me they did it.

*Know What You Want To Accomplish*
The old board was being run by 5 residents of the community and they had contracted with a management company that wasn’t doing an effective job. On top of ineffective management, the board was illegally charging landlords an extra fee for being non-residents. This was strike one for this person and was the whole reason that a group of people decided that the board needed to be replaced. This single goal united 3 people to run for the board.

*Make Sure You Are In The Right*
In cases of legal judgement, it is best to get a lawyer’s advice. The more specific the lawyer’s experience, the better. In this case, one of the landlords was a lawyer and confirmed that the fees were illegal and even sent letters to the board requesting that they discontinue the fee and refund the landlords in the form of a credit on their association dues. When the board ignored the letters, this was further cause for action. Strike two.

*Plan Your Campaign*
Now that there was no choice but to take over the board to effect change, the leader of the 3 did some research on past elections to the board and found that the largest vote count for any one member was around 90 votes. Each resident gets 5 votes, so each of the 3 needed to get around 20 people to vote for them and they would pretty much be guaranteed a seat on the board.

*Know Your Audience*
The people that were being affected by the extra fee were non-residents, so the 3 needed a strategy to communicate with them and explain what needed to be done. The 3 printed up fliers about the problem and mailed them to all of the landlords of the units in the community. They also went around to each of the units and knocked on doors telling people about the problem and to come and vote on the day of the election.

*Stand Your Ground*
On the night of the election, the ballot box was filled with a large percentage of the votes going to the 3 wanting to take over the board. The old board members had set a deadline of 6pm for all of the ballots to be in. They decided to change their minds and open the ballots to anyone who was at the meeting. The old board members went around the community and asked people to vote on the issue. This nearly doubled the amount of votes cast in the election. The 3 were still confident that they would be able to get a majority on the board. Strike three for the old board.

*Move Quickly*
Once all of the ballots were counted, the results were read and the winners announced. The 3 were on the top of the vote count and each got a seat. One of the old board members and a newcomer got the other two seats. Immediately, the management company, seeing the writing on the wall, resigned. The new board members immediately put the extra fees to a vote and the fees were immediately reversed and all past payments were credited back on the association fees.

*Plan Ahead*
Knowing that they would win, the leader of the 3 had already gotten bids several weeks before from several management companies to replace the one that had just left. In my state, you’re required to have a new management company within 30 days. Having these bids in place would speed up the process and allow the board more decision time to choose the best management company.

*Don’t Burn Bridges*
The 2 board members left on the board were upset that they no longer had a majority and couldn’t make decisions the way that they wanted anymore. Being gracious, the 3 board members included them in the process of managing the community, but made it clear that any illegal activity would not be tolerated and that they would need to decide on issues as a board. The 3 knew that it was important not to alienate the community and make sure to listen to their concerns and manage fairly.

*Recap*
So the lessons I took away from this are that in order to get something done, you need to have a clear goal, a flexible plan for getting there, research to back up your claims, and organization to pull it all together. Once you’ve gotten what you want, it’s important to make sure that you make good on your stated goals quickly and work with the former group to keep things running smoothly in the future.

On Agile And Backend Integration Projects

Another consultant recently told me that she doesn’t believe Agile works for backend-type projects. She said that Agile just introduces too much change and she can’t keep up with the process. She also mentioned that there were studies emerging that said as much, but when pressed, she couldn’t find any.

Now, I’m all for Agile taking criticism. It’s about People over Process, so if there’s some process hurting people in that equation, then it needs to be examined and possibly fixed. I also believe that building working code iteratively is vastly better than talking about it for months and then sitting down to write code.

Our client, like all clients, likes to change their mind about what features they want in the application we are building. This other consultant and I are on two different teams within the project and she’s doing legacy integration work and we’re doing essentially greenfield development that will have to hook into her systems. As our client changes their mind, it’s pretty easy for us to keep up while she struggles to make changes to database models, ETL processes, and other bits of code in her work.

Thinking about what’s going on, I think I’ve come to the reason why it’s hard for her to change and easy for us. We’re using tools and processes that allow us to change rapidly. Her tools are hindering her from making rapid and iterative change and her processes might be too rigid.

Notice that I’m not telling what tools each of us is using. I don’t want to get into a debate about what tool is better, only the type of tool that allows people to be empowered to change at a moment’s notice and then change their minds back again. My hypothesis is that her tools are hindering her from keeping up with our clients. She’s certainly capable of doing the work, but I feel like processes that her tools make her go through are getting in her way.

What advice can I give to someone in that position? I’ve mentioned stronger scope control to her, greater communication between our teams, and getting another analyst to help with the workload of deciphering the legacy systems she has to integrate with. These are all people processes because I’ve seen other consultants use the same tools in my Agile projects and fit in with the process relatively comfortably.

Agile may not work for all types of projects, but I believe it can work here. It may just be that we need better tools.

Marc Andreessen on Innovation

I’ve been reading Marc Andreessen since I heard about his blog from Fred Wilson. There was a great post about retaining good people a few weeks ago that has stuck in my mind ever since.

Things not to do when trying to retain great people:

Now we’re getting into personal opinion, but for what it’s worth…

Don’t create a new group or organization within your company whose job is “innovation”. This takes various forms, but it happens reasonably often when a big company gets into product trouble, and it’s hugely damaging.

Here’s why:

First, you send the terrible message to the rest of the organization that they’re not supposed to innovate.

Second, you send the terrible message to the rest of the organization that you think they’re the B team.

That’s a one-two punch that will seriously screw things up.

Instead, focus on boosting the innovation culture of the entire company.

There are a ton of other tips in there, some of which we used to tell our client companies at NeoTactix. It’s always nice to be reminded of great advice, particularly about what to do with great people that want to make the move to a startup.

iPhone Service Pricing And A Great Opportunity

at&t just announced the pricing for the iPhone plans.

The pricing is inflated from the normal plans.

*iPhone Pricing*
| *Price* | *Talk Time* |
|$60/mo | 450 min|
|$80/mo | 900 min|
|$100/mo | 1,350 min|

*Regular Pricing* (Cingular)
| *Price* | *Talk Time* |
|$40/mo | 450 min|
|$60/mo | 900 min|
|$80/mo | 1,350 min|

The regular pricing includes rollover, unlimited nights/weekends, and unlimited mobile-to-mobile minutes. I’m not sure if you get those with the iPhone plan. You do get unlimited data access which normally costs around $20/mo.

And that is the whole point of calling this out. The iPhone plan comes with unlimited data access. So the first company that comes up with a VOIP web app for the iPhone is going to make a killing. I’ll bet it’s already in development.

Less Junk Mail – Now With Less Privacy

I was going through a backlog of feeds today and noticed a number that I could call that would allow me to opt-out of getting credit card junk mail from the big credit bureaus. I thought to myself, “Great, I really hate those things and they go directly to the trash. Let’s see if I can stop it for a while.”

For those outside the US that don’t know, we Americans get a ton of junk mail from a bunch of credit card companies and other companies we could care less about because these credit bureaus keep a mailing list with our names on them and then they sell the list to direct marketers. It’s a great business for them and they can even qualify you as a good lead because they know your credit score. What turns out to be good business for them is really annoying to those of us who have to receive this mail.

So, I call the number and I get a computerized greeting. The nice computerized voice tells me that there are no operators to take my call, but that I can still opt-out. She asks me if my phone number is the one that I’m calling from (I’m assuming they have caller ID, but that can be blocked or I could call from a pay-phone) and I say no. The computer then asks me to say the phone number for the residence I want to opt-out for. I give them the number to my house and the computer starts reading back my home address to ask me if it is correct. _Wait, what?_ A little concerned, I say yes because it was my address. It then proceeds to say my full name and asks me to confirm. I say yes because that’s correct too.

Thankfully, that’s all the information that it decided to give to me without asking for any sort of verification, only a phone number which I could have picked out randomly, or worse yet, given to someone who now wants to find out where I live.

The rest of the call asked me to enter in my social security number and date of birth to confirm that I was who I said I was.

This seems backwards to me. Shouldn’t I have to tell you who I am with some information that I don’t just readily give away? I don’t go around printing my social security number on business cards, but I do print my phone number on business cards. My information is in their systems if they are using what I enter to verify the transaction. Ask me this information first before you disclose my name and home address to anyone I’ve given my phone number to.

Here’s the number for those interested: 1-888-5-OPTOUT

For those who are going to say that this number was fake and that I just got my identity stolen, I used the web browser on my phone and checked this number out before I called. That is also where my feed reader is. The number is listed on the Federal Trade Commission’s website along with a link to a free website where you can enter in your information to opt out. I was going to use the form, but typing in a whole bunch of data using your phone is not ideal with a simple 12 button keypad, so I decided to use the number. The website gets things right. I have to enter in tons of information about myself including my address. The phone number just gives it up willingly.

Laws of Power #30

Does anyone remember when you could get a good grade in school when you did some hard work? It never seemed right to me that all I had to do was show the teacher that I worked hard, but didn’t actually have to finish the assignment. Outside of the classroom, this doesn’t work. People don’t care if you worked hard to get a report done, get a sale, or whatever it is you do. They just care that you can get the job done.

Make Your Process Lean, Not Your Workforce

I was reading an article by Robert X. Cringely today called Lean and Mean noting that IBM Global Services is laying off thousands of workers and possibly up to 150,000 in the US.

Go ahead and read the article. It makes me really glad that I work for a company that extols virtue and taking care of their people before making money. At ThoughtWorks, we don’t have this level of employee count, so I can’t say what would happen if we did.

We’re also trying to become more lean, but we are doing it in a different way. We’ve already adopted agile as core to the way we work a long time ago. This time, we’re applying lean to our processes and tools, not to our people. That’s the important point. When you treat your employees like family, you do things differently.

Hundreds of thousands is a big family and I’m sure that the execs at IBM GS don’t know the large majority of them. I guess that makes it easy to cast them aside in the name of pleasing Wall Street.

Lifeguarding and Firefighting

I took a kayaking trip this weekend on a lake near my house and an old lesson popped into my head. While I was working at NeoTactix, we had little firemen bobble-heads with our pictures on them. It was an allusion to the fact that we were always fighting fires in our client companies. I remember asking for a new bobble-head in addition to my fireman. I asked for a lifeguard.

I was a lifeguard when I was younger and the lessons that I learned training there were unforgettable. As a lifeguard, you don’t just react to problems, you scan your water and look for potential problems. You are taught all sorts of strategies to minimize mistakes and keep everyone safe. While at work, I applied the skills I learned as a lifeguard to protect our clients from things I could see on the horizon.

Lifeguards overlap the areas they are watching so that there’s always a second pair of eyes on any given situation. This worked very well for us when we adopted this strategy. For example, if I had a press release I was working on, I made sure to always run it by the managing partners to ensure I got everything right before publishing it. Another example was to watch companies in our portfolio that could indicate problems for the other companies that were our clients. Because each of our clients were minding their daily business like they were supposed to, they couldn’t always look up and see trends that could affect them. Part of our job was to see these things coming and warn (or save) them if needed.

Lifeguards constantly scan the waters without focusing on one particular area. When you are sitting up in the tower, it can be easy to focus on just one person or a group of people. It’s called tunnel vision. The safest thing to do is to look for typical problem signs, make a quick head count, and move on to the next group of people. This lesson translates to business really well. As a CEO, you have a bunch of things you have to worry about. Payroll, internal initiatives, investors, competition, and growing the company are just some of the huge tasks you have to take on. Making sure you give each their due attention is important or you become reactionary and will never get to focus on looking forward for your business.

Lifeguards ignore unneeded distractions and maintain constant focus. If you’ve ever seen a lifeguard at the beach, they always have their eyes on the water. They will walk up their towers backwards to stay facing the water. People will come up to talk to them and they’ll rarely look at them, instead focusing on watching the water. It’s not that they are trying to be rude, but that they are focusing on their job, not someone who just wants to chat about Baywatch. In business life, there is plenty to keep you distracted from doing your real job. Surfing the internet can waste whole days of productivity. Worse yet, spending your whole day on something that _seems_ productive like rearranging the office furniture can make you feel like you are doing something good, but is usually just a way to procrastinate on something more important that could be done. When you learn to control the time you spend on unneeded activities, all sorts of time opens up and you’ll find much more time to run your business.

Lifeguards cover each other’s water when an emergency comes up. Emergencies happen; it’s a fact of lifeguarding as well as business. This is a hard lesson for some businesses to learn, especially in cyclical situations like cashflow or business development. Lifeguards typically have a phone they pick up or button they push to signal the other lifeguards that an emergency is happening in their water and they are taking care of it. The other lifeguards immediately respond by calling for backup and covering the lifeguard’s water while they are making a save. Some businesses will see emergency situations and rally their employees to help fight the fire. While this is good, they often leave other parts of the business unattended. That’s a quick way to becoming a firefighter and only reacting to your business instead of acting to control your business.

Lifeguards and firefighters have their place in business. Both serve useful functions, but if you have more lifeguards, hopefully you won’t need so many firefighers.

Laws of Power #29

Last time, I talked about doing what you want to do with confidence. How do you get the confidence to know that you will be able to pull through? Part of that comes with having faith in yourself and those that you work with to get the job done. The other part comes from planning.

Laws of Power #28

I haven’t done one of these in a while, but today seemed prescient for this law of power like so many other times I have opened up this list. It’s something I was told by so many other strong leaders I have modeled my own leadership on. More after the jump.

Comatose

I’ve been doing a side project lately that needed an embedable CMS for a client. The requirements were pretty simple: A few updateable areas that I could build into the app and possible dynamic content like pulling in the latest posts in the user forums. I didn’t feel like building it myself, so I did a few minutes of searching and came across Comatose.

It works perfectly for my client’s needs. I can use liquid or erb for text processing, so that fits in quite nicely with the multitude of other plugins I’m using. They also added the nice touch of being able to completely customize the admin interface, so it was dead simple to skin the interface to match what I already was doing for them and just add a quick route so it looks like part of the app. I owe the devs a beer.