Archive for June, 2010

Transmit 4.0.5 is Out – Major Update

Thursday, June 17th, 2010

Transmit 4

Well, you can't tell from looking at it, but the update for Transmit 4.0.5 has a boat load of new things. It's amazing to look at the list - really. There's more support for OS/400 - like that's a major issue for Mac users... but I guess it's just enough for them to want to make sure it makes it in.

Very impressive. Love this product.

Interesting Look for the NSTextField

Thursday, June 17th, 2010

xcode.jpg

I saw this post on a new Cocoa development weblog, and it looks very interesting: a new rounded-corner NSTextField: SSTextField. The problem with much of Cocoa programming is the GUI components that Apple uses in it's high-end apps (in this case, Safari) are custom to Apple and don't make their way into Interface Builder for quite some time. Sure, eventually, they'll get there, but if you want to have that cutting edge design, you're on your own.

Anyway... someone decided to share what they had done with their app, and the result is a new look to NSTextFields:

SSTextField

Interesting view, though... I might use it in my CryptoQuip solver for an interesting look. Then again, I really need to fix up the initial legend drop-downs... so much to do...

iTunes 9.2 is on Software Updates

Thursday, June 17th, 2010

iTunes.jpg

This morning I noticed that iTunes 9.2 is out on Software Updates, and contains all the additions for iOS 4 devices - including the new iPhone 4, that I should have in a little over two weeks. Golly... that's a lot longer than I thought when I ordered it yesterday, but I guess I'm just excited about this guy.

Anyway, they made improvements in the thumbnails of album artwork, which is all fine by me, and a few other things - like iBooks and PDFs for iOS 4. All good, and glad to see it.

Attacking a Quarter Million Lines of Code

Wednesday, June 16th, 2010

I'm trying to get a little start on the reformulation of the Magic School Bus project and I've run into the 800 lb. Gorilla in the project - the 277,000 line header file with implementations. It's big, and I need to really attack it because it's the client-facing component of the project, and needs to stay completely unchanged as I go through this redesign so that the several hundred applications that use this in The Shop don't have to be retrofitted with the changes.

This doesn't mean I can't make new and improved interfaces and methods, I just can't change the functional behavior or interface that exists now.

So I'm trying to come up with a way that this quarter million line file can be broken up into real headers and real implementations and once class per pair, at that. Then I'll throw it all into a directory in the project, make a shared library out of it, and it'll be far far easier for folks to use.

Doesn't mean that it's going to be easy to do, just that it's not conceptually hard. Just a lot of work.

Very Funny Imagined Monologue by Comic Sans

Wednesday, June 16th, 2010

It's not often you see something so well thought out as this imagined monologue by the font Comic Sans. It's really a classic. This is just too good:

People love me. Why? Because I'm fun. I'm the life of the party. I bring levity to any situation. Need to soften the blow of a harsh message about restroom etiquette? SLAM. There I am. Need to spice up the directions to your graduation party? WHAM. There again. Need to convey your fun-loving, approachable nature on your business' website? SMACK. Like daffodils in motherfucking spring.

while I'm not a huge fan of the swearing, in this case, it's just how I'd imagine Comic Sans would act after already establishing itself as the fun-loving font. Like Betty White in Lake Placid - amazing dialog from that woman.

So have fun, Comic Sans! I love it.

And thanks, Gruber... Daring Fireball is a fantastic site.

Mac OS X 10.6.4 is on Software Update

Wednesday, June 16th, 2010

SnowLeopard.jpg

Late last night, I upgraded Liza's MacBook Air to Mac OS X 10.6.4 on Software Updates, and this morning, it's my MacBook Pro's turn. It's something I've been looking forward to based on the notes and comments I've heard about what's in it. I've heard of changes in OpenGL and OpenCL, but also in other subsystems in the OS.

I noticed that Mail.app got a few changes as it re-indexed my mail when it started for the first time. That's a nice sign. In any case, it's here, and I have it - Great!

Ordering my iPhone 4 – Stampedes are Never Easy

Wednesday, June 16th, 2010

iPhone 4

Yesterday I tried several times to order an iPhone 4 from the Apple Store. It was always a problem with the AT&T account verification. It was quite the sight. I wasn't really surprised because of the number of iPhones out there now, and all the features that are in the iPhone 4 certainly make it something you want to have - if you can drop the $500 for it.

Yeah, my contract isn't up, but it doesn't matter, I've had enough of the contract extensions that I'd like to just get to the point that it's not something that I have to deal with. Plus, I'm lucky enough to be able to afford it.

Sadly, the initial lot of the Launch Day iPhone 4s was sold out by 4:30 yesterday, so even if I'd have gotten in later in the day, it wouldn't have mattered. Still, it's impressive to see the demand for the iPad and iPhone 4 as strong as it is. Amazing is a word that comes to mind.

