Software Steeplechase

Hayden Steep’s development obstacle course. (Java, JEE, and beyond)

February 12, 2008

TheLadders.com where not everyone can play, just the suckers.

Filed under: General

While watching the Super Bowl (go Giants!), I noticed a somewhat humorous advertisement for TheLadders.com
The ad was set at a professional tennis match, but everyone in the stands pulled out a racket and ran onto the court to join the game. The voice-over sounded “When you let everyone play, nobody wins.” A graphic then showed the company logo and the slogan “The most 100K+ jobs.” I made a mental note and just over a week later, decided to visit the website.

What I found was a business that picked up the torch of failed Super Bowl advertiser Pets.com that deserves the same fate.

1) I performed a search having chosen a field of industry and a regional location. 2) I was presented with a screen that forced me to create an account in order to see the job results. 3) I created an account and was able to see the job results. 4) I clicked on a job result and was told that I needed to sign up for a premium membership to view the job details.

I’m very hesitant to throw around platitudes like bait-and-switch, but after doing some Googling, it would seem the bad taste in my mouth was not unique, and that this particular .com has been annoying people for far longer than I’ve heard of them.

The icing on the cake (or should I say “slime”?) is that should you actually fork over money for viewing the same job postings that show up for free on other popular job boards… you will continue paying until you explicitly cancel your “subscription.”

Yes sir, it’s the Columbia House music club of job boards. When TheLadders.com prompts you to pay, it doesn’t read… “Which subscription plan would you like? 1 month, 3 month, etc.” It reads something to the affect of “How long would you like to subscribe? 1 month, 3 months, etc.” with smaller, italic print indicating you have to manually cancel your service, even if you only payed for 1 month.

TheLadders.com may be a very good resource, but the fundamentals of “duck-typing” come to mind when I visit their website. If it looks like a rip-off, smells like a rip-off, talks like a rip-off… it’s probably a rip-off.

March 9, 2007

Preserving actual size when displaying 4x3 aspect ratios on a 16x9 TV/Monitor

Filed under: General

With prices continuing to drop, I’ve been looking into upgrading my television to a wide screen flat panel model. Besides high-definition, I’ve also been looking forward to an increase in raw size that a new TV will offer, but what constitutes an increase in size? A 32 inch television with an aspect ratio of 4 by 3 has a larger viewing area than a 32 inch 16 by 9 (wide screen) TV, since the dimension is that of the hypotenuse of the corners.


For example, if you were to ’stuff’ a 16x9 image into a 4x3 TV set, it doesn’t fit. You have to scale the image down in order to preserve the aspect ratio. This scaling down is what creates the letter boxing above and below the image. In the example below, you can see how a 36 inch television is capable of displaying a wide screen image that is the same physical dimensions that would result from a 32 inch wide screen TV displaying that image.

Screen-sizes alone are poor indicators of the raw picture size unless we are comparing television sets that have the same dimensions. So, in order to compare these apples and oranges, you need the idea of a scalar. A scalar can be used to bridge the gap between comparing the wide screen TVs with the televisions many of us are used to. In the previous example, our scalar would be 1.25 or %12.5 since you need a 4by3 TV that is %12.5 bigger than a wide screen TV in order to display the exact same picture size.

When displaying a 4x3 image in a wide screen TV, the same scaling takes place, but now it is the 4by3 image that is being scaled down to fit inside of the 16x9 aspect ratio of the wide screen TV. This results in the vertical letter boxing depicted below.

So if I upgrade to a wide screen TV, I surely don’t want to view a picture broadcast in a 4x3 ratio in a size that is physically smaller than the image I would have seen in my “old-fashioned” television. Therefore, what size wide screen TV do you need to ensure that the 4x3 images are at least as big as they were on your old set?

Tv Ascpect Ratios

1) When normalized with the 16x9 ratio, the 4x3 ratio becomes 12x9.
2) Using the good old Pythagorean theorem, we can find a hypotenuse of ratio 15 for the 12x9 (4x3) set, and a ratio of 18.358 for the 16x9 set.
3) Dividing 18.358 by 15 results in a scalar of about %122 or 1.22
4) To find the minimum size wide screen TV you would need in order to match the raw picture size of your 4x3 TV, just multiply the size of your 4x3 TV by 1.22.

For example, if you currently have a 27 inch television, you would need a wide screen TV that is at least 27 X 1.22 = 33 inches in order to prevent having a smaller image on your new TV set.

I hope you find this scalar useful when shopping for your new television/monitor so that you don’t end up with a smaller image than what you had!

October 4, 2006

Comskip Monitor - A Java service

Filed under: Java, General

I used to own a VCR, but it broke down in the year 2000 and I never looked back. I had the mind set that Television will rot your brain and that there was nothing on worth watching, yet alone taping.

A marriage, busy job, and 2 kids later, I’ve rediscovered the joy of Vegging Out in front of the boob-tube. However, during my 1 hour time slot for watching, there was rarely anything on worth watching. So, I finally took the plunge and configured a PVR (Personal Video Recorder) system. I research Tivo (subscription fees), vs a stand-alone computer hooked up to my television (noise/up-front cost) and decided upon SageTV.

SageTV allowed me to leverage my existing home computer. All I had to do was install a TV Tuning Card, the Sage TV software, and a wireless device that connects to my television. The initial cost was about the price of a Tivo, but I don’t have subscription fees and I don’t have a noisy computer in my den.

