<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><atom:link rel="hub" href="http://tumblr.superfeedr.com/" xmlns:atom="http://www.w3.org/2005/Atom"/><description>Guaranteed to increase your knowledge of pointless facts by 57%! See? It’s already working!</description><title>All your round are belong to us.</title><generator>Tumblr (3.0; @spherecat1)</generator><link>http://blog.spherecat1.com/</link><item><title>#Defining your wrappers</title><description>&lt;p&gt;I’m working on a new project that uses &lt;a href="http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html"&gt;ARC&lt;/a&gt;, because, frankly, I suck at memory management (in Objective-C and in real life). Zeroing weak references (ZWRs) are my absolute favorite new feature, as I use weak references fairly often to reference the parent object in a tree. So, I was very disappointed to learn that ZWRs do not, in fact, work on Snow Leopard.&lt;/p&gt;
&lt;p&gt;Luckily, the Mac community came through for me, and I found &lt;a href="https://github.com/mikeash/MAZeroingWeakRef"&gt;MAZeroingWeakRef&lt;/a&gt;. It gives me all of the benefits of ZWRs without the limitation of excluding Snow Leopard users from the fun. The only downside of using it is that it makes your variable declarations somewhat opaque. For example:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;NSPotato *parentPotato;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;becomes:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;MAZeroingWeakRef *parentPotato; // This is an NSPotato.&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Now, this is a minor issue, but I like my interfaces to be as readable as possible, so I decided to come up with a way to remedy this. This is what I came up with:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;#define weak(className) MAZeroingWeakRef&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It’s just your average preprocessor macro, with a parameter that isn’t used in the definition to give you a place to put the actual class name. I just dropped that into my prefix (.pch) file, along with the #import statement for MAZeroingWeakRef.h, and now I can write:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;&lt;span&gt; &lt;/span&gt;weak(NSPotato) *parentPotato;&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;and my interfaces can live up to my own ridiculous standards again! The one thing you do have to remember is to import MAZeroingWeakRef.h wherever you use this.&lt;/p&gt;
&lt;p&gt;The best part of this is that it will work for any wrapper style object, just swap out the relevant class and macro names in the #define, and away you go! So, say I had a wrapper for NSPotato objects called NSVegetable:&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#define vegetable(className) NSVegetable&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;It’s that easy! Enjoy.&lt;/p&gt;
&lt;p&gt;(Disclaimer: I haven’t tested this outside of Xcode 4.2, not sure if all versions of the preprocessor will take kindly to having an unused parameter in the macro. If you have issues, please let me know here or on Twitter, @SphereCat1.)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/15081821689</link><guid>http://blog.spherecat1.com/post/15081821689</guid><pubDate>Sat, 31 Dec 2011 09:44:23 -0500</pubDate></item><item><title>Eject key hacking for fun and profit</title><description>&lt;p&gt;A while back, I wrote about how you can make the Caps Lock key &lt;a href="http://blog.spherecat1.com/post/3222306428/launching-alfred-with-caps-lock"&gt;actually do something useful&lt;/a&gt;. Today, I’ll do the same thing with the Eject key.&lt;/p&gt;
&lt;p&gt;Now, granted, the Eject key isn’t quite as useless as Caps Lock, since it &lt;em&gt;is&lt;/em&gt; the easiest way to get a disc out of your SuperDrive. However, and I don’t know about you, but I haven’t been putting very many discs in there lately that need ejecting. So, today I decided that I would make the Eject key do something much more helpful: eject external drives.&lt;/p&gt;
&lt;p&gt;The process for doing this is fairly simple, and uses tools from the same people who made the one used in the Caps Lock article. So, let’s get started!&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step #1: Download KeyRemap4MacBook and NoEjectDelay.&lt;br/&gt;&lt;a href="http://pqrs.org/macosx/keyremap4macbook/"&gt;KeyRemap4MacBook&lt;/a&gt;&lt;/strong&gt; is a preference pane which allows you to do all kinds of fun stuff to your keyboard. You should play with some of the other options after setting this up, it’s very powerful. &lt;strong&gt;&lt;a href="http://pqrs.org/macosx/keyremap4macbook/extra.html"&gt;NoEjectDelay&lt;/a&gt;&lt;/strong&gt; is a simple utility that removes the need to hold the Eject key for a couple seconds for it to work. This one is optional.&lt;/p&gt;
&lt;p&gt;Install at least KeyRemap, then reboot as directed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step #2: Download the script and make it a hotkey.&lt;/strong&gt;&lt;br/&gt;To eject all external disks, we’ll be using a simple AppleScript, &lt;strong&gt;&lt;a href="http://files.spherecat1.com/ejectalldrives.scpt"&gt;which you can download here&lt;/a&gt;&lt;/strong&gt;. Save it somewhere where it can live permanently. Now, you’ll need to set it up as a hotkey in your launcher of choice, I’ll be covering &lt;a href="http://alfredapp.com/"&gt;Alfred&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To set up a custom hotkey in Alfred, open the Alfred preferences. Go to the &lt;strong&gt;Features&lt;/strong&gt; tab, and then &lt;strong&gt;Global Hotkeys&lt;/strong&gt;. Click the [+] button, and set the Hotkey to &lt;strong&gt;Shift+Control+Option+Command+E&lt;/strong&gt;. Set the Action to the path where you saved the script.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step #3: Remap the Eject key.&lt;br/&gt;&lt;/strong&gt;Alright, we’re almost there. The last thing you have to do is remap the Eject key to the key combination you entered in the Hotkey field. We’re using that shortcut simply because it’s one of the options built into KeyRemap4MacBook. So, open up the newly installed preference pane, and type “Eject to Command” (without the quotes) into the search box. Once it filters the options, check the one that says “Eject to Command+Control+Option+Shift+E”.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Step #4: Profit!&lt;/strong&gt;&lt;br/&gt;Congratulations, you can now eject all of your drives by hitting the Eject key! This is especially useful with laptops, so you can quickly undock and leave your desk. &lt;strong&gt;When you actually do need to eject optical media, you can simply hit Fn+Eject.&lt;/strong&gt; Enjoy, and thanks for reading!&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/12696804428</link><guid>http://blog.spherecat1.com/post/12696804428</guid><pubDate>Sat, 12 Nov 2011 13:31:00 -0500</pubDate></item><item><title>wild chocolate: A Letter to the Developer Community</title><description>&lt;a href="http://wildchocolate.tumblr.com/post/12555879965/a-letter-to-the-developer-community"&gt;wild chocolate: A Letter to the Developer Community&lt;/a&gt;: &lt;p&gt;Absolutely spot-on.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://wildchocolate.tumblr.com/post/12555879965/a-letter-to-the-developer-community"&gt;wildchocolate&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Dear Mac/iOS Developer Community,&lt;/p&gt;
&lt;p&gt;Empathy is the ability to put yourself in someone else’s shoes who may be different from yourself and attempt to understand/have compassion towards that person’s feelings, especially if their feelings are different from your own. If you do not consider yourself…&lt;/p&gt;
&lt;/blockquote&gt;</description><link>http://blog.spherecat1.com/post/12565728970</link><guid>http://blog.spherecat1.com/post/12565728970</guid><pubDate>Wed, 09 Nov 2011 15:24:53 -0500</pubDate></item><item><title>Grocery Culture</title><description>&lt;p&gt;&lt;em&gt;I wrote this essay for Michigan State University’s application. I spotted two typos immediately after submitting it. *bleeping bleepity bleep*&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;I work at Rahilly’s IGA, one of two grocery stores in my hometown of Newberry. Newberry is a small town in the middle of nowhere, and, as such, doesn’t have much in the way of diversity. The only exposure you really get to other cultures is the two or three foreign exchange students that live here each year. However, Newberry is a tourist town. People from all corners of the US, and even from other countries, come through on a regular basis, and they all have one thing in common: they need food.&lt;/p&gt;
&lt;p&gt;During the spring and summer, tourists are here because we’re one of two “gateways to the Falls,” the Falls being Tahquamenon Falls, a popular sightseeing and camping destination. We’re also a popular ATV riding area. During the fall, hunters descend on the area, and in the winter people enjoy snowmobiling and ice fishing. This means that most people who are touring the area will end up traveling through Newberry at some point during their trip.&lt;/p&gt;
&lt;p&gt;As a bag boy (or as I prefer to call it, Grocery Conveyance Engineer) at Rahilly’s, I interact with all of these people on a daily basis. Even though my job description only includes putting their groceries into bags and transporting them to their vehicles, my job goes far beyond that. I get to hear all about where they come from, where they’re going, and how the trip has been so far. I have to be able to give them directions, recommend restaurants, and much more. During the few minutes that I spend bagging for them, I can learn quite a bit about them, and get a feel for their culture.&lt;/p&gt;
&lt;p&gt;That’s pretty much the limit of my cultural experience. However, I see this as an opportunity, not a limitation. Because I’ve never really been immersed in another culture, I can go into the experience of Michigan State with a completely open mind. There are lots of interesting things to learn about in the world, and I look forward to learning as much as possible about people and their culture.&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11929047202</link><guid>http://blog.spherecat1.com/post/11929047202</guid><pubDate>Tue, 25 Oct 2011 20:26:00 -0400</pubDate><category>college</category><category>essay</category></item><item><title>How I Taught Third Graders Binary Numbers - Exploring Binary</title><description>&lt;a href="http://www.exploringbinary.com/how-i-taught-third-graders-binary-numbers/?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;How I Taught Third Graders Binary Numbers - Exploring Binary&lt;/a&gt;: &lt;p&gt;I wish we had stuff like this in third grade. I don’t think most of my class could even handle the Roman Numerals, and they’re graduating this year.&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11801366715</link><guid>http://blog.spherecat1.com/post/11801366715</guid><pubDate>Sat, 22 Oct 2011 22:41:37 -0400</pubDate></item><item><title>I, Reader - The Morning News</title><description>&lt;a href="http://www.themorningnews.org/article/i-reader"&gt;I, Reader - The Morning News&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11799556319</link><guid>http://blog.spherecat1.com/post/11799556319</guid><pubDate>Sat, 22 Oct 2011 21:56:12 -0400</pubDate></item><item><title>Steve Yegge - Google+ - Last week I accidentally posted an internal rant aboutâ¦</title><description>&lt;a href="https://plus.google.com/u/0/110981030061712822816/posts/AaygmbzVeRq"&gt;Steve Yegge - Google+ - Last week I accidentally posted an internal rant aboutâ¦&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11760888349</link><guid>http://blog.spherecat1.com/post/11760888349</guid><pubDate>Sat, 22 Oct 2011 00:05:54 -0400</pubDate></item><item><title>Teenage Brains - Pictures, More From National Geographic Magazine</title><description>&lt;a href="http://ngm.nationalgeographic.com/2011/10/teenage-brains/dobbs-text"&gt;Teenage Brains - Pictures, More From National Geographic Magazine&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11317954295</link><guid>http://blog.spherecat1.com/post/11317954295</guid><pubDate>Tue, 11 Oct 2011 11:34:01 -0400</pubDate></item><item><title>Why Computers?</title><description>&lt;p&gt;&lt;em&gt;This is an essay I wrote for the Michigan Tech Leading Scholar Award scholarship. I’ll probably be posting other essays as I write them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Why computers?&lt;/p&gt;
&lt;p&gt;I’ve been programming since I was six years old. I started with Liberty BASIC on an ancient Panasonic Toughbook that my Dad gave me. Ever since then, I’ve been learning every language I could get my hands on, writing everything from games to text editors. I love it. And despite all of this experience, I’m still a terrible programmer.&lt;/p&gt;
&lt;p&gt;&lt;!-- more --&gt;Computers are insane. They are insane because they are always right. And they are insane because they’re right even when they give you the wrong answer. The structure of a computer is so perfect that it will always give you exactly what you ask for. The problem with that is that humans don’t always know how to ask, or even what they’re looking for. A computer could care less WHAT you meant to ask, it’ll go ahead and continue working with incorrect instructions. It won’t ask “Did you mean to divide by zero?” or “Are you sure you meant to launch that rocket?” It’ll just go ahead and do it, no matter the consequences. It was only following directions, after all.&lt;/p&gt;
&lt;p&gt;The result of this is that humans can never hope to entirely understand computers. No matter how good you get at programming, you’ll still be terrible at it. This is nobody’s fault, it’s simply a fact that computers and humans think in completely different ways. It’s extremely difficult to translate between the two, and that’s what the whole of computer science is based on. Trying to take a human’s idea of how something should work, and translating that into something that a computer can understand. We’ll never be completely successful at it, because the fact remains that humans make mistakes, and computers don’t care. A computer’s thought process is always perfect, and ours is not. No matter how hard you work to make that piece of code ABSOLUTELY PERFECT, it won’t be. There’s always something you can’t forsee. But it doesn’t matter, because, as the last 60 years illustrate, these things hardly have to be perfect to make a difference.&lt;/p&gt;
&lt;p&gt;The fact that these devices are too complex for us to completely understand is what makes them so powerful. Because although we can never write a perfect program, we can get better at it. And as we get better, as programs become more reliable, more complex, computers will become even more useful. There are an infinite number of possibilities in this field. That’s why I love it. I want to be able to take an idea and turn it into something not quite perfect, knowing that I’ll always have the opportunity to expand it and make it better. I want to start every day knowing that my field has changed and there are exciting new things to learn. I want to be one of the people making those changes. I want to become the best terrible programmer the world has ever seen.&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/11187187669</link><guid>http://blog.spherecat1.com/post/11187187669</guid><pubDate>Sat, 08 Oct 2011 21:31:00 -0400</pubDate><category>college</category><category>essay</category></item><item><title>Create, Connect, and Consume</title><description>&lt;a href="http://www.productiveflourishing.com/create-connect-and-consume/"&gt;Create, Connect, and Consume&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/10017639731</link><guid>http://blog.spherecat1.com/post/10017639731</guid><pubDate>Fri, 09 Sep 2011 21:45:11 -0400</pubDate></item><item><title>http://googlepleasehire.me/</title><description>&lt;a href="http://googlepleasehire.me/"&gt;http://googlepleasehire.me/&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/8470001095</link><guid>http://blog.spherecat1.com/post/8470001095</guid><pubDate>Thu, 04 Aug 2011 08:53:10 -0400</pubDate></item><item><title>JUST WORK HARD : IT’S NOT HARD WORK | THE HUNDREDS IS HUGE</title><description>&lt;a href="http://thehundreds.com/blog/2011/07/12/just-work-hard-its-not-hard-work/?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;JUST WORK HARD : IT’S NOT HARD WORK | THE HUNDREDS IS HUGE&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7946470628</link><guid>http://blog.spherecat1.com/post/7946470628</guid><pubDate>Fri, 22 Jul 2011 19:26:20 -0400</pubDate></item><item><title>Tabled for Consideration – Andy Ihnatko's Celestial Waste of Bandwidth (BETA)</title><description>&lt;a href="http://ihnatko.com/2011/07/22/tabled-for-consideration/"&gt;Tabled for Consideration – Andy Ihnatko's Celestial Waste of Bandwidth (BETA)&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7946006995</link><guid>http://blog.spherecat1.com/post/7946006995</guid><pubDate>Fri, 22 Jul 2011 19:13:33 -0400</pubDate></item><item><title>"Deleted Messages" label considered obnoxious</title><description>&lt;p&gt;Protip: To keep Mail.app from adding the “Deleted Messages” label to archived messages on Gmail, go to Preferences &gt; Accounts, select the Gmail account that you want to fix, switch to the “Mailbox Behaviors” tab, and uncheck “Move deleted messages to the Trash mailbox”. Et voila, no more “Deleted Messages”! It also removes the useless “Trash” box from the sidebar. Enjoy.&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7884979768</link><guid>http://blog.spherecat1.com/post/7884979768</guid><pubDate>Thu, 21 Jul 2011 10:15:11 -0400</pubDate></item><item><title>Computer learns to play Civilization by reading the instruction manual | ExtremeTech</title><description>&lt;a href="http://www.extremetech.com/extreme/90046-computer-learns-to-play-civilization-by-reading-the-instruction-manual?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;Computer learns to play Civilization by reading the instruction manual | ExtremeTech&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7637447768</link><guid>http://blog.spherecat1.com/post/7637447768</guid><pubDate>Thu, 14 Jul 2011 22:15:15 -0400</pubDate></item><item><title>Nailed it in one! - Imgur</title><description>&lt;a href="http://imgur.com/gallery/GvbkS"&gt;Nailed it in one! - Imgur&lt;/a&gt;: &lt;p&gt;Time to bow down to our algorithmic overlords.&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7614174667</link><guid>http://blog.spherecat1.com/post/7614174667</guid><pubDate>Thu, 14 Jul 2011 10:45:16 -0400</pubDate></item><item><title>On Starting a Long-Term Company</title><description>&lt;a href="http://www.stephenwolfram.com/publications/recent/ycombinatorschool/?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;On Starting a Long-Term Company&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7599553855</link><guid>http://blog.spherecat1.com/post/7599553855</guid><pubDate>Wed, 13 Jul 2011 23:12:47 -0400</pubDate></item><item><title>From Here On Out, Do What You Love | Justin Briggs</title><description>&lt;a href="http://justinbriggs.org/from-here-on-out-do-what-you-love?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;From Here On Out, Do What You Love | Justin Briggs&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7598804578</link><guid>http://blog.spherecat1.com/post/7598804578</guid><pubDate>Wed, 13 Jul 2011 22:53:01 -0400</pubDate></item><item><title>Wood Tape</title><description>&lt;a href="http://gamesbyemail.com/WoodTape/Default.htm?utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;Wood Tape&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7598482880</link><guid>http://blog.spherecat1.com/post/7598482880</guid><pubDate>Wed, 13 Jul 2011 22:44:41 -0400</pubDate></item><item><title>Zero load time file formats - Steve Hanov's Programming Blog</title><description>&lt;a href="http://stevehanov.ca/blog/index.php?id=123&amp;utm_source=feedburner&amp;utm_medium=twitter&amp;utm_campaign=Feed%3A+hackernewsyc+%28Hacker+News+YC%29"&gt;Zero load time file formats - Steve Hanov's Programming Blog&lt;/a&gt;: &lt;p&gt;(via &lt;a href="http://www.instapaper.com/"&gt;Instapaper&lt;/a&gt;)&lt;/p&gt;</description><link>http://blog.spherecat1.com/post/7491407451</link><guid>http://blog.spherecat1.com/post/7491407451</guid><pubDate>Mon, 11 Jul 2011 08:58:58 -0400</pubDate></item></channel></rss>