So this morning, I ordered one - a 32GB Black one, and it should arrive some time around July 8th. As long as I have my 3GS, it's OK to wait, and I can upgrade it to iOS 4 when it gets here in a week or so.

Exciting times... can't wait to get it.

My Introduction to the Magic School Bus – Yikes!

Tuesday, June 15th, 2010

Crazy Lemon the Coder

Working on code has to be a continual job. Especially if it's an evolving product. You can't just sit back and assume that once it's written, it's "done". It's not. Certainly, there are shared libraries that get to the "done" state - for components. But for a product where features are being added, sources are being added and removed, it's just next to impossible to believe that something written years ago is still going to be relevant and useful years later. It needs to be looked at, checked, and where necessary, updated.

Case in point today was the codebase for an app I've been asked to work on at The Shop. The functional description of the project is pretty simple - get data from some network feeds - like multicast or direct tcp data feed, and distribute it to 29West in a manner such that it can be subscribed to easily, and then the 29West data feeds terminal processes that decode it and serve it up on tcp to the clients.

It's a pretty simple message router with a pub/sub content. Not trivial, as it needs to be fast, but not conceptually that hard. Certainly, I've worked with some guys that would say that it's a simple receiver that rebroadcasts on 29West in a set of channels and the receivers just get it off 29West. I happen to like that there's a terminal app and clients don't hit the 29West feed directly - it allows the replacement of 29West in the event that it comes to be a problem.

In any case, this codebase is C++, but it's written as a lot of C with structs and a few classes, but very little really good design. There are a lot of odd little things based on the source control method - and it's a horrible source control system. There are more little odd things they put into the project for NetBeans. For C++?

OK, I can see people wanting to use an IDE, but why put the IDE artifacts in the SCM? That doesn't make sense. If you want to see something slightly different than I do, then that's OK, just don't force me to look at it that way, too. I don't understand that at all. But that's not the worst of it.

I can see using C in C++ for speed. But it's really a fool's errand. Face it, once the method call is made form the vtable, the execution of any one method's code is really the "speed of C". The issue some may take is that the using of the vtable is more costly than the jump table of C - and in that, they are right. But the time of using the vtable is only on the call invocation, and not in the execution.

Time-critical sections should be within a method, and not calling methods. So in that, you're going to get the performance you want when you need it, and the convenience and design simplicity of C++ when you need it.

But that's still not the worst I've seen in this project which I'll call The Magic School Bus, no... there is even worse.

I was reading the code, trying to get an understanding of what goes where and how it all works, and I ran into biggie.h... it's currently got 277,695 lines of C/C++ code. Yeah... over a quarter million lines in one header file. It's really next to insane. Because it's got the implementation with it, every single inclusion of this file essentially statically links in all this code. It's crazy.

Now I will say that the code isn't horrible, it's a bunch of messages, and it's decent, but it's not using any subclassing, and I'd sure like to do that. It's not using any really good designs, other than it does have a nice suite of operators built into each of the messages. It needs a serious re-write - but there's the rub: if the comments are right, the code is generated by a perl script.

Amazing to me that they didn't make it a pair of files for each message - if they are generating the code from perl, it'd be easy. Make a header file, make an implementation file, and then make a directory where they all co-exist and build them into a shared library. That's what I'd like to do, but I can't make these kinds of changes to the codebase without really understanding the implications. And the implications of this could be severe.

If the clients to the Magic School Bus are expecting to get the complete functionality by just including the header file, and not linking anything, then they need it to be this grotesque blob. But if we can move them to something better, it'll make the maintenance and support so much nicer.

I'm just hoping that we can make this entire message library a lot cleaner and nicer. There's no reason for a 250,000+ line header file in decent designs.

Cyberduck 3.5.1 is Out

Tuesday, June 15th, 2010

This morning I noticed that Cyberduck 3.5.1 is out with a few bug fixes that happened to be serious enough to crash. Ouch. It was an easy update, but with Transmit 4, I've slid Cyberduck to my #2 spot. Good, but not as polished as Transmit.

Coda 1.6.11 is Out

Monday, June 14th, 2010

Coda.jpg

This afternoon I got a tweet from the guys at Panic about a new release of Code 1.6.11 that fixes the problems with Safari 5.0, and imports the favorites from Transmit 4. Unfortunately, soon after seeing this, they pointed out that the Transmit import only works if you had Transmit 3 and paid for it. So still a few wrinkles to work out, but they are getting there. Thankfully, I had Transmit 3 so I'm OK - Whew!

As always, it's great to see them working on great products making them better and better.