Awesome under the hood, but
a disappointment in the UI department. It's a very odd thing to see
Apple be the one to blatantly copy features from someone else.
Labels: news
Google is out with their latest Earth. This time, the highlight is underwater exploration. I don't like to diss on what was probably months of a lot of hard work but Google Earth 5's undersea exploration features do not impress me at all. In addition, it still maintains the very clunky looking Mac OS X UI that it has carried since day one.
Labels: news
Very cool. Captures each on-screen element into a separate layer in a Photoshop file.
Labels: news
A few months ago I tried using Clang's excellent Static Analyzer for an iPhone project but it sadly didn't work for some reason. Recently, I tried again with the latest release (1.3.7) and it worked! Since I'm currently working on a large project and just know that I didn't remember to balance all those hundreds of retains with releases, I knew this would come in handy, and it did dig up 10 or 11 very good retain/release errors which were really easy to fix but really hard to find. On the iPhone, these bugs are even more numerous because one tries to avoid autorelease as much as possible, since it's more expensive. And having something like Clang finds bugs for you for
free and within seconds is indispensable.
Labels: news
HandBrake is no longer limited to DVDs: it will now accept practically any type of video as a source. This massive enhancement was achieved by tapping into the power of libavcodec and libavformat from the FFmpeg project.
The almighty DVD to H.264 encoder just got mightier.
Labels: news
It's very sad to see Apple turning the App Store into this procrustean system, in which developers, after having working hard and long on their applications, can't even have it pushed out to users and let
them decide whether it's worth using or not.
Labels: news
Multiple Item Editing in iTunes 8
One of the features that really makes me a happier human being in iTunes 8 is the inclusion of a much-needed revision to the Multiple Item Information box which now allows all those item attributes to be edited that were added over the course of iTunes 7.0 through 7.7, but which never made it into the Multiple Item box. See screenshots
here and
here.
On the other hand though, I've found this odd bug in iTunes 8: if I close the iTunes window, switch to another app using Cmd+Tab and switch back using Cmd+Tab, instead of nothingness, I see a big white square. Oh well…
Labels: news
An immense timesaver that has answers to those annoying parts of Objective-C that you frequently encounter if you're making any kind of comprehensive application but which are egregiously non-intuitive and it would take you ages to find them on your own. The
NSScrollView quickie about responding to a scroll view's scrolling made my day.
Labels: news
From the bottom of my heart, I hope that, for heaven's sake, this be a preparation for April 1, 2009.
Labels: news
Wow, these guys just don't stop. The amount of features they've added between Beta 1 and Beta 2 is impressive beyond measure. Meanwhile, we haven't heard a peep from Parallels.
Labels: news
Finder's Path Bar
I don't know how long this has existed (maybe I've just been blind), but the Finder's been hiding this excellent Path Bar which shows up at the bottom of every Finder window and basically shows a hierarchy leading up to the folder you're currently in. Activate it by choosing the "Show Path Bar" option from the View menu.
Labels: news
iPhone 2.0: Remote
The Remote is one of Apple's own applications rolled out for free over the App Store for the new iPhone software and it is absolutely brilliant, with an amazing user interface and flawless integration. It's the best iPhone application I've used yet and I just love it! It sets the perfect example of an iPhone app. In this particular case, only Apple could have made the integration really seamless, because it required some changes in iTunes as well, so this Remote only works with iTunes 7.7 and later, if I'm right.
iPhone 2.0: Hindi
Even though it doesn't join the letters correctly, apart from making me extremely happy, it finally means that, using with iTunes' "Sort" fields, I can get rid of the Latin characters in my Hindi song name titles.
Adobe recently came out with a beta of Flash Player 10, which is supposed to bring major speed enhancements to the Mac version. Although I will wait until the final version before installing it, this would be a welcome change indeed.
(Via
TUAW)
Labels: news
It's got to be bad when the New York Times starts going public about how bad your OS is:
Beginning as a thin veneer for older software code, it has become an obese monolith built on an ancient frame. Adding features, plugging security holes, fixing bugs, fixing the fixes that never worked properly, all while maintaining compatibility with older software and hardware — is there anything Windows doesn’t try to do? [emphasis added]
This is, I feel, the biggest problem with Windows – it tries to be everything for everyone and hence has very little room to move around, because there are just so many constraints binding it.
Labels: news
In all the times I've switched computers or reinstalled Mac OS X since Leopard came out, I've noticed that Time Machine is, in general, not very happy about letting the backup volume make the smooth switch as well. Basically, if you were making regular backups on machine X, then bought machine Y and restored your backup onto Y, when you hook up your backup volume to Y and start doing a backup to the same disk, it's either going to tell you that the backup disk wasn't found or start doing a full backup all over again. Currently the only way to avoid this is to follow the instructions in the
linked article, which I followed (but not to the step because a couple of the commands didn't work) to resume using my old backups with my new computer. Although this is probably not a super-common issue, I believe that it's a big hassle for people switching computers and that there should perhaps be something in the Time Machine options that let's you sync with a pre-existing backup volume. (Apparently, Time Machine distinguishes between computers based on the Computer Name and the Primary Ethernet Address.)
Labels: news
Firefox 3 is out. Go download it and help them set their world record. The biggest addition for me is (finally!) the addition of Hindi viewing and composing support. I tested it using the Hindi Wikipedia as well as using Blogger's Indic Script Transliteration tool and it works fabulously. Firefox can still not be my default browser due to its non-native look and feel but it's good enough for most people.
Labels: news
Reflections on WWDC08
Now that WWDC08 is over, I thought I'd take a little time to look back at what happened from my point of view in terms of new information, and no, I probably won't go into detail about how, although they had free Odwalla, the food provided there was frankly speaking quite shitty.
Garbage CollectionI can't remember a single session I attended in WWDC08 that didn't have at least a slide or a mention of GC – it was everywhere. This is something Apple seems to be pushing big time in the yet-to-be-released Snow Leopard and wants developers to adopt it. However, GC is not the panacea that it kind-of is in Java.
The first factor to consider is the "opt-in" nature of GC in OS X, which means that any application can choose to run in GC or non-GC mode. And regardless of which mode an application chooses, any frameworks it uses, any plug-ins that hook into it, must also be capable of running in either mode as required. This means that framework/plug-in writers have to deliver a
single code base and a
single binary that supports both GC and non-GC. The Apple frameworks already do this.
The second factor to consider is that if you as a developer think that for every kind of creating-something-that-needs-to-be-freed-later function call, you can simply omit the corresponding 'free' call, it's far from the truth. GC applications do eliminate a lot of tedious memory management, but they aren't simply programs without the memory management calls – or at least not in Objective-C 2 – and getting an existing application moved over to GC might not be without its bugs (there can, ironically, even be memory leaks with GC on when there weren't any with it off).
Thirdly, even Apple admits that there are certain applications which should not be GC'd because they require the assurance that nothing else is running that could even potentially slow down performance for a millisecond and should thus manage their own memory in their own complicated ways. In fact, Apple itself hasn't yet ported most of its applications to GC. One of the few it has is Xcode 3.
Finally, GC in Objective-C 2.0 is optimized for Objective-C objects and that means that unlike porting pure Objective-C code over to GC, porting C/C++ code base might prove to be either infeasible or even impossible. Even in GC mode, for example, any memory allocated using malloc still needs to be released using free and CFRetain calls need to be matched with CFRelease calls respectively – the application maintains a separate malloc zone and a GC zone on the heap.
However, although this prevents any large developers with giant applications (such as Adobe or Microsoft) from switching to GC for many years to come (hence Apple making this opt-in, I feel), GC is a great boon to both new developers who don't need to worry about memory management from the get-go and to existing developers with comparatively smaller code bases who can transition to GC in their next release cycle. And Apple is providing some magnificent incentives for these developers to do so. For example, GC is going to be six to ten times faster in Snow Leopard, not only compared to Leopard GC but also to traditional malloc. And to developers, this gives them a concrete incentive to transition their code over to GC, in addition to cleaner, more manageable code. And, from my point of view, this is as good as it gets because I get to continue along the path of not including memory management code in my application while having my already-fast application receive a free speed boost come Snow Leopard some time in 2009.
MultithreadingBeing able to spawn off multiple threads to do their bidding more efficiently in parallel has been something that programmers have been able to do for many years now. However, in order to achieve this, they have to significantly alter the structure of their existing single-thread code base and endure much toil while doing so. What is Apple doing about this? Apple is not providing a magic pill to solve one of the very basic problems of multithreading, i.e., deadlocks, however, it is making multithreading a lot more easier and accessible in Snow Leopard, in which developers can designate certain bits of code to run inside "blocks". By specifying some code inside a block, the developer tells the OS that that particular piece of code can be run in its own thread if the need arises. Thus, when the application runs, Apple's new "Grand Central Dispatch" runtime decides whether it's economically viable to spawn new threads to run the code (based on system load and on the number of cores on the machine), and if it is, it makes the new threads, but also cutting them back when it needs to. This basically means that developers never have to bother with ever manually spawning threads and can instead just make their code thread-compatible and let the OS take care of squeezing the most performance out of it.
Rosy picture aside, the two major caveats that come with using blocks seem to be that (a) you still take care of deadlocks, etc. in your code and (b) the syntax for creating and using blocks looks ugly as fuck. If you've seen function pointer syntax in C++ and shudder at the thought of ever writing another one, think that except worse.
Deeper into Objective-CThis is just personal experience by my going to WWDC for the first time but it's like I've discovered this whole hierarchy of programming interfaces beyond the "NS" frameworks that were basically all my world until last Sunday. I find that I now understand a lot better how the Mac OS X programming stack works and how many layers there are and where the boundary is between Cocoa Animation, Core Animation and OpenGL, etc. And I feel that even though I won't be using much of the programming API beyond the NS-level classes, it makes me more at peace knowing what's going on underneath. Also, my definition of what's considered "easy-and-straightforward" has been tickled a little because people at WWDC throw more into that category than what I would normally allow.