August 2011
1 post
6 tags
Alternative Cities
As a software developer, I’m constantly hearing people talk about California. Silicon Valley and San Francisco are the places to be. And increasingly people are talking about New York as a tech city as well. These are wonderful cities for technology. There are tons of startups, established companies, venture capitalists, like minded people, and constant tech events. Add that to the beautiful...
March 2011
1 post
5 tags
A Worm in My Apple
I’ve had this uneasy feeling recently. I keep thinking that Apple is on the verge of trending toward unfavorable. Don’t get me wrong, I still love the Apple products that I use. I still think they’re a great company. But with the decisions Apple has been making recently, they’re finding themselves on the edge of a very slippery slope.
Members of the Apple community have...
January 2011
1 post
6 tags
Creating Software
For the last few years, I’ve gone to work and written code, discussed architecture, attended meetings, etc. The job description has always been roughly the same – I’m a software developer. The job has always been different, though. The quality of software, the focus on design, the release process have all differed. It all boils down to one simple question: For whom do you create?
As...
November 2010
1 post
5 tags
One versus Many
From the start you should know — are you creating a company with a team or do you plan on keeping it a one man shop? This is a very personal decision but if you don’t decide up front, adding people to your team will be significantly harder. You’ll have to determine how your team will communicate, how to handle payroll and taxes, how to hire talented people, etc. If you start on your...
September 2010
1 post
3 tags
Your Perfect Job
Find
You’ll find it randomly. There’s no telling how your perfect job will materialize. You might find it from a job posting. Maybe it was a website that you ended up browsing some day. How you found it doesn’t matter, but when you do, your thoughts will be:
This is where I want to work.
It’s my dream job.
I have to get it.
I need this job.
I’ll do...
August 2010
1 post
6 tags
Not a Startup
It’s been a year and a half now since FadingRed became a registered LLC. A year and a half — that’s not very long — you must be a startup, right? No.
The term startup is usually used to describe young companies in technology. In general, startups have relatively small teams and a reputation for being fun, hip companies where people love to work. This is exactly the kind of...
February 2010
1 post
Hg Init →
A Mercurial tutorial by Joel Spolsky
January 2010
3 posts
Steven Frank:
We learned about computers from the inside out. Many of us became interested in computers because they were hackable, open, and without restrictions. We worry that these [new] devices are stifling the next generation of programmers. But can anyone point to evidence that that’s really happening? I don’t know about you, but I see more people carrying handheld computers than at any...
Alex Payne:
The thing that bothers me most about the iPad is this: if I had an iPad rather than a real computer as a kid, I’d never be a programmer today. I’d never have had the ability to run whatever stupid, potentially harmful, hugely educational programs I could download or write. I wouldn’t have been able to fire up ResEdit and edit out the Mac startup sound so I could tinker on the...
Using malloc to Debug Memory Misuse in Cocoa →
Bill Bumgarner gives great advice and examples for tracking down leaks in Cocoa apps.
December 2009
3 posts
Dangerous Cocoa Calls
→
Some of these you probably wouldn’t even think about being dangerous while using them. Great list.
Joel Spolsky writes:
But the minute you begin to rely on outside vendors, you expose yourself to their people, some of whom inevitably just won’t care enough or know enough or have the right skills to deliver the awesome experience you’re trying to deliver.
This is one of the main reasons why I dislike the ideas of consulting and outsourcing. The result is that companies may be...
Core Animation Target-Action Layers →
Great little tip for handling actions after animations complete.
November 2009
1 post
Memory and thread-safe custom property methods →
This is an excellent post by Matt Gallagher on implementing custom properties. I wish it had been around years ago when I was first learning how to implement accessors. The hidden Objective-C runtime methods are an excellent way to simplify the process as well.
October 2009
7 posts
Jason Fried on making money:
On day one, a bootstrapped company sets out to make money. They have no choice, really. On day one a funded company sets out to spend money. They hire, they buy, they invest, they spend. Making money isn’t important yet. They practice spending, not making.
This is something universities should teach entrepreneurs. Getting funding is one valid way to start a...
Dave Dribin’s post on Xcode unit test bugs reminds me why I switched over to GHUnit. GHUnit adds one major enhancement to unit tests in Xcode — it allows you to debug them. Newer source builds allow you to run a subset of tests in the GUI. It took hardly any time at all to switch over to GHUnit from Xcode’s built in OCUnit.
Looking at the perspective from which he is discussing Finding the Time, Fraser Speirs notes:
When you’ve spent ninety hours on a two-character fix, there are two kinds of personality that come through. The first says “That was agonising and pointless”, the second says “That was great! What’s next?”.
I think this is an important concept. Day after day of...
Designated Initializers
Objective-C uses the convention of designated initializers to handle an instance’s initialization. The conventions set forth work very well in simple situations, but it seems that there are a few places in the Cocoa framework where the convention begins to break down.
There may be others, but two main problem spots are NSCell and NSCoding. The following discussion assumes that...
Choosing Technologies
The first time that I worked with Ruby on Rails was in 2005. Prior to that, I had been doing most backend web development in PHP. Needless to say, as soon as I tried Rails, I was hooked.
When choosing between Rails and PHP, it was a no brainer. Rails was easier to work with and I was able to write better code in less time by using it. What happens when it’s not such an easy choice,...
Defensive Programming
Mike Ash discusses defensive programming:
Overall it’s largely a matter of attitude. You need to get used to asking the question, “What if it fails?” It’s easy to get fixated on simply making sure that the code works. After all, that’s hard enough as it is. But as you’re writing the code, take the time to ask, “What if it fails?” The result will...
Cost of Testing →
Great post by Miško Hevery on the cost of writing test code.
September 2009
5 posts
Core Animation and GC (Update)
Previously I wrote about Core Animation and Garbage Collection and pointed out a bug when using the two together.
This appears to be fixed on 10.6.
If you’re still using 10.5, one way to fix the problem is the following code in your custom view:
- (void)viewWillMoveToWindow:(NSWindow *)newWindow {
[[NSGarbageCollector defaultCollector] collectExhaustively];
}
This will block the...
Write Your Own Tests
Here it is in short… Software engineers must write automated test cases. You can have your QA group, too, but a quality assurance does not mean people who write tests because your engineers are too lazy.
I’ve worked for a few small software groups. Some had QA, some didn’t. Sometimes the QA group did stress, load, and unit testing. Sometimes they did manual testing all day. ...
I think Mike Ash makes a good point on iPhone development:
My advice? Pick another platform to program for. The Mac is pretty nice. If you absolutely must develop for a mobile platform, try Android. You probably won’t make any money at it, but on the other hand, you probably won’t make any money at iPhone development either, and at least you won’t have to go begging to Apple...
A Guide to Branching in Mercurial →
Great overview of branching options in Mercurial with a few comparisons to the way Git does things.
In an article about Craigslist, Gary Wolf writes:
By eliminating marketing, sales, and business development, craigslist’s programmers have cut out all the cushioning layers that separate them from the users they serve, and any right they have to teach lessons in public service comes from the odd situation of running a company that is directly subservient only to the public. Here’s...
August 2009
1 post
Duplicating output to a file
I spent some time today trying to figure out the best way to duplicate stdout and stderr to a file. Note that I don’t mean redirect, but rather duplicate.
The solution is relatively simple, but the code is a little more difficult. Basically, the process needs to fork a child process to handle writing to stdout and the file. The tee command already handles some of this, so the simplest...
July 2009
5 posts
If you can’t tell me why your favorite language sucks, you don’t know it well...
– What is the best programming language for web development and why?
KVC Array Accessors
KVC array accessors are notoriously a pain to implement. Really they are just wrapping a bunch of methods around a mutable instance variable, so every implementation is the same. All that’s different is the property name. It’s a shame that Objective-C 2.0 didn’t include an @property and @synthesize for to-many relationships. Until that happens, here’s a way to get...
Type Specifiers in C →
In part 3 of a series of type specifiers, Mike Ash dives into how to use the volatile keyword in C. This is a great explanation of the volatile keyword and how it should be used.
The Mac has been an exciting platform for a while now because developers have been making fun applications. They tend to look good and work well. In an age of the beauty of OS X, it’s important to remember that the feel of the application is important, too. It’s not just about making things look good.
Now, if you’ve paid attention to usability, the commonly-used term is...
How to Migrate Time Machine Backups to a Larger... →
I wish Uli had written this a few weeks ago since I just bought a new backup drive. Seems like his steps would work nicely.
June 2009
2 posts
Gruber suggests that more companies should be secretive like Apple:
Yes, Apple is far more secretive than most companies, but they’re also far more successful. Measured by profit and revenue and growth, wouldn’t it make more sense to argue that most companies should act more like Apple, rather than the other way around?
I really like the idea of more companies challenging the status quo. ...
May 2009
5 posts
Uli outlines a good number of defensive coding techniques in Objective-C. I wouldn’t say the list is exhaustive, but there’s really nothing to disagree with. Following his suggestions will help avoid a bunch of difficult to track down bugs.
Uli makes a very good case for using version control even when you’re working solo:
There is a common saying among programmers (I’ve mentioned it in my previous posting): You always program as a group of three programmers: Past You, who is a moron, Present You, who is average, and Future You, who is a genius. While this is generally used as a rationale to write readable,...
Invoking forward →
Using proxies is a great method to save a bunch of repeated invocation code when working with multiple threads
Steven Frank:
For now, desktop computers still have that freedom. If you can dream it, you can write it, and ultimately distribute it. But not the iPhone or iPod. And I fear that sets a dangerous precedent that will one day spread to the Mac desktop.
I have mixed feelings about the App Store, but this fear is well founded. Apple’s current practices with mobile apps would indeed be...
April 2009
8 posts
On teens:
40 percent of them send messages to online social networks daily. But only 29% of them reported that they actually spend time with friends in person on a day-to-day basis
It’s kind of scary to think about what future social interaction will be like.
Source — Ars Technica
Attention to design details implies that the same care and attention has been...
– In Defense of Eye Candy
Business Plans a Waste of Time →
I recently had a conversation about whether writing a business plan was a worth the effort. The conclusion was that a traditional business plan wouldn’t add much value for a bootstrapped startup.
It’s interesting to hear that it’s not worth it for startups looking for investors either.
via Signal vs. Noise
VLAs are evil →
This just goes to show that understanding implementation details is important and useful
cufon →
This looks like it might be the first good solution that I’ve seen for font embedding. The rendering code is small at 14k. Two quick conversions show fonts come in at 16-30k for basic latin characters. I got it down to 8k for just lowercase glyphs.
Now we just need Google to host the code and some fonts so they’re cached for everyone. :)
via Doug Bowman
Password Input Fields
For some reason the banks of the world seem to think that allowing your browser to save your password is insecure. I’ve never really understood this. Banks are one example, but there are various sites that don’t allow you to save your password. Most of them involve money in some way — utility companies, phone companies, the list goes on.
Not allowing saved passwords leads...
Wrong Tomorrow →
I look forward to this site growing (via John Gruber)
March 2009
20 posts
Dan Benjamin on Offices and The Creativity Zone:
The corporate world rewards based on perceived productivity rather than accomplishment.
This really struck a cord for me. It seems at many companies (big and small), there’s this unwritten rule that you should arrive and leave work around the same time as your manager (if not before and after).
At the start of their careers, people...
How is it that GM can run ads like this when they’re planning to drop Saturn?
Introducing JSTalk →
Thank you, Gus, AppleScript must die!