SideReel - More Online TV

July 24th, 2008

SideReel is an interesting online TV site, rather than being created by big content and hosting video like hulu.com and fancast.com, SideReel acts more as a wiki linking to episodes you can watch online. SideReel’s site proclaims that it was created to overcome the short comings of standard internet video searches and have a conduit to all of the scattered video providers on the net. The site is user maintained and includes links to video put out by big content and what looks like pirated content.

SideReel does make it easy to browse a wide variety of shows, I was very pleased by their selection of cartoons. The user experience leaves a little to be desired. I found their use of ajax interface elements confusing and tasteless. Many of the video players on linked sites were of poor quality, on one site none of the buttons worked. Also several of the videos had been removed.

All in all I applaud SideReel’s efforts. With some interface work and automated link verification tools they will have a grade A site.

Avoid Page Rank Dilution With .htaccess

July 19th, 2008

If your website is accessible with and without the www subdomain Google will see your site as two different sites. When your home page, http://mydomain.com/ and http://www.mydomain.com/, get indexed as two separate pages their page rank gets diluted because their content is duplicated.

For usability reasons you sill want people to be able to type in and use both domains. To get around this on Apache servers you can create a .htaccess file that redirects all traffic going to mydomain.com to www.mydomain.com. This script rewrites the domain and preserves the rest of the URL and should nearly transparent to the user. It uses a permanent 301 redirect which Google will recognize and reindex any links as www.mydomain.com.

RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^mydomain.com [NC]
RewriteRule ^(.*)$ http://www.mydomain.com/$1 [L,R=301]

Nintendo Entertainment System ROMs for iPhone

June 30th, 2008

I’ve setup an Installer.app repository that downloads NES ROMs from popular ROM sites. The ROMs are installed in /var/mobile/Media/ROMs/NES , the iPhone NES emulator will be able to find the ROMs and they will show up in the list of games. Read the rest of this entry »

iPhone Hello World Using UILabel

March 12th, 2008

In this version of my iPhone Hello World app I’m using a UILabel widget to display the text instead of a UITextView. I’m also centering the label.

helloworldAppDelegate.h:

    1 //
    2 //  helloworldAppDelegate.h
    3 //  helloworld
    4 //
    5 //  Created by Levi Senft on 3/12/08.
    6 //
    7
    8 #import <UIKit/UIKit.h>
    9
   10 @class MyView;
   11
   12 @interface helloworldAppDelegate : NSObject {
   13     UIWindow *window;
   14     MyView *contentView;
   15     // Levi: Define label object
   16     UILabel  *label;
   17 }
   18
   19 @property (nonatomic, retain) UIWindow *window;
   20 @property (nonatomic, retain) MyView *contentView;
   21 // Levi: Declare label as a property
   22 @property (nonatomic, retain) UILabel *label;
   23
   24 @end
   25