There is a 3rd party commercial skipping program called Comskip that can be run on recorded video files that creates a text file containing the time indexes where commercials appear in the videos. The only problem with this program is that it has to be run manually. Manual goes against the very ease-of-use nature of PVR devices, so I decided to author a program that would run as a service which would automatically run Comskip on video files as SageTV created them.

Thus, Comskip Monitor was born. One of the more interesting challenges was making use of the Java Runtime and Process classes.

  Runtime runtime = Runtime.getRuntime();
  Process process = runtime.exec(cmd);
  int exitCode = process.waitFor();

Despite my best efforts, the executed program “Comskip” would always hang about a minute into processing. As it turns out, Windows processes have a stdout, errout, and stdin. The buffers for these streams aren’t very big, and if you don’t consume the output streams, the process will halt until you do.

  Process process = runtime.exec(cmd);
  StreamGobbler errorGobbler = new StreamGobbler(process.getErrorStream(), "ERROR");
  StreamGobbler outputGobbler = new StreamGobbler(process.getInputStream(), "OUTPUT");

  errorGobbler.start();
  outputGobbler.start();

  int exitCode = process.waitFor();

  //Stream Gobbler
  class StreamGobbler extends Thread
  {
    InputStream is;
    String type;

    StreamGobbler(InputStream is, String type)
    {
      this.is = is;
      this.type = type;
    }

    public void run()
    {
      try
      {
        InputStreamReader isr = new InputStreamReader(is);
        BufferedReader br = new BufferedReader(isr);
        String line=null;
        while ( (line = br.readLine()) != null)
        {
          System.out.println(type + ">" + line);
        }
      }
      catch (IOException ioe)
      {
        ioe.printStackTrace();
      }
    }
  }

This JavaWorld article is the best resource I could find for explaining the intricacies of launching external processes.

Writing a Java service is a great way to learn about threading, process handling, and synchronizing blocks of code.

If you happen to be running a Windows based video recording software, I also recommend trying out Comskip Monitor.

August 16, 2006

Virtual Java Interview ‘06 (Breadth of knowledge VS. Depth of knowledge)

Filed under: Java, General

canidate (smiling): Thank you for taking the time to see me. I’m excited about becoming a web developer for Turbo-MegaWidgets.

interviewer (smiling): No problem. I’m glad you could come in on such short notice. Why don’t you start by telling me about the technology you are familiar with.

interviewer (straight-faced): For example, we would like someone who knows how to program in Java, C#, Ruby, Python, Perl, PHP, C++, and Lisp. Can you do this for us?

canidate (forlorn): I’m sorry, but I’m only experienced with Java and know very little about those other programming languages.

interviewer (jolly): Ha ha ha ha! That’s perfectly ok! We focus on Java technology here at Turbo-MegaWidgets. I just use that as an ice-breaker to assure you that we don’t focus on breadth of knowledge here. As long as you have expertise, or depth of knowledge as we like to say, then you’ll do just fine!

canidate (relieved): Whew! That’s good to know, because it would be hard to become proficient in so many different areas of technology.

interviewer (smiling): No kidding. I’m glad to be doing business analysis these days, the thought of it makes me shiver. Anyhow, let’s get back to the interviewing shall we?

interviewer (straight-faced): We’re looking for a Java developer who has an in-depth understanding of using the Rational Unified Process, Extreme Programming, or Agile Methodologies to implement EJBs, Servlets, JSP, Velocity, Custom Tag Libraries, JSTL, XML, Ant, Maven, JUnit, TestNG, JDBC, Hibernate, iBATIS, Struts, Tapestry, Java Server Faces, Javascript, AJAX, GWT, Spring (all of it), AspectJ, WebServices, SOAP, how to configure CVS, BugZilla, Tomcat, JBoss, HypersonicDB, MySQL, Apache Web Server, Eclipse or another IDE, and an Applet in a twisted pair tree.

canidate (jolly): Heh heh heh! You almost got me again!

interviewer (straight-faced): I’m not joking this time.

canidate (nervous): Oh… well…. I created a Javascript “rollover” one time… on a JSP…

interviewer (dismissive): Don’t call us. We’ll call you.

While talking with a contact recently, he marveled at the breadth of knowledge you had to have in order to be a competent web developer. The explosion of frameworks and tools over the last 10 years has had the affect of putting more responsibilities on fewer engineers.

When I started professional web development only a few years back in 1998, there were dedicated programmers responsible for framework architecture, configuration and build management, database design and maintenance, and so on. This setup had the by-product of allowing each programmer to develop an expertise, or depth of knowledge, in the area for which he was responsible. It was easy to bring new-hires into this environment because it wasn’t essential that they ‘knew everything’, but more important that they were bright and could immerse themselves in their duties.

Today there are many tasks that have been made easier through the use of good tools. It would be financially irresponsible to pay the same number of developers to fill roles with narrow scopes. This has benefited developers by allowing them to be involved with more aspects of projects than was previously possible. This increased responsibility requires a breadth of knowledge that makes developers feel important (humility aside, something most of us care about a great deal), but it also puts a burden of responsibility on us to stay on the upward curve. Whereas the old teams depended on many smart developers, the new teams depend on smart and studious developers.

Get free blog up and running in minutes with Blogsome
Theme designed by Jay of onefinejay.com