Skip to content

Posts from the ‘Development’ Category

Tumblr Colossus

November 17th, 2014

Rob Fahrni

Tumblr Engineering: “Written in Scala and built on NIO and the Akka actor framework, Colossus has had a huge impact on the way we build services at Tumblr.”

Scala is the new hotness. Everything else is old and busted.

IMG_3422.JPG

Fear of Public Speaking

November 15th, 2014

Rob Fahrni

As I mentioned earlier I’m looking for a new gig, so I’ve been interviewing with folks. I’ve had a couple of interviews where they’ve asked me to look at code or write code. I’m absolutely horrible at this. When I’m put on the spot I break out in a sweat, really I do. I don’t know why, but I get super embarrassed, and I cannot think, at all.

Last Wednesday I was asked to solve the FizzBuzz problem. I fizzed out, why? I just cannot perform in an environment with people staring at me, on the spot. It’s just the way I am, and it means if I have to do whiteboard coding exercise, I’m most likely screwed because I can’t think logically.

Anyway, back to FizzBuzz. After leaving the interview my wife and I drove around the city, had lunch, and generally tried to make a day of it. On the way home I decided to pop out my MacBook and do the FizzBuzz exercise from memory. It took me less than five minutes to make the logic work as expected, then I “fancied” it up for my own sake.

Here’s the answer in a few lines of C code.

static void FizzBuzz()
{
    static int kBufferMax = 256;
    
    char outputBuffer[kBufferMax];
    
    for (int x = 1; x <= 100; x++)
    {
        memset(&outputBuffer, 0, kBufferMax);
        if (0 == (x % 3))
        {
            strcpy(outputBuffer, "Fizz");
        }
        if (0 == (x % 5))
        {
            strcat(outputBuffer, "Buzz");
        }
        
        if (outputBuffer[0])
        {
            printf("%s - value %d\n", outputBuffer, x);
        }
    }
}

Pretty simple, isn’t it? Here’s a Gist if you’d like.

I also have a fear of public speaking. I’ve managed to get over some of this by making sure I know my material cold when I’m speaking. It makes a huge difference, but in an interview you never know what you’re going to be asked to do. That alone sets me up to fail at the whiteboard. I’m nervous before I start.

Into the Fray

November 15th, 2014

Rob Fahrni

I Have Failed

Will code for...Back in June I decided I’d jump back out into the Freelance iOS world and make a go of it. I had a couple contracts lined up so it seemed like a good time to make another run at it. Boy, was I wrong. About that time a number of well known Indie software developers were writing about their experiences in the App Store. The market for Indie work has kind of collapsed and I can tell you the Freelance market has bottomed out in many ways. It’s difficult to get folks to understand a mobile application is a real application. I hope someone is studying the psychology surrounding this phenomenon. I know every freelance developer has experienced this in their field. You give an honest estimation of time and an associated dollar value, and you never hear from them again. I hear fellow developers saying “Yep, been there, done that.” It’s just how things work.

Some of the contract work I’ve taken over the past couple of months are jobs I should not have taken. The pay was substantially less than it should have been and at least one of the applications was so substantial in size I really should have walked away, but I didn’t. That’s a big mistake on my part, something I regret, and a mistake I cannot make again. I took the work because I needed it. It’s a horrible position to negotiate from. You have zero power.

I also had a contract that went about as sideways as one could go. That is a cautionary tale and one I hope to tell someday, but not now.

All of this is, of course, a self made disaster. I chose to take the work, it’s something I’ll have to struggle out of, in the meantime I’m back out on the market, looking for a full-time gig.

What Do I Offer?

I’m a seasoned developer. You can call me old, that’s fine, I am not a 20-something. I have a wealth of experience shipping software. I’ve lead teams of developers and I’ve been an individual contributor. I know how to ship software. I’ve been there many times.

Most of my experience lies on the client side of the world. Windows desktop and iOS primarily. I’ve written code in C, C++, Objective-C, and C#. I have had a couple of stints writing software that ran on the server; Paramount Farms and LEVEL Studios come to mind. Both times the server side code was developed using a full Microsoft stack; C#, .Net, and SQL Server.

I believe connected services are the obvious thing to be doing. Along those lines I have experience developing and consuming services. REST and JSON based services are where it’s at today, but I’ve also consumed SOAP/XML based services. It’s all data, but I really do like the simplicity of REST/JSON.

I still like writing software but I’d also be more than happy to take on a Development Lead or Program Manager role. My last full-time position, with Pelco, was leading a team of 8-12 folks (it fluctuated in size and I’m counting contracted developers) developing a C++ and C# SDK for use with the Pelco VMS and I really loved what I was doing. I didn’t leave because I was unhappy, I left because iOS was calling me.

I’d love to continue working on iOS Applications, if possible, but I’d be equally happy working on desktop or server side software. I will warn folks up front. My SQL skills are pretty crude, but doing application logic and user interface isn’t a problem and is something I quite enjoy.

Career Highlights