helloworldAppDelegate.m

    1 //
    2 //  helloworldAppDelegate.m
    3 //  helloworld
    4 //
    5 //  Created by Levi Senft on 3/12/08.
    6 //  Copyright __MyCompanyName__ 2008. All rights reserved.
    7 //
    8
    9 #import helloworldAppDelegate.h
   10 #import MyView.h
   11
   12 @implementation helloworldAppDelegate
   13 
   14 @synthesize window;
   15 @synthesize contentView;
   16 // Levi: Tell the compiler to synthesize relevant accessors
   17 @synthesize label;
   18
   19 - (void)applicationDidFinishLaunching:(UIApplication *)application {
   20     // Create window
   21     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
   22
   23     // Set up content view
   24     self.contentView = [[[MyView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
   25     [window addSubview:contentView];
   26
   27     // Levi: Create the dimensions and centered position for our label
   28     // screen width / 2 - label width / 2
   29     CGFloat x = 320/2 - 120/2;
   30     // screen height / 2 - label height / 2
   31     CGFloat y = 480/2 - 45/2;
   32     CGRect rect = CGRectMake(x , y, 120.0f, 45.0f);
   33
   34
   35
   36
   37
   38     // Levi: Create the label.
   39     self.label = [[[UILabel alloc] initWithFrame:rect] autorelease];
   40     // Set the value of our string
   41     [label setText:@"Hello World!"];
   42     // Center Align the label’s text
   43     [label setTextAlignment:UITextAlignmentCenter];
   44
   45     // Levi: Add the label to the content view.
   46     [contentView addSubview:label];
   47
   48     // Show window
   49     [window makeKeyAndVisible];
   50 }
   51
   52 - (void)dealloc {
   53     // Levi: Release the label
   54     [label release];
   55     [contentView release];
   56     [window release];
   57     [super dealloc];
   58 }
   59
   60 @end
   61

iPhone Hello World

March 12th, 2008

Last week we finally got the official Apple iPhone SDK. I’ve spent the last few years as a web developer, but ever since I’ve gotten a Mac I’ve wanted to get back to doing some “desktop” application programming. So I’ve messed around with Cocoa a little but haven’t really gotten past the stumbling stages with Cocoa or Objective C. I guess what I’m trying to say is I’m not a Cocoa programmer yet.

After downloading the SDK I immediately started looking for some code samples. After looking at Apple’s hello world app I was definitely intimidated, I’m sure it was great for someone that knows Cocoa or Objective C. So after hacking around for a bit I created my own hello world app using a UITextView component. Like all truly classic hello world programs it does nothing more than outputting “Hello World!”. Since I’m using the UITextView you can tap the text area and edit the text.

To create this app I started by creating an XCode project named helloworld. You won’t need to touch the main.m or main.h files, only the helloworldAppDelegate.m and helloworld.AppDeleage.h files.

First off I’ve added two lines to my header file:

    1 //
    2 //  helloworldAppDelegate.h
    3 //  helloworld
    4 //
    5 //  Created by Levi Senft on 3/12/08.
    6 //
    7
    8 #import <UIKit/UIKit.h>
    9
   10 @class MyView;
   11
   12 @interface helloworldAppDelegate : NSObject {
   13     UIWindow *window;
   14     MyView *contentView;
   15     // Levi: Define textView object
   16     UITextView  *textView;
   17 }
   18
   19 @property (nonatomic, retain) UIWindow *window;
   20 @property (nonatomic, retain) MyView *contentView;
   21 // Levi: Declare textView as a property
   22 @property (nonatomic, retain) UITextView *textView;
   23
   24 @end
   25

Next I’ve added half a dozen lines to helloworldAppDelegate.m:

    1 //
    2 //  helloworldAppDelegate.m
    3 //  helloworld
    4 //
    5 //  Created by Levi Senft on 3/12/08.
    6 //
    7
    8 #import helloworldAppDelegate.h
    9 #import MyView.h
   10
   11 @implementation helloworldAppDelegate
   12 
   13 @synthesize window;
   14 @synthesize contentView;
   15 // Levi: Tell the compiler to synthesize relevant accessors
   16 @synthesize textView;
   17
   18 - (void)applicationDidFinishLaunching:(UIApplication *)application {
   19     // Create window
   20     self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
   21
   22     // Set up content view
   23     self.contentView = [[[MyView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
   24     [window addSubview:contentView];
   25
   26     // Levi: Create the text view.
   27     self.textView = [[[UITextView alloc] initWithFrame: CGRectMake(0.0f, 0.0f, 320.0f, 480.0f)] autorelease];
   28     [textView setEditable:YES];
   29     [textView setText:@"Hello World"];
   30
   31     // Levi: Add a text view to the content view.
   32     [contentView addSubview:textView];
   33
   34     // Show window
   35     [window makeKeyAndVisible];
   36 }
   37
   38 - (void)dealloc {
   39     // Levi: Release the textView
   40     [textView release];
   41     [contentView release];
   42     [window release];
   43     [super dealloc];
   44 }
   45
   46 @end
   47

That should give a giant white text box with the hello world text that you can edit.

Feel free to point out any Cocoa faux pas in my code. I’d love to know about anything I can do to write better code.

Clutch

March 6th, 2008

Although Chicken of the VNC remains my primary means of remote controlling the media mac I’d prefer to use some sort of web interface. This is where Clutch comes in. Clutch is a web based admin for Transmission, my Bittorrent client of choice.

Clutch allows you to view progress and control the torrents Transmission is working on. The ajax interface tries to match the Cocoa UI and polls the server to update your downloads’ progress.

I’ve found this particularly useful while watching streaming content from Hulu. I can pause the downloads if they are interfering with the streaming without having to login, pause, then mess with everything over VNC.

While I haven’t tested this there is a password protection feature you can use if you have your machine directly on the net.

Legal Bad TV

March 6th, 2008

In the past few months I’ve checked out a couple of sites offering online television shows and movies. The sites are Fancast and Hulu. Both are in beta and use Flash players displaying limited commercials.

Fancast was launched by Comcast in partnership with Tivo and I’m sure others. It is also provides TV listings.

Hulu is fully online content oriented and has deals with many partners such as Yahoo, MySpace and AOL to provide it’s content in branded players.

Both sites have similar content offerings, this probably has to do with what shows the studios have converted to digital formats. Many classic “rerun” shows are offered, such as Bewitched, Hawaii Five-O and MacGyver. There are also new shows. A couple of times we’ve watched Fox’s Sunday night cartoon line up from the previous week after missing the broadcast. There are many shows currently running that are available.

Jailbreaking 1.1.4

March 6th, 2008

Jailbreaking the 1.1.4 iPhone firmware is now a breeze. iNdependence will downgrade jailbreak then upgrade your phone in a one step process.

Jailbroken 1.1.3 iPhone

January 23rd, 2008

Macworld 2008: Scott McNulty Interviews Merlin Mann

January 23rd, 2008