Sep 22

It turns out that getting rid of those wacky new constraints you see attached to user interface elements in Interface Builder is easy. To remove auto layout constraints in Xcode 4.5, just uncheck the “Use Auto Layout” box from the File Inspector while in the Interface Builder layout.  Honestly, if you’re building for iOS 6 and beyond you’re probably going to have to get used to them.  To me, this heralds the end of the days where we only had a couple of aspect ratios to design for.

Tagged with:
Sep 01
Next Year Will be the Year of the Linux Desktop

Always next year...

Tagged with:
Aug 18


iOS SDK Tutorial: Simple Multithreaded Programming with Grand Central Dispatch
This tutorial demonstrates how to one might begin to utilize Grand Central Dispatch in order to write a multithreaded application in iOS for the iPhone/iPod Touch/iPad using Objective-C with Xcode.

Tagged with:
May 25

Mary Millbee's Memory Match - New Card Set!

The newest version of Mary Millbee’s Memory Match is live! This update adds a new set of number & letter cards.

Tagged with:
May 19

Apple Workstation

For the last year or so I began to realize that I was more interested in my extra circular iOS software engineering “hobby” work than my work as a software engineer. I had become even more interested in my hobby of pickpocketing senators to give to the rich, but alas that Ayn Randian pursuit translated poorly into a career.

On some days I might get up early to read through a section of the cocoa programming guide, for example, and then stay up late to finish some unit tests on an app I was developing. On some occasions I would even come home for lunch to work on my iOS project. I didn’t feel the same intensity with my work projects which made the work week less personally rewarding. I suppose one might say I was suffering from the-grass-is-always-greener-on-the-other-side-of-the-fence syndrome, but it looked so green in the neighboring field, and I couldn’t look away.

I should note that the work at my previous employer was not “boring”, “dull”, or anything not leading edge. My previous employer makes some pretty neat stuff and I’ve had the opportunity to work on a variety of diverse projects. The engineers working there are absolutely top notch, and I don’t think anyone could argue otherwise. None of them may be as charming, handsome, and as good at the drums in Rock Band as I am, but they are an outstanding group if you value “engineeryiness”. The decision to move my career in a new direction was coupled to how my interests had shifted independent of my employer at the time.

Despite this white hot interest in the world of iOS, I would occasionally take a week away from writing iOS code to stay focused on my day job. It wouldn’t have been fair to be obsessive about my hobby projects at the expense of employer. After all, I wasn’t being paid to develop iOS apps and it therefore I couldn’t let let that pursuit sap my mental energy (i.e. cut into my sleep).

It was during one of these self-imposed breaks that I came to the realizations that I wasn’t doing what I wanted, at least not specifically. What I wanted even more was to design and develop mobile software. So, I started looking around for employment developing iOS apps.

With only one app in the store and another most of the way done, I wrote to a game company in Las Vegas whose game I was fond of expressing my interest in applying for a job. I noticed a few days later that they had visited my personal website, but they never contacted me. I’m not sure if I would have moved to Las Vegas to work at a game company (i.e. a company that will likely not be around in 5 years), but I might have at least considered it for the right price. It would have fun to learn a little more about the company.

After dipping my toe into the iOS developer job market I forgot about it and continued working on my iPad app in my spare time for the next six months or so. I also decided that I would only apply to another job if it was perfect; I was fortunate enough to have that luxury.

Being completely undisciplined, I didn’t just apply to perfect jobs; I applied at various large companies. Most of these companies have resumes flooding in, and I suspected mine was like a grain of sand on the beach; I didn’t get many responses. I was ok with the lack of response, as I wasn’t very enthusiastic about any of those positions, anyways.

After a brief run of “shotgun” style online job hunts, my plan was to start looking for work in mobile development after I had finished my iPad app. I figured I would fair better with a second product in the app store.

Because this plan involved patience (of which I have none) my resistance only lasted about a month before I gave in and submitted another resume and cover letter. My iPad app was not done.

I felt that I HAD to stray from the plan when I found, what looked to be, the perfect position after searching for “iOS” into the Seattle craigslist jobs section late one night. I almost didn’t apply since I wanted to have another app in the app store, but the feeling that I couldn’t possibly find a more ideal position in a better location nagged at me. Once again I gave in and prematurely applied to a job.

The night I read the job listing I quickly created a video demonstrating my iPad app in it’s unfinished state (which was pretty close to complete) with text beside the video detailing how I went about designing the app (i.e. how I communicated between classes, or which audio framework I used).

