The Omni Mouth
: "I want to say that's sort of crazy, except our own CEO Ken Case created a terrifyingly accurate faux iPad using a 3D printer. It-well, it even has a little Omni logo on it. And a 30-pin dock connector. And... look, it's just very, very realistic and I'm a little worried about how much sleep everyone is getting, okay?"
- I think I need a 3D printer. This is a great way to put together a UI, just move a bunch of paper around. I remember our UX team doing this at Visio. They'd do usability with pieces of paper. Great stuff.
Labels: Design, Development, iPad
: "What I find most interesting is the inclusion of the iWork applications. I suspect that we'll all benefit from working in Pages, Numbers and Keynote without the distractions of the web, Twitter or chat. And in the long run, we'll prefer it."
- Short, but sweet, observation from a man that has embraced both the Mac and the iPhone as developer and user.
Labels: Apple, Development, iPad, Mac
: "It's an unfair fight. We know exactly what the web can do, and we have a good idea of what it plans to do, thanks to its (laudable) open standards. But none of us has any idea what the next iPad, iPhone, Wii, Xbox, TomTom, whatever, will do. Don't get me wrong: the web is excellent at innovating, but it innovates for publishing and social interaction. It doesn't innovate on desktop UI or device integration, the very areas where brilliant desktop applications shine. And it innovates, as I have already suggested, in the art of catching up."
- I know the web is great for a lot of stuff, but the client/desktop is still king because it can completely embrace the environment in which it lives. The web experience has to live inside a lowest common denominator shell, the browser.
Labels: Applications, Desktop, Development, Web
: "I see many people asking for SQLite tutorials around, and since I am using SQLite for the next part in the Advanced RSS Reader Tutorial, I thought I would write up a quick tutorial on using SQLite with the iPhone SDK."
- Now, couple that tutorial with Gus Muller's FMDB
and you're off and running.
And yes, I am aware of Core Data. I even have Marcus Zarra's Core Data book
, just need time to dig into it. I'll definitely be using that down the road some time.
Yes, there's a Mac application in my future, I can smell it.
Labels: Apple, Cocoa, Development, iPhone, Objective-C, Open Source
This simple example assumes a few things.
1) _shrty is a member variable.
2) shrtySvcWithName - We're creating a service instance that doesn't require a name or password. (E.G. IsGd)
3) self implements the ShrtyDelegateProtocol protocol.
First things first.
Shrty.h will include everything you need to use Shrty.
Next you'll need to create a ShrtySvc
instance. The code below illustrates how you may choose to do that. In this case we're passing the service name, Is.Gd
, into a helper method to create our instance. There are constants defined in ShrtySvcConst.h for all the services supported by Shrty.
// Go create an instance of the IsGd service.
if (nil != _shrty)
NSString* urlToShorten = @"http://rob.crabapples.net/";
// Shorten the URL.
In the example above I've removed some code for brevity's sake. Another thing to note is use of the helper method _createShrtyInstanceFromServiceName
, included below. This method is part of ShrtyAppController.m, you'll find it in the Shrty source
, it's part of the test project.
_shrty = [ShrtySvc shrtySvcWithName:serviceName userName:nil userPassword:nil delegate:self];
If all goes as expected you should expect to receive a callback to your didReceiveShortenedURL
- (void) didReceiveShortenedURL:(NSString*)shortenedURL
if (nil == shortenedURL)
NSLog(@"GOT A NIL RESULT, DOH!");
Then you can do with that URL what you please, post it to Twitter, or Facebook, or whatever.
Labels: Cocoa, Development, Objective-C, Open Source
: "Ship a mac software product. Being a self-employed contractor is wonderful compared to being an employee, but being a software vendor has always been the goal. Three years from now I'd like to be self-sufficient with my own software, and the first step is to release a 1.0 product."
- Matt has contributed some really great code to the Mac community. In fact his Open Source contributions inspired me to write some small, free, source code
and give it to the Mac community.
Good luck Matt, we'll be looking for some cool stuff to come out of Instinctive Code
Labels: Development, Indie, Mac, Objective-C, Open Source
I've been tinkering with some code off and on for a while, and thought I'd finally share it with the Mac Developer Community in hopes of getting some feedback as well as some users.
The project is called Shrty
, short for "Shorty", and you can use it to shorten URL's in your Mac Desktop or iPhone application. The code is a work in progress, but I'm hoping folks will find it useful.
Shrty shorten currently supports bit.ly, j.mp, tr.im, ping.fm, and YOURLS
based URL Shorteners. I have support for su.pr
coming, the parsing required a bit more work and it's not quite finished.
Expand is not quite ready. I need to work on the parsing code for all of services.
The project basically contains a sample application that exercises Shrty, and the Shrty Library Code. The test application is nothing fancy, and in fact is pretty darned ugly, but if you decide to make use of the code I'm sure you'll make a great UI for it.
If you have any feedback please drop me a line, firstname.lastname@example.org. In the meantime, Merry Christmas!Christmas Present Icon by Icon Drawer, www.icondrawer.com
Labels: Cocoa, Development, Indie, Objective-C, Open Source
When I started my development career back in 1988 one of the best pieces of advice I've ever received came from a very small indie shop called Burton Systems Software
. His advice was simple, "I don't care whose version control system you use, but you NEED to use one."
Dave Burton, the proprietor of Burton Systems, makes his living writing a version control system called TLIB. Needless to say, we purchased TLIB, and the rest is history.
Look, if you're doing any type of development; web, desktop, or whatever, and it's text based and constantly changing, you NEED to use a version control system. There are plenty on the market. Everything from free to paid, and they all have their plusses and minuses. My two cents
For my "money" I like Subversion
, commonly referred to as SVN. The cool kids are using distributed version control systems, like Git
, but in the end they're just another version control system. My take on Git is this, it's good if you're working with an open source project and exchanging patches, or working disconnected with your laptop. Beyond that I just don't see much advantage in these over existing systems. But, please feel free to leave comments, educate me.Where do I keep this stuff?
Putting your work in the cloud. Ooooohhh, the buzzword of the year. Yes, you can of course keep this stuff wherever you'd like. A lot of companies with their own servers keep their source repositories on the corporate network.
There are other options of course. If you have someone hosting your domain chances are they have Subversion support, and if you don't mind wearing an administrator hat they're quite easy to manage.
The ultimate choice, of course, is to use a company that takes care of your repositories. If you have an open source project you can keep your code at Google
, that's nice, and free. If you have a commercial product and don't mind spending a few bucks you can host your code on services like Beanstalk
for Subversion repositories, or give GitHub
a try if you're using Git. Both Beanstalk and Git have a nice pricing structure
, that include free repositories with some restrictions.Religious Wars
Version control is another one of those religious things in software development, so go compare the features, find one that works for you
and use it. There's nothing worse than having a hard drive fail and seeing all your work disappear.
Labels: Development, Tools
: "We need someone who can jump into a project with both feet. If you don't know the technologies needed, you can learn them quickly with a minimum of fuss. Good overall engineering skills are a must, as well as a passion for delivering polished software even in demanding circumstances. We build and maintain outstanding software and experiences, and would like your help to continue to do so."
- Ned's an all around good fella, and a great software engineer. The Tabblo team
is doing some nifty stuff and if you're looking for a job this could be a great place to land.
The position is on site, but I'm not sure if the Tabblo team is still in Boston or if they've migrated to California? I'm going to guess they're still in Boston.
Labels: Development, Job, Python
: "What I'd love to have is a "weekend mode" in my client. (Or it could even be a separate client.) The weekend mode would show me only mentions, direct messages, and items with links. However, the items-with-links would not include yfrog and similar links: if it's just a picture of someone's sushi or their wacky goldfish, I can skip it."
- That's a good idea, just another type of filter for your Twitter stream.
Labels: Development, Idea, Social
(a.k.a. Rands In Repose): "It was end game. The time in the project where you pay for every single shortcut you've taken, for every specification you didn't write, and for all the warnings from engineers that you've ignored. All the data is grim. Bug arrival rates are skyrocketing while bug resolution rates are pathetic because, uh, well, engineers are still finishing features."
- I think we'll be there again in a few months. Oh, wait, we're ALWAYS
there... Go read the article, it's fun.
Labels: Development, Fun
: "According to a report at VentureBeat, the six-member team at Backflip Games has earned more than $1.75 million from its iPhone apps in the company's first seven months of business. The team attributes its success to effective use of in-game advertising and cross-promotion."
- I don't know what to say about that, other than, WOW!
Labels: Development, Indie, iPhone
I was asked recently "If you could work for any Mac software development company, who would it be?"
Well, that's a really tough question. Here's a list of companies I have a ton of respect for. Some are small, mom and pop type shops, others are computing giants.
Here they are, in no particular order...
There ya go! A list of great Mac development shops.
Labels: Development, Indie, Mac
: "The idea behind the lecture was to talk about what makes a great Mac app. I took that as an excuse to talk about everything from work habits to UI to marketing. In other words, I threw in just about everything I know - which, it turns out, only takes about an hour to deliver. :)"
- A whole lot of this is common sense, or knowledge you've already gained, if you've worked in the development world, but it is definitely worth revisiting because it's just too darned easy to forget. As developers it's easy to get caught up in adding one more thing to the mix, which can kill your 1.0 launch.
Great stuff, go take a look.
Labels: Development, Mac, Tricks and Tips
Dan Wood's Mac Indie Marketing
: "The idea was to get as many indie developers to insert a bit of code, and some artwork, into their application, and have it released before Halloween. Then, simultaneously, Snow Leopard users would notice that a lot of their apps - at least those that were from participating indie companies - had special Halloween icons."
- I love this idea, and would participate no questions asked, if I had a Mac Application. It should be no surprise I'd participate, just look how my header graphic changes month by month. Not to mention how much I LOVE HALLOWEEN! Great stuff.
Labels: Design, Development, Graphics, Halloween, Indie, Mac
: "He says on Windows Mobile and other phones it's getting downloaded far less often than that. Westergren told me if he were starting development today he'd build for the above three platforms and is seeing more growth in Android than the others, so he'd bias to iPhone and Android, if he had to make a choice of only two platforms to develop on. This is also what I'm hearing from many other developers."
- Yep. I love me some iPhone development, so much so I wish I could find a way to do it full time. Having said that, Android is looking more and more like a solid number two, with the Palm Pre coming in at number three in my book.My brother
, who co-developed RxCalc
, is dug in at Verizon for mobile service, and he's looking at Droid for his next phone. Not a bad choice.
Labels: Android, Apple, Development, iPhone, Opinion, Palm
[via James Robertson
]: "Haystack runs on commodity hardware (i.e. Dell Linux boxes with a terabyte SATA drives) and is a custom file system which keeps all file indexes in RAM to speed up lookups. Today Haystack is so optimal that it only takes one I/O operation to load a photo compared to 3 I/O operations for the previous optimized implementation and 10 I/O operations for the initial NFS based system. Haystack is so scalable that they once accidentally disabled their CDNs and Haystack served all photos on the site without breaking a sweat. The service was built by 3 developers in a couple of months. It will be Open Sourced in the near future."
- Very darned cool post. The Facebook guys are really tearing it up. I know I've been critical of them in the past, believing them to be the next MySpace, but they've gone so far beyond anything before them.
A side note. I love Dare's soft sell at the end of the article, "If you're interested in working on or building systems similar to the ones described above for the 500 million users who utilize Windows Live services. Send me a resume, we're always looking for good developers."
Microsoft has lost its luster, I'm afraid. I don't know many, if any, people that have Microsoft on their places to work list. There are too many exciting startups, especially in the social space, to work for the "New version of the 80's IBM."
Labels: Design, Development, Social, Technology
: "Tabblo is written on the Django framework, and therefore, in Python. Ever since we were acquired by Hewlett-Packard two and a half years ago, there's been a debate about whether we should start working in Java, a far more common implementation language within HP. These debates come and go, with varying degrees of seriousness."
- Ned may be talking more about the debate they continuously have within HP but the bigger nastiness is how easy it would be for Tabblo
to fail by doing a rewrite. Where's the benefit to the user? There's nothing wrong with Python and there are plenty of successful projects in Java. If HP needs to interop with Tabblo, they have web services, communicate with Tabblo using whatever makes sense to you. End of story.
Labels: Development, Dynamic, Java, Python, Technology, Web
: "I spent many hours playing D&D with paper, pencil and physical dice. I remember when I thought hi-tech was writing a small app that would randomly generate characters on my then new Commodore 64."
- We used to have all kinds of fun playing D&D! We always made Jay(Jerry) the Dungeon Master, he hated it, but was very good at it. Those were good times, very good times. Pepsi, candy, friends, and lots of D&D. Mom used to have to step over the comatose bodies sprawled about the living room the day after. Anywho, I digress...
Go check out the video, it is VERY cool. Too bad a surface table is not affordable.
Labels: Development, Fun, Games, Microsoft
: "Second Gear's FitnessTrack and Emergency Information iPhone apps are dead...long live BitBQ's FitnessTrack and Emergency Information! Yes, Second Gear developer Justin Williams has sold his two apps to BitBQ's Patrick Burleson."
- I'll hang in there myself, with hopes the App Store will improve based on developer and user feedback. It'll get better, it has to.
Labels: Apple, Development, iPhone
I purchased a new domain a while back with the intent of creating my own URL shortening service.
I'm writing this now because I just noticed an entry, from Mr. Bob Kepford
, on Twitter about setting up his own
. It reminded me, I need to get this show on the road.
But what should I use? I've decided to go with Adjix
. They have a very simple setup for creating your own custom shortening service by using Amazon S3
as the storage mechanism and they simply redirect from your URL, through Adjix, and off to the desired URL. Pretty sweet!
So, what do you need? Simple, Adjix has a weblog post to explain the entire thing
. After you've read it, and configured your own service, read the next entry to complete the full setup
, A.K.A. Dr. Bootstrap, was one of the first to do this
, and it's working quite well for him.
Dave's own custom label shortening service, r2.ly
, has been online and working for a while now. Example r2.ly shortened URL
I will be applying this to my own, white label, URL shortening service, soon, I hope.
Labels: Development, Technology, Tools, Web
: "In December, we brainstormed ideas for what the different ramps should be and decided who would design them. We laid out plans for a bunch of ramps: a default ramp (which was transformed into Clown Town), the Icon Garden, Breakwater Bay, Space Swarm, Tiki Island, Ninja Attack, and Happy Place. Of course, I'd be lying if I said these didn't go through major revisions (and name changes) over the course of the design phases, but these were the final names based on the ideas we had in December."
- The IconFactory
is a class act, and I absolutely LOVE stories like this. It's fun to read about the history, and process, of any new product. Ramp Champ
is an especially beautiful iPhone game, and I'd imagine one of the first to embrace In App Purchase
If you want to have some fun the $1.99 price tag is worth the price of admission, especially if you love carnival games.Get it on iTunes
Labels: Development, Fun, Games, iPhone
: "Thanks to plugins, I was able to extend MacVim with most of the features that make TextMate such an amazing editor. I was also pleased that it looked like a mac app and not some hideous Linux port."
- Your mileage may vary. At least the Linux
enthusiasts will have a familiar experience if they switch to the Mac. Having said that, this could be a great tool for the folks. Personally I'd probably choose BareBones BBEdit
, but FREE is often good enough for most people.
For my HTML and CSS needs, which are pretty minor, I've been using Espresso
and love it. There's also the very popular Coda
from the fine folks at Panic
For day-to-day development on the Mac it's hard to beat XCode
Labels: Development, Tools
: "On my iPhone 3G it runs really choppy, on my 3GS it runs acceptably, but it still isn't smooth. Given the OpenGL performance people have seen on the 3GS that is still pretty bad. I have not done any invasive tests by instrumenting the binary, that is just what I can get via basic usage. The sad thing is that there is no reason it has to have performance like this."
- I'm sure we'll see it get better, but, since it is OpenGl it's going to chew on battery. I wouldn't use this for real applications, but it could be a great choice for games. Especially those "one off" games for movie and product promotions.
Labels: Adobe, Development, iPhone, Tools
: "The new MacRuby 0.5 runtime is built upon LLVM, a compiler infrastructure also sponsored by Apple. Thanks to LLVM, MacRuby is able to transform the Ruby abstract syntax tree (AST) from the parser directly into highly optimized machine code. MacRuby supports both Just in Time (JIT) and Ahead of Time (AOT) compilation. The JIT mode will compile down the code at runtime, and the AOT mode will allow you to save on disk the compilation result. AOT compilation makes MacRuby a true Ruby compiler."
- Hmmm, how long until we have full support in XCode for building compiled Ruby? Then, that begs the question, how long before we see native compilation of Ruby for the iPhone?
Labels: Apple, Development, iPhone, Mac, Ruby
: "Fog Creek is looking for top-notch developers with super awesome talent and the burning desire to get things done. We have a very successful core product (FogBugz), and we're coming out with two new products: StackExchange--the engine behind the enormously successful developer site StackOverflow--and another product we'll be revealing in a few months"
Labels: Development, Job, Technology
]: "Even if your 99 cent application gets downloaded 10,000 times, after Apple's 30 percent cut that's just $7,000 in revenue-not profit, mind you, just revenue-and if you spent the last six months of your life working on that application, you better hope you're still working a day job if you want to cover living expenses."
- I still believe there's a market for GREAT iPhone apps, but some may be cool on the idea. That's ok, I'll plod along, looking for a nice niche to settle into, but I can see some giving up all together. It can be discouraging to see your work go unused, or receive little return on your investment. Such is life. Find something you love and work at it. It may pay off, and if it doesn't you may find something positive to take from the experience. I know I have.
Labels: Apple, Development, iPhone
: "My first reaction is that becoming a freelance developer (or starting your own consulting firm) can also be a lot less conducive to launching a product. Instead of being able to justify a somewhat fixed salaried workday, you find yourself working longer and longer hours as client demands increase. In addition, freelance development requires a lot more mental energy than being a salaried employee. Mental energy that can't be spent launching your product."
- Just over a year ago I was ready to jump into the freelance world. My plan was to use freelance work to support my Mac development habit. Alas, after talking to a number of people, I heard the same thing over and over and over. One, I wasn't going to charge enough to make it work, two, you're ALWAYS on a treadmill. Either you're working long hours to satisfy client requests or you're out trying to hustle business. Now, I know some folks that are doing quite well. They keep their heads down and have a reputation for delivering, but they do work TONS of hours and it seems like it never ends. That's a huge challenge to overcome.
The best job in software is still the job that allows you to develop a product and "ship" it. It doesn't have to be on a shiny CD/DVD, it just needs to be "packaged" and available for purchase. If your product is decent it affords you the time to actually plan for the next version, put your head down, and deliver it. I like that model.
Labels: Development, Job, Life
: "Jamie Zawinski is what I would call a duct-tape programmer. And I say that with a great deal of respect. He is the kind of programmer who is hard at work building the future, and making useful things so that people can do stuff. He is the guy you want on your team building go-carts, because he has two favorite tools: duct tape and WD-40."
- Sometimes duct tape and bailing wire is enough to get the job done.
Labels: Development, Tricks and Tips
: "What about my part? That part is pretty simple: I have abandoned the platform. Apple's nonsense is just too much for me. There's no joy in iPhone development, and an enormous amount of frustration. It's much more fun, not to mention profitable, to take whatever effort I would spend on iPhone development and spend it on Mac development instead."
- While I'm not ready to abandon the platform I can certainly understand why Mike would abandon iPhone development. I myself like developing for the iPhone but would love
to have the time to write a full fledged Mac application. I have many ideas, but they're much larger than the applications I can build for the iPhone/iPod Touch, thus, I keep working on the phone. Besides, it really is quite fun.
Labels: Apple, Development, iPhone, Mac
: "We take Inteface Builder one step further than XCode does by making MonoTouch automatically bind any outlets you define on your interface and any methods that you define in your interface to your C# code."
- Who'd have thunk Apple's own Interface Builder would be outdone by a bunch of hacks? Not me.
Labels: Apple, Development, iPhone
: "Did he talk about how we're losing the edge on client development for Windows and how it's all a confused multi-SDK technology mess centered around everything being .NET based?"
- Interesting take. When your own devs say your SDK offerings are a mess, well, that's a problem. As for .NET, it makes developing applications a whole heckuva lot easier. The runtime plus framework are brilliant; pick your favorite language and get busy, C#, VB.Net, Iron Ruby, Iron Python, [insert your favorite here.] Some would say "Hey, that's too confusing." Not really. Everything being equal from the runtime and frameworks perspective is really nice. They have great tools; UI creation is way easier in Windows than on the Mac, at least it is for me.
All that said, I'd rather spend my days writing Mac, or iPhone, software and beat my head against the Interface Builder wall than spend another day writing Windows applications.
Maybe someday I'll have that opportunity. For now, Windows, and to a lesser degree Linux, pays the bills. It's strange. Not that long ago I'd have considered working for Microsoft again, maybe. Now, now I don't think I'd consider it, unless it was on a pure Mac, or iPhone, application.
Labels: Apple, Development, Mac, Microsoft, Technology, Tools
: "Lets make our code more robust, we all like robust. Blocks are anonymous functions, we can write them in-line and the can capture variables from their enclosing scope."
- A great little example of using Blocks in Objective-C, restoring state after a change to a Quartz context. Handy.
Labels: Development, Objective-C, Tricks and Tips
I'm referring to my own experience as an Independent Apple iPhone Developer. Since RxCalc went into the store
things have been slow for us, slow but steady. Please, don't take this as a complaint, I'm very proud of our little effort, and I feel that sense of pride when I talk to people about what my brother
and I have done. It's our baby, even if it's not making us piles of cash, we're committed to supporting and nurturing it. It wont be left to whither on the vine. There's work to be done!
To date, by my calculations, we've sold 99 copies of RxCalc. Apple Core Labs
has received our first check from Apple, it was a very exciting day! In fact, we're going to celebrate it. Yes, I believe in celebrating your victories, no matter how small.
Something I've come to realize about our chosen vertical market is it's very difficult to reach our target audience. It's very obvious Pharmacists aren't finding the RxCalc product page
, or our weblog
. After announcing that tomorrow (Labor Day) RxCalc would be completely free for one day
I expected to not make a single sale, completely understandable, yet we sold a copy yesterday, yes, a single copy. So, it's very obvious our best vehicle thus far is the App Store itself. To that end I wonder if Apple would be open to adding a weblog like capability to the store so our announcements could be linked off the main product page, or brought to the surface a bit more easily, when potential customers land on the iTunes App Store page for RxCalc. Maybe a "News"
, or "Announcements"
, section on the page with a headline that announces current activity for the product?
Of course I leave it to Apple to help us because the App Store is a walled garden, they're in charge of their own, and our, "nightmare." I'm not unhappy with my overall experience, I'd just like to see it get better, and as a little guy just getting his feet wet, I can use all the help I can get.
Labels: Apple, Apple Core Labs, Development, Indie, iPhone, RxCalc
: "The latter is the touchstone of great design: we must strive to make our programs require as little learning as possible on the user's part. Each little thing they have to learn about our program is another obstacle to them using it fully, another tiny chunk of enjoyment stripped from their experience."
- I really like Will's take on heuristics. While we'd all rather have an algorithm solve the problem, like nature, we often find edge cases that fall outside the algorithm. I experience this each and every day at Pelco, where I work on our video viewing clients(A.K.A Decoding User Interfaces.) We just want the software to work for the guy watching the video so we have to do things to deal with different camera models, or deal with recorded video that changes recording quality mid-stream. Is it painful, why yes, yes it is, but the guy using the software doesn't have to know that. We just make it work.
Labels: Algorithms, Applications, Development, Pelco, Usability
: "I've been thinking about some ideas to help promote local developers and programmers here in Fresno and getting to know others. One idea I really liked and experienced once was Startup Drinks San Francisco, which was really fun. I was new to the city and I got to meet with lots of developers for some great startups based in the city. So why not here in Fresno?"
- This sort of event is definitely needed. Since writing my Fresno, technology black hole
post I've discovered a LOT of new Fresno based talent, especially in the web and design areas.
Now, all we need to do, is springboard that into a Visalia Geeks Dinner and Drinks!
Labels: Development, food, Friends, Fun, Indie, Job, Life, Social
Stormy Productions Blog
: "The second problem is the inconsistency of the review process. One app gets approved with feature set X and another with identical features gets rejected. For example, I submitted two apps on the same day. Both were radio apps for different radio stations and contained identical features. One app was approved after a week while the second app received the dreaded this app is "taking unexpected additional time for review" email. It's been over a month now and this second app still hasn't been approved. I even got the eventual call from Apple telling me I need to change a phrase in the app description and was also told once I did this the app would be all set. The other app that was approved contained this exact same phrase. In fact, both these apps were updates and have had the same descriptions since they were approved by Apple last Fall! So, I immediately changed the text Apple found offensive, and now several weeks have gone by and no word on the app being approved. All Apple is willing to say is "there is no additional information to share at this time"."
- This is pretty frustrating. Read the whole thing to get an idea of what he's experiencing. We're cooking up a quick
usability fix to RxCalc
we'd like to publish, but how long will the review take? Hopefully not too long.
Labels: Apple, Development, iPhone
After reading Daniel Jalkut's excellent essay
on Open Source software, I have a question.
Which of the liberal licenses are best for code that can be used in a commercial product as well as a GPL'd product?
Links to license particulars would be greatly appreciated. I'm currently looking at The BSD License
Labels: Development, Open Source
: "I sent out a general request on Twitter, asking what specifically the biggest obstacle was when you first started learning Cocoa. Out of the roughly 118 responses I got back, no one topic completely dominated."
- If I'd responded to this I'd have said...
#1 Interface Builder
#2 Cocoa is big
Interface Builder had been the biggest hurdle for me, and Cocoa, like most frameworks I've switched between, takes some time to figure out. I really like the feel of Objective, but it's a bit strange looking the first time you see it.
Labels: Cocoa, Development, Objective-C
: "Some memory leaks are easy to see by looking at your code. Some are much more difficult. This is where Instruments comes in. Instruments has a 'Leaks' tool that will tell you exactly where you're leaking memory so that you can get in there and fix it!"
- These are the types of tools every developer should learn. Hard as we try to write clean code we will, on occasion, forget to release a reference to an object and you get the dreaded memory leak. I must admit the Cocoa reference counting mechanism is a bit odd to an "old-school"
Windows/COM developer, but I've learned to deal with the oddness.
Oh, there is a great tutorial
for Windows COM guys to explore if they're coming over to Objective-C/Cocoa to help with the ref counting mechanism.
Labels: Apple, Cocoa, Debugging, Development, iPhone, Mac, Objective-C, Tools, Tricks and Tips
: "In some sense, Jalkut's essay could be considered a big "Duh" - a statement of the obvious. To wit: that GPL-licensed software projects discourage participation from developers working on anything other than other GPL-licensed software projects. That's pretty much the stated goal of the FSF. BSD-licensed projects encourage participation from developers working on just about anything."
- It's not that Open Source is bad, it's just restrictive. Gruber's points are fantastic. I think there's a lot of FSF developers that see Open Sourced projects as free, but they see things from a different perspective. Open Source is socialism, BSD style licenses are more like a democracy. If I used a piece of Open Source software and found a bug, and was able to fix it, I'd be happy to give that back to the community. I wouldn't, however, build a business on top of it.
It's not bad, it's just not as open as people would like you to believe.
Labels: Development, Open Source
Apple Core Labs Blog
: "Apple Core Labs first iPhone/iPod Touch application, RxCalc, is now available on the iPhone App Store."
- It's been a long time coming. My brother
and I knocked RxCalc
out over the course of a few months; an hour, or two, at a time. It was a labor of love for both of us. Jay, or Jerry as most know him, has wanted this application for years, and I wanted to develop an iPhone/iPod Touch application. It was a perfect match! We'd started and stopped the idea of a pharmacokinetics calculator many times over the last six, or so, years on various platforms, but the iPhone was such a natural fit we had to see it through to completion this time.
Jerry provided the math, and workflow, I did the UI and wrote the code. It's worked out quite well.
So, here's to a long, and hopefully prosperous, run for RxCalc. We have so many ideas, the list is quite long now, and would definitely like to hear from anyone using it
, good or bad.
Labels: Applications, Development, iPhone
: "Now for the most controversial point of this article, where I suggest that the GPL does more to harm collaborative development than it does to help it."
- Developers beware. If you incorporate GPL'd code into your code base you could be in trouble. This is the evil side of the GPL. Proponents of the GPL like to talk about freedom, but it's not free, there's big cost, namely the distribution of your source code.
There are many different license types floating around out there. Pick the right one for your project so you don't end up in court.
Labels: Development, Open Source
: "We are looking for a software engineer who has a passion for creating innovative high quality software using the latest tools and technologies. You must be a self starter who loves solving problems in a logical self-disciplined manner. We are looking for someone who will fit well with our development team and remain courteous and friendly with both staff and customers at all times."
- I also love the the following bullet points...
- Want to work with the latest tools and a 30 inch screen?
- Want to work for a company where innovation and software development is taken seriously?
- Want flexible working hours and no silly dress code?
- Want a career where what you achieve really matters?
- Are you a clever problem solver with an enthusiastic and positive attitude?
- Are you a self starter and still able to work in a team?
- Can you get things done?
Labels: Development, Job, Mac, Objective-C
: "Join me at iPhone DevCamp 3, July 31 - August 2 (yes, that's a weekend) on Yahoo Campus in Sunnyvale, CA."
- I may have to go to this, since it's on a weekend. Hmmmm...
Labels: Development, iPhone
: "If you've never supported your own software, spending just one day doing tech support will be an eye-opening - not to mention humbling - experience. You'll have to keep your ego in check, because most people who contact tech support do so because they're having problems with your software, some of whom will use colorful language to describe the annoyances they're running into."
- Nick is right, on all accounts. I did developer support for a couple of years at Visio and most of the time people called because they'd run across some edge case, or wanted something we plain didn't do. On rare occasion the language could become quite, as Nick puts it, colorful. In the end it helps you create a better product and keeps you interested in pleasing the people you really work for, the users of your product.
Labels: Development, Good Advice, Tricks and Tips
: "Without further ado, here are some guidelines that I try to follow. Some of these, but not all, are directly related to issues that Clang has caught. (If you have any of your own to suggest, add them to the comments please!)"
- A great set of rules that apply to not only Objective-C but coding in general. But, if you're new to Objective-C, or new to coding in a language that hands you a rope and allows you to place it around your neck, this article is for you.
I really, really, like Dan because at the top of the article he mentions "no K&R style bracing", a man after my own heart.
Labels: Development, Tricks and Tips
: "Flex development takes place using XML. I'm sure that some developer somewhere thought this was a good idea - but he needs to be taken out behind the woodshed, stat."
- I had a rant about XML a little while back. James and I are in total agreement on this point.
Labels: AIR, Applications, Development, Flex, Smalltalk
Sebastiaan de With
: "Composition is not an icon generator or designer in any way; it is made for people who care about the way their icons look, and want to get a break from the horrible workflow of mashing previews of icons together in Photoshop. There will be several easy-to-access Photoshop templates accessible from the app, but the actual design work is left to applications that are excellent at that kind of work. It will also be completely free!"
- This will be an extremely handy application for designers and developers. When you create an icon for the iPhone, or Touch, you create a 57x57 pixel image with square corners and try to keep if fairly plain. The iPhone the rounds the corners and applies lighting across the top of the icon. It can be tough for a designer to visualize the final product and it's a pain to build the app and push the icon the iPhone Simulator just to see what the icon will look like.
This is a tool every iPhone developer, and designer, will want as a part of their toolbox.
Labels: Design, Development, iPhone
: "I guess the proverbial cat is now out of the bag. As was shown in the Delphi/C++Builder roadmap at Delphi Live!, Project X has been under way for a while now. So now you know some of the reason why things have been rather quiet here since I could not really talk about what I'm working on. The good news is that we now have a returning top-shelf engineer working on the compiler. This person was heavily involved with the original Delphi on Linux project, so there is a lot of institutional knowledge that he's able to bring to the table."
- I have a lurking interest in Delphi. The guys at Embarcadero, formerly CodeGear, formerly Borland, create great IDE's and developer tools. Here's hoping the embrace the Macintosh way and make it impossible for someone to tell an Objective-C/Cocoa application from a Delphi Mac OS X application.
The good thing is it opens the doors to more developers, the bad thing is is opens the doors to more developers. If developers coming from Windows bring all their Windows baggage along with them we'll get some pretty crummy Mac applications. If they embrace what the Mac development community has know all along they should do just fine.
What is it Mac developers do differently? They create elegant, useful, stable, simple, to-the-point, software. You see it time and again on the Macintosh and I've come to appreciate it. The application I use to post to this weblog is a prime example, MarsEdit
is something I use everyday, and it fits all those qualities I've listed above. Most Windows applications have noisy UI's, just look at Microsoft Word, and you'll see what I'm talking about.
So, Embarcadero, please, please pay attention to the toolbox and make sure everything you do looks like belongs on the Macintosh! Thanks
Labels: Applications, Development, Mac, Tools
The Daily WTF
: "'I honestly think that Aquamacs could have tried a third row of buttons on this confirmation dialog,' notes Rowan Lewis"
- Yikes! Hey, I just wanted to save the file. Thanks.
Labels: Development, Insanity
: "Developing for multiple operating systems at once is like talking on a cell phone while driving: You can accomplish each task successfully, but you'll excel at neither. Unless you develop an application with a native GUI toolkit and relentlessly embrace native operating system conventions, you will achieve mediocre results. The more you disregard or abstract away your target platform, the more diluted your user experience becomes."
- Yep, you make tradeoffs to achieve cross platform applications. I see it all the time, but that's just a part of the game. Often you have to go "lowest common denominator", like not taking complete advantage of the platform. An example that comes to mind, because we do video, would be choosing OpenGl over Direct3D on Windows, but I guess if it works and it's good enough, no harm, no foul, sort of. The thing is the users will notice, something will feel off. The example of Office on the Mac is a great one. It's busy. I've become accustomed to very trim user interfaces in most Mac applications, but Office is full of buttons, and you notice it.
Getting the user experience correct isn't an easy thing to do, when you do get it right you may never know, if you get it wrong the users scream to high heaven.
Labels: Applications, Cross Platform, Development
[via Doug Finke
]: "Create online UML diagrams in seconds from inside your blog posts, articles and documents."
- I'd experimented with doing web based diagramming back in early 2002
. This is an idea whose time has come, but not just for UML, for all kinds of connected diagrams. Flow charts, organization charts, data flow diagrams... the list goes on. The yUML guys use text
to direct their diagram creation, back when I did my experiment I used OPML to create a hierarchal connected diagram because OMPL was a perfect fit for it. I used Visio, created a simple application to parse the OPML and turn it into something the Organization Chart Add-On could parse, executed Visio programatically, launched the Organization Chart Add-On programatically, generated the diagram, saved, and exited Visio. When I was thinking the web service through I figured the hardest part would be scaling of course, since I was using Visio to generate the drawings, but that's easy enough to work around.
This is great stuff, and I hope to see more in the future.
Labels: Development, Graphics, Visio
Engineering Windows 7
: "Many have experienced scenarios where an application, or Windows itself, stops responding momentarily. This is type of a performance issue that can be impacted significantly by the performance of graphics in the PC. We categorize these as desktop responsiveness issues. Improving responsiveness, both in real terms and by avoiding non-responsive moments, is one of the key ways that performance is improved in the system. It is also hard to measure."
- While I love my Mac, and wish I could write code for it daily, I make my living writing software for Windows and Linux. Windows 7 looks promising considering we have need to display live, and recorded, video from multiple sources, and do it quickly. In the security world folks demand, and expect, great performance. A 500 millisecond(1/2 a second) delay from the time the image is grabbed until it arrives at the display is TOO slow, now imagine having to do that for 16 streams simultaneously. Graphics performance is so important, even at the UI level, which is why these particular changes will be so welcome. For video we lean on the GPU, but the user interface relies on good old Windows GDI. Let's hope it works!
Labels: Algorithms, Development, Windows
, [via Daring Fireball
]: "Earlier, I tried to get a hold of the latest specs for the PSD file format. To do this, I had to apply to [Adobe] for permission to apply to them to have them consider sending me this sacred tome. This would have involved faxing them a copy of some document or other, probably signed in blood. I can only imagine that they make this process so difficult because they are intensely ashamed of having created this abomination. I was naturally not gullible enough to go through with this procedure, but if I had done so, I would have printed out every single page of the spec, and set them all on fire. Were it within my power, I would gather every single copy of those specs, and launch them on a spaceship directly into the sun."
- I know the old formats can be tough to deal with, try cracking Visio's, it's very complex. This sounds like a case of someone coming into development from our very open gigabytes of ram and clear text file formats. I can't be sure of course, but that's how it sounds. Hey, there once was a time when performance was critical. Try doing everything you had to do in the 640k-1MB range. Heck, iPhone applications are bigger than that today! So at that time binary was king, set a bit here a bit there, be as efficient as possible.
I was just talking with a couple of folks at work about this yesterday. In software, like fashion in some ways, our trends run in circles. Does anyone remember Windows .INI files? They were clear text files divided by sections, each section could have one to many name/value pairs so you could find things by section and keyword. If you needed an array you could have a name/value pair point at a section that was the array. Pretty simple format, reminds me of JSON. Then the registry came into play. Similar idea, a bit richer, much harder to deal with as a user, not easily moved like a text file, but it became the de-facto standard for saving user and application settings. Then XML became all the rage. Now we're back to clear text, but it's not quite as friendly to parse, but it's great for moving data around in a standard way. Applications started using it for user settings and for their native file format? That seems a bit weird to me, but ok, folks seem to like it. Now JSON is becoming popular, and as I said above, it reminds me of our old .INI files. We seem to have come full circle in some ways. Before you know it a new kid will discover the virtues of binary file formats and we'll start the cycle all over again.
I keep forgetting to write this down, so it's going on the good ole weblog for searching later.
If you have your code setup to do heap allocation tracking, _CTRDBG_LEAK_CHECK_DF
and you'd like to break on a specific allocation, here's what you do once you've started debugging.
Add the following to the watch window.
Set the value to the allocation you'd like to break on. Now, if you're using the multi-threaded DLL runtime you'll have to provide a better context to the debugger. Like this.
So, if I'd like to see who allocated a hunk of memory, they were the 1000th caller, and they didn't free said memory, set the value to 1000, and the debugger will stop on allocation 1000.
Handy, big time handy.
Article on MSDN with more details, How to: Set Breakpoints on a Memory Allocation Number.
Labels: C++, Development, How To, Microsoft, Tricks and Tips, Visual Studio, Windows
Brian H. Madsen
: "A colleague of mine sent me this little snippet of gold yesterday - it had me laughing like a drunken seal so i figured i'd share it."
- Every coder is tempted to "fix" things, sometimes it works, sometimes it doesn't. I'm guessing this is a case where it doesn't work to mess with the current implementation, even if it's not so pretty.
Labels: Development, Tricks and Tips
: "I just recently started using C++ for university (about two months ago) and still have a hard time accepting some of the weird syntax rules and semantics. For someone that mainly does Python development C++ feels very unnatural. In Python the syntax is clean and there are no ambiguities. C++ is drastically different in that regard. I know there are tons of resources on the net about C++ pitfalls already, but I thought I have to add my own for people switching to C++ with a background in Python and/or C."
- I forgot how daunting C++ can be coming from another language. I struggled with C pointers for the longest time after coming from BASIC, then a dear friend said these words to me.
* means contents of
& means address of
That's all it took. From that day forward I could deal with pointers.
Python looks weird to me, especially the whole indentation thing
Python is one of those languages high on my list of languages to learn, which also includes Ruby and Smalltalk. Objective-C wasn't on there, but I'm knee deep in it now. I believe Objective will be a good sprintboard to learning Smalltalk, either that or a hinderance.
Labels: Development, Objective-C, Python, Ruby, Smalltalk
: "There's no two ways about it. If you're going to develop iPhone applications, you're going to do it on a Mac. The whole toolchain is Mac-only: you can't do it in Visual Studio or Eclipse or anything else that runs on Windows"
- More great advice. The idea of purchasing a Mac Mini is a great idea
, if I do say so myself
. It will get you on the road to developing and keep the costs down.
Labels: Development, iPhone, Mac
: "I'm a big fan of foundation releases. In other words, release the bare minimum you possibly can to constitute a 1.0 and then let your users help decide the direction your application ships."
- Let me add a bit to that statement. Ship a very solid
1.0 foundation release and let your users chime in. I just had this very conversation with a dear friend, and iPhone app developer
. He's encouraging me to wrap up my 1.0 iPhone app and get it in the store. He's right, I need to finish up, and just "Ship it!"
Labels: Development, iPhone
Double Encore, Inc.
: "To determine price, you need to first figure out who your target market is. Hint: for most apps, your target market is probably not 'all iPhone users, everywhere.' Far too many apps are priced for volume on the App Store despite not having a larger enough target market. If your niche app can command $9.99 from those users or industries that would benefit from what you offer, why price your app at $0.99? All you are doing is reducing your chance of breaking even and turning a profit."
- I have an iPhone app coming, really, it is, trust me. The thing I'm struggling with most, is price. The application targets a very focused market. There are a couple of apps like it, but not exactly like, and they're sitting between the $0.99 and $3.99 range. When I began working on the product I was thinking I'd sell it for $39.99, yep, that right, very high end. Now it's looking like it'll fit in the $4.99 and under range. We'll see!
Labels: Apple, Development, iPhone
I've been working on my iPhone application again, it's been months, and I've been making good progress. Cocoa Touch and Objective-C are beginning to slowly sink into my thick skull, which is a very good thing. I have a bunch of experiences to share and I really need to sit down and write them up, with hopes is helps another poor Win32/C++/COM guy make the leap into Cocoa/Objective-C land.
What are some of the things I hope to talk about? Glad you asked. The application I'm working on is very table oriented. It's really about data collection, so I've formed some very good patterns for dealing with it. Another thing I'd like to address is my view of reference counting with Cocoa, from a COM developers perspective. I'd also like to dive into is comparing Win32/C++/COM to Objective-C/Cocoa to .NET/C#/pick a language. I think Apple used to have a leg up with Objective-C/Cocoa, now I honestly believe .NET may have the edge in the rapid development department.
Hopefully I'll get around to writing about it some day, but you never know, this tease may be the final word.
As of this writing it's still my goal to become a full time Objective-C/Cocoa/Mac/iPhone developer, that's how much I'm enjoying the experience.
Labels: .NET, Apple, C++, Development, Dynamic, iPhone, Microsoft, Objective-C, Tools
: "Yesterday I looked at the overhead associated with throwing an exception. Driving into work today, I wondering, 'what's the cost involved in creating the exception object?'"
- Not that exceptions are bad. You just need to be aware of the potential cost, especially if you were doing something like... I dunno, streaming, decoding, and rendering video at a high frame rate. Or something like that. Also note Jason's timings were performed on .NET using C#.
Labels: .NET, Development
: "It turns out that squircles are a sort of rounded square.You can read about the details on Wikipedia, but I'll summarize a squircle as a a 'circle to the fourth power'. Normally, you would describe a circle as being an x2+y2 kind of beast. A squircle would be what you get if you were to plot x4+y4."
- For the mathematician in you. If you're not a math head check out Chris' notes for a little math lesson. Enjoy.
Labels: Algorithms, Development, Graphics
: "So a little while back as I was bugging Kirstin about some math (which I knew I had already bugged her about a couple of years previously, but couldn't find my notes on) I decided to get a little bit more organized. And I've now got two pretty thick sketch books, pictured above, with mostly empty pages in them but rapidly filling up. And I thought I'd just pass this tip on to you."
- This is something I've done for years. I love National Brands Laboratory Notebooks.
I have a stack of them from notes past, doodles, misc notes, strange names and phone numbers, and debugging sessions. They're a lot of fun to go back through and see what I was thinking at the time and how whatever I was working on at the time progressed. Most real drawings, Visio drawings, I've ever created started life on a piece of paper or a white board, maybe I shouldn't admit that, but a good piece of paper is still the fastest way to capture an idea, IMHO.
Labels: Development, Diagramming, Tricks and Tips, Visio
is quickly becoming by favorite podcast. Daniel
do a great job pulling back the covers on all kinds of topics, especially those related to the Indy Mac Developer
scene. Core Intuition Episode 16 is no exception. The thing I found most interesting in this episode, WWDC
talk and most importantly payment systems for your first indy release. Dealing with online stores and payment could be a real showstopper, especially if you're not a web-head and you've been heads down for some period of time trying to complete that 1.0 release. Could you imagine coming to the end of a development cycle, thrilled, ready to sell your app, only to spend the next month trying to create a solution to get your product out to the world? Yeah, that would stink!
Note, I was going to give you a link directly to episode 16 but it looks like the guys really rely on RSS to get you those links. No biggie, just subscribe to the feed an you'll get the link, or check them out on iTunes.
Labels: Applications, Development, Indy
: "On behalf of the Parrot team, I'm proud to announce Parrot 1.0.0 "Haru Tatsu." Parrot is a virtual machine aimed at running all dynamic languages."
- Congratulations! Let's see how many new languages come out of this effort.
Maybe we should grab this and create our own dynamic language for doing development at Pelco? Just kidding.
Labels: Development, Dynamic
: "Just ask yourself: especially in a time of uncertain budgets, is a huge rewrite really the best use of your limited resources? What will your group not be doing for the business while they waste time on that?"
- Rewrites are often times destroyers of an applications place in the market, and can destroy entire companies. If you can get away with interop between the old and new, that's probably the best way to go. Go read the post, and the links to the four other posts related to this subject.
I'm sure there are a few great stories out there as well, but jumping on the flavor of the month can be fatal, especially if you have a working, established, product.
Labels: Development, Tricks and Tips
: "The Visual Basic team has a long history of delivering great value to our customers, and we are continuing that in the Dev10 release of Visual Studio. We're looking for a Development Lead to help guide these efforts as well as shape future versions of the compiler."
- If I were a brainiac, and a bit of a masochist, I'd be all over this sort of opportunity. My first real programming job was using Microsoft Basic 6.0, awesome compiler, great language, so it's near and dear to my heart. Back in those days we were fortunate enough to get betas of Visual Basic 1.0. Ahhh, Classic Visual Basic
Labels: Development, Microsoft
First question. Let's say I work for a company that does video security systems and I want to be able to drop my video into an AIR/Flash application, how does one do that?
Second question. Let's now say I have to be in complete control of said video stream? Let's also assume I have a high quality media framework, or pipeline, that does this very thing. It's highly flexible and optimized for receiving, decoding, and displaying video, and audio, and meta-data for that matter. It's crucial to use this existing framework. AIR/Flash video won't do, period.
So, the big question is how do we marry our media pipeline to AIR/Flash? I've asked numerous folks and the answers are always the same. You cannot do that. I'm cool with that answer, but there's always a skeptic among the crowd that believes there's a way to "hack" around things when you're told you can't do it. :-)
One answer may be creating our own video codec? We could write that on top of our framework and do whatever is necessary to insert our video into the runtime as we see fit. Could this be one possible solution?
If you're an AIR/Flash expert that has done this sort of work, I'd like to hear from you. We've gone through so many options that won't work, including Alchemy, I don't believe this is possible to do the way we'd like to do it, but someone may have a way.Thanks!
Labels: Adobe, AIR, Development, Flex, Pelco, Video
: "Besides building something meaningful, here's why you'll love working here:
We're a start-up: it's fun, dynamic, and you will make a difference.
We've got smart people without bureaucracy or politics.
We work in a loft (no cubes here!) in the heart of Downtown Los Angeles: a short subway ride or drive away from most of the city and walking distance from music, art galleries, restaurants, apartments, and night life.
We're funded by top-tier venture and angel investors who have helped build companies such as Sun Microsystems, PayPal, Juniper Networks, Good Technology, and Symantec.
We offer generous salaries, benefits, and stock options.
You'll have the important, little perks such as a fast computer with two big monitors, a laptop, a smartphone, and free food and drinks."
Labels: Development, Ruby
: "Programmers are the Gods of their tiny worlds. They create something out of nothing. In their command-line universe, they say when itís sunny and when it rains. And the tiny universe complies."
- While I'd never compare myself, or anyone for that matter, to God. Developers are, by and large, quite fickle. We can come across as arrogant butt heads, yep. I'm sure there are a number of folks over the years I've completely offended, or pissed off, especially as I've gotten older.
Labels: Development, Insanity, Life
: "Today MindJet launched MindManager Web, the online version of the popular mind mapping software. What is cool about it is that it has an identical look and feel to the original MindManager. Actually it makes me wonder when they replace the desktop version with an AIR app."
- I don't get it when people think they can fully replace desktop apps with web apps, even if they're written in Flash/AIR, which is kind of cheating because you're running in a runtime, inside the browser, on the desktop. There are certain things the web is good for, there are other things it cannot replace. A drawing application, especially a really good one, is going to be tough to replace.
Having said that I think the web is great for services and it's super nice when the desktop application can be enhanced by a web service. We did this at Visio with the Find Shape feature. A web service for locating, and downloading, shapes from the web, into the desktop application. It worked quite well and gave you all the power and control of the desktop application.
Web only apps are still not there as a 100% replacement for the desktop, or client applications. Why do you think we have an iPhone SDK? Folks just couldn't do everything they wanted in the browser.
From what I know about AIR it has extreme limitations, some will see those limitations as a feature, which is true in some senses. If you have a HUGE
investment in reusable frameworks, you cannot easily reuse those frameworks inside the AIR sandbox. That, for me, is a show stopper, which is quite unfortunate because it could be a great competitor to Microsoft's .NET if only you could reuse code more easily. Love or hate 'em, Microsoft has always done a great job of bringing old code into their new worlds. We've been able to bring critical frameworks into .NET very easily, and they behave like great .NET citizens.
Labels: .NET, Adobe, AIR, Cross Platform, Development, Flex, Visual Studio
Labels: .NET, C++, Development, Django, Life, Python, Qt
: "Our ideal person is someone who freelances for a living, but wants to spend two days per week developing music software."
Labels: .NET, Development, Music
I'm a very satisfied user of MarsEdit, I love it, it makes my day to day posting quite easy and automated. Now, I'm new to the Mac, so please forgive my naivete if what I'd like to see added to MarsEdit already exists and I just haven't discovered it yet.
I worked on a Windows product called Visio for 10-years. Visio was completely scriptable via OLE-Automation. One of the coolest things about the model was the ability to hookup code that could be notified when an event took place; like the position of a shape changing for instance. Very cool, and very handy to third party developers that wanted to create their own custom solutions on top of Visio.
Now, I don't want to create a custom application on top of MarsEdit, but I'd like to write some scripts to help automate some things I'd like to do with each and every new post. I'd like to be notified when I publish, period. If that notification could include some data that told me if it was a new post or a republished post that would be extremely cool, along with the post URL and maybe a few other data points, not sure what those would be right now. :-)
I'd like to receive the "PostPost", or "PostPublish", event so I could generate a small URL using TinyURL, and publish the resulting URL to Twitter in a standard format, something like...Weblog Post, Title: TinyURL
That's it! I'd imagine MarsEdit is most of the way there, I know you can script it with AppleScript, maybe I just need some lessons?
Labels: Applications, Development, Dreaming, Mac
Today I spent 30-minutes trying to figure something out, all because I made a very
Please, allow me to share, in hopes, you don't make the same mistake in your daily coding adventures.
On rare occasion I've inserted extra code into some routine that is turned on, or off, by a conditional #define. It's nothing new, coders do it every day. The mistake I made today was I used that conditional in two spots and put the #define DO_MY_SPECIAL_STUFF in both spots. Once in a header, once in the implementation file, because the implementation didn't include the header. The reason I added the #define in both places is because I was in a hurry and didn't want change the project defines, and force a rebuild. Ahhh, save time now, pay later! Which is exactly what I did. My code worked as expected, it failed, gracefully, but it failed, and I couldn't figure out why for quite a while. After getting angry, and scratching my head for a while, it hit me. I'd commented out one of the #defines and left the other active. DOH! Instant badness.
So, lesson for the day. If you have a conditional piece of code controlled by a #define, make sure that #define is in ONE place, not two.
Labels: Development, Tricks and Tips
: "It bears repeating that at Fog Creek our goal is building the best possible place for software developers to work. Finding a great space was not easy. Our ideal of giving every developer a private office is unusual, so itís almost impossible to find prebuilt office space set up that way. That means we didnít have much choice but to find the best raw space and then do our own interior construction."
- Pretty swanky digs! Makes me think of my days at Visio. Visio, without a doubt, is the best company I've ever worked for, prior to Microsoft acquiring it of course. It was a company built by developers, for developers. It was great for a LOT of reasons. Awesome people, fantastic product, great challenges, and an unmatched facilities. It looks like Fog Creek
has that great developer philosophy.
Check out the pictures
, great space.
Nick, I was thinking about your Twitter post
, and not wanting to resort to using the Twitter API to retrieve a profile image.
What if one of your NewsGator backend guys implemented IHttpHandler
and returned you the requested image, based on the user id?
So you should be able to do something like http://hodgepodge.newsgator.com/twitter/image/userid.jpg
. The IHttpHandler could grab the request, make a request to Twitter for the image, and return it to you. I believe this would work, but I'm not 100% sure. May be worth investigating so you can code things the way you'd like to on the client side.
If I had a Windows based backend I'd write it for you to try, but, unfortunately I don't.
Labels: .NET, Development
I love Visual Studio. I need a little badge I can wear around that says "I (heart) Visual Studio!" I do, I really, really do. But... and there's always a but isn't there?
The latest release seems to have really gone the wrong direction for the C/C++ developer, in my humble opinion. Editing, debugging, all great. The problem seems to lie in the auto completion/browsing capability. It's horribly slow. This morning, after 30-minutes, I finally had to kill off Visual Studio after right-clicking so I could "Go to Definition" of a method. Yes, I had other stuff to do so I left it alone hoping to come back and the hour glass disappear so I could work, no luck. Nuke it.
So, here I sit, waiting on a build to complete, and I make the mistake of right clicking on method name again. The IDE is now out to lunch, sorry Rob, no right mouse clicks for you, and you can forget ever seeing that menu you'd like to see.
Thing is I'll bet the C#, and Visual Basic crowd, are pretty pleased with it. All those nice little pop-up tool-tippy style helpers that allow you to dig into objects to inspect their values is pretty darned nice. Too bad it comes at the expense of the C/C++ side of the equation.
Maybe, just maybe, there are some settings I'm not aware of that will allow me to get better responsiveness from the bits I do like? I'll need to dig around and see if I can turn off some stuff to improve performance.
PS, I wonder, if the DNA of Visual Studio has a built in defense mechanism that causes it to misbehave in a VM on a Mac? It could happen...
PPS, it's still better than Vi, emacs, and gdb on Linux. Heaven forbid I have to work in that all day, every day.
PPPS, Note to the Linux world. Check out the great job the XCode guys did on their IDE. It uses gdb under the hood and allows you different views of the debugger, gdb console view and a nice GUI view that allows you to set breakpoints interactively.
PPPPS, I need to look at KDevelop again. Maybe it's much better than I give it credit for.
Labels: C++, Development, Microsoft, Visual Studio
: "This is a very pretty sight. Itís a screenshot from the IronPython CodePlex home page showing that 2.0 is the 'current release'. Yes thatís right, dear reader, IronPython 2.0 has officially been released!"
- The dynamic language guys have been doing a great job, we have IronPython, IronRuby, and the DLR thanks to them. Well done, and congratulations.
Labels: .NET, Development, Microsoft, Python, Ruby
: "Iíve never been a fan of how user-friendly the iPhoneís OS is. Sure, itís OK, but itís always bothered me that I did not need a USB client, computer and keyboard hooked to it to display a text-navigated kernel, and instead I was forced to use that beautiful graphical interface and intuitive touch screen to navigate my visually stunning and well-designed apps and games."
- Once again we have a case of "Pig on Lipstick
." While I don't see the lure a lot of geeks do, they do it simply because they can, not because it's useful. Let them play. It's not a real solution and I doubt it ever will be, like most Linux releases it for the geeks, not for real people.
Labels: Development, iPhone, Linux
: "Today we announced Delphi Prism ó our next generation Delphi development tool for the .Net platform. We have licensed the RemObjects Oxygene technology to create Delphi Prism. Delphi Prism is platform, stack, and database neutral. You can write code for the CLR almost anywhere it exists, including Mono for Linux and the Mac."
- This happened a few days back and it represents a very interesting move on the part of the Embarcadero
team. Native integration with Visual Studio will bring them a lot of attention, especially with guys like me that live in that environment and thrive in it.
Labels: .NET, Development, Tools
: "In Objective-C the lifetime of an object is not governed by the scope in which it appears - it is managed manually by the programmer."
- Nice talk on Objective-C object scoping and how to force the garbage collector to do your bidding.
Labels: Apple, Development, Objective-C, Tricks and Tips
The Unofficial Apple Weblog
: "Whether you've just started writing your first lines of code or you've just moved over to the Mac/iPhone platform as a developer, this guide is sure to please."
- Looks like a great list to me.
Labels: Apple, Cocoa, Development, iPhone, Mac, Objective-C
Cocoa with Love
: "The iPhone's onscreen keyboard occupies the bottom 216 pixels on screen (140 in landscape mode). That's around half the screen, so if you ever have a text field you want to edit in the bottom half of the screen, it needs to move or it will get covered."
- Nice tip for any iPhone developer. There is also a nice example of this in Apple's UIShowcase sample application.
Labels: Apple, Cocoa, Development, iPhone, Objective-C, Tricks and Tips
A good friend, and co-worker Tom, has been on a Linux trip lately, which isn't a bad thing since we do create products that run on Linux. I've been giving him a bad time lately about his newfound love of Vi, and now he's getting into gdb, God help us.
Yesterday Tom posted some very useful tips for debugging templates
in gdb, thanks Tom, but man, can it get any more arcane?
In honor of Tom's hard work I thought I'd share the same tip, only mine will be for those of you using Visual Studio.
1) Locate the line of code you'd like to debug.
2) Left-Mouse click in the left 'gutter', the grey strip that runs down the left of your edit window.
3) Press F5, or select Debug > Start Debugging.
4) Wait to hit the breakpoint.
Favorite Linux debugging tip (not): "Just add some printf's to it"
Labels: Development, Visual Studio
: "Small Basic is a project that's aimed at bringing "fun" back to programming. By providing a small and easy to learn programming language in a friendly and inviting development environment, Small Basic makes programming a breeze. Ideal for kids and adults alike, Small Basic helps beginners take the first step into the wonderful world of programming"
has a special place in my heart. My first professional programming job was writing accounting software in BASIC, Microsoft BASIC 6.0
as a matter of fact, what a great language, it was what's referred to as Street BASIC
because it was structured.
Labels: Development, Fun, Microsoft, Tools
So, is there any way to make XCode not
default to K&R style bracing. It's just plain ugly, and quite honestly, I can't believe people still use it. When I got my first professional C job way back we didn't use it then, but it seems to have holdouts in the hacker world, namely the Unix style derivatives.
Anywho, I digress, is there a way to make the braces lineup by default? Thanks!
Labels: Apple, Cocoa, Development, Mac, Objective-C, Tools, XCode
: "This is a quickie concept. A while back I had an idea for a multi-touch keyboard. It was an interesting idea and Iím sure at some point it will become reality. However weíre a software company not a hardware player. What could we do in software using existing hardware?"
- This is a neat idea. Use the iPhone as an auxiliary keyboard.
Labels: Development, iPhone
: "In case youíve missed it, while at the SDN conference in the Netherlands, Nick Hodges has dropped some information about Delphi Prism, the next release of Delphi on the .NET platform hosted inside the Visual Studio Shell."
- Wow, Delphi fans will either love or hate this move. Those that work in Visual Studio and are fans of Pascal will probably love it, very interesting.
: "So, weíve been developing a slick cross-platform media framework to standardize or products on (proprietry, of course), and I couldnít resist building an ASCII text renderer."
- Tom did a brilliant job with the design of our new media pipeline, but this, well, you'll have to forgive him, he couldn't help himself.
Labels: Cross Platform, Development, Fun, Graphics, Video
Cocoa Is My Girlfriend
: "Similar to one of my first blog posts on building a basic application for Mac OS X using xcode 3.0, I am going to explain for beginning iPhone/iPod Touch developers how to build the most basic Cocoa Touch application using Interface Builder and an application delegate in xcode 3.1."
Labels: Apple, Cocoa, Development, iPhone, Objective-C
9 to 5 Mac
: "Apple today gave up the fight to keep the NDA on released iPhone applications built with the iPhone SDK. The NDA has recieved much bad press and complaints from developers who wanted to communicate their experiences with developing programs for the iPod/iPhone platform."
- Good move Apple.
Labels: Apple, Development, iPhone
: "But even a perfectly normal experience with the iPhone developer program is intensely weird. Compared to the simplicity of developing and distributing a Mac app, Apple's iPhone program is extremely convoluted and strange. Here's the story, step by step."
Labels: Development, iPhone
: "it seems that Chrome renders YouTube just fine on my old Windows box - it's just under Parallels that a problem arises."
- It's interesting they released only on Windows, and the problem James is reporting makes me wonder if they're using hardware acceleration in their rendering? That would definitely be a problem in the current release of some VM's, I know VMWare Fusion has issues in 1.x, but I'm not sure about Parallels.
I guess it's time to go look at the code.
Labels: Development, Open Source
I'm catching up on the Google Chrome hype
this morning by reading through their comic book introduction
, which is very nice by the way, and I ran into one of my biggest development pet peeves, the use of the word Manager to describe something that manages a bunch of other things. Now, in this case, it could be the top level description given by marketing for the feature, then again it's probably used in the code.
I keep teasing folks at work I'm going to start using the new terms for these things because they have as much meaning as the word Manager.
So in the code you'd find something like...
ProcessVicePresident* pvp = new ProcessVicePresident();
ProcessManager* pm = new ProcessManager();
Yes, that'll work.
Labels: Development, Fun
: "The thing about having a public .NET API using underscores is it doesn't fit the recommended coding style. If you're in Eiffel, that's actually what you do - in fact, you use upper-case and underscores (e.g. GET_CUSTOMER). But it .NET, public APIs should be Pascal-cased with no underscores - e.g. GetCustomer."
- It's kind of strange how cultures form around coding style. You have the *NIX hacker that tend to use lower case and underscores and heaven forbid K&R style bracing, ick, the most disgusting coding style EVER! I find it hard to believe the IronPython and IronRuby teams use the K&R style, but they both started life outside of Microsoft, so they have that open source feel.
I'm with Jason on this, I do prefer Pascal cased public methods, and since there is a standard they should follow it, even if they don't like it.
Consistency is important.
Labels: .NET, Development
: "I was quickly able to get the Mac Pro up and running with Windows XP and my development environment in a VMware Fusion instance. With a couple of minor exceptions it worked great, providing me with everything I needed to build my web based solutions just as I had been on my native Windows XP machine."
- I must admit, I don't have the slightest clue who this guy is, but apparently a lot of people do so he's a pretty popular link. Anywho, I digress. I love my Mac, I won't go back to Windows, period. It's my biggest desire to write Mac software full time, but I make a living writing software for Windows and Linux. I do however use my MacBook Pro as a portal to development on both platforms. VMWare Fusion is a wonderful piece of software and allows me to run both OS's and easily switch between them. I have only one complaint, it's small, and I know it's not easy to do. I would love to be able to get full hardware acceleration on the GPU. I know, minor to most, especially Mr. Alison who does web services, but it is kind of major to me as we do live streaming of video and this Mac hardware screams! I've seen folks on our team boot into native Windows, using BootCamp, and get awesome video performance. I just wish we could get it under VMWare.
Labels: Apple, Development, Mac, VMWare
Wow, I just ran into a really freaky behavior in Visual Studio 2008. I'd set the Configuration Properties > C/C++ > Output Files > Object File Name
to a custom path, and I forgot to include the trailing backslash, which caused me all kinds of grief.
Basically the compiler happily created one file with the same name over and over and over and was actually able to successfully link, not sure why that worked, but it did.
So when I went to link to this particular library I'd get a whole mess of unresolved external references.
I finally saw my problem this morning. So, word to the wise, remember the trailing backslash. Yes, this was a user error
, but it was sure very easy to make that mistake.
Labels: Development, Microsoft, Visual Studio