Archive for January, 2009

Friday Links: Storm Trooper camera, Merlin Mann on creativity, and choosing the right CMS

Filed under Links

A short appreciation for Code Monkey

Jonathan Coulton’s song “Code Monkey” has been lodged in my brain playing on repeat for an entire week. It’s the first thing that goes through my head when I wake up in the morning, and it’s often the song my brain sings to get me to sleep at night.

This is my attempt to unlodge it, sharing a few Code Monkey videos with you. I’m of the belief that the only way to get an earworm out of your head is to give it to someone else.

You’re welcome!

Here’s an animated monkey version.

I like this one because nerds dancing makes me laugh.

And here’s Jonathan Coulton performing the song himself.

Filed under Web Culture

Profiles in Nerdery: Matt Westerburg and the age-old question, Why Python?

  • Astrological Sign: I’m with Kai on this one!
  • Time at the Nerdery: I’ve been here since May of last year.
  • Area of expertise: Python, Django, C/C++, Assembly
  • When people ask you what you do, how do you respond: I’m a programmer that gets to utilize various languages and frameworks to accomplish a client’s needs.
  • Favorite kinds of projects to work on: My favorite projects are offline projects. I enjoy web development, but my passion lies in systems programming, language design, embedded systems, and operating system design.
  • What one thing about The Nerdery surprises people the most when you tell them about it: Definitely the dogs. People generally find it very cool that it is such a relaxed environment.
  • Seven dream Jeopardy Categories: 1. Why Python!; 2.Design Patterns; 3. The Pitfalls of Object Oriented Programming; 4. History of Programming Languages; 5. History of Mathematics; 6. Thai Food; 7. MegaMan Bosses
  • Favorite Fictional Nerd: The Time Traveller from H.G. Wells The Time Machine. He remains so nonchalant about the whole time travel thing.
  • According to the Wikipedia entry on Nerd, some nerds show a pronounced interest in subjects which others tend to find dull or complex and difficult to comprehend, or overly mature for their age, especially topics related to science, disambiguation, mathematics and technology. Do you know what disambiguation is: I do, however I am far more interested in foreign language acquisition.

Phizzpop Minneapolis video

Many, many thanks to Christian Erickson from Zeus Jones for alerting us to this recap video of Phizzpop Minneapolis.

UPDATE: Now you can see Zeus Jones’ entire winning presentation.

Filed under Agency Partner

Where is the line between passionate and creepy?

I started out my career in the tech sector working in customer service for a small software company that made digital photography software. The job mostly consisted of answering e-mails and phone calls about how much the upgrade was and what new features were included.

At least once a day you’d get a call from THAT GUY (or gal, but usually it was a guy) who was irate about something the software did or did not do to his or her liking. THAT GUY would call and it would always involve a lot of swearing, exasperated sighs, and threats to either e-mail the CEO or call the better business bureau.

My fellow customer service reps and I would listen patiently and try to pass the ranter off to tech support as quickly as possible. “Sheesh,” I would think. “It’s only software.”

It wasn’t until I moved over to the marketing department that I started to understand the passion that software (or any product really) can generate in its users. Around that time I started working exclusively on the web, and turned into THAT GIRL.

Oh yes, I can’t deny it. I have been known to work myself up into a frothing rage when I have to deal with bad user experience . (and because I am THAT GIRL, blogs like Adobe UI Gripes totally float my boat).

However, there is a line between passionate and creepy. I’m not exactly sure how to define the line. As someone who has fired off an e-mail or two expressing my disappointment and frustration with some site or another, I’d like to think that’s totally on the right side of the line. People do that all the time, right?

I do know that the person who spit in Tech Crunch’s Michael Arrington’s face, crossed that line. In that post Arrington talks about some of the abuse he and his family have endured due to unhappy readers and just how crazy it is to get death threats over a blog:

I write about technology startups and news. In any sane world that shouldn’t make me someone who has to deal with death threats and being spat on. It shouldn’t require me to absorb more verbal abuse than a human being can realistically deal with.

We all can probably agree that physical harm and threatening death obliterates the line between passionate and creepy. But it’s still an interesting question to contemplate, what is the line between passionate and creepy? And how do you, as a consumer, express your displeasure when dealing with a shoddy experience, product, etc?

Filed under Web Culture

Tech Tuesday — YouTube in AIR

The YouTube video player is currently written in ActionScript 2.0 and integrating it into an AIR application requires a few additional steps. There are many solutions available that reverse engineer the URL to get access to the source video FLV, however, this breaks the terms of service and is not officially supported by YouTube or the API.

By taking advantage of the HTMLLoader class we are able to load the YouTube Chromeless video player into AIR without breaking the terms of service. It essentially loads up a web page within the AIR application and uses JavaScript to control the video.

Lets start by creating the JavaScript / HTML portion of the application that the HTMLLoader will consume. Resources for this can be found here; YouTube Chromeless Player Example page.

Simplified JavaScript functions for this example (includes Play, Pause and Load):

JavaScript:
  1. <script src="js/swfobject.js" type="text/javascript" />
  2. <script type="text/javascript">
  3.  
  4.       function onYouTubePlayerReady(playerId) {
  5.         ytplayer = document.getElementById("myytplayer");
  6.       }
  7.    
  8.       // functions for the api calls
  9.       function loadNewVideo(id, startSeconds) {
  10.        if (ytplayer) {
  11.          ytplayer.loadVideoById(id, startSeconds);
  12.         }
  13.        }
  14.      
  15.        function play() {
  16.           if (ytplayer) {
  17.             ytplayer.playVideo();
  18.           }
  19.         }
  20.  
  21.        function pause() {
  22.          if (ytplayer) {
  23.            ytplayer.pauseVideo();
  24.          }
  25.         }
  26.  
  27.   </script>