The good part about applying for a job that you really want is that the cover letter is not difficult to write. You just write an honest cover letter articulating your passion. This contrasted my first job search out of college where I didn’t really know what I was interested in.

However, if I had trouble finding a job, I’m sure I would have eventually applied to some larger companies. Obviously, I didn’t want to be homeless out of college. On the other hand, the idea of being a traveler with no possessions or home sounds romantic. I imagine it becomes less-than-romantic the first time you have a bought of explosive diarrhea.

That same night that I submitted my resume to the Seattle company, I also saw a tweet from someone I followed on twitter requesting applications for an iOS developer for a game company in the San Francisco bay area. Potentially moving to the bay area seemed exciting (though prohibitively expensive), so I used a similar cover letter and applied there as well. I also included a link to the video I had just completed for the first company.

The Interviews

About a week after I had submitted the two resumes and cover letters, I had two phone interviews with both of the companies I had applied to. Both went well, and were fairly casual. I don’t recall very many questions that were asked in either interview, but it seemed that these interviews were to get a sense of my personality more than to test my problem solving abilities. Both were a relatively enjoyable experience, and both invited me to visit onsite for a face-to-face interview.

I do recall one question from the game development company which was “why do you like Objective-C?”. This threw me off a bit. For someone who spends most of his time using C, this is like asking “what do you like about the not feeling pain?”.

It seemed that having something tangible to show to a potential employer scored two interviews out of two attempts. 100% kill rate! The key to getting an interview was demonstrating a non-sucky project. I used a link to youtube to distribute my video and to take note of how many views it had seen. Everyone I talked to in the phone interviews had seen the video, and it seemed apparent that it was something that differentiated me from scores of other applicants. Apparently it didn’t suck!

Before the face-to-face interviews I studied the Apple documentation on Objective-C, the Objective-C runtime, Cocoa, and the graphic and animation systems in iOS. Even if I had no interviews, I felt that this was an extremely useful endeavor; I learned so much that I probably would have learned over a long span of time (via problem solving). If you are truly interested in iOS programming (and/or OS X programming) do yourself a favor and start with the guide to Objective-C, then the runtime documentation, then hit the Cocoa programming guide and/or the graphics programming guide. They were very informative documents, and it improved my understanding quite a bit.

Of course none of what I studied was useful for the interviewing process; hiring managers seemed to want to know about one’s general problem solving skills. I thought that might be the case before I started my studying regiment, but I wanted to be prepared as possible. My problem solving skills were likely not to improve in a week, but my understanding of iOS programming could. I also enjoyed studying that stuff, so it is not like it was a huge chore; besides it improved the code behind the iPad app I was working on at the time. I could bounce a quarter off my iPad App’s arse; it’s that solid.

The first interview I had was at a small game company in the San Francisco bay area. The interview started with a technical question about parsing through a set of xml tags using recursion. The task doesn’t sound very demanding as I sit here writing this but somehow I managed to flub it. Regardless, the interviewer didn’t have much else to gauge my technical prowess (this was, apparently, my one and only technical question), so I came across poorly.

After that screw up, the rest of the interview went well, but not well enough to make up for the beginning. I primarily got to know about the company and had an enjoyable time talking with new people. I even got to meet someone from twitter that I followed.

The next company I interviewed with had me sign an NDA when I walked in the door, so I can’t say much. I will say that this interview went 100% better.

It is my experience that if I take a breath, and relax before I start breaking down the problem I’ll figure it out. Not having just stepped out of the airport after traveling for 9 hours (like I had for the first interview) helped as well. I suppose the first interview served as a practice run which let me feel more “warmed up”. This is not to say that I enjoy the process…I’m always just trying to survive and not let my nerves get out of control.

With the second company I felt like I meshed well with the people I talked to. I also perceived this company as financially solid (especially when contrasted to the game company). As an added bonus this company was located in Western Washington, which is the area I grew up in. As much as I had grown to like Northern Idaho (a more importantly the friends my wife and I had made in the area), I missed the Seattle area.

It took forever to get an offer letter as the executives were out at a conference the week after my last phone interview. The following week the Seattle area experienced the worst winter weather in about 15 years, which meant no one was in the office. While waiting for an offer letter I had another company schedule an over the phone interview with me about another iOS developer position. I had probably applied months ago and forgot about it. I ended up canceling the interview as I had my heart set on the job I was patiently waiting for. I think that was the first time I had ever turned down a job interview; it was a weird feeling…definitely an ego boost, though. It’s always nice to be in demand.

