Archive for the ‘Software Development’ Category

Color – How not to launch a mobile app

WARNING: DON’T USE COLOR ALONE. OR WITH ANYONE ELSE. DO NOT DOWNLOAD THIS APP.
The much-hyped about Color social networking app arrived on the Andriod market soon after the iPhone app launch so thanks to Color for including Andriod users in their release. Unfortunately, Color violated the one rule you shouldn’t violate when you release an app into the store. Do not release a very buggy and unusable app into the mobilearena. First impressions mean everything in this world, and with their two star Andriod color app, my first impression is one of pure distaste. It was amazingly difficult to convincefriends sitting right next to me to download the app with its (currently) two star rating. My friends gave me very distrustful questioning looks. And rightfully so because after using it for aboutfive minutes, even I wanted to uninstall it. Nearly every step contained an unrecoverable/force close bug. Aside from running into bug after bug, I didn’t know how to properly use the app. Usually I don’t mind not knowing how to use something, I’ll learn it , no problem, but after trying to find a short demo of howthe Color I found nothing. Zip. Zero. Nothing. Why couldn’t they write short step by step guide on howto use Color? What i really wished for was a video, but after using their app, I suspect they couldn’t create a video because their app was so buggy they wouldn’t be able to film a continuous segment without some kind of error popping up.
Anyway, thank you Color for teaching us all about what not to do when launching a social networking app.
Here’s my advice to color:
1. Launch a FAQ2. Make a demo video3. Rewrite their ‘WARNING’ message to sound friendlier/have more explanation.4. Fix bugs ASAP5. Spin up the Damage Control PR team. Your much-hyped 41 million dollars is making you look ridiculous anyway, might as well try spending it to fix this disaster.

How to install Sun JDK on Ubuntu 10

I’m trying to set up an entire java dev environment with STS / Eclipse and this is just the first step. Hopefully it is the right first step, I’ll keep you updated.

Informal notes:

Open a terminal
Since the repo isn’t available by default add it to apt by running this command:
sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

To get those changes:
sudo apt-get update

then run
sudo apt-get install sun-java6-bin sun-java6-jre sun-java6-jdk

Addictive Typing update

The original post

I am sadly only up to 80 wpm or so.

Just been busy

Always caught up in the world of software development so I have once again neglected this blog. In any case, I have recently had the opportunity to work with Movable Type and it has definitely been a harrowing experience to say the least. I think its great if you want to manage several different blogs that are strictly blogs with no dynamic content. More specifics on this later as I digest my experience more.

Use StringBuffer to append

I’m speaking specifically to Java Developers here looking for speed. Strings are immutable. When you append two strings together with


String helloWorld = "hello"
hello += "world";

It actually creates a temporary StringBuffer object and then allocates a new String object from the result. So you can imagine the bytecode in three allocation steps.

1) allocate first string “hello”
2) allocate mutable stringbuffer object with “hello” and append “world”
3) allocate final string object with result of string buffer

So instead of using the good ol’ string += string (I know, we LOVE our shortcuts) , which creates a StringBuffer object anyway, lets use StringBuffer append() and basically have slightly more efficient code.

StringBuffer sb = new StringBuffer("hello");
sb.append("world");

I know it’s more typing, but seriously, you should be typing at least 80 wpm anyway. =)

StringBuffer docs

EDIT:

Also, String Buffer is thread-safe, so if you wish use StringBuilder which is quicker but not thread-safe for your non-threaded applications.

EDIT:
Here’s a little experiment I decided to run with this particular issue:
With a list of 100,000 random strings (in this case, random integer between 0 and 10), concatenate them together in three ways:

1. with StringBuffer (example seen in below snippet)
2. with StringBuilder
3. with += operator

Here’s the snippet of the StringBuffer method:

long startTime = System.currentTimeMillis();
StringBuffer sb = new StringBuffer();
for(String item : listOfStrings){
sb.append(item);
}
sb.toString();
long endTime = System.currentTimeMillis() - startTime;
System.out.println("StringBuffer took " + endTime + " ms");

The expected results of this experiment are what I stated above, StringBuffer will come in second, StringBuilder will be the fastest and the += operator will be the worst. But just how much worse could it be?

Here are the results for 100,000 items:
+= took 41174 ms
StringBuffer took 16ms
StringBuilder took 15ms

Here are the results for 1,000,000 items:
+= took 14124956 ms or ~3.92359889 hours
StringBuffer took 328 ms
StringBuilder took 94 ms

So there you go, a little bit of proof that you should be using StringBuilder or StringBuffer for your String manipulation needs.

Stack Overflow Dev Days

Link: Stack Overflow Dev Days

Well, I was lucky (or unlucky) enough to attend stack overflow’s Dev Days. Now, I’m a big fan of Stack Overflow so of course when I had the opportunity to attend (for free, courtesy of my employer) I was super excited.