I’m not much of a salesman. I don’t interview well (Whiteboard code? Instant fail, test anxiety.) I say this because I’ve had some of these moments recently. That’s the bad side of me.

I thought I’d share some things I have done and are in use by millions of people worldwide.

  1. Visio – I worked on Visio for over 10-years. QA, Setup Developer, Developer Support, and Visio Engine Development. When I left in 2003 Visio was used by over 9-million people worldwide.
  2. Pelco Endura – I worked on the Pelco line of Decoders for five years. This included the Workstation, VCD, and our shared pipeline component framework; MPF (Media Processing Framework.)
  3. Pelco SDK – I worked with a talented group of folks to create a reimagined SDK. We were able to design a new object-oriented C++ and C# SDK. I love creating code for others to use.
  4. LEVEL Studios – While at level I contributed to web services used by a large Android handset manufacturer. At the time the project was handed off our client it was supporting over 8-million people worldwide.
  5. Freelance – While freelancing I helped with a few applications, some are no longer in the store, and I have created a couple apps of my own (both in desperate need of a facelift, I know.)

If I were to sum up what I can offer I’d say this. I know how to ship software, how to make those tough decisions, and I can see the big picture. I know, and understand, that business needs play a big role in product development. I can lead or follow.

Work Note: That compiled?

August 29th, 2014

Rob Fahrni

I just ran across something that had me stumped for a while, I just couldn’t see it, and I would have thought the compiler would have choked on it. It didn’t, it built, and ran, and produced interesting results.

Confession time: I’m not using auto layout, yet. Why? I haven’t had the time to commit to it. Yes, I’m aware it would probably save me time in the long run. I will learn it, of course, just not today.

Anywho, back to the story.

I hade some code that looked like this, I must have been distracted mid-thought, and did a build. This code built.

self.thingView.frame = frame;
self.thingView.frame

AHHHHHH!Anyone see a problem there? No assignment, no closing “;”. The code built and ran! The outcome was my view moving into strange positions during rotation for no apparent reason. Wow.

I finally had to do a diff to find it, I just couldn’t see it.

Words to live by

August 5th, 2014

Rob Fahrni

Jared Sinclair: “Focus on a difficult problem that matters to a significant number of normal people. Don’t worry about being the prettiest or the most featured. Get your hands dirty and find out what the rest of the world is struggling with.”

Will write C/C++ for foodThese words apply to any software indie, not just someone developing an iOS Application. I’m convinced now, more that ever, that services are the way to go. Create something people are willing to pay for and give them access to it from the desktop and mobile (iOS and Android), and possibly other platforms. Guys like Rob Walling have been spreading the gospel of the micropreneur for years.

A perfect example of this in the iOS world is the work Justin Williams is doing with Glassboard. He’s following the micropreneur playbook, even if he doesn’t realize it. He’s found a nice niche market, he’s asking people to pay for the service (the nerve!) He also has a blog, where he runs ads, and has just recently changed his podcast from advertiser supported to listener supported. All very smart ways to earn a living. These ideas all run counter to the Silicon Valley idea of blowing large sums of money in hopes of an “exit.” These guys are actually running businesses, bravo.

If anyone thinks this is easy, they’d be wrong. It’s not easy. It requires long hours and sleepless nights to get things off the ground, then it requires constant supervision to make sure it doesn’t fall apart. Oh, and even if you do all of that, it can still fall apart. Hey, it’s a business. Some people have the midas touch when it comes to business and many of us do not. The majority of us will fail.

Something else in another of Jared’s posts that really struck accord: “My marriage and mental health suffered a lot because of that punchcard. I worked on Unread seven days a week, at almost any hour of the day. I think the quality and polish of Version 1.0 is due to all that extra effort, but it was physically and emotionally taxing. It’s not a sustainable way to live, and I don’t recommend it.”

This reminds me of something I read on a CompuServ (I believe?) forum circa 1988-89, back before the internet. My manager would check the forums on occasion for tips and tricks for Clipper developers (wow, what an awesome dBase compiler.) If memory serves it was in one of those forums we found a quote that sticks with me to this day. An indie developer of C extensions to Clipper said something like:

“Being a self-employed software developer is great. I can work any hours I want to work. Any 80 hours in the week I want to work.

Food for thought if you’re thinking of going indie. I don’t mean that to discourage you. I only say that because it’s going to take a lot of work. Be prepared to do more than have a great idea. Be prepared to put in the time to make it work. Oh, yes, one more thing. After you develop this great application you have to market it. I think that’s where most of us will fail. Marketing. I’d imagine that is more important than actually developing a great service, or application.

Work Note: When to share?

August 2nd, 2014

Rob Fahrni

I do freelance work. As a freelance developer I’ve had times where I need to write code I know others could use. I use plenty of open source software, so I figure I should try to contribute something back.

That said, I’m working on a project right now that needs to parse RSS feeds. I know there are some existing RSS parsers available for Objective-C, but I’m going to write my own for a few simple reasons.

  1. I need it for this project
  2. I can reuse it later
  3. I’d like to give back
  4. I wanted to do something block based
  5. I wanted to publish it using CocoaPods