Next we will use the SWFObject to load in the YouTube Chromeless video player. Notice the use of wmode: "opaque" in this example. Without this you will not be able to place any display objects above your videos.

JavaScript:
  1. <script type="text/javascript">
  2.  
  3.        // allowScriptAccess must be set to allow the Javascript from one
  4.        // domain to access the swf on the youtube domain
  5.        var params = { allowScriptAccess: "always", bgcolor: "#cccccc", wmode: "opaque" };
  6.        // this sets the id of the object or embed tag to 'myytplayer'.
  7.        // You then use this id to access the swf and make calls to the player's API
  8.        var atts = { id: "myytplayer" };
  9.        swfobject.embedSWF("http://www.youtube.com/apiplayer?enablejsapi=1&playerapiid=ytplayer",
  10.                            "ytapiplayer", "400", "300", "8", null, null, params, atts);
  11.  
  12. </script>

ActionScript Used to Load and Control the Video:

Actionscript:
  1. package com.sb.util
  2. {
  3.    import flash.display.Sprite;
  4.    import flash.events.Event;
  5.    import flash.html.HTMLLoader;
  6.    import flash.net.URLRequest;
  7.          
  8.    public class JSVideoPlayer extends Sprite
  9.    {
  10.  
  11.          private var _html:HTMLLoader;
  12.          private var _ready:Boolean = false;         
  13.        
  14.          public function JSVideoPlayer()
  15.            {
  16.              _html = new HTMLLoader();
  17.              _html.paintsDefaultBackground = false;
  18.              _html.width = 400;
  19.              _html.height = 300;
  20.              _html.addEventListener(Event.COMPLETE,
  21.                                     onComplete);
  22.                
  23.              loadHTMLcontent() 
  24.  
  25.              this.addChild( _html );
  26.          }
  27.          public function loadNewVideo(videoID:String):void
  28.          {
  29.               if(_ready){
  30.                  _html.window.loadNewVideo(videoID);
  31.               }
  32.          }
  33.          
  34.          public function playVideo():void
  35.          {
  36.                if(_ready){
  37.                   _html.window.play();
  38.                }
  39.          }
  40.    
  41.          public function pauseVideo():void
  42.         {
  43.              if(_ready){
  44.                 _html.window.pause();
  45.              }
  46.         }
  47.            
  48.         private function onComplete (e:Event):void
  49.         {
  50.              _ready = true;
  51.         }
  52.              
  53.         public function loadHTMLcontent():void
  54.         {
  55.              _html.load(new URLRequest('test.html'));
  56.         }
  57.  
  58.    }
  59. }

One of the limitations of using the HTMLLoader class is the inability to set the opacity of the video. For example you if wanted to fade the video out you would have to capture the current state of the video and replace it with a bitmap image that would then be faded out (download the zip file to see an example of this).

Source Files (ZIP)

Sources

PS: This example is only for AIR and may not work for Flex applications deployed on websites. Please visit 'YouTube in Flex applications' (On The Other Hand) for an example of how to do this in Flex.

This was originally posted on blackcj.com, Chris Black's personal blog. Chris is a Senior Developer at Sierra Bravo.

Filed under Technology

What if everyone turned into their avatar?

Coke's latest commercial sort of answers that question. Is it weird to watch commercials on the Internet but fast forward through them when watching TV? Probably. But the signal to noise ratio is much better when watching them on the Internet.

Yes, I see advertising as entertainment, especially when it's done well.

(found via Ad Freak)

Friday Links: A free audiobook and how to avoid death by caffeine

Filed under Links

This is not an endorsement

However, this is a post with two links to some awfully Mac/Apple-friendly content. They are so amusing that I cannot help but share them with you, our Nerdery readers, no matter what computing choice you have made.

First, MacWorld asked what was the best Mac ever? Three of the five Mac experts they asked proclaimed it was the Macintosh SE/30.

Second, the Web Design Depot has a lovely post about the evolution of Apple Design from 1977-2008. I love how the design progresses from standard utilitarian to whimsical to sleek and futuristic.

Filed under Design

Profiles in Nerdery: Aesop, working like a dog for 93% of his life

  1. Astrological Sign: Aquarius, which is weird because I don’t like baths
  2. Time at the Nerdery: Since the tender age of 11 weeks. 93% of my life & I still don’t qualify for retirement benefits
  3. Area of expertise: Annoying Bill Brakeman. It’s an art form, really
  4. When people ask you what you do, how do you respond: cycle through my best tricks until you fork over that treat in your hand
  5. Favorite kinds of projects to work on: Making sure the nerd’s lunches never hit the floor
  6. What one thing about The Nerdery surprises people the most when you tell them about it: That they let me stay here.
  7. Seven dream Jeopardy Categories: Sit, Stay, Shake, Fetch, Territory marking techniques, Leash etiquette, The tripartite alliance negotiations of 1938 and how they failed to contain Germany
  8. Favorite Fictional Nerd: Snoopy
  9. According to the Wikipedia entry on Nerd, some nerds show a pronounced interest in subjects which others tend to find dull or complex and difficult to comprehend, or overly mature for their age, especially topics related to science, disambiguation, mathematics and technology. Do you know what disambiguation is: arf?