Quantcast

TikiTV In Action

Here are some old pics of Sam and Peliom vj-ing with the open source TikiTV software at the Timothy Leary Archives event at 111 Minna. Way fun!

IMG_5628

IMG_5631

IMG_5629

IMG_5633

Announcing TikiTV, the Best Open Source VJ Software Ever!

TikiTV is an awesome open-source video mixing application for Mac OSX, developed by peliom and VJ Science. If you are a video nerd, you should check this out:


  • decodes 6 full-quality 720×480 MPEG-2 streams at 60fps
  • on screen preview of both 3-channel decks
  • fullscreen output to second display (vga projector)
  • rock solid 60fps output, no dropping frames
  • requires MacBook Pro 2GHz or higher

You can download TikiTV here. For the video hax0rz out there, you can clone the the github repo.

tikitv

Why gcc has a free Objective C frontend

Apple compiles OS X and almost all of its software with gcc. I still find it hard to believe that such a secretive company builds almost all of its software products using gcc, the compiler that anchors the Free Software movement.

Apple’s uses Objective C because NeXT used Objective C. When Steve Jobs was at NeXT, he didn’t want to place their objc gcc frontend under the GPL, but ended up having to. Here is an excerpt of an email from Stallman:

I say this based on discussions I had with our lawyer long ago.  The
issue first arose when NeXT proposed to distribute a modified GCC in
two parts and let the user link them.  Jobs asked me whether this was
lawful.  It seemed to me at the time that it was, following reasoning
like what you are using; but since the result was very undesirable for
free software, I said I would have to ask the lawyer.
 
What the lawyer said surprised me; he said that judges would consider
such schemes to be "subterfuges" and would be very harsh toward
them.  He said a judge would ask whether it is "really" one program,
rather than how it is labeled.
 
So I went back to Jobs and said we believed his plan was not allowed
by the GPL.
 
The direct result of this is that we now have an Objective C front
end.  They had wanted to distribute the Objective C parser as a
separate proprietary package to link with the GCC back end, but since
I didn't agree this was allowed, they made it free.

So that’s why. Via this email thread between Richard Stallman and Bruno Haible about why Common Lisp is under the GPL. Via reddit.

Apple’s move to the GNU Toolchain has been very good for developers (remember MrC and MPW?), but it sure took a long time to get here. Yesterday I remotely debugged an iPhone app using gdb. Spending time in a debugger isn’t usually a very pleasant, but I surprisingly happy when gdb stopped at my first breakpoint…

QuickSilver Now Open Source

QuickSilver is now open source! Check it out on Google Code..

Update Twitter via iChat status message, part II

A while back I posted a perl script that would update your Twitter status whenever you changed your iChat status message. Unfortunately, you had to configure launchd or cron to use it, which no one wanted to do. So I made an open-source Cocoa app that is easy to use! It’s called TikiTwit, and you can download it for free!

TikiTwit.png

Download it here! This is a very early version, so please help me test it!

url encode in cocoa

Let’s say you need to url-encode a string. No problem! You can call uri_escape in perl, or urlencode in php, or urlencode in python, or CGI.escape in ruby…

But now let’s say you are writing in Cocoa. ugh. Before you shell out to your favorite scripting language, check out CFURLCreateStringByAddingPercentEscapes() It doesn’t encode the RFC 2396/RFC 2732 reserved characters by default (other than ‘[' and ']‘), but you can specify additional characters to encode in the fourth argument. Use something like this:

CFURLCreateStringByAddingPercentEscapes(
    NULL, 
    (CFStringRef)@"escape this %;/?:@&=+$[] string", 
    NULL, 
    (CFStringRef)@";/?:@&=+$,", 
    kCFStringEncodingUTF8
);

It took me quite a while to figure this out… I found the NSString method stringByAddingPercentEscapesUsingEncoding, but that doesn’t escape the reserved characters.

(I have a suspicion that Cocoa developers are getting paid per letter…)

RSS is the New Email: A Polemic in ObjC




About a month ago I was going on about trying to use a newsreader to keep up with all the RSS flying around. I tried Google News Reader, hated it. I tried about 10 other RSS readers, both web based and client software (mac)… I felt like they all missed the point.

