Pre-“Hello Again” Mac Event Thoughts

Having been a long time Mac user and developer it’s been very disappointing to see Apple ignore the hardware release cycle of the Mac platform over the last few years. I’m really anxious to see what’s going to come of the “Hello Again” event this week and I might even buy a new Mac depending.

Current Mac-state of Mind

So my main personal machine is a 2011 maxed-out iMac. I bought it after waiting and waiting for a proper Mac Pro update in 2011 that was never to come. Overall I’ve been pretty happy with the iMac. I have had to do a USB storage dance with some backups and media drives but overall it’s been a workhorse, with tons of days of Xcode and Warcraft under its belt.

Other Macs in my arsenal include:

  • A 2011 Mac mini which at times has served as a CI box but as of now is dormant (might be resurrected depending how CI plans turn out for my side project).
  • A 2012 Macbook Air which I use situationally. Recently for beta testing 10.12 over the summer and the occasional Philly CocoaHeads video capture.
  • My work provides me a high end Mid 2014 15-inch Macbook Pro. I’m trying to do a better job of keeping that machine in kind of a white room state just for work stuff with mixed success.

I also have a 27-inch Thunderbolt display and a 27-inch Dell display which I use to extend my Macs in various ways at different times.

To Upgrade or Not?

Technically speaking my 2011 iMac is working fine. It does have some issues: occasionally the wifi likes to disconnect, there are some color issues spreading out from the lower left corner of the display, the DVD drive broke (I bought an external one to supplement the occasional need) and the 256 GB SSD is not large enough to hold all my stuff anymore so I have an awkward HD layout with USB storage. The iMac also runs very hot. I suspect part of this is dust build up but have not investigated too much. While annoying, none of these issues are blockers.

The first big upgrade question is laptop or desktop? I’ve always leaned on the desktop experience for pure power but there are many things that push me towards a laptop as my main personal machine right now:

  • I could setup a very “swap” friendly environment that would allow me to have a home work station letting me plug in my personal or work¬†laptop as needed.
  • Since I have a Gaming PC now I don’t need the graphic power of the Mac as much making laptop more feasible.
  • I am traveling more — more conferences, more work trips, single days at IndyHall (instead of a full time desk and me leaving the iMac there). A personal laptop¬†for these days would help me with that home/work separation on the company laptop.

Other welcome improvements:

  • Retina Display. My iMac does not have a retina display and my hope would be that a new laptop from Apple would support this natively as well as support a future retina external monitor connection.
  • More SSD storage. Would be nice to consolidate my external drives into one big SSD.
  • If I go laptop, no need to upgrade two machines every year with a new OS, keeps all the software/licenses in sync.
  • Complier speed improvements. From a numbers perspective my iMac has a good CPU but I would hope improvements to the bus speeds and other architecture improvements would see some improved Xcode complier times.

I feel like in the process of writing this I’ve talked myself into a upgrade but we’ll see what comes out of Apple on Thursday. Enjoy the show.

Quick Launching for Cocoa Unit Tests

I was doing some proofreading and research today regarding the latest testing features in Xcode 7. In the process I ended up rereading this article from Mark Dalrymple on code coverage. It’s a great article but it also reminded me of a little tip I wanted to share on the blog.

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    ...
    // bail out early if we're running as a test harness.
    if (NSClassFromString(@"XCTestCase")) return YES;

    // otherwise load the main storyboard.
    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
    UIViewController *vc = [storyboard instantiateInitialViewController];
    ...
}

Not only can this type of check help speed up your unit test times by a little bit, but, it also makes sure you aren’t loading things like crash log capture tools, performance monitoring injections, or other things that might otherwise interfere with your unit test logic or code coverage numbers. Now if you are doing the new UI testing you’ll probably have to use some other kind of flag to define this path, but regardless the core idea is the same.

Questions for Your Job Hunt

Jobbies

While looking for a new job last year I slowly built a list of questions I would ask the various companies to help better understand if they were a good fit for me. Some of these questions are ripped from other blog posts, like The Joel Test, but many of them were from personal brainstorming and soul searching about what I wanted.

Hopefully this list helps those out there looking for something new.

Culture

  • Pretend I know nothing about the company, how do you describe it?
  • Who owns the company? What are their interests?
  • How would you describe the company culture?
  • What are its core values?
  • How is this evident in everyday action?
  • There is a great TED talk by Simon Sinek that has a simple but powerful model for inspirational leadership all starting with a golden circle and the question “Why?” He describes a circle with the word Why? in the center and then moving outward, How? and then What? — Simon explains that most people can answer the What, what do they do? — some fewer still can answer the How — but the truly successful can answer the Why? Why do they do it? Why does your company do what it does? Why does this company sell paper towels instead?
  • What can I see / download as a public example of your work?
  • Name something the company is struggling with and how you are trying to fix it?
  • Name something the company excels at? What are the lessons to be learned?
  • What’s going to change at this company over the next year? three years? five years?

Process

  • How does upper management communicate with the company at large?
  • How are projects and/or teams organized?
  • How do teams communicate?
  • How do you plan and track work?
  • How do you estimate?
  • Do people work on multiple projects at the same time? If so, how is time broken up?
  • What is the process like from napkin idea to deployed feature / service? Where am I in this process?
  • Who decides what to work on?
  • Who is the designer? Do they work closely with the development team? How much to they appreciate, expand on norms of the various platforms?
  • Is there a standard process for the handing off assets, specs, motion simulations from the design team to the development team?
  • Do you ever do retrospectives? If so when? end of the sprint? end of the project?
  • Do you ever have internal projects? How do they work?
  • How would you split up my weekly hours between different responsibilities?
  • How is customer support handled?
  • Do I have any interaction with the customers?