Now, it’s been a couple weeks (at least) since I attended and I’ve been able to digest the best things I took away from that Dev Day. So here they are in no particular order.

1) You will never make a ton of money developing iPhone apps. I’m not saying you won’t be able to make money, but I’m going to listen to Rory Blyth on this one. You won’t make money doing this.

Rory was hands down the best speaker at Dev Days. I’m not counting Joel Spolsky since he basically spoke every moment he could. If you’re reading, Joel, I heard you had a great opening speech, sorry I missed most of it. Anyway, good demo overall pitch of how iPhone dev is the way to go if you really want to do it. His points, which aren’t new, were

  • Apple has rules, and they make for a great user experience. All you haters keep on hating, but it works. (Psuedo-quote)
  • You know the hardware you’re developing for so less to think about when you’re coding.
  • App store (he repeated this 3 times)

I’m sure there were more, but I think he made his point well enough. Andriod and MS Mobile both suffer from not having a better established App store and having to develop for different hardware devices.

From a developer perspective, it’d be easier to jump right into Andriod development with Java and the Eclipse IDE than using Objective-C and XTools (the only free options for iPhone development). With more and more handsets coming out (such as the The Moto Driod ) it’s hard to argue in favor of a flooded iPhone app market. Maybe there are greener pastures ahead for Andriod dev, that’s all I’m saying.

All in all, if you’re a developer trying to figure out what you want to do, I would say develop for iPhone if you own a Mac and an iPhone. You already have the groundwork, might as well go all the way. But understand this, iPhone is just the flavor of the week, so stay sharp and always keep an eye out on the horizon.

Oh and as a side note, Rory looked like he hit some coke before he went up on stage.

2) JQuery is awesome. The presentation itself was a little light because all of the demos couldn’t be accessed due to internet problems. If you get a chance, everyone should learn a little jQuery. I’ve personally found it to be very useful. Respect to Cody Lindley for toughing through the presentation that should have been heavily based on demos.

3) Peter Mourfield was the joke of the day with his presentation of the “easy to use” ASP.NET MVC. I think he made the case that ASP.NET MVC wasn’t easy to use if anything. Peter Mourfield could put an insomniac to sleep.

4) Daniel Rocha and his presentation of the Nokia driven QT was valiant. He showed a ton of great examples of the QT’s ability to work on a bunch of different platforms and OSes but the tools he used to demonstrate basically made Nokia look like they were back in the late 1990s. This was especially true after the iPhone app development presentation. So props to Daniel Rocha for trying to pitch a nearly defunct product but all the momentum is with Apple iPhone, Andriod, Windows Mobile or even Palm Pre.

5) Google App engine is awesome. I’m not sure how I (or anyone) can make any money off of it, but it is seriously some cool stuff going on over there. Check it out . I would say if you have a cool idea for a webapp, it’s possible with google app engine. At least you’d have street cred if you developed it. Again, I’m not sure how you’ll make a dime doing it, but there it is for the taking.

6) The Python overview that Mike Schiraldi gave was good. I wouldn’t say I learned anything but he did bring to my attention this: Peter Norvig’s spell checker Basically, a brilliant piece of work. Peter friggin’ Norvig is a genius and he works for Google. How many of these guys does Google have? Seriously. Genius. Oh, and learn Python , it’s fun. No kidding. I would suggest 3.0 instead of 2.+ but a lot of people love version 2.+ (including Google app engine)

7) FogBugz is awesome but how are you going to beat JIRA? I know JIRA is seriously flawed, but it’s just so entrenched in software development. Anyway, I would love to one day use FogBugz, Mercurial and Kiln but I just don’t see that day coming any time soon.

Alright, that’s it for now. See you all around.

I type slow!

LINK: Stevey’s Rant on slow typing

Alright, I admit it, I type slow. I mean, I work 8 hours a day, 40 hours a week, plus all this time I spend writing this blog and I can barely type. Now, I’m not saying I’m super slow, but I think 50 to 60 wpm on average is a horrible number for me.

I mentioned this to another computer science friend of mine and he showed me this blog article he read (see above). I think it’s definitely inspired me to improve my typing speed. Hopefully I can get myself up to about 110-120wpm on average.

So what’s my plan to improve my typing? Here’s the list:
1) Download Addictive Typing Lessons
2) practice 15 minutes to 30 minutes a day.

Goal:
1) By the end of September, be up to 80 to 90 wpm (including numbers and symbols)
2) By the end of Oct, average in the 100s
3) By the end of November, 120 wpm no errors (at least once)

I’ll keep everyone posted on this.

The Recession and “Entry-level Programmers”

LINK: CNN- Facebook Increasing Staff As Much as 50%

