I'm the CEO of Tailrank. This is my old (personal) blog. See my new blog over at Feedblog.org. Tailrank is proudly hosted by ServerBeach.

My Photo

Reading

June 2008

Sun Mon Tue Wed Thu Fri Sat
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30          

ha.


200806042223

Testing Hulu

Ysabella Brave is Signed

Ysabella Brave has signed a record contract deal off of Youtube. Cordless Recordings... a division of Warner.

Not sure if this is a good thing though...

What really makes me mad is that somehow the LA Times thinks they can take credit first. For the record you saw it on MY BLOG FIRST!

Now Indexing over 1M Weblogs

Today is a big day for Tailrank.

We have two announcements. The first is that Tailrank is now indexing over 1M weblogs.

This should really help prevent the echo chamber problem which seems all too common with the blogosphere.

The second is that we're launching Spinn3r.

Geek TV cribs

Geek TV cribs

Andy lapdance

Andy lapdance

Andy drinking

Andy drinking

Happy dog

Happy dog

FYI to single guys.

If you're talking to a girl at a bar and her guy friend taps on you shoulder and says "Dude... she's a guy".

You should either:

A. Assume she's really a guy and walk away.
B. Assume she really doesn't like you.

The only way B would ever happen was if you were a moron and didn't take the hint in the first place.

Of course if you're a moron you're probably not smart enough to formulate either A or B at which point you don't deserve to reproduce anyway.

There needs to be a Darwin award for people who take themselves out of the gene pool just by not reproducing.

Comments...

Comments...

Pointing

Pointing

Yahoo Wifi Finder

Yahoo Wifi Finder

No farting

No farting

The onion has cool ads

The onion has cool ads

EFF Anniversary

EFF Anniversary

Extending Java using Macros and JSE

I stumbled across JSE about 12 months ago while at Rojo and while very interested I just didn't have time to play with it. Of course I only spent about 5 minutes with the code so and it seems you need more like thirty.

JSE allows you to write macros which then are expanded into source prior to compile. This allows you to easily implement 'foreach' and 'unless' macros and the like (Examples are here).

Foreach is a big win for me because I don't really like the language extensions in JDK 1.5. This should have just been done with a macro language but Ra the SUN god seems to disagree.

The main motivation for setting this up was a 'duration' macro so that I could easily benchmark blocks of code.

For example a poor man's benchmark in Java is just:

long before = System.currentTimeMillis();
//do something expensive
long after = System.currentTimeMillis();
System.out.println( "Duration: " + (after-before) );

Which is a bit ugly.

After I installed JSE this is the first macro I implemented:

duration( "foo" ) {
    //something expensive
}

Which will then print "duration for 'foo': 100ms" ...

Which just rocks my world!

Implementing the macro is simple:

public syntax duration { 
  case #{ 
    duration (?:expression) 
      ?:statement 
  }: 
  return #{ 
    long before = System.currentTimeMillis();
    ?statement 
    long after = System.currentTimeMillis();
    System.out.println( "Duration: " + (after-before) );
  }; 
}

Update: One problem is that all my macro expanded source files have to have a .jse extension which I don't like. I'll have to rename everything. Ideally it would preprocess everything first and then only pre-process as I edit the files.

Update: JSE didn't have support for differential compiles. This means that every time I want to build I'd have to re-apply all my macros regardless if the file was updated or not. It turns out this is a simple patch (included below):

--- JseAntTask.java.orig        2005-09-29 15:10:48.000000000 -0700
+++ JseAntTask.java     2005-09-29 15:07:55.000000000 -0700
@@ -58,14 +58,27 @@
             args.append(new Boolean(lineup).toString());
             args.append(' ').append(new Boolean(recursive).toString());
             args.append(' ').append(new Boolean(verbose).toString());
+
+            int skipped = 0;
             for (int i = 0; i < jseFiles.length; i++) {
                 File jseFile = new File(jseDir, jseFiles[i]);
                 String base = jseFiles[i].substring(0, jseFiles[i].indexOf(".jse"));
                 File javaFile = new File(javaDir, base + ".java");
+
+                if ( javaFile.lastModified() >= jseFile.lastModified() ) {
+                    ++skipped;
+                    continue;
+                }
+
                 log("Generating " + javaFile + " from " + jseFile + ".", Project.MSG_VERBOSE);
                 args.append(' ').append(jseFile.getAbsolutePath());
                 args.append(' ').append(javaFile.getAbsolutePath());
             }