Process (Client-based work)

  • If I’m working on a client project, what is my interaction with them?
  • How does pricing work for client projects? How is development involved in coming up with these figures? What would my responsibility be in this?

HR

  • How do you run employee reviews?
  • How do you gauge employee happiness?
  • Are there any company events? travel?
  • Would I be required to interview people?
  • Do you have an official interview process?
  • Do new candidates write code during their interview?
  • How does overtime work? Are people compensated for overtime?
  • How does vacation work?
  • Are there sick days? Long term sick days?
  • Can people work from home? Do they?
  • Is there a 401K?
  • Is there a health plan? Dental?
  • Is there on-site parking? Do I have to pay for it?
  • Is travel involved for this job?
  • Do you have a company manual? Can I have a copy?
  • Do you have an org chart? Can I have a copy?
  • How is the development group organized?
  • Who do I report to? Who reports to me (if any)?
  • How transparent is the company with regard to it’s goals, it’s plans, it’s money?

Education

  • How do you make sure the staff is continually learning?
  • Do people get a dedicated budget for things like attending conferences, purchasing books?
  • Do you allow people to travel to speak at conference during company time?
  • How do you track staff technical skills? Current abilities, wanted improvements?
  • Do you have an official mentoring system?

Tools

  • Do you use the best tools money can buy?
  • Do you have testers?
  • Do you do hallway usability testing?

Code

  • Do you use source control?
  • Can you make a build in one step?
  • Do you make daily builds?
  • Do you have a bug database?
  • Do you fix bugs before writing new code?
  • Do you have an up-to-date schedule?
  • Do you have a spec?
  • Do programmers have quiet working conditions?
  • Do you do code review?
  • Do you do pair programming?
  • Can I have a tour of an active project’s code base?
  • How many developers are there?
  • What is the proficiency ratio between senior level / mid level / junior level developers in the company?
  • Do you let people jump around from stack to stack or do most people stay focused on their specialty?

End of list. Best of luck with your job hunt!

Philly Craftsmanship

Software as Craft Philadelphia

A community of professionals dedicated to well-crafted software

Was very happy to attend the inaugural meeting of this group last week. Was a great mix of discussion and hands-on coding/pairing. Thanks to Promptworks for hosting.

During the discussions, the Software Craftsmanship North America conference (as well as its manifesto) were mentioned. You can find a bunch of the conference videos on the eighthlight vimeo channel. Seems like pretty interesting stuff.

In related news (since I think all hosts were in attendance at said meeting), I want to give a plug to the podcast Turing-Incomplete podcast. Finally starting to catch up on this Philly showcase of talent and really enjoying the discussions. Keep up the good work!

Setup Bots Status as a Screensaver

It’s time to turn off that family photo screensaver and switch to something that’s important, CI status screens!

Bots Big Screen

First up you’ll need this screensaver (or something similar), which can be configured to load a single or multiple websites up as a screensaver.

https://github.com/liquidx/webviewscreensaver

Sadly the screensaver bundle is not developer signed so if you are bit paranoid consider downloading, inspecting and building the thing from source. Or you could be like me and hit run inside of Security after the initial “can’t run, not signed” dialogue.

Next you’ll need some URLs. I run both Xcode Bots and Jenkins off my Mac mini named GLaDOS and for those you’ll want URLs like:

http://glados.local/xcode/bigscreen

http://glados.local:8080/view/Monitor/

For Jenkins I’m currently using the Build Monitor Plugin which is pretty basic but a nice start.

Here’s to hoping all your returns from coffee breaks are bathed in green and passing tests.

Xcode Bots and Branches

Just a little quick tip tonight. If you create a Bot from within Xcode 5 it will assume that the branch you want this Bot to run on is the branch you are currently on. To change this, use the Xcode Bot Web interface. Select your Bot and look for the settings gear in the upper right and then edit the Bot, defining which branch you want to bot to run on.

Xcode Bot Setting Gear

Xcode Bot Setting Details

I’m starting to revive an old side project of mine and it’s feeling good so far. I have Xcode Bots running tests and the static analyzer (all green baby!). I also have Jenkins deploying to HockeyApp when I merge development into my qa branch. Hope to share more details soon.

Updating Homebrew’s “httpListenAddress” Default for Jenkins

I’ve setup some Jenkins servers in the past for Ruby on Rails apps but these days we are trying to get things running for iOS deployment and testing at work.

To experiment with some plugins and such I have my own Mac mini and installed Jenkins via Homebrew. Overall it’s working great though I was a bit stumped as to why I couldn’t load the Jenkins webpages outside of using localhost:8080 on the Mac mini itself. Worked fine last I did a clean install.

Turns out the Launch Agent settings Homebrew gives you (located at ~/Library/LaunchAgents/homebrew.mxcl.jenkins.plist for me) will launch with the following command line parameter --httpListenAddress=127.0.0.1. Edit this to 0.0.0.0 (the default) to allow all addresses.

I know this isn’t the most enjoyable blog post but wanted to post it as Google Food for others who might run into the issue.

Other related posts: