Sunday, June 1. 2008WOVSuite 0.51What Is WOV1?WOV pronounced “wahhv”, stands for Wrapper Of Video, its a Mac OS X package format that contains both a non quicktime video source and a pre-parsed QuickTime reference movie and is QuickLook compatible. What’s WOV Got to Do With It2?If you have ever had a large Window Media File you want to open with WMVPlayer plugin for QuickTime, you may have noticed it’s really really slow. Same goes with Perian and MKV’s, though not nearly as bad. Since they are converting to a QuickTime movie format in memory its possible to save that file and have much quicker load times with subsequent opens. However you must be careful, because these plugins can (and have in the past) changed they way they work such that imported quicktime movies can be broken with updates, so it’s imperative that you don’t save self contained movies only reference movies external to the original file. So thats what WOV does, it keeps a reference movie which is really small and the original file combined into its package format, that makes it easy to organize these pairs, repair the reference movie if necessary in the future, and completely undo the WOV container and restore it to the original files (if you so desire). WOV WOV WOV3.So early on playing around with the idea of WOV, I soon realized it was a good format for simple non destructive QuickTime edits, so I chose one I though was particularly useful which is joining files. So there exists an option, when converting a batch of files in WOV Converter, to combine multiple files into a single WOV file. That resulting package contains a chapter-ized reference movie, the original files, and an M3U playlist of the original files. Thus when trying to open the WOV file in a non native QuickTime App it will try and open the M3U file, I choose M3U since it is so simple it’s likely to be supported in most apps (it is supported in VLC specifically). Tainted WOV4.There are decent possibilities for caveats with this format, which is why I am putting it out in this early beta and not integrating into NicePlayer right away. One of the obvious caveats is that the original type is masked, which makes it hard to tell if a non native quicktime app is going to be able to open a WOV file ahead of time. I’m not sure if that will be a big deal, but I need people to use WOVConverter & WOVOpener to get feedback to figure out stuff like that. It should be noted that there is also major issues with using WMVPlayer with WOVConverter. WMVPlayer version 2.2 must have the preference “Open Local Files Immediately” unchecked, or alternatively you must downgrade to version 2.1 to work properly with WOVConverter. The Book of WOV5.WOVSuite — entirely open source, licensed: MPL/LGPL/GPL has a few parts:
Fun FootnotesThursday, March 27. 2008NicePlayer Preview BuildsWhile NicePlayer is pre-1.0, I strive to make each release solid enough for general mass consumption. However it’s not easy, it involves testing on different processors, os’s, migrating localizations, updating readme’s and documentation—it’s a long laundry list of things. And we need more help on testing. NicePlayer is open source and the source can be checked out and built prior to release for anyone to try out features and bug fixes, but I don’t think that is accessible enough to get the feedback necessary to for quality releases. So I created a Preview builds page where I can easily upload preview builds of NicePlayer. These releases aren’t ready for mass consumption, but are solid enough for enthusiasts to try out. Anyone is welcome to try them, but please only link to the build page and not the actual download. Also be forewarned that the download links changes every 5 minutes so if you try to link to the actual download it will stop working quick (so no unauthorized MacUpdate posts!). On the build page I add what’s changed and what I need tested to the description of each build. The description will also show up in the preview appcast that NicePlayer autoupdates from, so you can keep up to date on this bleeding edge track. Sunday, March 2. 2008
jay.tuley.name back online! Posted by Jay
at
03:09
Comments (0) Trackbacks (0) Defined tags for this entry: sqilte
jay.tuley.name back online!So my blog is back online finally, gave up on Typo and Rails. It was just too hard to keep running, so I’m back to good old PHP. The blog software I chose to replace typo is Serendipity, mainly because it supports sqlite and since i was using sqilte with typo to make the migration easier. The first hurdle faced was that php’s sqlite is sqlite version 2 instead of 3 and it’s hard to find a program that will version 2 let alone both, however looking through Serendipity’s source and found that it had sqlite3 support and googling a function call in that source let me to the php module used for sqlite3 support, php-sqlite3. Unfortunately there isn’t a gentoo package for it, and I am not familar with php modules so it took a little bit of effort to get it installed, but i did. Finally i used sqliteman to map the columns from the old blog engine to the new. Here is the sql I used below. Content:
INSERT INTO
s9y_entries
SELECT
contents.id as id,
contents.title as title,
STRFTIME('%s',contents.published_at) AS timestamp,
contents.body AS body,
COUNT(feedback.type) AS comments,
contents.extended AS extended,
0 AS trackbacks,
0 AS exflag,
contents.author AS author,
contents.user_id AS authorid,
CASE
WHEN contents.state='draft'
THEN 'true'
ELSE 'false'
END AS isdraft,
'true' AS allow_comments,
STRFTIME('%s',contents.updated_at) AS last_modified,
'false' AS moderate_comments
FROM
contents
LEFT JOIN
feedback
ON feedback.article_id = contents.id
GROUP BY contents.id
Feedback:
INSERT INTO
s9y_comments
SELECT
id,
article_id AS entry_id,
0,
STRFTIME('%s',published_at) AS timestamp,
title AS title,
author AS author,
email AS email,
url AS url,
ip AS ip,
body AS body,
"NORMAL" AS type,
0 AS subscribed,
"approved" AS status,
null
FROM
feedback
Categories (note, I cheated on categories because i didn’t like how i did them originally and planned on manually tagging articles, so I made them all 0, i am not sure if that was necessary but i did it.): INSERT INTO s9y_entrycat SELECT id, 0 AS categoryid FROM contents WHERE state <> 'draft' The last thing i did was permalinks, i was hoping if I did this i could map the old link scheme, however this didn’t work so I wouldn’t recommend doing this last sql command but I ran it so I’m posting it as well anyway.
INSERT INTO
s9y_permalinks(permalink,entry_id,type)
SELECT
"articles/"
||strftime('%Y/%m/%d',published_at)
||"/"
||trim(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
replace(
lower(title)
,' ','-')
,',','-')
,'!','-')
,"'",'-')
,'/','-')
,'?','-')
,':','-')
,'(','-')
,')','-')
,'"','-')
,'>','-')
,'*','-')
,'----','-')
,'---','-')
,'--','-')
,'-')
AS permalink,
id,
'entry' as type
FROM contents
WHERE state <> 'draft'
Saturday, November 17. 2007
NicePlayer 0.96.X the Early Leopard Posted by Jay
at
08:48
Comment (1) Trackbacks () Defined tags for this entry: niceplayer
NicePlayer 0.96.X the Early LeopardThe First ReleaseSo the first released was 0.96.0 in the wee hours of the A.M. of October 26th a last ditch effort to release something that actually worked on Leopard combined with a few bug fixes from 0.95 and some minor features I had started working on prior. Version 0.96 (v543) Something, I just found out is that, my pre-sparkle method of updating actually broke on Leopard so users didn’t get this update notification, however since 0.95 doesn’t work at all on Leopard, I’m sure such users have found the update since then who needed it, so it’s a good thing I’ve switched to sparkle on this release. The Second ReleaseI got to fully test the sparkle update method by releasing, two weeks later, 0.96.1, which contained a few bugs that were introduced in 0.96.0’s haste (whoops), but also I got to try out some fun Leopard stuff. Version 0.96.1 (v573) I added code signing as a build stage, however I haven’t figured out if being signed actually does anything. I thought it was supposed to reduce warning messages when downloading updates, however I tested downloading two copies of the same code signed NicePlayer and they both had the same warning dialog. Oh well. Sparkle updates don’t seem to cause warning messages, but i think that is not dependent on the code signing. I also added new 512px icons, they are fun, the main app icon looks like glass in coverflow.
It’s great. I updated quite a few of the default AppleScripts for the script menu. Since Leopard made setting the default dvd player scriptable, I’ve updated my script that previous did the same with laborious UI scripting (but still falls back for tiger). Also I’ve fixed the fullscreen behavior of the aspect ratio scripts so that by default they rescale to fit the screen after change the ratio. Finally, the most interesting to me of the default scripts changes, is that I added a pair of scripts to set the UI resolution for just NicePlayer. This means that if you want to set the scale of NicePlayers interface to 300% you can, with out using Quartz Debug and without effecting any other applications. The ideal usage of this feature in my mind is if you have a large screen and a wireless mouse and you want to control it from across the room. But I’m sure it helps with 30 inch screens upclose as well, I’m sure there are other uses, it’s always interesting to find out the creative things people use NicePlayer for. Here is a picture at 300%, although it’s on my macbook so screen the size isn’t large enough to contain the menus but you get the idea. I’m very excited to get resolution independence working on NicePlayer, it’s something I tried to do on Tiger but I wasn’t having success, but with the new Leopard docs I finally figured it out. Although the changes I made work for resolution independence on Tiger, there are some weird glitchy bugs in windowing behavior such that I don’t recommend using it on Tiger. The Third Release?So there appear to be two significant bugs in 0.96 that have been reported. The first is that NicePlayer and Leopard Spaces aren’t friends, I have some ideas of where to look to figure out what is going on, so I’m hopeful, and if i do figure out I’ll just release another small update 0.96.3 rather than waiting for 0.97. The other bug I’d like to fix, but It’s only been reported twice and I can’t reproduce it, is that on Tiger some people have reported that the Volume icon shows up over the video and stays there on open and doesn’t disapear, since I can’t reproduced it, even though I have a Tiger install, it makes it kind of difficult. So if anyone has any clues to reproducing it, send preferences files or whatever, I’d appreciate it. Continue reading "NicePlayer 0.96.X the Early Leopard"Sunday, February 25. 2007
> cd to ... version 2.1.1 (just a ... Posted by Jay
at
02:37
Comments (9) Trackbacks () Defined tags for this entry: cd to
> cd to ... version 2.1.1 (just a little update)So 2.1.1 fixes a bug when you have an apostrophe in the path for Terminal.app and iTerm plugins. Just a little shell script whoops. Therfore I recommend updating. Also, for 2.1.1, a big thanks to Brian Koponen who contributed a plugin that enables support for PathFinder. So now “>cd to …” can work exactly like “Reveal in PathFinder”,which is an applescript that is bundled with pathfinder but obvoiusly “>cd to” is a TON faster. update: Little bug in the build, the info plist didn’t have the excutable name macro replaced, which made launch services upset, and wasn’t noticeable from the Xcode since it would launch from the actual executable rather than the bundle. There is a new build out now. Continue reading "> cd to ... version 2.1.1 (just a little update)"Monday, February 19. 2007
> cd to ... version 2.1 (so soon?) Posted by Jay
at
05:41
Comment (1) Trackbacks () Defined tags for this entry: cd to
> cd to ... version 2.1 (so soon?)
So I had a few requests for iTerm support, one request for xterm support, and one request for glterm support. And I thought about it, it would probably be easy, but I didn’t want to add preferences to my little one click mini application—it’s a little gratuitous. I also didn’t want to make a bunch of versions of the same program. However… I then remembered there is a user interface in the get info window for enabling & disabling plugins inside a app package. So I thought it would be fun to create a use case in which someone actually would have a need to utilize this user interface in addition to fixing my issues with adding this features. I created a very simple plugin interface, and “>cd to…” only checks the built in plugin folder (as that is the only directory that get info deals with — it also means that duplicate copies can have different behaviors enabled). So to get support for iterm or xterm you just have to enable the correct plugin while disabling the others (FYI though, if you have more than one plugin enabled it will open windows in each enabled plugin) GLterm doesn’t look supportable for any automated directory change, at least as far as I can tell, so that’s why I only added xterm and iterm support. Another small detail to note, about my xterm/X11 plugin, is that the script to launch the terminal is inside the X11_xterm.bundle’s resource folder. So you can add xterm flags or even change the X11 terminal without recompiling. v 2.1
Saturday, February 17. 2007
> cd to ... version 2.0 (ported ... Posted by Jay
at
07:25
Comments (3) Trackbacks () Defined tags for this entry: cd to
> cd to ... version 2.0 (ported to objective-c)So I had this applescript, I wrote a long time ago, that i used for open a terminal window from the finder. It was a compiled applet that you could launch from the finder toolbar. The biggest problem (especially on my intel laptop) is that it’s kind of slow to launch before it executes. We’ll now with version 2.0, it is super fast, because it’s been ported to objective-c and sends apple-events by utilizing the appscript bridge on macforge by HAS. I have a compiled universal binary and source of this application on google code it’s MIT licensed, just to keep things simpler since the appscript framework is MIT licensed, and my code is less than 20 lines so I’m not concerned that it’s not a copyleft licensed. Continue reading "> cd to ... version 2.0 (ported to objective-c)"Monday, February 5. 2007
NicePlayer 0.95 the Shiny Penguin Posted by Jay
at
04:00
Comments (9) Trackbacks () Defined tags for this entry: niceplayer, open source
NicePlayer 0.95 the Shiny PenguinAlthough NicePlayer is still Mac OS X only and will probably stay that way, it’s now open source and what better animal than a penguin represent open source (even though it suggests linux)...plus NicePlayer’s icon and widgets are shinier (they literally have a sheen now) so that’s why this release is the Shiny Penguin1. 1 Previous releases were the Dark Horse and the Bad Wolf. Open SourceNicePlayer is tri-licensed under the MPL, LGPL, GPL. They are all copyleft licenses, MPL (Mozilla Public Licenses) is the least restrictive it terms of reuse. MPL is not what “GPL-haters” like to call viral as it only pertains to the licensed code that you are modifying and not the rest of your projects code that is incorporating it. Shiny ControlsI gave the controls sheen, they extend across the movie bounds continuously when the video is black it’s more obvious that they are controls and not strange floating symbols. SubtitlesI’ve also added basic external subtitle support, it was something I wrote simple parsers for a year ago, but never added a renderer, I kept on putting it off, so finally decided to put it in this release get some feedback. It’s already been reported that I don’t allow the encodings to be set for subtitles. When this was reported I figured it’d automatically work with UTF-8, but it actually automatically treats it as a c string unless a Byte Order Mark is at the front of the file. This typically doesn’t get added for UTF-8 because it can mess things up for some kinds of files (though it does not in this case). So the next version I will change it to the 10.4 api’s, which have been improved for dealing with encodings. We probably will stick to making UTF-8 and UTF-16 the only guaranteed way of your encodings working (with out BOM being necessary for UTF-8), because even if most subtitles out there aren’t Unicode they should be, and it’s not hard to convert (we may include a simple converter next release too), and that is preferable to adding a huge list of encodings in the preferences. PerianPerian has helped shape some of the features for this release. I’ve been compiling from source seeing what is in store for version 1.0, such as matroska support. My test file had chapters,subtitles, and alternate audio all show up in QuickTime Player. So I added menus so they can be used with the CoreVideo engine in NicePlayer too. Also the current version of Perian has FLV support, so we added an association for that file type so you can opened by double click. Virtual DVDsAnother program that inspired a feature was Virtual DVDs. Virtual DVDs allows you to wrap a VIDEO_TS folder in a bundle with the extension .vdvd which makes it double clickable from the finder to open in DVD Player. So I adopted their convention so you that can double click one of those same .vdvd bundles to open in NicePlayer as well. Scary TransparencyFinally last feature I’d like to note is that we’ve made it possible to make movie windows transparent. I’m not sure there’s a good reason for it (beyond a couple people asking for it), but then again it only can be invoked via applescript (so it doesn’t clutter up the GUI). We have a default script under the heading “Just For Fun”. RundownHere’s the official change list for 0.95:
Wednesday, April 26. 2006
STL-CocoaHeads Meeting (4/29) 2pm ... Posted by Jay
at
21:38
Comments (2) Trackbacks () Defined tags for this entry: cocoaheads
STL-CocoaHeads Meeting (4/29) 2pm CST - Topics: Quartz * HUD * LLVMSaint Louis CocoaHeads Meeting 4/29/06 2pm CST @ St. Louis Bread Company, 10740 Sunset Plaza, 63127 Meetings are casual and we don’t have to stick to topics, but here are some: * Programing with Quartz. I’ll be bringing my copy of the book to show, it’s a very good book. Although it’s focused mainly on C, it’s good to know what’s going on behind the cocoa drawing classes, plus you can always use C directly in Objective-C, and the concepts directly transfer. * Resolution Independence. This is a hot topic these days with both higher dpi and larger LCD screens becoming more and more prevalent. Tiger has apis to support it, although most applications aren’t ready for it. Cocoa gets a lot of support for free, but there are a few gotchas. Also lately there have been several interesting post in Surfin Safari about the need to deal with High DPI in web design and the ideas behind it transfer between that and cocoa ui design, not to mention as of Tiger your seeing more and more UI designed with HTML. * OpenHUD. * Real Universal Binary! LVM 1.7 includes a brand new llvm-gcc, based on GCC 4.0.1. This version of llvm-gcc solves many serious long-standing problems with llvm-gcc, including all of those blocked by the llvm-gcc 4 meta bug. In addition, llvm-gcc4 implements support for many new features, including GCC inline assembly, generic vector support, SSE and Altivec intrinsics, and several new GCC attributes. Finally, llvm-gcc4 is significantly faster than llvm-gcc3, respects -O options, its -c/-S options correspond to GCC’s (they emit native code), supports Objective C/C++, and it has debugging support well underway.Continue reading "STL-CocoaHeads Meeting (4/29) 2pm CST - Topics: Quartz * HUD * LLVM" Monday, March 27. 2006
5 reasons not to choose a Creative ... Posted by Jay
at
20:53
Comments (8) Trackbacks () Defined tags for this entry: open source
5 reasons not to choose a Creative Commons license for codeAlthough Creative Commons licenses are fine for many types of content, you should probably think twice before using it for code, and here are my top 5 reason why: 5. Creative Commons has summaries for actual software licenses as well. — It may only be GPL and LGPL, however, if the summary feature attracted you to Creative Commons and you liked the GPL or LGPL license but thought they were too long for the average person to read; it’s not a bad reason to switch from Creative Commons. 4. Creative Commons is pretty plainly GPL incompatible. — Even the least restrictive Creative Commons version has a clause that allows the original author to remove the original copyright notice from derivative works. This is a restriction beyond those offered in the GPL thus you can’t combine Creative Commons code with GPL. This shrinks your Open Source target audience in the area of code reuse and contributions, but that’s your decision. See also Debian-Legal Creative Commons Summary. 3. While the Creative Commons Attibution summary reads like the new BSD license, it’s a summary, not a license, read the actual license you may not like it. — If it turns out all you liked was the summary, you should have used the new BSD license, the MIT license, or the U of I license, they are all pretty much the same and you don’t have to worry about summaries (they are easy to read). 2. Not OSI approved, and for good reason. — Nothing in the license sounds remotely like it could apply to software, and it’s not very neutral in it’s description of covered works. Sure if you change a word here and there, maybe it could apply to software, but if you have to change words around to make it work, it’s a pretty poor choice for your open source software. See also Open Source Definition. See also list of OSI approved licenses. 1. The Creative Commons F.A.Q. tells you not to use it for software. — And I can’t think of a better reason than that. Continue reading "5 reasons not to choose a Creative Commons license for code"Wednesday, March 8. 2006Class ClustersRecently ElsewhereCocoa collection subclassing | Jens/Log disagrees Faux Collection Class Subclassing | AgentM and both have some bits on class clusters. AgentM’s is a rant about not being able to easily subclass collections, which I am sympathetic too recalling the joy of programing in smalltalk with its rich collection hierarchy. Jen’s is basically a response saying Class Clusters can be frustrating but their okay, just drink the koolade AgemtM. If you explain Class Clusters to someone, they makes sense, but when you try to use Apple’s or don’t know they are there, frustrating things can happen, and I don’t think that it’s really the class clusters fault. Making a composite class by wrapping or forwarding messages isn’t that much of a hassle, subclassing anything requires some knowledge of the class and Apple does document approaches to subclass class clusters, so I’m on the koolade camp on AgentM’s rant. However, I believe there are some bugs in the implementation of a few of Apple’s class clusters that cause many to think that all Class Clusters are evil. FUDI think there’s a lot of fear, uncertainty, and doubt in regards to class clusters. There really shouldn’t be though, Apple has a nice page describing the benefits of Class Clusters — Cocoa Objects: Class Clusters See a class cluster really is really just a sneaky use of a Factory Method (GOF 107) to instantiate a subclass from an abstract superclass. It’s sneaky because its hides it all. alloc, rather than actually allocating, returns a Creator (probably a singleton) and init actually allocates your real product and returns it. As demonstrated here:
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
id obj =[NSArray alloc];
NSLog(NSStringFromClass([obj class]));
NSLog(NSStringFromClass([[obj init] class]));
[pool release];
return 0;
}
2006-03-17 22:55:15.100 TestDataTypes[6105] NSPlaceholderArray 2006-03-17 22:55:15.101 TestDataTypes[6105] NSCFArray This is all good, because the classes returned are all subclasses and being the good little object oriented programers we are, we never check what a class actually is. Instead, when need to runtime type check it’s only to determine if it’s a subclass or if it responds to a method or protocol and that should be just fine with class clusters. If only using standard best practices when runtime type checking would keep us safe, unfortunately a few of Apple’s class clusters, mainly collection classes, are implemented in such a way that they break expected inheritance and expected polymorphism by advertising the wrong public interface for the returned private subclass (I don’t know if this was the case for NeXT or not, but I suspect it wasn’t). I’ll continue with some examples of where this implementation goes wrong. Dumb Responses from Class Clusters with Multiple Public SuperclassesHere’s a Pop Quiz: What should this statement return?
[[NSArray array] isKindOfClass:[NSMutableArray class]];
Ideally it should return false because when we see the documentation on these public abstract classes, NSMutableArray inherits from NSArray.
However, actually this statement returns true because the private subclasses returned for both public abstract superclasses are the same class inherited from NSMutableArray known as NSCFArray.
Okay so the purpose of having the same class is for easy toll free bridging with Core Foundation, but you know, as long as the instance variables are the same, is Core Foundation really going to care about new methods or a different hierarchy in obj-c land? I’m thinking no in theory, but I’ve not tested and I’m much happier not digging into the C-ness of Obj-C and someone can prove me wrong or right if they wish. However, if you really really wanted to keep the same private class type between the two interfaces, you can always fake the expected hierarchy by making isKindOfClass: call isSubclassOfClass: on the appropriate abstract superclass’s metaclass, and really no one would be the wiser, Core Foundation or otherwise. That was problem #1, and so you might be thinking to yourself well I don’t test for inheritance with cocoa programing often, most of the time I’ll test for specific methods out of habit, because cocoa programers tend to use informal protocols rather than having deep hierarchies anyway, so it’s not that big of a deal. So our second pop quiz: What is the result of this statement?
[[NSArray array] respondsToSelector:@selector(addObject:)];
NSArray is not supposed to respond to addObject:. I know that, you know that, but a program is generally going to believe respondsToSelector: over what we think, and respondsToSelector: says true. Of course if you run this line:
[[NSArray array] addObject:@“test”];
you get an exception. Think about when you have a bunch of objects in a collection with various types, some may respond to addObject:, some don’t, and you want to use runtime checking to manipulate them appropriately. How are you suppose to take advantage of polymorphism of this method in this case without being able to trust respondsToSelector:. There are simple work arounds to these problems, because they are only a handful of classes, but this is clearly a poor implementation of a class cluster, and I haven’t tested every class but I think all Mutable-NonMutable class hierarchies in Foundation on OS X suffer from this bug (Although GNUStep is A-OK from looking at the source), and I don’t think there’s a reason not to fix it, being that they are class clusters, all apple needs to modify are the private subclasses and people aren’t going to be using those methods currently because they return the wrong values that aren’t useful when wrong. Demonstration of Problem and FixabilityI did write a few Unit Tests to clearly demonstrate this problem with NSArray. It also has a second target called ProperClassCluster that overrides some NSCFArray methods (using categories) to fix responses in inheritance & method testing. In that target I also swizzled the addObject: method to provide an example of returning the correct exception when calling a method that doesn’t exist on an NSArray. A real fix wouldn’t require these hacks, but this works for demonstration purposes. Download ProperClassCluster.zip (20k) Continue reading "Class Clusters"Tuesday, January 31. 2006Yojimbo "Your effortless, reliable information organizer..."Yojimbo “Your effortless, reliable information organizer…: “Yojimbo (Via [GusMueller blog].) So Yojimbo seems to be just what I’m looking for and I’m glad Gus pointed it out. However, I’m not sure if it really is a competing product with VoodooPad as he suggests. YoJimbo seems more like shoe box where you stash stuff while VoodooPad is more of a notebook, something you are constantly changing, revising, scratching out, rather than just storing for later use. I could really really use Yojimbo, I like to stash stuff, but the reason I’m not going to buy it is that it has zero Automator or AppleScript support, WTF! What I really want to be able to do is store my PDF web Receipts and Categorize them in on step from the print to pdf menu. Oh well I guess I can wait, as it’s only version 1.0. Continue reading "Yojimbo "Your effortless, reliable information organizer...""Sunday, January 29. 2006Music Brainz: Picard and libtunepimpReleases: Picard and libtunepimp: “We released the 0.6.0 version of Picard today — this release fixes many bugs and adds the much anticipated mp4, mpc and wma plugins! Also included in this release are support for generating cuesheets, M3U, PLS and XSPF playlists….” (Via MusicBrainz Blog.) So it looks like official MusicBrainz client has mp4 support now, unfortunately the change log doesn’t mention any of the OS X problems being resolved. These problems are GUI related though, and otherwise the application Picard (python) and backend libtunepimp (c++) should otherwise work for OS X as far as the last time I tested. A Cocoa gui via the PyObjc Bridge might be a good option for some one out there wanting a full MusicBrainz client. iEatBrainz is a bit beyond resurrecting code wise (It does still work, but changes by Apple or MusicBrainz will certainly break someday in the future), while parts of it could be harvested, I’d suggest to anyone thinking about it to strongly consider a cocoa gui for Picard as it has a lot more features and with MusicBrainz fingerprinting up in the air it’s a much safer approach. Continue reading "Music Brainz: Picard and libtunepimp"Tuesday, December 27. 2005
Can Apple do Better than Objective-C? Posted by Jay
at
00:26
Comments (0) Trackbacks () Defined tags for this entry: obj-c, programming
Can Apple do Better than Objective-C?Can Apple do Better than Objective-C? a language battle royale between C# and Objective-C. I can’t believe after Christmas I get back onto a computer and find out I missed this. I want to jump into the melee but have to go to bed to go to work. But man, this is what I was hoping would have happened at EAA (Rentzsch almost did it). I think a lot of people are in denial about Objective-C having major short comings. Objective-C is a ton better than C++, harder to compare to C# and Java just because of the static vs dynamic typing philosophies, but very clunky compared with Ruby, Python, and Smalltalk. Objective-C is a very good object oriented C and so if you want C there’s nothing better, but if you don’t care about C it can be an exhausting language because you will be falling back to C a lot (but a lot of that maybe more due to lack of libraries). Update: Eh, too many people post garbage, ended up with not very interesting comments. Continue reading "Can Apple do Better than Objective-C?"Friday, December 23. 2005
In Soviet Russia you don't second ... Posted by Jay
at
11:49
Comments (0) Trackbacks () Defined tags for this entry: cocoa, programming
In Soviet Russia you don't second guess Apple, Apple second guesses YOUFrom ridiculous_fish » Blog Archive » Array: “Don’t second guess Apple, because Apple has already second guessed YOU. In a good way, of course.” I find the quote highly amusing, and the content of this post on CFArrays illuminating (and I’m just being cheeky with my post title). Continue reading "In Soviet Russia you don't second guess Apple, Apple second guesses YOU" |
QuicksearchStatic PagesCalendar
Syndicate This BlogShow tagged entries |
|||||||||||||||||||||||||||||||||||||||||||||||||