When I’m reading RSS, I actually don’t give a monkey’s tail about the RSS. RSS is stupid, unformatted, unstyled text with no soul and even less information. The way to consume RSS coming from websites is to read it in it’s richest form: from the website itself. Some client newsreaders go a short way down this path by giving you button to open the article in your web browser. But this is totally lame. I mean, a drunk dog could open up a web browser and sit there through the World Wide Wait and sift through the blink tags and advertisements and try to read the article.

I am happy to make the first public mention of TikiRobotReader, a Mac OS X application that (eventually) will handle RSS in a way that is not totally dain bramaged. TRR is Open Source, a Cocoa application, and a work in progress.

The basic idea is that for a given Article, TRR will download the link to the article’s web representation and convert it to PDF so the articles are all nice and shiny and ready for your skimming pleasure, no waiting required. Here is what I want TRR to be:

Principles of Operation

  • Simple keyboard commands everywhere. Should be operable one-handed while eating lunch.
  • RSS is disposable content. It’s not critical like most (personal) Email.
  • Read the content as presented by the website, not some random choice of Font and Color.
  • Blog posts and status messages from friends are way more important than Yahoo/CNN headlines.
  • Streamline the reading process. No nagging feelings of “should I delete this article or save it?”
  • Download and cache web pages as PDF. Zero latency when switching articles.
    • PDF loads immediately, vs 1-5 seconds for an HTML page to render
    • PDF is a static page, no blinking and bouncing flash ads and animated GIFs
  • RSS is a source of content. Provide easy hooks for the sinks: Sharing and Research.

The current release is ugly as hell, but functional. At this point TRR is best enjoyed by running out of XCode so you can debug crashes and implement nifty features. I will be using it as my daily news reader in this fashion. But the nightly builds are functional and get the idea across. Feel free to contribute! Design ideas are helpful and code contributions are always a good thing. TikiRobotReader is meant to present RSS the way you, the discerning TikiRobot! blog reader, think is best. TRR will be a great place to implement all those Web 2.0/client features we want but can’t get anywhere else.

Link to TikiRobotReader nightly build
Link to TikiRobotReader SourceForge page

A Joyous Crash in removeObserver:forKeyPath: / _NSKeyValueObservationInfoCreateByRemoving

 Images Frustration Today I had the joy of trying to figure out a tough crashing bug somewhere deep inside a Cocoa / Core Data / KVC / KVO application. In case anyone else is running into this crash, it’s not your fault:

Ah, the infamous _NSKeyValueObservationInfoCreateByRemoving crash bug.
That’s shown up with a number of triggers, and is definitely not
reproducible, nor is your code at fault. I filed a bug on it, and Jim
Correia (who often posts on this list) has sent in a reproducible case.

If you can figure out the interface item or binding that’s triggering it,
you may be able to work around it. In my case, I was able to have an object
traverse a relationship for me, instead of binding through the relationship,
and that stopped the crashing.

I was able to avoid this crash by overriding removeObserver:forKeyPath: to do nothing (especially not call NSObject’s implementation, which was doing the crashing).

I’m also getting a crash in -[NSOutlineView _sendDelegateWillDisplayCell:forColumn:row:] which I don’t understand. I’ve turned off all my NSOutlineView customizations….maybe I’m calling reloadData too often. If anyone has ideas, I’m all ears.

Link to a cocoa-dev message I wish I had seen about six hours ago

Crashes in WebKit: Dodge or Parry?

I love WebKit. It allows you to embed an HTML view anywhere in your app. It’s an HTML view that behaves exactly like Safari because …. well, Safari uses WebKit. Having a fully functional HTML view is an important part of almost any modern application. Unfortunately though there are some bugs, some of them crashing bugs, especially if you use WebKit in a way that is outside the common path that Safari uses. And these bugs won’t be fixed for most users until Leopard ships next year.

Here is an example. I was debugging this for many hours. Somewhere a piece of the WebView is getting over-released and causing a crash. This type of bug is notoriously hard to analyze and fix. I thought it was in my code, but it turns out it was in WebKit.

