Monday, July 23, 2007

First Facebook App (but not the last)

We have been working with Voxant over the last 6 months or so to move them over to a new infrastructure for their Web service TheNewsRoom. TheNewsRoom is a pretty cool service that allows you to find and embed 70+ news sources' news stories into your own Web site/blog and you get a cut of the ad revenue generated. They have LOTS of news sources too in video, text or image formats. The stories are streamed down in Flash.

TheNewsRoom has been resurrected in Ruby/Rails (of course) from is prior short and painful life in Java. Tom, Ryan and Dave have been working mostly on the Ruby/Rails stuff and I have been focusing on creating a very flexible media streaming framework in Flash/Actionscript for them. I would prefer the Ruby coding, but hacking Actionscript is where I am needed right now.

That is until about two weeks ago when Chad (our new CTO) and I decided that it would be cool to get TheNewsRoom to run inside of Facebook using their new app API. Chad and I did a quick weekend development effort and then showed the Voxant folks. They were quite thrilled to see their content streaming inside of a network of 30 million potential users (and growing). They gave me the go-ahead to develop the app in full and last Friday we launched it (and I got to build it in Ruby...and Rails...yeah!). After a weekend of waiting for the Facebook folks to approve the application its now in the directory. Since Facebook does not really have news outside of what your friends are up to, this is a pretty solid news app. Right now its focused on video news but we surface 13 different categories including Business, Entertainment, Health, Life and Leisure, Politics, Science and Tech, Sports, US, World, and a few others including "Odd" (which has some weird stories in it). When you watch a news story you can comment on it and your comment will post on your profile (so your friends will see it in their feed if they have TheNewsRoom installed). There is an additional category of just news items that you and your friends have commented on (News with Comments). Its simple to use and fun to watch and comment together on what's happening in the world. Give it a spin if you are on Facebook. If you are logged in, navigate to this URL: http://www.facebook.com/apps/application.php?id=2406724706. Let me know what you think.

Update: It seems like if you have a Facebook app that you want to link to, you can just use this URL pattern: http://apps.facebook.com/thenewsroom and it will take you either to the app or let you install it. So, go install TheNewsRoom app!

Wednesday, January 17, 2007

indi Beta 3 Profiles

With Beta 3 of indi and indi Channels we introduced the ability for you to create and share profiles. Your profiles are what you push to others on your Direct and Group channels. Your profiles they are never seen by anyone else (i.e. we cannot see them on our servers because they are always encrypted).

In indi, the profiles that you publish can be edited in the Profile Editor utility. If you select one of these profiles and press the Edit button you will see two multi-line edit boxes. The top box contains your profile template, the bottom box contains the CSS style for that template. Flash allows us to use a limited number of css styles and we added a few of our own. The template side allows basic html tags (again limited by Flash to: a, b, br, font, img, i, li, p, span, textformat and u). The template also includes template entries. Those entries are surrounded by square brackets such as [firstName]. There are currently 30 template entries that you can choose from:

[prefix]The prefix (Mr., Ms., etc.)
[firstName]First name
[lastName]Last name or surname
[suffix]The suffix (Jr., Sr., etc.)
[workEmail]Work email address
[homeEmail]Home or personal email address
[mobilePhone]Mobile telephone number
[indiAddress]The indi address
[imAddress]Fully qualified IM address
[workCompany]Company name
[workJobTitle]Work job title or role
[workAddressStreet]Street number of work address
[workAddressStreet2]Second line of street number of work address
[workAddressCity]City name of work address
[workAddressState]State or province of work address
[workAddressZip]Zip or postal code of work address
[workAddressCountry]Country name of work address
[workPhone]Work telephone number
[workFax]Work facsimile number
[workWebpage]The web page (URL) for work
[homeAddressStreet]Street number of home address
[homeAddressStreet2]Second line of street number of home address
[homeAddressCity]City name of home address
[homeAddressState]State or province of home address
[homeAddressZip]Zip or postal code of home address
[homeAddressCountry]Country name of home address
[homePhone]Home telephone number
[homeFax]Home facsimile number
[homeWebpage]The web page (URL) for work
[note]Note about person