In the end, I accepted the offer from the Seattle area company. About four months later I heard on twitter that the San Francisco game company had layoffs. Things definitely worked out for the best.

As a bonus, here are my interviewing do’ s and don’ts:

+ Do’s

Be well rested for your interview(s).
Have something to show (that isn’t rudimentary, or sucky) if you want to be noticed. A youtube video worked for me.
Use your interview time to interview them; find out about their programming practices, their revenue sources, etc. This also takes the pressure off of you, if you happen to be nervous.
Relax and approach the technical questions systematically (easier to say than do, of course).

- Don’ts

List every programming language you’ve ever touched on your resume.
Use hand puppets to act as your surrogate during the interview.
Lean in for a kiss when shaking hands.

Tagged with:
Apr 08

Memory Match Game

Mary Millbee’s Memory Match is now available for the iPad! Check it out in the app store, here.

BTW, it’s a free app!

Tagged with:
Feb 10


Before moving last week, my wife and I packed away all of our belongings.  Since my Mac Mini and custom built PC were packed away along with our CRT TVs, we decided to use my monitor, a Samsung T260HD, as a television.  Long story short; we loved this monitor as a TV.  I’d bet that the T260H isn’t a particularly “good” LCD TV, but it was a huge step up from a little 18″ CRT whose place it took.

If my current monitor would be our new TV, I needed a new monitor, and I decided I wanted one with 2560X1440 or 2560X1600 resolution.  The monitors I researched were:

1. Apple Thunderbolt Display
2. Apple LED Cinema Display
3. Samsung SyncMaster S27A850D
4. HP ZR2740w
5. Dell UltraSharp U2711

Each needed to attach to a 2011 Mac Mini Server, a 2010 MacBook Pro, and a custom built PC.  The Mini and the PC needed to be attached at all times, while the MacBook Pro was transient.

I should note that I am not an expert in monitor hardware and would never claim to be one. This is just an exploration from the perspective of a layman who works mostly in Xcode, does some amateur Photoshopin’, and a dabbles in 3D modeling from time to time.

The Apple Thunderbolt Display was the first monitor I took a look at.  Having everything pumping through that single thunderbolt cords sounds awesome; so clean, and neat.  Unfortunately things get less than ideal when you have more than one Mac.  Things get downright impossible when you add a non-Mac in the mix.

Macs without a thunderbolt port are unable to use this monitor, so that eliminated the MBP.  Since there are currently no thunderbolt video cards at the time of this writing for the PC, it couldn’t use the Thunderbolt Display as well.  The Mac Mini was the only machine I had that could utilize this display.

Even if I had to two thunderbolt Macs, there is no KMV switch available to conveniently switch between them.  I would have had to physically plug and unplug the machines when I wanted to alternate which machine was driving the display.

Not being able to use 2 out of my 3 machines with this display was a deal breaker, to say the least.  It seems pretty clear that the Thunderbolt display is really meant to be a MacBook docking station with a screen.

With the Apple LED Cinema Display, Apple, once again, limited itself with input port options.

The ACD uses a single Mini DisplayPort which actually would work with all three of my machines.  For about $150 I could have picked up a  PC video card with a Mini DisplayPort output.  So what’s the problem with this one?  Well, the only Mini DisplayPort KVMS available are expensive and are (for the most part) poorly reviewed.

Apple seems to build monitors with the assumption that one monitor is exclusively tied to one machine.  I suppose this might be the case 99% of the time, but it is not my situation.

It looked as if the non-Apple monitors were my only options.

The Samsung SyncMaster S27A850D has seen mostly favorable reviews.  However, it is not an IPS panel and is apparently prone to horizontal color shifting issues per the reviews on amazon.com.  My current monitor has color shift issues, and I wanted to avoid this with the next monitor.

The HP ZR2740w has been favorably reviewed.  It also features a similar (same?) panel than what dwells in Apple’s monitor offerings.  Unfortunately, The input connections are limited with only a DVI, and a DisplayPort input available.  This means that a DVI or DisplayPort KVM would be necessary to access all three of my machines.  Like the Apple Cinema Display, finding an inexpensive KVM for the DisplayPort or DVI port (that supports the 2560X1440) is currently impossible.