This exercise is primarily about two things; Sharing and self learning.Duct Tape, fixer of all things!

If I’m the only person that ever uses it, at least I’ve learned something new (packaging with CocoaPods) and I have something I can use again.

Update (6PM): I’ve published what I’ve completed. Some warnings. This code is very much as is. I’ve only tried it with well behaving RSS 2.0 feeds. The code definitely stands on the backs of giants. It depends on TouchXML to do all the hard work, all this code does is create RSS objects. Do not expect much.

I still need to add CocoaPods support and it could use a bunch of unit tests. I’ve done a few, but I can go a whole lot deeper.

Anywho, lots to do.

Mobile Apps are Real Applications

July 3rd, 2014

Rob Fahrni

RibbitMartian Craft: “Do you want a one bedroom shack for $50,000 or a mega mansion for $2M+ similar to Facebook, Twitter, or Instagram? As with homes, many clients opt for a starter size for their first app. This allows them to build a solid foundation that will be setup to grow with them for years to come.”

This is another great article on the true cost of mobile app development. No, it’s not the first and probably won’t be the last. As a freelance app developer I have to share this kind of news with folks all the time. I’m sure other developers have these conversations, they go something like this…

Potential Client: “I’d like to build this application.”
Developer: “Ok, let’s talk about your application.”
Potential Client: “I would like this and this and this.” (Of course I’m paraphrasing, the client is obviously excited about their product, as they should be.)
Developer: “Great, what kind of budget do you have?”
Potential Client: “I don’t have a lot to spend, how much would you charge for everything I’ve outlined?”
Developer: “It will take X dollars to develop your app, just a ballpark figure. It could be more, it could be less.”
Potential Client: [Silence. Never heard from again.]

I don’t say this to embarrass anyone. I’m only sharing it because it is true. For every 10 people I speak with about developing an application I may only get one of them to talk to me past this point.

I’m not sure if there is some sort of psychological barrier because these are mobile applications and not taken seriously, or what? In the end this is serious software that takes time, and a lot of effort, to develop.

When you have an idea for a mobile application and need a developer, remember this: Mobile Applications are real software. Think of them as your web site, or that accounting software you use every day, or maybe a word processing package from your favorite software company. Maybe that will help with the sticker shock?

If you need an iOS Application for your business or need a developer to bring that app you’ve always wanted to life. Get in touch, I can help.

Regarding Swift

June 7th, 2014

Rob Fahrni

ZDNet: “In essence, Apple had one job — create a new baseline tooling for iOS and show a sympatico approach with how the rest of the industry actually operates — and they blew it.”

I don’t know anything about the author, but based on his statements I have to conclude he’s never written a line of production quality code in his life.

The last thing we need is a lowest common denominator language to allow iOS developers to make code that runs on other platforms. Ridiculous. We have the web for that. If you want a lowest common denominator experience, create a “responsive” website with JavaScript and be done with it. If you want the best experience, go native, with native tools.

Would C# be great on the platform? Yes, but there is no need for the .Net runtime because Cocoa gives us everything we need and it’s not garbage collected. No need for the additional overhead.

If you’re ok with the Xamarin approach, which is very nice, then you should, by all means use it. There may come a day when I’ll have to create an app that works for both iOS and Android and that may be the best approach, until then I’ll focus on learning the native platform tools so I can provide the best experience for my users.

Super Marius

May 22nd, 2014

Rob Fahrni

I have the pleasure of working with some great folks every day. These great folks just so happen to be great developers.

Here’s a classic quote from one of them. I just had to record it.

It may be elegant and encapsulated, but it also has to work.” – Marius Matioc, May 20, 2014

Old Code Never Dies

April 19th, 2014

Rob Fahrni

CheezyPing still worksI happened across some old C++ code I wrote back in 2001. I decided to put it up on GitHub for kicks, might as well put some history up for future generations, right?

I was curious to see if I could build it. The original project was built with Visual Studio 6.0, circa 1998. I have a copy of Visual Studio 2010, so I fired it up pointed it at the original cp.dsw file and was pleasantly surprised it converted. I selected Build All and got a few warnings about some ATL include files I no longer needed, so I removed those. The only other thing that needs correcting are a few warnings related to use of older CRT string copy functions that are not secure. If you’ve upgraded a C or C++ project over the last few years you’ll be familiar with this warning:

warning C4996: '_tcsncpy': This function or variable may be unsafe. Consider using _tcsncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.

The code still builds and will execute, but if I were going to use it daily, I’d update it. For now, it’s OK, the code built. Maybe I’ll download a new copy of Visual Studio 2013, get it working with that, and check it in. It would be pretty nifty to create a Mac version by doing an implementation of the HttpIf interface using NSURL and NSURLConnection. This could be a GrilledCheese implementation. Hmmmmmm.

Anywho, once I got a build I hopped out to the command line, and ran it. I was surprised to see, it still works. Amazing.