Objective: Use Google Reader to subscribe to a Basecamp RSS feed.
Problem: Google Reader doesn’t support RSS authentication.
Solution: Use Yahoo! Pipes to authenticate & deliver the feed to Google.
1. Create a new pipe or clone this existing one: http://j.mp/PipesToReader
2. Enter your username, password, and URL [note the devil is in the details]
To locate your username & password, go to ‘My Profile’ in Basecamp. Scroll to the bottom and click ‘Show Your Tokens’ in the ‘Authentication tokens’ section. Copy the value of ‘Token for feed readers or the Basecamp API’ and use this as BOTH your username and password.
From the Basecamp overview page, click ‘Project RSS feed’ copy the URL listed below ‘Your RSS feed URL.’ Remove the preceding ‘https://’ from the URL prior to pasting it into the pipe URL.
3. Click ‘Run Pipe’ this should authenticate and display the feed.
4. Click the ‘Get a RSS’ icon and then copy and paste this URL into google reader.
Security Note: Make sure you DO NOT have your Google Reader feed shared. If your feed is shared it will be accessible to the world and your API username / password will not be protected.
Mission complete.
Amazon has taken the first steps to expand it’s operations outside the US and Europe by unveiled a new data center in Singapore. This entry to the Asia Pacific region is significant both to a potential new customer base and existing clientele who will reap the benefits of having the opportunity to have a more global infrastructure with less latency in Asia Pacific.
With the addition of the new data center in Singapore, Amazon has updated their list of current Amazon EC2 public address ranges:
US East (Northern Virginia)
216.182.224.0/20 (216.182.224.0 - 216.182.239.255)
72.44.32.0/19 (72.44.32.0 - 72.44.63.255)
67.202.0.0/18 (67.202.0.0 - 67.202.63.255)
75.101.128.0/17 (75.101.128.0 - 75.101.255.255)
174.129.0.0/16 (174.129.0.0 - 174.129.255.255)
204.236.192.0/18 (204.236.192.0 - 204.236.255.255)
184.73.0.0/16 (184.73.0.0 – 184.73.255.255)
184.72.128.0/17 (184.72.128.0 - 184.72.255.255)*
US West (Northern California)
204.236.128.0/18 (216.236.128.0 - 216.236.191.255)
184.72.0.0/18 (184.72.0.0 – 184.72.63.255)
EU (Ireland)
79.125.0.0/17 (79.125.0.0 - 79.125.127.255)
Asia Pacific (Singapore)
175.41.128.0/18 (175.41.128.0 - 175.41.191.255)*
The latest Juxt Interactive work for Sprite and the NBA is now live. Case study to shortly follow. In the meantime, please enjoy the experience at: http://www.nba.com/dunk_fanfaceoff

In just a few hours the latest project which has consumed the past few months will be live, stay tuned! Here is a preview/teaser:

Below is a Microsoft SQL Server script that I use to create nightly backups. The backups (.BAK files) can be copied to hard drive, tape, or remote storage to satisfy your disaster recovery requirements. The script requires two (2) modifications – first change the ‘master_backup_dir’ variable to the path on your server that you would like the backups stored and second update the ‘retain_day’ variable to the number of days you wish to retain the backups on physical disk prior to removal.
Configure the SQL Agent to run a nightly job with a single step that executes the T-SQL code.
/*********************************************************/
/* Job requires use of xp_create_subdir and xp_delete_file to
create backup directories and delete old files */
/*********************************************************/
-- All Databases excluding (non-read only and sample) databases are backed up.
-- Expired backups are deleted
-- Backups of master, model and msdb are written to a 'System' folder
-- Backups of user databases are written to folders named after the databases
-- Get names of eligible databases (excluding tempdb and sample databases)
declare databases_to_backup cursor
FOR
SELECT name FROM master..sysdatabases
WHERE name NOT IN ('NorthWind','Pubs', 'AdventureWorks', 'tempdb')
AND (STATUS & 1024) <> 1024
ORDER BY name
FOR READ only
go
SET nocount ON
declare @db_name varchar(50),
@master_backup_dir varchar(255),
@specific_backup_dir varchar(255),
@backup_date char(8),
@backup_time char(4),
@filename varchar(255),
@retain_days tinyint,
@delete_date datetime
-- Specify high level backup directory and number of days' backups to keep on disk
SET @master_backup_dir = 'D:\data\backup\sql2005\'
set @retain_days = 14
-- Open the cursor and retrieve the first database name
open databases_to_backup
fetch databases_to_backup into @db_name
while (@@fetch_status = 0)
begin
-- Build a datetime string to uniquely identify the backup
set @backup_date = convert(char(8),getdate(),112)
set @backup_time = right('00' + convert(varchar(2),datepart(hh,getdate())),2) + right('00' + convert(varchar(2),datepart(mi,getdate())),2)
-- Build the specific backup directory path
if @db_name in ('master','model','msdb')
set @specific_backup_dir = @master_backup_dir + 'System\'
else
set @specific_backup_dir = @master_backup_dir + @db_name + '\'
-- Verify the backup directory exists
exec master.dbo.xp_create_subdir @specific_backup_dir
-- Build a unique filename and backup the database
set @filename = @specific_backup_dir + @db_name + '_db_' + @backup_date + @backup_time + '.bak'
BACKUP DATABASE @db_name TO DISK = @filename
-- Delete files older than specified retain days
set @delete_date = dateadd(d, (@retain_days * -1) , getdate())
exec xp_delete_file 0, @specific_backup_dir, N'bak', @delete_date
-- Get the next database name
fetch databases_to_backup into @db_name
end
set nocount off
close databases_to_backup
deallocate databases_to_backup
On September 6th, The FWA (Favourite Website Awards) issued the Site of The Day award to Sprite Step Off. This is a project Juxt has been working on since late 2008. Many site enhancements are on the way. Expect a case study in December.

Over the past few years the Firefox community has growth fast and fierce. For web developers there have been countless add-on’s and plugins published that making building websites (i) more efficient (ii) more browser-compatible, and (iii) easier to debug. Below are my top five:
Top 5 Web Developer Firefox Add-on’s
- Web Developer – Integrates with Firefox to create a menu and a toolbar with various web developer tools (e.g. outlining page elements, re-sizing browser window size, site-specific cookie management, and validation tools )
- Firebug – Firebug integrates with Firefox to put a wealth of development tools at your fingertips while you browse. You can edit, debug, and monitor CSS, HTML, and JavaScript live in any web page
- YSlow – YSlow brings additional functionality to Firebug regarding site performance. YSlow analyzes web pages and suggests ways to improve their performance based on a set of rules for high performance web pages which coincides with the YSlow team as well as metrics defined in the book High Performance Web Sites: Essential Knowledge for Front-End Engineers
- Server Spy – Indicates the web server type for the sites you visit (e.g. Apache, IIS, Tomcat, nginx, and so forth) this data is invaluable during debugging complex server-side issues.
- Live HTTP Headers – Similar to Server Spy which just pulls the ‘Server’ element from the HTTP response header, this add-on makes additional elements available for debugging. See ‘List of HTTP headers‘ on the Wikipedia for a full listing of request/response definitions.
Employees tweet at work just as they use instant messaging services assuming your company doesn’t have a policy prohibiting them said usage. So here is my views on how to harness Twitter in the workplace:
Define a strategy for your company, just as we have done! I believe transparency is important so here are excerpts from the concepts behind the strategy we are implementing at Juxt Interactive along with explanations of the driving factors behind our approach.
- Have each and every individual that wants to use twitter at work to benefit the company determine their voice. How will they position their messaging and how can that help your company? If you follow me you’ll notice at least 80% of what I say is focused towards business. tasks I’m currently working on, industry news, and research & development.
- Have more seasoned users mentor new users. Technology is usually inherently confusing and twitter is no exception to the rule.
- Adjust your email footer to include a link to follow you on twitter, this is simple and a great way to gain followers.
- Be aware that your clients, prospects, vendors, and staff follow you, if you send messages that are offensive to any of these groups, you probably shouldn’t be part of your company’s twitter team.
- The time of your tweets matter. If you have an important message sending it at 10pm on a Friday night may go unnoticed by many [at least those users who stream in real-time.] with the exclusion of people in different time zones.
- We live in a global economy, if you don’t already do business internationally be prepared to do so, don’t limit yourself to local discussions.
- Retweeting is imperative, but don’t use your companies Twitter account as a straight unidirectional promotional channel. Have employees retweet as necessary at different intervals so your message is seen by different groups of people at different moments in time.
- Deliver content that is relevant to the audience that you wish to target.
- Make sure your voice is authentic as is your message.
- Engage others in your field in communication.
- Understand Twitter is a push/pull medium – don’t just speak; ask, listen, react.
- People are as smart as you give them credit, don’t just promote your company. Good rule of thumb: think of your audience as your wife, or husband. Don’t be condescending, be respectful.
- Watch the length of your tweet, 140 characters is obviously short. Use it wisely. If you @reply to many users in a tweet it becomes an issue when retweeting.
- Lastly, Twitter is dynamic — always changing. Understand this and embrace this. Change the structure of your tweets, the sequencing the people you reply too, the tags, etc.
Again, we’ll see over time if this strategy proves to be sucessful. Currently this is just aggregated research and an attempt at creating a strategy to streamline and organize communication over this specific medium.
**Note, before you read this scroll down and click the ‘preview’ button to pause the application while you read this article. The preview button is located to the right of the pan & volume.
In late 2008 Coca-Cola asked Juxt to create a ringtone generator for their Sprite brand. The concept was fairly fairly straight forward, create an engaging rich media campaign for Sprite that would supplement and drive additional traffic to their under the cap program. The under the cap program gives participants a digital prize on their mobile phone every time they text a cap code found under the cap of a 20 oz Sprite.
The rich media unit allowed visitors to mix custom samples to create a ringtone which then could be sent to their mobile phone. The mechanism for delivery of the ringtone was sending a text message with a unique code to 77483 [Sprite's short code]. The unique code was determined by the selection and pattern of samples chosen in the mixer.
So far so good, four samples (drums, bass, lead, and synth) and four measures the only piece missing is a creative mind to mix yourself a ringtone. This is where things get both complicated and interesting. Due to the hosting environment infrastructure and mobile messaging platform we were unable to create ringtones on demand in real-time. Instead we were require to create all possible combination of ringtones in advance. Using a 4×4 grid of samples and measures we are left with 65,536 possible combination’s but one option is complete silence so our magic number is 65,535 distinct ringtone possibilities.
We tried a wide variety of different software applications to sequence audio tracks to generate our 65,535 ringones. However, after much research we determined that each piece of software resulted in poor results. For the most part, desktop applications weren’t able to process the sheer bulk size of the files we were trying to sequence. It became evident that this wasn’t going to be an easy task. Eventually I found a audio conversion application for linux called the Swiss Army knife of sound processing (SOX). After trial and error and a make shift syntax manual I was able to join four samples (drums, bass, synth, lead) so they all played at the same time. Success. Well, not quite success but progress.
Having a solution to merge audio tracks was comforting, but there was still a few more hurdles. Mainly, how do I go from creating one combination to over sixty-five thousand, and how would I generate a code that could easily be interpreted by the Flash mixing interface so the right SMS code could be generated? Since SOX is a linux tool it made sense to create a script to write an application to sequence the ringtones. PHP was an obvious candidate, its available, easy to write, and very robust. I am going to spare the details of the contents of the script, but I can tell you that it used bit arrays, translation, loops, and math. As I mentioned previously matching the code to a specific ringtone is extremely important. If you are in the industry you are aware that banners and rich media units have file size requirements. In our case the flash mixer needed to be less than 100k. The design and functionality already left us at nearly 100k which meant we didn’t have room for logic in the application and we could not load a mapping into the flash application via XML because the file size would be ~5MB which would kill the experience.
Regardless, we found a pattern relying on hex that allowed us to use a simple naming scheme that the mixer could understand with very little logic. Then we modified the naming convention slightly to make sure we didn’t generate any codes that matched data in the 18,000 row document explaining how to spell vulgar or inappropriate terms using your keypad. After generating 65,535 ringtones in a number of formats we put them on a terabyte drive sent them to an unnamed country in Europe and the rest is history, run through the MTV or VHS properties to find the ringtone mixer and get yourself a new ringtone.
Recent Comments
Jef wrote:
haha. I had just begun my...
Rob White wrote:
I need to post mine. My...
Chinese translation wrote:
This is great, I was looking...