The Dell UltraSharp U2711, like the ZR2740w, has been favorably reviewed.  Beyond being a high resolution monitor, its claim to fame has been a wide color gamut.  The only downside to this monitor is that it still uses CCFL backlighting, which means it has to “warm up” before reaching its full brightness.  Other than that, it has just enough connections for my needs that can drive the monitor at its full resolution (2 DVI, 1 DisplayPort).  It’s also comparably priced to the HP and Samsung, and priced lower than the Apple monitors (of course).

So, in the end, I decided on the Dell U2711. Did I actually buy the Dell? Nope. I retained the Samsung T260H as my monitor and I returned to the CRT world for TV watchin’.  My samsung 1920X1200 monitor works fine, and it turns out that I don’t really care about TV.  A high resolution monitor would have been nice, but it isn’t worth ~900 dollars when I have a perfectly fine monitor already.

Tagged with:
Jan 29

Recently while setting up a Hadoop cluster, I wanted to verity gzip compression was being used during the map output phase. I couldn’t find anything online on how to do this, so I discovered the following method. BTW, if anyone knows of a better way to go about this, let me know; this is less than slick.

In Hadoop intermediate compression is turned on in the following way:

JobConf conf = new JobConf(getConf(), myApp.class);
...
conf.set("mapred.compress.map.output", "true")
conf.set("mapred.output.compression.type", "BLOCK");
conf.set("mapred.map.output.compression.codec", "org.apache.hadoop.io.compress.GzipCodec");

I verified gzip compression was enabled in the map output stage in the following way:

1) In your conf/core-site.xml file (or hadoop-site.xml in version < 0.20.0) you may have defined your temporary data directory for hadoop. This will be specified as the value for the hadoop.tmp.dir name. I don’t believe it’s required that you define the location of this directory, but if you haven’t defined it you’ll have to determine its default location.

2) While a job is executing you will want to copy the contents of the hadoop temporary folder to a another temporary directory.

3) From this directory navigate to mapred/local/taskTracker/jobcache/job_*/attemp_*_m_*/output/. You should see a file called file.out. If compression is enabled, this file should be compressed. I used hexedit on this file to verify that the gzip header was indeed present ( the gzip header will start with 1F 8B 08).

4) Additionally the job.xml located at taskTracker/jobcache/job_*/attemp_*_m_* should have a field called mapred.compress.map.output which will be set to true. Obviously if you’ve already observed a compressed file, this field ought to be set true; if the file was not compressed you should see false for that mapped.compress.map.output field.

Tagged with:
Oct 15

 

2011 quad core Mac Mini

I bought the 2011 Mac mini server to replace the lowest end 2007 Mac mini. My 2007 Mac mini had been maxed out with 2GB of memory (though technically you can install 4GB and address a maximum of 3GB) and a third party 160GB drive (originally it had a little 80GB drive), but the machine had become painful to work with when running applications like Photoshop, and Xcode simultaneously with a few Chrome tabs open. I might have tried to wring another year or two out of it, had it not been for the inability to increase the memory.

Before even turning the 2011 Mac mini server on for the first time, I replaced one of the HDDs with a SSD (OWC 120GB Mercury Pro 6G) and used the recovery mode to reinstall Lion. I set the SSD to be the system disk and the other drive to be used as additional storage. As a result I never got a feel for the performance of the system without the SSD. Had I know that I would be writing a review, I might have done a comparison; I don’t write reviews that often unless I’m deeply disappointed or exceptionally pleased.

With the 2011 quad core Mac mini server, I’m exceptionally pleased.

Before I go on and talk about my likes and dislikes about this computer, I’ve got to say that this thing has a gorgeous design. Like most Apple products, it’s got a clean industrial shape. I’m sure you already knew this, and it contributes nothing to what it throws up on your monitor, but it is a nice looking “thing”. It seems like such a waste to hide it away, as is often done with small form factor computers. If I could change anything about its appearance I would remove the apple logo; I hate how Apple (and nearly every other company…to be fair) plasters their logo on everything they make.

But I digress….

The 2011 quad core Mac mini seems like an entirely different beast when compared to the 2007 low end model. I didn’t realize how glacial my old machine was until I got this one. This thing does not so much as stutter with anything; I’m beginning to forget what the spinning beach ball looked like. The 64-bit geekbench score I recorded for the 2011 mini server was 9489, while the 2007 mini achieved a score of 2774. See the end of this post for details on those scores.

The sound produced by the fans from the 2007 mini and the 2011 mini server is also quite a bit different. As I sit here writing this review both of these Macs are idling, the 2011 is three feet to my right and the the 2007 mini three feet to my left. By comparison, the 2007 mini sounds like a wind turbine (ok, that’s a little exaggerated). That is not to say that I can’t hear the 2011 mini; I just have to turn off the 2007 mini to do so. Under load, however, the 2011 mini sounds louder than the 2007 idling. I should clarify that the 2007 is not loud at all; the 2011 mini is just less so.