Template entries are merged in from your contact record which you can edit in the Address Book or right inside the Profile Editor (Contact Form button in the upper right). Doing this merge allows you to freeform type in whatever you want in a profile, while your contact data is kept in sync with your contact record. We will be adding more capability to this templating engine in the next beta release scheduled for the Spring. Also, we will be adding the ability to automatically extract these template entries from other's profiles to automatically fill in their contact record. So, in addition to all this sharing madness indi will provide a way to keep others up to date with your latest contact information!

indi Beta 3 is out!

We released indi Beta 3 yesterday.

Whew, its been a huge effort to build a distributed sharing solution (using Amazon's S3) enabling real privacy (using encryption) for consumers (yes, your Mom can use it) that runs across OS X and Windows (using Ruby and Flash) and soon Linux (Adobe released the Flash 9 player today).

indi is free to use and has NO ADS.

The new features in this release are many, and I will follow up with some detail on what we have added. The key thing for now is this: indi is the simplest way (drag & drop) to share with people on the Net. If you are tired of SPAM, get indi. Please provide us feedback...we value that most of all.

Now to get those screencasts recorded...

Tuesday, November 21, 2006

The Web 3.0 parade has begun

There has been this flurry of posts on Web 3.0 now that Web 2.0 (whatever that was) has mainstreamed. Its always amused me to apply version numbers to something that is changing all the time with new services and sites appearing daily, but that's marketing for ya!

What is really interesting to me in all of this "let's jump to Web 3.0" is that people just assume its going to be a simple jump in versions. In reality, semantics and ontologies are not easy...not easy at all. If you want to catch a glimpse of how the W3C defines the semantic web look at the OWL Web Ontology Language Reference.

Relational databases can be hard for folks to get, but descriptive logics...yeah. Using ontologies can be pretty straightforward but I will say that defining them can be a pain in the rear end. Programmers think that its about class heirarchies (like in programming) but its really not. Individuals (objects), via inference, can enter and exit class membership based on the facts you know about them. Classes have union, compliments and disjoint definitions.

Properties are fully namespaced and those properties have...properties. Think of this...you define a namespace#hasChild property which is the inverse of a namespace#hasParent property. Pretty easy to figure that out. Now is namespace#hasHusband the inverse of #namespace#hasWife? Damn...a gray area (in many people's minds).

This brings me to the main issue that people are going to run into when trying to work with ontologies and semantics on the Web and that is gray areas. We have many of them and the current crop of "social" Web sites allow the human to deal with that gray area (using the nuance of human language). In the world of ontologies systems have to do that, and its very, very hard.

All that said, there is real power to ontologies and semantics captured and used by systems. The key to these systems IMHO is that they are constructed on some real ontological and semantically rich foundations (not just a relational data model), and all that crap is completely hidden from humans. Humans build up and leverage stuff on that rich foundation without ever knowing about it. They may feel its there, but don't have to understand it to use it. An environment that allows this for normal folks (on a continual basis) is one of our goals with indi. I really don't like to jump on bandwaggons but it seems the wagons are coming to us. Its nice when that happens, welcome to the parade.

Sunday, June 04, 2006

Web 2.0 and back again

Something had been nagging at the back of my mind for some time now. As I read all these blogs about what Web 2.0 was, I kept remembering I had heard some quote somewhere that describes this...far back in the past. I did some "Google digging" this morning and found what I had remembered. It was this quote

"The Web is moving from being a place where people access information to a place where people access other people in an information-rich environment" - Paul Saffo

Now granted this was quoted from a piece where Paul was being asked about the survival of AOL, but still, what a great quote. What is great is this was captured in a wired article in December of 1996. This is probably the most succinct definition for Web 2.0 that I have seen, and it was written in the early successes Web 1.0. Futurists are great when they are right.

Saturday, May 27, 2006

Fingerprint every US worker? NOT!

Slashdot just posted a piece that Bloomberg wants to build a database of every valid US worker to include DNA or fingerprints. This is completely insane, and more importantly its completely unnecessary.

This is insane because centralization of data is a bad idea. Just look at what recently happened with the analyst at the VA who was robbed with his laptop containing 26 million veterans records. Imagine a ~150 million worker database containing biometric data. Crazy insane. But again, its not necessary to build such a database.

I am not against the idea of unique identification via a biometric, but just don't centralize the data. If you want to make sure a person is a valid worker, build a mag card that holds two things:

  • Biometric 'signature' of a person's fingerprint stored as a small data file
  • Digital signature w/certificate of the biometric signature generated by a 'signature authority' with a valid certificate chain.

That's it. What this would do is create a card that can be self-authenticated without any network access. You have a terminal that takes a fingerprint, produces a signature, then compares it to the one on the card. The digital signature would be validated against the stored biometric data to ensure it has not changed since the authority 'signed' it. This terminal could be completely disconnected from any network and still produce a valid result. No log would have to be generated. No loss of privacy would result. If someone had the card it would be useless without your finger to validate it with. Its just like your signature, just one someone cannot copy without compromising a signature authority. This is not novel, its been done before although there they were trying for much more. The above idea is a simple, cheap way to ensure identity without loss of individual control or privacy and more importantly without the need for centralization.

Friday, April 14, 2006

indi Beta 2 Arrives

We have been busy. Digital Independence is getting closer. We have reached Beta 2 of indi and its been released into the wild. We have decided to invite everyone who signed up on the waiting list to get as broad a feedback as possible, so you all will be getting your invitations over the next few days. Remember, each of you can invite others. So lets spread the word (get indi baby!).

We have lots of new things added in this beta. In Beta 1 we had tagging of files in the File Manager, but that was it. Based on many good comments we decided to promote the tagging feature to be something indi-wide. You can now tag any object in indi including contacts, events, files or notes. You can tag items in the store that may interest you (if you view their details). When you are chatting with someone with indi's built-in IM utility you can even tag the conversations themselves. We will be doing some very cool things in the next release of indi with tagging and presence as well as group sharing using tags. Stay tuned for more on that.

Importing and exporting files now use the OS native file open/save dialog boxes which simplifies the process from Beta 1. Additionally, when you open files now from within indi they are unencrypted for your use on the USB drive, but before you exit indi it cleans the files up, importing them back in if they have changed and cleaning off the drive. This ensures if you lose the drive your data will not be compromised. Speaking of encryption, now all your IM traffic is encrypted point-to-point, so your privacy is maintained (even for multi-player games...we would not want your "Hearts" moves snagged by Carnivore ;-)

That brings us to another feature addition, indi database backups. Now when you select the option to sync with a computer, you can additionally select to back up to that computer. When you enable this indi backs up your user database automatically upon exit. If you lose your USB drive just get another one, re-download and install indi (from our site), and start it up from the computer you last backed up to. The indi will ask if you want to restore the database from the backup. Seven copies of your database are maintained to help in case database corruption occurs and you want to skip one.

The store still has lots of items in it which we plan to build, future plug-ins that will make the indi branch out in all kinds of directions. In Beta 2 you can still vote on these items and we ask you do so because those votes help us focus on what to build first. The store is also now active. We have a few plug-ins in the queue that we hope to release very soon which will be able to be "Purchased and Installed". Of course, you will not be charged in the beta but it will help us flush out this feature. We will be adding some new games, and hopefully some nifty new plugins (photos anyone?) that will be available in the store for download.

We added a patching service in Beta 2. If we identify bugs in this beta that can be resolved quickly we will deliver them as a patch. These patches will be encrypted for security reasons, and you will have to confirm to install them, but their download will be automatic. One of the nice things that "Web sites as software" deliver is continuous fixes as problems or features are identified. We want to leverage patches in the same way for the indi installed and executing from your USB drive.

The indi Helper has been rewritten too for both Windows and OS X. The indi Helper is the utility that you can (optionally) install on a host PC which helps autorun an indi-enabled USB drive when you plug it in. This is a handy tool and prevents you from having to browse down into the file system to launch indi. (If you are a Beta 1 user please remove the indi Helper that you already have installed. This one is way better. See our support page for how to uninstall it.)

In Beta 2 we have added sounds. They are custom and we think they are cool, but please let us know what you think. Lastly, the sync speed for iCal, Address Book and Outlook have very much improved with Beta 2. This makes indi a really great mobile personal information device that seamlessly works with what you have now.

Building cross-platform applications is difficult work, but the three main technologies that make indi possible (in addition to our coding efforts) are Berkeley DB, Flash and Ruby. Thank you Sleepycat (aka Oracle), thank you Macromedia (aka Adobe) and thank you Matz and the Rails team too! And thank everyone who has or will use indi. We hope you enjoy the experience, and let's make it better together. For those that are not in the Beta, ask around for an invitation, or peruse the Getting Started Guide from our support page. If you really want in convince us by joining the waiting list.

Saturday, March 25, 2006

A "Free" Market Economy

I was reading a recent post by Fred Wilson on his A VC blog about his favorite business model for Internet companies. Basically his summary was to give a service away for free then charge for a premium or value added service to a subset of those who use the free service. After asking his readers for a name for this model he settled on Freemium.

What struck me by this post was that I have always been leery of the view that a small subset of a customer base actually pay for the rest...but the post brought me to a small epiphany (it may be obvious to everyone else, but it was not to me until now). Let's start with a question:

Q: How do you find and market to a customer base in the abyss of the Internet?

I call the Internet an abyss for obvious reasons. The Internet is a vast space with a massive number of people and a massive number of services and from this space how do you distill your market? What I realized was the free service offering was not there to acquire customers per se but to build a market for your real offering, and a market that you completely dominate. Follow this reasoning.

  • You come up with a great idea for a product or service you know some demographic of customer will pay for.
  • Instead of traditional demographic profiling, targeted advertising on search engines, etc you come up with another service which would be a draw to a superset of your intended market.
  • Put that free service online and through social mechanisms (word of mouth, etc) build up the potential customer pool (as Fred indicated in his post).
  • Offer your paid service to the free service pool, knowing that within your free service demographic is your paid service customer base.

So this free service is effectively a mechanism to create an singular advertisement medium where you know (a) your target customers will see the ad for your paid service and (b) you alone advertise in the medium. Rather than look at the free service users as your customers perhaps you should look at them as your potential customer base. The ones that will actually pay you for your product or service offering are your customers. This does not mitigate the cost of having to service those who use the free service. That is critical because your future paying customers are in there! Some may see this only working for services like Flickr where there is a basic (free) then pro (fee) service offering, but it could go way farther than that. Traditional product or service vendors could spend a fraction of their massive advertising budgets to build teams that create these types of free services which would draw in their intended customer demographic creating a medium to reach paying customers, while at the same time offering something that has high value to everyone who uses it. We could name it a free market economy but I think that term is already in use.

Tuesday, February 21, 2006

Team matters

Or more accurately...teams matter! With the initial Beta release of indi I wanted to say some words about my team. A little over a year ago we were all working on DARPA research projects, and we, as a team, decided to go the "product route". Now, switching from a consulting-oriented company to a product-oriented company is a lot of work, but more importantly it requires the entire team's commitment to make it a success. And I must say that our team has kept that commitment. Building what we have in just shy of a year is a huge effort. Each person on our team continues to amaze me in how well they each pick up and learn what needs to be learned and to do what needs to be done.

Dave and I have worked together for close to 19 years (yeah...exactly!) He is one of the best programmers I know. Right now Dave handles lots of our low-level code development. Whether its integrating extended MAPI with Ruby or the building installers with the OS X Carbon API or even scripting iCal with AppleScript...Dave just plows through and produces incredible results. We have to perform some major back-flips iterating on an implementation that gets things right, and no matter how much work it takes Dave to accomplish a task, he is ready to start over if its the right thing to do. As every programmer knows, the worst feeling in the world is to solve a hard problem and then have that solution become unnecessary because of a change in requirement...but Dave is always positive, always ready to do what must be done. Most of Dave's work in not thrown away mind you, its just something that I really admire about him.

Tom is another amazing programmer. Many of you guys may know Tom since he administrates RubyForge. As part of our product effort Tom has been working on all our service infrastructure. Tom has picked up Ruby on Rails in no time, and has produced a great foundation for us to build upon. Not only is Tom kicking at building the services code though, he is also great at building the client side of that code. I have just never been good at tinkering with all the stuff you have to to configure things like Postgres, Apache (or GForge...ug), but Tom not only does a great job, but actually automates (with tests) everything he does to verify the integrity of what he is building. Of course, while all this is going on, Tom continues to work on PMD and RubyForge. Oh, Tom also single handedly built the beginnings of our Linux support for indi (Evolution plugins, runtime, etc) but since the Flash 8 player does not (yet) support Linux, that work has to sit on the sidelines...for now!

Ryan and I have known each other almost as long as Dave and I have. Ryan is an artist...but I don't mean a graphics artist (although he is amazing with Photoshop)...I mean an artist. Ryan is actually a very good musician, but again, than is not what I mean. Ryan and I have done most of the UI development for indi. Ryan is an artist in the sense that he always programs with style. Everything he does has a style that is driven by his artistic sense. He constantly iterates his implementations seeking a balance of form and function. Ryan had to ramp to learn ActionScript 2.0 last spring...and learn it he has. When Ryan and I first worked together at a company named Roku 10 years ago, Ryan was tasked to build a calendar (month, week, day view) in Java 1.1. Now, if anyone remembers Java 1.x...it was very hard to achieve good performance with AWT, but Ryan produced with flying colors. He also NEVER wanted to build another calendar again! Of course, then comes indi and what is the first thing I ask Ryan to do?...yeah...build a calendar. Ryan always delivers great results with his UI work, and is a stickler for details, which anyone who puts the indi card games in slow motion will immediately see.

Last but very much not least is Mark. Mark is my COO, but the first thing to know about Mark is the "C" in his title in no way means his view of work is delegating and controlling those who work for him. You see, Mark served as a Marine, and as such believes that his job is to do whatever has to be done. Mark handles everything administratively for our company, and I mean everything! Mark deals with payrolls, accounting and all the other crap (his words) that makes a company tick, and its no small task. Its a huge amount of work...and most of the time its not very fun work. Mark is tireless at performing it though. None of us ever worry about the admin side of the company with Mark there, which lets us fully focus on building our product. But that's not it by a long shot, Mark is also Business Development, Marketing...oh and he wrote the indi Getting Started Guide because you know how much developers like to document.

That's my team. They are great to work with, and great at what they do. Best of all, I count all of them as friends. How awesome it is to work doing something you enjoy with your friends? I do want to add one more group to our team...those being our investors. Our investors believe in us and we want to make sure we are worthy of that belief. I don't just add our investors because I'm the CEO and its good form, it takes a lot to produce in this fast-moving world of high-tech. We are all one team working toward a common vision and that is why we are going to succeed. Now for Beta 2...

Thursday, February 16, 2006

Get indi baby!

Well, after a year of very hard work, we have finally entered a (limited, invitation-only) Beta for indi. What is indi? You can find out here: http://getindi.com. indi is our answer to folks who believe that you need to put all your stuff on their servers to gain anytime-anywhere access to it.

Technically indi combines a lot of the work I have done in Ruby such as FreeBASE (plug-in framework for the FreeRIDE IDE), Jabber4r and Alph (Ruby to Flash bridge) with the work I have been doing in Flash/ActionScript...specifically the ActionStep port of the OpenStep/Cocoa App Kit to Flash. This combination creates a cross-platform execution environment with Ruby as the data manager, and Flash for the UI.

indi runs on OS X and Windows right now, and as soon as Flash 8 is supported on Linux it will run there as well. indi is more like a platform than an application, and its going to allow us to give some really cool capabilities to our users and deliver on a vision we have of digital independence (reverse the two and you get in..di - indi).

Anyway, we have a busy schedule ahead to release our next Beta in about 4 weeks at O'Reilly's Emerging Technology Conference.

Tuesday, August 30, 2005

Flash and Web 2.0

Mike Chambers from Macromedia posted on his blog about what Web 2.0 is and how the Flash platform relates to it. Having spent the better part of the last six months building a substantial application with Flash which, as a by-product, has produced the ActionStep open-source component framework and using the MTASC compiler for building swfs from ActionScript, I will say that Flash is far better suited to building applications that feel like desktop apps, but that operate in a distributed manner. If Web 2.0 is "the Web as a platform" as Mike says, then Flash should be seriously evaluated for projects that are trying to build applications for that platform. If you want to just use HTML and AJAX, that's fine, but for us Flash is a must...and when you see our applications you will understand why.

Saturday, August 06, 2005

ActionStep and Rails

Some may have heard the crazy story about my integrating ActionStep and Rails at OSCON. ActionStep is an OSS component framework for Flash written in the ActionScript programming language. Rails is...well that goes without saying. I was slotted to speak on ActionStep on Thursday in the Emerging Tech track. I have to admit that although I have been doing Ruby programming for 4 years, I had never touched Rails. My job really has nothing to do with Web frameworks and such, and time slips by... Anyway, OSCON presented an opportunity to see Rails in action and I sat through David's great tutorial session. Rails is a really nice Ruby framework, and it struck me that it would be cool to come up with a templating language to build ActionStep-based UIs with Rails. Monday and Tuesday I iterated on a design with David, Dave Thomas, Glenn Vanderburg...all the fun Ruby folks, and came up with something linguistically nice. David asked me to add to my ActionStep/Rails syntax slides into my presentation as a 'teaser'. Here is an example of the templating format:

NSView :test do
  attributes :rect => {:x => 0, :y => 0, :width => 200, :height => 400}, 
             :backgroundColor => 0xdddd00
  publishes :selected_person_id => execute { names.selectedItem.label }
  NSButton :hello do
    attributes :title => "Test", 
               :rect => {:x => 10, :y => 10, :width => 20, :height => 20}
  end
  ASList :names do 
    attributes :items => @names, 
               :rect => {:x => 10, :y => 50, :width => 100, :height => 200}
  end
end

Having slides that showed this format was cool with me...but on Wednesday night all that changed. I went to hang with the FOSCON folks, and presented the teaser slides to them. People really liked the syntax and the implications of what having a Flash framework attached to Rails could mean. Then all hell broke loose. Well, actually not hell proper, but chaos harnessed in a very Ruby way by _why the lucky stiff. After his side splitting performance I went back to my hotel around 11pm and decided to just implement the syntax in Rails and ActionStep. I mean, how hard could it be to build a Rich Internet Application framework? I started at 11:30 with two Dr. Pepper and by 6:00am had stuff rendering from Rails to ActionStep. I crashed for an hour and a half, and then went to the David's keynote on Rails. His keynote gave me just the boost I needed to push it a little further and I spent the next hour getting data sent back from ActionStep to Rails. At my 11:30am session I was able to fully demonstrate Rails dynamically creating and serving an ActionStep-based UI. You could update the text templates, press refresh in your browser, and the UI would re-render with your changes. Round-tripping data...the works.

I would like to say that it was just a few lines of code, but that is not quite the case...its a few more than a few. I will be creating a Gem by the end of the month to allow people to play with things, and until that time I wrote up what the syntax looks like...you can see it here in more detail:

http://www.osflash.org/doku.php?id=actionstep_rails

To Open Source and all that it implies..um...ok, I need to sleep now.

PS. United Airlines sucks, I just needed to get that out.

Wednesday, May 04, 2005

ActionStep source is on SourceForge

Well, I went released (in CVS) what I have been busy working on for the last month. ActionStep source is now available on the project site under a BSD-style license. Whew. Porting OpenStep to ActionScript is quite a pain, and there is so very much to do. The goal was to mirror the API as much as possible (with necessary syntactic variations). In Objective-C you would create a button like this:

[[NSButton alloc] initWithFrame:NSMakeRect(10,10,50,20)]

In ActionStep you do this:

(new NSButton()).initWithFrame(new NSRect(10,10,50,20));

Other than that, the API is going to attempt to support as much as my/our little fingers can port. I have NSButton and NSTextView working, but will be making them better over the next few days. Scott Hyndman has joined in and is working on NSBox to get his feet wet. NSNotifications all work, target-action, the responder chain...good times!

When I can lay out a strategy for total domination of the UI world, I will post again, for now I need to sleep.

Friday, April 29, 2005

Ruby 1.8.2 in Tiger

Nice...the Apple team included Ruby 1.8.2 in Tiger. Tis a sweet thing indeed. If you want to build extensions for it though you need to install xCode Tools. And then, there is a minor problem with the shipped rbconfig.rb file. The wiki on the rails site here documents the change.

You can also use RubyGems to fix it too thanks to Chad Fowler who already built a Gem (fixrbconfig) to fix the problem. After you install RubyGems you just do this:


% sudo gem install fixrbconfig
Password:
Attempting local installation of 'fixrbconfig'
Local gem file not found: fixrbconfig*.gem
Attempting remote installation of 'fixrbconfig'
Updating Gem source index for: http://gems.rubyforge.org
Successfully installed fixrbconfig-1.0

Then run (from another terminal window):


% sudo fixrbconfig
====================
This program will replace your rbconfig.rb , located in /usr/lib/ruby/1.8/powerpc-darwin8.0/rbconfig.rb
Press enter continue or ctrl-c to abort.
Backing up original rbconfig.rb in /usr/lib/ruby/1.8/powerpc-darwin8.0/rbconfig.rb.bak
All Done! You should be able to compile C extensions now!

Its nice when package managers ship fixes to OSes on the same day the OS ships!

Now, full steam ahead with Ruby on Tiger!

[UPDATE] Lucas Carlson posted this very nice script to fix both the rbconfig.rb file and download and install readline support (which gives you command recall in IRB). Very nice indeed! If you have already applied the rbconfig fix, you can just snip out the lines starting with: curl ftp://ftp.gnu.org/gnu/readline...

Wednesday, March 09, 2005

Speaking at OSCON 2005

So, my talk on ActionStep was accepted for the 2005 OSCON conference which is being held in Portland from August 1-5. Its a high honor to be accepted at this event, and I thank the program committee for selecting my talk. I will not disappoint. As to what ActionStep is...heh...its coming! ActionStep is an open-source (thus OSCON) component framework for Macromedia's Flash player that InfoEther is paying to develop. There is a lot of open-source momentum building in the Flash community and ActionStep's goal is to be one piece of the puzzle. Another significant piece is the MTASC ActionScript compiler which is freaking incredible and makes ActionStep possible. I will be posting more about ActionStep soon, and will be switching my CVS to the SourceForge project soon as well. Oh, and don't worry, Ruby is still my best friend...this ActionScript language is a necessary evil!

Monday, February 28, 2005

Jef Raskin

Jef_foocamp_small Jef Raskin passed away yesterday. My heart goes out to his family and to those close to him. I only met Jef two times, but in both instances he was a vibrant and engaging person. At last years O'Reilly FOO Camp Jef brought his small model planes and to the delight of the children flew them around the parking lot. Five years ago when I was working on a prior software project (Roku) we were close to engaging Jef to help us build the user experience. That, unfortunately, fell through but I did get to visit Jef at his house on the coast of California. We spent the afternoon in a dialog about The Humane Interface and his vision for The Humane Environment (THE). His son seems to be carrying on his father's vision at The Raskin Center. The very computer that I type this on owes much of its existence to the creative mind of Jef Raskin and I will always remember him for both his accomplishments and his dreams.

Friday, February 18, 2005

New InfoEther site live

We just updated our site at infoether.com. Check it out if you get a chance. It's a database-driven flash-based site and the backend has some crazy cool stuff one of our folks developed. Its likely overkill for a corporate Web site, but hey, when you have a bunch of crazy cool developers working for you, why not!

Tuesday, October 19, 2004

RubyGems marches toward 1.0

We have a lot to celebrate today in the world of RubyGems...we passed the 5000 download mark of RubyGems and over 20000 gem libraries have been downloaded and installed. Chad Fowler has captured this nicely on his blog.

Its not too long before we reach the 1.0 milestone...but with over a hundred Ruby libraries already available and more coming every day, there is no time like the present to install RubyGems and experience an elegant solution to package management for an elegant dynamic language.

Viva Ruby!

Saturday, October 02, 2004

Alph code released into the wild

Well, here is the first public release of Alph:

Alph Project Site

Alph is a Ruby/Java/Flash (I know...I am insane) that bridges the Ruby and Flash runtimes (and Java too...but that is to solve the cross-platform projector problem that Macromedia will not solve.) With Alph and Ruby (>= 1.8.1) you can create Flash user interfaces (forms, etc) that are fully coded in, and controlled by Ruby. No Actionscript required, no Flash IDE required, just Ruby (and those dependent runtimes). Here is a simple ruby script:

This example demonstrates the List Box family of components (ComboBox, ListBox, Grid). See: http://www.ultrashock.com/tutorials/flashmx2004/ui-components06.php

$:.unshift '../lib'
require 'alph'
app = Alph::Application.new
frame = app.new_frame
frame.control.setBounds(100, 100, 640, 480)
flash = frame.flash
myComboBox = flash.new_component("mx.controls.ComboBox", 
  :editable=>false, :rowCount=>5,
  :_x=> 14, :_y=>26, :_width=>291, :_height=>22)
myComboBox.labels = ['Organic Snacks', 
 'Recycled Office Paper', 'Wind Energy', 
 'Solar Power']
myComboBox.change do |event|
  # The myComboBox.selectedItem method returns 
  # the label (not an object) because the data is not set.
  puts "You selected #{myComboBox.selectedItem}."
end
myList = flash.new_component("mx.controls.List", 
  :_x=> 14, :_y=>66, :_width=>291, :_height=>120)
# Data provider is an array of anonymous objects (label/data)
myList.dataProvider = [ 
  {:label=> "Organic cotton underwear", :data=> 7.25},
  {:label=> "Organic T-Shirt", :data=> 15},
  {:label=> "Recycled Office Paper", :data=> 6.99},
  {:label=> "Organic Cola", :data=> 1.25}
]
myList.change do |event|
  # The myList.selectedItem method returns an object with
  # a label and data property because the data _is_ set.
  item = myList.selectedItem
  puts "#{item.label} costs $#{item.data}"
end
myDataGrid = flash.new_component("mx.controls.DataGrid",
  :_x=> 14, :_y=>200, :_width=>291, :_height=>120)
# Column names align with column ids
myDataGrid.setColumnNames( ["Product", "Price", "Quantity"] )
# Data provider is an array of anonymous objects (keys = column ids)
myDataGrid.dataProvider = [
  {:Product=> "Underwear", :Price=> 7.25, :Quantity=> 3},
  {:Product=> "T-Shirt", :Price=> 15, :Quantity=> 1},
  {:Product=> "Paper", :Price=> 6.99, :Quantity=> 7},
  {:Product=> "Cola", :Price=> 1.25, :Quantity=> 24}
]
myDataGrid.change do |event|
  # The myDataGrid.selectedItem method returns the anonymous object
  item = myDataGrid.selectedItem
  puts "#{item.Product} costs $#{item.Price} (#{item.Quantity} left in stock)"
end
# You can rename column names by index
myDataGrid.getColumnAt(0).headerText = "Product Name";
myDataGrid.getColumnAt(1).headerText = "Price";
myDataGrid.getColumnAt(2).headerText = "Quantity Left";
flash.new_component("mx.controls.Button", :label=>" Close", 
  :_x=>380, :_y=>89, :_width=>120, :_height=>35, 
  :icon=>"icon_16x16_warning") do |closeButton|
  closeButton.click do 
    frame.control.close
    exit
  end
end
frame.control.show
app.wait_until_done

Pretty sweet eh?

Go download it, and let me know what you think.

Monday, March 15, 2004

RubyGems Alpha I Release

Well, tonight Chad Fowler and I released the first version of RubyGems (Alpha I). If you are a Rubyist you can download it from here. I wrote on RubyGems after I returned from RubyConf 2003 last fall, and since then we have had little time to work on it until this last weekend. Our intent is to now press on until we reach the 1.0 release. To get a good sense of the power of RubyGems see the User's Guide at RubyForge.org. My hope is that folks will start using and producing Gems and move Ruby's handling of libraries (creation, distribution, installation, uninstallation) to the next level.

My Photo

May 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 31

Recent Posts

Photo Albums