I was one of the lucky ones who graduated and found an internship within a month and a half. During the early part of 2009, after a horrific 4th fiscal quarter,the job market was definitely looking incredibly grim.

In fact, I’ll have to admit, that during my internship (which eventually promoted me to full time salaried position) , I was still shopping around. But the more I shopped around, the more grim it became. I was faced with recruiters at my college asking for and I quote “… seven years of OO Java programming.” I admit, it wasn’t a software company, but still, why were they were attempting to recruit programmers with seven years of experience. I had recruiters call me to set up interviews, and when I called or followed up with a confirmation email, I was either ignored or told that the position had been closed due to budgetary issues. The fact of the matter was this the job market was filled with software programming refugees from Yahoo,MySpace,Microsoft, Sony, etc and the hundreds of UCLA, USC, UCI, Cal-state everything,etc computer science graduates. A definitely horrific environment for anyone looking for software programming work.

This environment works doubly against the aforementioned college graduates. With a lack of experience, how could they possibly stand out in a sea of experienced software engineers from respectable companies.

Well, let me tell anyone reading this, don’t give up hope. Here’s a few tips:
1) Fix your resume! Spend a ton of time making sure your resume talks about your UNIQUE experience. EVERYONE, and I mean, EVERYONE, has taken that Algorithm analysis course, Operating Systems course, that Database Analysis course. Don’t list that stuff unless it’s completely valid and you say at least a few sentences of why it is important. Don’t be afraid to be specific. Employers want to know what you’ve done specifically, they also want to know how well you’re able to communicate. Writing a detailed (and concise) explanation of your experience in your computer science course helps a ton. These people have never met you before, so you have to give them a good idea of your abilities.

2) Do extracurricular activities that relate to your field. I mean, if you have an idea for a hot new iphone app, try making it! Even if it’s not successful, at least you’ve gained valuable experience doing something related to the field. Not only does this get you excited about your work, it shows the employer that you are self-motivated. Self-motivated people are definitely people that you (or anyone) want to work with, right? So get out there, do something relevant and fun, and the next peer that interviews you will find you a hundred times more interesting. This can all be done while you’re looking for your hot job, so get out there and have fun.

3) This seems like a self explanatory one, but it’s often overlooked or underused. Use your network of peers. Remember that Compilers teammate you worked with? Maybe he/she found a great internship! If you’re on good terms with that person, go ahead and ask, what’s the worst thing that can happen? How about that awesome professor you had for data structures? Hopefully throughout college you’ve met and worked with tons of people, don’t be afraid to ask each and every one of them. I would say that this is one of the effective ways to find work. Don’t overlook it!

4) Apply to companies that aren’t necessarily your field. Tons of places need tons of different people with different skill sets. You never know who needs a computer science major until you try. You don’t have to work at a major software engineering firm like Microsoft, a company like Southern California Edison needs JAVA and C programmers too.

5) Well, you got that interview. That’s only half the battle! Now you have to sell yourself. Sure, maybe you don’t have the experience, but your employers know that. Be confident in your ability to use your degree to do the job. Employers know you don’t know anything about “software engineering.” They were, after all, in your shoes once upon a time, but they do want to see that you’re confident, smart and ready to learn. There’s tons of interview stuff on the internet, so google it for yourself. All I’m saying is be ready to sell yourself.

Alright, so armed with this, I hope your search becomes slightly easier. Maybe you still won’t land at Facebook (trust me, a million people (if you’re lucky) applied for a thousand jobs), but I would say at this point in your life, gaining valuable experience at an internship or at a fast paced company is more important. Overall, I would say if the company that hires you is challenging and satisfying, then that’s a great job.

COCOMO What?

LINK: Software Engineering ≠ Computer Science

I found this article to be insightful now that I’ve worked in the industry for a bit. Computer science is definitely necessary to become a great software engineer, but creativity and the ability to communicate are also critical components in succeeding in this field.

The ability to communicate effectively with a team of varying skill levels, experience and personalities is an incredibly difficult day to day task. Even I have to admit, most of the time, I am at a loss for words. Finding the right vocabulary for the customer is a completely different set a vocabulary for the software engineer that you’re working with. Your project manager wants to know your tasks in terms of difficulty and time lines, what the estimated time to completion, how much time have you put in, what’s your swag. Your programming partner wants to know what framework you’re using, what data structures are used, where’s the classes you wrote, what’s the database connection parameters, etc. Finally, the customer wants to know what to click on, why this does that, why he/she can’t have this or that, etc.

All of this requires a great sense of who you’re talking to, what you’re talking about and most importantly, what words to put together so that every ends up satisfied with your answer.

In any case, software engineering is not computer science. Good luck with that Cocomo, everyone.

More on these topics later.

Return top