2005-07-24 01:29:26.070 macbook[4264] *** Selector 'release' sent to dealloced instance 0x8faf1e0 of class WebHTMLView.
Break at '-[_NSZombie release]' to debug.
2005-07-24 01:29:26.086 macbook[4264] *** -[NSAutoreleasePool dealloc]: Exception ignored while releasing an object in an autorelease pool: *** Selector 'release' sent to dealloced instance 0x8faf1e0 of class WebHTMLView

So what can I do? A major feature of my application is downloading a load of web pages and converting them to PDF files. WebKit is a great way to do this. Well, really it’s the only way to do it. Except for the crashing part. So after giving up on fixing this over-release crash, I split out my html-to-pdf code into a separate, small command line program. It works great, and is just the thing for “defensive programming.” For example if some random web page I load has a plugin that crashes webkit, it will only crash my helper program, not the app itself. iChat uses a similar technique for video conferencing (look around for “vencoder”). My command line webkit program size is 68kb.

So to any other developers seeing this crash, or to anyone thinking about using WebKit as a data processing tool rather than a web browser: fork off a separate process. It will save you a lot of heartache and make your application crash much less.

Link to the WebKit Homepage

Update! … rajbot sez:

The great thing about WebKit being Open Sores is that you can embed the latest versions of the frameworks in your app, and set the right env variables to tell WebKit to use those instead, like the nightly Safari builds do..

That’s a good point. I might just do that. And that way I can just fix the bugs myself if I need to… yay! :-)

New Slide Player for Mac!

This is a bug fix release for the clients, web site, and server, and we corrected 48 separate issues in the mac client alone. But true to form, the Mac team snuck in some awesome features for you:

  • Read and Unread – darken or remove the item in the ticker after you click on it. Check the “History” tab in the preferences for some more options on this feature.
  • Take My Picture – Is there a video camera built in or connected to your Mac? If so, the Upload Window now has a “Take My Picture” button. Check out the evidence above! :-)
  • Direct-From-Camera Uploads – If your digital camera or card reader (SD, CF, etc) is connected, click on the “My Camera” button to bring up the Image Capture services dialog. Select one or more pictures, click “Download” (wait for the pause, sorry no progress bar yet), and boom, you can upload those pictures to a Slide Show.
  • Scale Down Large Image Files – This makes the above feature usable. Images are scaled down to 1600×1200. As a bonus, I respect the EXIF “orientation” flag. This keeps your vertical pictures vertical (if your camera supports it)

Whew! Now if you don’t mind, I’ve got some camping to do :-) I’m psyched that when I come back from Utah I can just drag images from my SD card reader onto slide and have them up on the web…

Link to Slide homepage which has Download!!! links all over the place.

New Slide Player for Mac!

New release of Slide Player for Mac! Many, many new features in this release including:

  • Slide Screen Savers! (pictured above: “SlideTickers”)
  • drag and drop items into chat window!
  • Text Mode (shows text alongside picture)
  • status messages when changing channels
  • iPhoto export-to-Slide plugin
  • “new” badge on new items
  • MySpace notifications – scrapers your MySpace account for cool stuff

Check it out and let me know what you think. The chat feature is a lot of fun.

Link to Slide homepage.

i finally wrote some code that Apple likes

Just over a week ago, some folks at WebKit invited me to make my little web development tool, tixe, an official part of Webkit. I am super excited. That is just about the best compliment I could have imagined. So I jumped right in, and after furious coding (which actually amounts to embarassingly small amounts of code), I’m happy to say that the framework formerly known as tixe (and even formerly known as BionicDOM) is now part of the WebKit nightly builds. Plus, I’ve gotten the opportunity to work with a really tight group of smart people.

So, to celebrate, we’re having ice cream! Raj and I and anyone else we can round up will be at Maggie Mudd in Bernal (903 Cortland) tonight at 9. There’s internet access there, and if anyone will let me, I will try to show off the li’l WebKit hack that made it big. Join us!

Tixe!

The framework formerly known as BionicDOM is now Tixe! Jim writes:

Tixe is a Mac OS X framework that brings the power of Cocoa bindings to Apple’s WebKit.

Access and edit document content, styles, node attributes, and markup… even bind Cocoa controls to JavaScript values. And it all runs live inside of Interface Builder.

If you use CSS in your life or want to check out the strange and wonderful world of Cocoa Bindings, you should definitely check this out.

Link to the latest release notes.