I can’t speak to how well games run on this, but I’d imagine this wouldn’t be the machine you’d buy if gaming was important, as the machine does not have a discrete video card like the other 2 core Mac mini models. The integrated Intel HD 3000 video chipset seems fine for what I do which is photoshop, coding, web browsing, watching youtube etc, but then again, the GMA 950 in my old 2007 mini did those things fine as well.

Regarding connectivity there are plenty of usb 2.0 ports (4 ports), and the single firewire 800 port will likely be sufficient (since you typically chain firewire devices together). There is also a SDXC card slot on the back, but because it’s on the back (i.e. a pain to use) I’ll never use it. There is also one of those new-fangled thunderbolt ports on the back. I’ve yet to test the thunderbolt port with anything, but I have a 12″ Wacom Cintq that I’ll eventually plug in, at which point I’ll update this review. From other online accounts of people trying this, it should work with a displayport to dvi adapter.

Like other reviews have noted, the lack of a DVD drive is a bummer. If you want to get around this issue and have another computer (Mac or PC) you can remotely “share” that DVD/CD drive over your network with the mini. You can also, obviously, purchase an external usb DVD drive if the idea of your mini being dependent on other machines bugs you or have no other computer.

Another thing I dislike is the unnecessarily difficult process required to replacing the hard drive(s). Check out a video on youtube of the procedure involved and you’ll know what I mean. Apple, clearly, did not intend for end users to swap the hard disks. At least the memory is easy to replace.

Speaking of disks, If you end up buying your mini “built to order” with an SSD on Apple’s website, you might want to reconsider paying for Apple’s SSDs. Apparently (from what I’ve read) the Apple SSDs run at SATA II speeds, even though the mini’s SATA controller can support SATA III. I bought my SSD through Other World Computing (OWC). This is the first product that I’ve purchased from them and so far I haven’t had any issue. I will certainly update this review if that changes.

Overall I’m very pleased. A DVD drive and improved accessibility to the hard drives would have been nice, but the bliss of moving from a low end 2007 Mac mini to a high end 2011 overshadows those disappointments by many orders of magnitudes.

Pros:

  • Fast, 4 core processor (Intel Core i7-2635QM)
  • Capability to drive dual monitors
  • HDMI port and sufficient USB ports
  • Memory replacement/upgrade is easy

Cons:

  • No DVD/CD drive
  • Expensive
  • All ports are on the back. Would have been convenient to have the SDXC slot and/or a single usb on the front.
  • Hard disk replacement is not easy.


….
….
….
Geekbench 2.1.4 for Mac OS X x86 (64-bit) Benchmarks:



2007 Mac Mini (Macmini2,1 / MB138*/A ):
Processor integer performance: 2503
Processor floating point performance: 3968
Memory performance: 1808
Memory bandwidth performance: 1484
Geekbench Score: 2774

2011 Mac Mini Server (Macmini5,3 / MC936*/A ):
Processor integer performance: 8278
Processor floating point performance: 14615
Memory performance: 4911
Memory bandwidth performance: 4949
Geekbench Score: 9489

Performance Multiplier : 2007 Mac Mini to 2011 Mac Mini Server:
Processor integer performance: 3.30
Processor floating point performance: 3.68
Memory performance: 2.72
Memory bandwidth performance: 3.34
Geekbench Score: 3.42

Tagged with:
Oct 04

For fun I fashioned this table to chart the evolution of the power and battery capabilities (as estimated by Apple) of all of the iPhones available today through Apple. All units are in hours.

Model
Talk Time (3G)
Talk Time (2G)
Standby Time
Internet Use (3G)
Internet Use (WiFi)
Video Playback
Audio Playback
iPhone 3GS
5
12
300
5
9
10
30
iPhone 4
7
14
300
6
10
10
40
iPhone 4s
8
14
200
6
9
10
40


Though the iPhone 4s gives up a little with regard to WiFi use and standby, it bests the iPhone 4 on talk time by an hour. Overall, the new iPhone 4s looks to be roughly on par with the iPhone 4 with regard to power and battery capabilities alone. This evaluation of being “on par”, of course, doesn’t account for the fact that the 4s ought to be considerably more powerful than the 4.

-James

Tagged with:
preload preload preload