+
+            if ( skipped > 0 ) {
+                log( "Skipped N files (not updated): " + skipped );
+            }
+
             runJava("net.sf.jse.ant.JseAntHelper", args.toString());
         }
     }

Underground Cable Car

Underground Cable Car

Found this downtown. Old cablecar tracks that run under a building...

Unwanted

Unwanted

Cameras prohibited

Cameras prohibited

Legacy

Legacy

I want one!!!

I want one!!!

Eat at URLs

Eat at URLs

Palm store!

Palm store!

LazyWeb: Fast Secure and Transparent Remote File Sync?

I have two computers I want to have synchronized.

I know I can use rsync. I know I can use scp.

The problem is that SSH in general has too high of a connection latency. It takes 1-15 seconds to tranfer a 1k file.

This might not sound like much but over the lifetime of an application it really add up.

What I want is an app that runs in the background any everytime I save a file to disk it will sync the disk to the remote target machine.

This would need to happen FAST so I can just forget about syncing altogether. This means that the connection latency would need to be near zero. This either means caching the SSH connection auth credentials or just keeping open an sftp connection to the remote host.

It would then sync up my .php files. The only other problem is my .java files but I can use jikes on teh remote end to recompile real quick and my app only needs 1sec or so to respond.

I have yet to find anything that solves this problem. Any ideas?

Update:

I remembered I had made an old attempt at doing this directly within Emacs. After a file is saved I ran a command to scp over the modified file. The problem was that scp was taking too long so I gave up.

Now I just updated my script to support sftp and it's really fast. I can save a file in Emacs and then load the page directly in my browser. No lag. The sftp process is already queued and ready to go so it's faster than my hands trying to grab for my browser.

Now I just have to configure it to sync another directory (.java files) and maybe have it automatically run commands (rebuild/restart).

Update:

There's already a version of this for Emacs called mirror.el. I'll need to play with it some as my current script seems to try to go a bit farther than mirror.el and I have more advanced requirements for my sync support.

That said though I'm super lazy and hate reinventing the wheel.

The Singularity is Near

The Singularity is Near

Yes!! I just got my early access copy of The Singularity is Near. I plan on blogging a lot about it. I expect ill read through it all this week...

Starfish!

Starfish!

Lazy Developers Guide to Creating a Subversion Repository

If you're a lazy developer like me you want the shortest set of instructions to get up and running with subversion.

Here we go. These instructions are for installing on Debian Linux (more info here). We're going to use the SSH method since this is by far the fastest and easiest. I'll try to setup viewcvs against this repository later so we'll see.

On your server machine:

apt-get install subversion

mkdir /var/lib/svn

svnadmin create /var/lib/svn/PROJECT

chmod -R 777 /var/lib/svn

On you client:


mkdir PROJECT/trunk

mv PROJECT/* PROJECT/trunk

mkdir PROJECT/branches

mkdir PROJECT/tags

svn import FULL_LOCAL_PROJECT_PATH svn+ssh://myusername@myserver.org/var/lib/svn/PROJECT -m "Initial import"

svn checkout svn+ssh://myusername@myserver.org/var/lib/svn/PROJECT/trunk PROJECT

You're done! Now you'll have a local copy of your subversion repository to play with. Wasn't that easy?!

Update:

The line format was updated to add spacing between commands since it was a bit confusing. I also updated a path statement.

Suspicious network activity

Suspicious network activity

I need to stop nmaping subnets in coffee shops...

Free Wifi San Francisco?

Check this out! Looks like SF might be working on free wifi.:

This could be really big, if true. Though we're sure it will take time, and that SF Mayor Newsom (pictured here) will have a fight on his hands from jealous carriers. But he's been known to go it alone before (remember, gay marriage), so this should be interesting.

The Merc is about to shrink its bureau space in San Francisco, and we were thinking it would harder to work there during visits if other colleagues bagged all the available wired broadband connections. We'll be eager to hear more.

If Gavin can pull this off he'll be my new hero. I'm still amazed that SF has such poor wifi connectivity. SF is the heart of the tech universe. There should be no inch within San Francisco where I can't get free wifi!

Fiona Apple's New Album to Be Released - Yahoo! News

Looks like Fiona Apple's new album is finally going to be released.:

Fiona Apple is ending her curiously long hiatus from the business of making music. A year after 11 tracks were leaked onto the Internet, drawing praise from critics and fans, Epic Records announced Monday that Apple's "Extraordinary Machine" will be released Oct. 4.

This is an awesome CD. I know a friend who downloaded it over Bittorrent (*cough*) when it first snuck on the Internet. He says its super amazing and that you should probably buy it.