<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>Code and cars</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/" />
   <link rel="self" type="application/atom+xml" href="http://unlogica.com/blog/atom.xml" />
   <id>tag:unlogica.com,2008:/blog//1</id>
   <updated>2008-05-21T01:06:14Z</updated>
   <subtitle>Documenting the two closely related fields of programming and towing.</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.35</generator>

<entry>
   <title>Frigidaire ads, written in Inuit</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/05/frigidaire_ads_written_in_inui.html" />
   <id>tag:unlogica.com,2008:/blog//1.41</id>
   
   <published>2008-05-21T01:04:46Z</published>
   <updated>2008-05-21T01:06:14Z</updated>
   
   <summary>This morning, while driving, the radio was playing. The station that was on not only had the paid advertising of pre-recorded clips, but also where the DJ will evangelize a product, in that they use it, etc. etc. I don&apos;t...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="14" label="Business" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      This morning, while driving, the radio was playing. The station that was on not only had the paid advertising of pre-recorded clips, but also where the DJ will evangelize a product, in that they use it, etc. etc. I don&apos;t exactly consider it astroturfing because there is no attempt to hide that it&apos;s a paid product announcement. Instead, it harkens back to the older commercials, when whole shows were sponsored by one company. It&apos;s rather quaint in a way. Only, this time around, it was for the Microsoft Zune.

It&apos;s no secret that I ally myself with Apple and their products; I have several macs, an iPod, and am looking into making programs for the iPhone. So it&apos;s easy to write off that I would not be amenable to this specific product placement. Perhaps I was inserting my own biases in that the DJ sounded awkward, forcing themselves to hit all the right paid buzzwords, trying to turn the adjective &quot;Social&quot; into a noun. But regardless of how well or poorly the advertising went, one thing stuck in my mind. I couldn&apos;t recall any iPod advertisements on the radio.
      I&apos;ve seen this pattern before. It&apos;s a last-ditch effort. At a nearby mall, the food court tables have advertisements embedded in them. The advertisements, sadly enough, are advertisements for advertising. &quot;You noticed this ad! Think of how many others will notice your ad if it was here!&quot; However, the advertisements are on the losing side of a catch-22. If they truly did work, they would be advertisements for something else. Their very presence is a testimony to their ineffectiveness.

Similarly, the Zune advertisement is a no-win situation. Those that are disgusted with radio and its advertisements wouldn&apos;t be listening to the radio in the first place, so they would not be interested in the stored music-side of things. And in order to hear the advertisement, the would-be buyer has already proven themselves to have a radio, mooting the need for the Zune once again. Either they don&apos;t want a Zune, or don&apos;t need a Zune.

Compare, as I hinted at, the iPod advertising campaign. If I recall, it has focused on television and billboards. Both of which are alternatives to the radio, in a way, yet not direct competitors to the iPod. To those that are viewing media, the television is key, but the television isn&apos;t portable. Thus, a portable device like the iPod will get their attention, filling a gap. The billboard, alternatively, is visible while someone&apos;s out and about, or possibly even driving, bored but with the radio off. It&apos;s the other side of the equation, in that the billboard is where the audience is mobile, but not entertained. Neither of these campaigns hinge on the audience having both the ability and desire to use the competition.

It, perhaps, serves as an object lesson that demographics in advertising is more than just nationalities, age ranges, and genders. The medium of the advertisement also has a way of selecting the audience, and in this way, it&apos;s important not to end up, as the saying goes, trying to sell refrigerators to eskimos.
   </content>
</entry>
<entry>
   <title>Mea Culpa</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/05/mea_culpa.html" />
   <id>tag:unlogica.com,2008:/blog//1.40</id>
   
   <published>2008-05-12T04:11:13Z</published>
   <updated>2008-05-13T21:39:18Z</updated>
   
   <summary>Logistically speaking, it&apos;s impossible for a towing service to cover the entire nation single-handedly. Instead, CSAA, and all AAA clubs subcontract out to towing companies already in place. Where you call from determines which tow company shows up. However, the...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="14" label="Business" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      Logistically speaking, it&apos;s impossible for a towing service to cover the entire nation single-handedly. Instead, CSAA, and all AAA clubs subcontract out to towing companies already in place. Where you call from determines which tow company shows up. However, the AAA logo is still emblazoned on the truck, along with the specific tow company&apos;s name, to give an impression of cohesion. Every once in a while, one tow company is unable to service members in a timely fashion, either through manpower or equipment issues. In those cases, other companies can take those calls, and service the member outside their usual territory.

I&apos;ve run quite a few of these calls, and they are the most challenging in terms of customer service. By the time I&apos;m even aware of the call, the member has been badly treated or has been left waiting for a long time. So what is the first thing I do when I finally show up?

I apologize.

This is something that much of the computer industry has yet to learn.
      <![CDATA[Certainly, I will afterwards tell them of the unfortunate events that led up to their mistreatment, which does make it easier and lower the stress involved. I was not the one that caused the problem. I did not manufacture the car, answer the phone, show up, make the mistake, or leave the member stranded. This is through no fault of my own, and in many cases, not even the fault of anyone at the tow company I worked for.

But I do not disown the problem, and have stressed to them to contact AAA. I even gladly offer all the information so that they can better make their voice heard, despite the risk that my association to the problem call might reflect badly on me. It is because of this that I had several letters of thanks, where my actions literally convinced them to stay with AAA when they were ready to terminate their membership.

So why does this apply to the computer industry? It's because there's a myth, best demonstrated in comments like this:
<blockquote>I think people are frustrated with Windows and Spyware and take their frustration [out on] the manufacturers. Dell is not responsible for Microsoft's issues.</blockquote>
The myth part is two fold. The first part is the belief that the end customer will care about which part is failing. They bought a single device, and expect it to function as a whole. And whenever the vendor, either hardware or software, claim otherwise, it does nothing but to further infuriate the customer.

The second myth is the belief that it actually matters which part is failing. The customer is right in this one; finger pointing does nothing to fix things. Dell is responsible for Microsoft's issues, precisely because Dell made the decision to sell their hardware with that software. Can we excuse a restaurant for serving subpar food simply by stating that the farmer provided low-quality ingredients? Or do we demand the chef to know the difference, and ensure the taste of their food by choosing better?

While I am heavily biased, and will admit as such, this is one thing that Apple has gotten right, either consciously or unconsciously. They own both the hardware and software, so they are unable to use the finger-pointing excuse in many cases. They don't need to resort to shovel-ware, and thus avoid their first impressions being sullied by actions of third parties. So what chance does the other PC vendors, such as Dell, have?

The first option is unlikely, but an amusing mental experiment: to own their own software. Fork a BSD or Linux distribution, and ship computers using that. The key here is to own it, not license it. In doing so, they have a chance to maintain the tight integration that Macs have. They could build the kernel to use features that they add, and only those features, maximizing stability and minimizing bloat. That's not to say they can't license and bundle software, but they have to be picky about what does go in, and if something is lacking, to replace it or make their own. By doing this, they can test much more readily against their own machines, and ensure that updates are less likely to do things like what Vista SP1 did.

But not since the 80s were there many consumer-level computer companies that built the whole machine. It's part of a distant age of Amiga, Acorn, Atari, and other companies that started with A. Even modern high-end computer companies like Silicon Graphics and Sun are less likely to roll their own OS. And those like Dell don't have the OS experience. Furthermore, for vendors that rely on Windows, well, they rely on Windows.

So what then? Well, if Dell is serious about fixing its consumer-level tech support image, it needs to own the problem. Enterprise-level Dell doesn't have this issue, <a href="http://unlogica.com/blog/2007/07/you_are_not_their_customer.html">for reasons I mentioned before</a>. But for Dell's image to return in the consumer space, it needs to care about the ingredients in their products, both software and hardware. For a company whose culture is one of commodity, this will be an uphill battle; the very word implies that quality is too similar across multiple sources to really matter. But the consumer has spoken; quality does vary enough to matter. And to survive in the future, this quality has to be ensured, from each and every part of the product.

Until then, there should be a lot of apologies.]]>
   </content>
</entry>
<entry>
   <title>Language Barrier</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/04/language_barrier.html" />
   <id>tag:unlogica.com,2008:/blog//1.39</id>
   
   <published>2008-04-26T04:55:41Z</published>
   <updated>2008-04-26T05:04:28Z</updated>
   
   <summary>I have often joked that my first language isn&apos;t English, as I&apos;m more fluent in C. Truth be told, while I can&apos;t claim to be bilingual in any real sense (I understand some french, and have picked up only a...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="22" label="Cocoa" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[I have often joked that my first language isn't English, as I'm more fluent in C. Truth be told, while I can't claim to be bilingual in any real sense (I understand some french, and have picked up only a few spanish words), I do pride myself in being a polyglot in that I know several computer languages. Of course, C is my core language, as I can claim consistent coding proficiency in it all the way back to my college years. But beyond that, I know quite a few other languages, including assembly, C++, and as of late, Objective-C.

Not only that, but on the languages that I have used but have since forgotten, I've made sure to remember a few of the design patterns from them. For example, the Eval/Apply loop used in Scheme's interpreter. There's an aphorism to the effect of "A language which doesn't change the way you think isn't worth learning." I'm a firm believer in the contrapositive: All languages worth learning will change the way you think.

With that in mind, it makes me really wonder and ponder about <a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html">this list</a> that was pointed to in <a href="http://www.psynixis.com/blog/2008/04/25/did-apple-make-a-mistake-choosing-objective-c-for-iphone-sdk/">this article</a>.]]>
      <![CDATA[Of  course, not being fluent in Java, and wanting to break into the tiny world of Objective-C coding will heavily bias me against the list. At the same time, the list even acknowledges this major difference, emphasis theirs.<blockquote> The ratings are based on the number of skilled engineers world-wide, courses and third party vendors. ... Observe that the TIOBE index is not about the <em>best</em> programming language or the language in which <em>most lines of code</em> have been written.</blockquote>This is simply a list of the languages mentioned the most in several forms. Which makes me wonder: How many times was one language on the list mentioned with another? That is, which languages were most popular among polyglots?

True, knowing several computer languages does not a good programmer make, nor should one ignore those who know a single language really well. But at the same time, knowing diverse languages does require a degree of flexibility, and knowing only a single language would make one blind to solutions outside their realm.

Furthermore, the gap between mediocre programmers and exceptional programmers is well known, and I would argue that a mediocre programmer is far more likely to be the 9-to-5er, the one who learned programming only for the money. They would flock to the most popular language and stick only to that one, since they're not interested in it outside their paycheck.

Here's the part where I venture into theories unknown. Because Objective-C, to the best of my knowledge, is not taught as a beginning language in colleges, and is almost completely unheard of in trade schools. Therefore, most if not nearly all Objective-C programmers learn it as a secondary or tertiary language and are by definition polyglots. And those who know only Objective-C would have to be ones who did so on their own, showing a natural drive to program.

I currently have no evidence to back up these assumptions, but if they're right, it means that nearly no Objective-C coders would be the 9-to-5er sort, having learned only one language. And while that doesn't guarantee good programming, it might imply improved chances, as fewer of the mediocre, paycheck-driven pool would be included.]]>
   </content>
</entry>
<entry>
   <title>Making C++ and Objective C play nice</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/04/making_c_and_objective_c_play.html" />
   <id>tag:unlogica.com,2008:/blog//1.38</id>
   
   <published>2008-04-12T05:26:45Z</published>
   <updated>2008-04-12T05:38:25Z</updated>
   
   <summary>Ah, sibling rivalry. C++ is one year older than Objective C, and while they have the same parent, C, they&apos;re quite different. But, sometimes, you want to harness code written in C++ from your nice and comfy Cocoa-based app. Sure,...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="20" label="Advanced programming" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="18" label="Aside" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="22" label="Cocoa" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="2" label="Code" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      Ah, sibling rivalry. C++ is one year older than Objective C, and while they have the same parent, C, they&apos;re quite different. But, sometimes, you want to harness code written in C++ from your nice and comfy Cocoa-based app. Sure, you can try Objective C++, the hybrid as of late, but you risk losing Objective C&apos;s pure superset abilities, and the compiler takes a speed hit trying to be bilingual. And if other coders either can&apos;t or won&apos;t handle C++, well, then it&apos;s time to break out some pure C wrappers and contain things. Here&apos;s a few tips I&apos;ve learned the hard way.
      <![CDATA[The first step, of course, is to make a header file to be our bridge keeper. Since Objective C reads C straight across and is <a href="http://developer.apple.com/documentation/Cocoa/Conceptual/CarbonCocoaDoc/Articles/interchangeableDataTypes.html">toll-free with some Core Foundation structs</a>, and C++ will let you use a plain C header if you uglify things, the common ground of choice is a C header and a C++ wrapper, using Core Foundation.<p>

<h3>External circumstances</h3>
<pre>#if __cplusplus
extern "C" {
#endif
#include &lt;CoreFoundation/CoreFoundation.h&gt;
//Your function declarations here!
#if __cplusplus
} //Extern C
#endif</pre>
It's also good form to leave the CoreFoundation include in the <code>.cpp</code> file instead. Cocoa.h already includes CoreFoundation, so you don't need to worry about the objective-C end of things. Since we care only about using the C++ library, and not making a C++ citizen ourselves, it's okay to keep it all in the extern C world. This means no operator overloading of our functions among other things.

Furthermore, the overloading ban only applies to function declarations. That means the actual <code>.cpp</code> file can have that comfy extern wrapper all about, instead of prefixing each function with extern "C".

<pre>#if __cplusplus
extern "C" {
#endif
int foo() {return 1;}
int bar() {return 0;}
#if __cplusplus
} //Extern C
#endif</pre>
is the same as

<pre>extern "C" int foo() {return 1;}
extern "C" int bar() {return 0;}</pre>
While the latter has less lines of code in the example, the former will help you from tripping up and forgetting the wandering extern C calls in front of each function. If you're used to Objective C, you'll want to do this. Trust me on this one.

<h3>Cocoa to the Core</h3>
I suppose in theory you could simply use Objective C++ constrained to one file, but in unfamiliar territory, it's good to ensure strong language boundaries. Thus, using Core Foundation with Toll free bridging. Apple's already done a lot of the work explaining it, but I want to add this tidbit that slipped under my radar.

Core Foundation classes can do more than NSObjects. In fact, it's possible to use a CFArrayRef to store structs and other non-object items. But we <em>want</em> NSObjects. So don't forget to use the pre-made callbacks.

That is, you'll want <code>CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);</code> and <code>CFArrayCreateMutable(NULL, 0, &kCFTypeArrayCallBacks);</code>. If you use NULL instead in the callback arguments, keys and values will be neither retained nor released, causing either crashes or memory leaks.

<h3>Sausage Links</h3>
Last but not least is if you really want to contain the C++, not even letting it into your main project, but keeping it in a static <code>.a</code> library file. Things get strange. In test projects, it'll all link properly. In projects that make the new wrapper library, it'll all link properly. But in the final project, when I tried to build, I got dozens of linker errors, spanning kilobytes if not more:

<pre>Undefined symbols:
  "std::basic_string&lt;char, std::char_traits&lt;char&gt;, std::allocator&lt;char&gt; &gt;::end()", referenced from:
      Foo() in libMyFooLib.a (foo.o)
ld: symbol(s) not found</pre>

It's a huge huge mess of text, and at first I thought my new library wasn't finding the c++ library it wrapped. I tried all sorts of linker arguments and prelinking paths and hopping on one foot while doing a rain dance. Finally, I threw in a dummy voodoo.cpp file, just because it was worth a shot. Lo and behold, it compiled! And sure enough, the devil's in the build details. A plain cocoa app uses <code>/Developer/usr/bin/gcc-4.0</code>, whereas any that has a cpp in the mix uses  <code>/Developer/usr/bin/gcc++-4.0</code>! Since having a voodoo.cpp is bad form, the workaround is rather simple: make sure <code>/usr/lib/libstdc++.6.dylib</code> is also in the link chain.



That's about it for now! I was going to add in a little trick involving redefining classes as structs, but it turns out it's too unreliable to suggest. So if you absolutely can't find common interlanguage data types, there's always <code>void*</code>. Just be careful, and keep it under wraps.]]>
   </content>
</entry>
<entry>
   <title>On the market</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/04/on_the_market.html" />
   <id>tag:unlogica.com,2008:/blog//1.37</id>
   
   <published>2008-04-03T03:32:12Z</published>
   <updated>2008-05-03T01:14:46Z</updated>
   
   <summary>Almost as if on instinct, I updated my resume last month. And yesterday, I discovered that the local office of the towing company will be closing its doors. Sure, I could move to where the office is relocating. But I...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="18" label="Aside" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="28" label="Employment" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[Almost as if on instinct, I updated my resume last month. And yesterday, I discovered that the local office of the towing company will be closing its doors. Sure, I could move to where the office is relocating. But I really can't justify the commute, especially at a driver's pay rate. Furthermore, I've been really eager to focus on programming full-time as of late. So, while it's been fun to drive a tow truck, and I definitely have gotten my exercise, it's time to return to the software industry.

So. I'm looking for employment and freelancing. My experience is posted in <a href="http://unlogica.com/bhamon/BlainHamon200805A.pdf">pdf</a>, <a href="http://unlogica.com/bhamon/BlainHamon200805A.txt">text</a>, and <a href="http://unlogica.com/bhamon/BlainHamon200805A.doc">word doc</a>.

(Entry was edited to updated resumes)]]>
      
   </content>
</entry>
<entry>
   <title>It&apos;s like a mountaintop, but with more grease and the guru swears a lot</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/03/its_like_a_mountaintop_but_wit.html" />
   <id>tag:unlogica.com,2008:/blog//1.36</id>
   
   <published>2008-03-30T03:49:42Z</published>
   <updated>2008-03-30T16:25:16Z</updated>
   
   <summary>I am a computer programmer, a software engineer if you will, but I&apos;ve had a different job of late. As the story goes, I graduated in &apos;99, was in the industry full time for a few years, and was laid...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="18" label="Aside" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="10" label="Cars" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="2" label="Code" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[I am a computer programmer, a software engineer if you will, but I've had a different job of late. As the story goes, I graduated in '99, was in the industry full time for a few years, and was laid off. Then, after a while of contract work, I was job hunting and my car broke down. I'm a AAA member, and when I jokingly asked the tow truck driver if they were hiring, he said yes. I applied, and for the last four years, I've been driving a tow truck.

It's been fun, and I've gotten a lot of exercise, but I do want to fully return to the computer industry. One of the hardest parts, however, is selling myself, and explaining these last few years. To be honest, it's not mutually exclusive; I have been programming all this time. But at the same time, this is definitely the path less traveled by. For the most part, the computer industry is one of specialization, where there's more call for people with a specific set of knowledge than for people who are generalists.

This is a shame, because I believe that those who focus on one tiny subset of the field are at a disadvantage. I remember, years ago, a time back at my first job. It was a great company &mdash; small, with a lot of open communication &mdash; and I was rather fresh out of college. Their primary product ran on Windows NT exclusively, and was the brainchild of the CTO. Believe me when I say the CTO was a brilliant man, who knew both Windows and the product inside and out.

So believe my surprise when, during a group brainstorming for a new product that would be cross-platform, he admitted to having no knowledge of how Unix did file permissions, the read/write/execute bits that can be changed with chmod. Me, a new hire, knew something the CTO didn't!]]>
      To his credit, he knew that he did not know, as opposed to some lesser man who would try to fake it. And the other engineers also didn&apos;t know, either. This was during the time of MacOS 8 and MacOS 9, long before Linux and MacOS X had made their big mark in the landscape, so the non-windows OSes were still very much in the margin. But for the rest of my employment there, I was the man to go to for Mac questions. Everything from which iMac to purchase for QA to test browsing with, to maintenance and repair. To this day, I still remain surprised that I knew something that the rest of the company didn&apos;t.

Deep but narrow knowledge is still the order of the day in many circles, and I am coming more and more appreciative of a wide base. I sometimes joke that I can tell which AAA members I assist are java programmers, because they don&apos;t know much about the hardware of their car. Mean, but sadly not too far from the truth. Part of the emphasis of the blog has been to show relationships, ties between the two worlds, and that something as far outside of computing as cars can still be relevant and useful for discovering insights or gaining a different perspective.

And it&apos;s why I do list my towing experience in my resume. Not only is it to stand out for uniqueness&apos; sake, but also because it is valuable. Where have I been, in the computing world for the last few years? Nowhere. But at the same time, very few fast-track employees will have gained the crisis management, problem solving, or people management skills that I have while pulling a Mercedes Benz out of a fence or rescuing a kid locked in a car. And I&apos;ve come to appreciate good design beyond matching brackets and understand the non-technical user, meeting with them in a context that few will.

And in five years&apos; time, when all of our hot buzzword-compliant technologies have been replaced by entirely new hot buzzword-compliant technologies, these skills will still remain as potent and useful as they are now and have been during the age of the man-month. And that will make all the difference.
   </content>
</entry>
<entry>
   <title>Security Update</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/03/security_update.html" />
   <id>tag:unlogica.com,2008:/blog//1.35</id>
   
   <published>2008-03-28T21:38:30Z</published>
   <updated>2008-03-28T21:43:53Z</updated>
   
   <summary>I&apos;m not sure if anyone ever reads these posts (Save for spambots and the search hits for wanting to break into Fords. Seriously) but there&apos;s been a sizable gap of posts. And honestly, I started writing Bit Rot back in...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="26" label="iPhone" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[I'm not sure if anyone ever reads these posts (Save for spambots and the search hits for wanting to break into Fords. Seriously) but there's been a sizable gap of posts. And honestly, I started writing Bit Rot back in February. Since then, there's been the iPhone release, and just this morning, <a href="http://daringfireball.net/linked/2008/march#fri-28-miller">Daring Fireball</a> linked to Charlie Miller owning (in both senses of the word!) a MacBook Air. He also was able to already find exploits for the iPhone.

So why do I mention this? Well, in many ways, the iPhone is going to be a whole new data point. Since it's so popular, the argument of market share is going to be removed. And the user base is going to be so diverse as to make PEBKAC a real threat. So how is Apple going to ensure security on the iPhone? 100% unbreakable software is like magic pixie dust. You can get close to it, and it definitely shows up in advertisements, but it's not really feasible. And, for better or for worse, Apple keeps its cards really close to its chest. Perhaps for the better, because otherwise armchair iCEOing would be much less fun.]]>
      <![CDATA[<h3>Pay no attention to the computer behind the phone!</h3>
Back in MWSF 2007, in an <a href="http://youtube.com/watch?v=YgW7or1TuFk">interview</a>, about 1 minute 40 seconds in, Phil Schiller was careful to stress that the iPhone is not a computer.

And a lot of the <a href="http://www.rogueamoeba.com/utm/2008/03/11/iphone-sdk-bug-filing/">limitations mentioned</a> on the Rogue Amoeba illustrate the discrepancy. Phones typically don't have external installers, multitasking, and full access. Computers do. And while I can sympathize with the demand for this opening up (I don't own an iPhone- I've got a Sidekick II because of its telnet and SSH support), I can see why Apple did it this way.

Apple's solution appears to be to combat bit rot, on a couple of fronts. By acting as guardians of the phone, both in terms of what the apps can do and how the users can get the apps on the phone, Apple is getting users accustomed to treating Apple as an authority, of what apps are safe and which aren't. Furthermore, by restricting the data flow in this way, reinstalls are relatively painless. When a computer performs a software update, it has to take the pre-existing software into consideration. But if iTunes already knows the settings your phone has, the user files, the applications, and the OS, what part of a reinstall must the user do by hand?

So, here we stand with the iPhone. What market share protection the Mac has, the iPhone won't. The user issues that plague the windows world will affect the iPhone. And we know that antivirus software is limited in removing infections. So Apple is pushing for the iPhone to not be considered a computer, so that they can make an environment hostile to malware.

By requiring that all apps be installed by the store, Apple can serve as a guardian, reducing rogue sites from offering up trojans. By dictating the parts of the API the program can and can't use, Apple has a very rough filter that will make it harder for malware to slip through the approval process. By requiring all apps to be signed, Apple can shut down malware authors from the store, by knowing who made the code. By insisting that the phone be responsive, Apple can reduce bit rot.

And, most importantly, if and when the malware's made it onto the phone, the user can use iTunes to <a href="http://www.imdb.com/title/tt0090605/quotes">nuke it from orbit,</a> restoring all the approved files and applications.

It's the only way to be sure.]]>
   </content>
</entry>
<entry>
   <title>Bit Rot</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/03/bit_rot.html" />
   <id>tag:unlogica.com,2008:/blog//1.34</id>
   
   <published>2008-03-21T00:18:24Z</published>
   <updated>2008-03-28T21:40:36Z</updated>
   
   <summary>Several years ago, John Gruber suggested one reason for the virus gap. Namely, that PC users are used to their computers loaded with adware, the sorts of things pre-installed on consumer-level Dells, HPs, and Sonys when they buy them. And...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[Several years ago, John Gruber <a href="http://daringfireball.net/2004/06/broken_windows">suggested one reason</a> for the virus gap. Namely, that PC users are used to their computers loaded with adware, the sorts of things pre-installed on consumer-level Dells, HPs, and Sonys when they buy them. And so when malware arrives, it takes strong root, and isn't hunted down.

This is a very important difference, one thing that needs to be addressed before Windows becomes truely secure. But for better or worse, it won't. Simply clean installs won't solve the issue. A Mac user, or at least a large portion of them, expect their Mac to perform, to perform right, to 'just work.' For the PC, however, I've come to a theory, a theory which is great flame-bait, but an interesting theory nonetheless.

I think most PC users <strong>expect</strong> their computers to fail, and hold them to no standards of working. Not only that, but they view the PC as a machine, one that's <strong>supposed</strong> to break down.]]>
      We all have had one friend or acquaintance mention that they need to buy a new computer because their current one has become too slow. Not &quot;is,&quot; but &quot;has become.&quot; On a car we sometimes expect this. Gears wear down, oil becomes dirty, parts wear. And indeed, the moving parts of a hard drive do break down in due time. But a computer to slow down? When it comes to electronics, parts either fail or they don&apos;t. I suppose a memory stick goes bad, and the computer compensates by running on less RAM, it would slow down.

But that&apos;s not what&apos;s happening. It&apos;s not a sudden odd fan noise, nor a worrying alert that all of a sudden appears, or even a sudden one time change in speed and hard drive thrashing. This is a slow, gradual degradation.The type that happens when spyware and malware take up system resources. This warning sign has become accepted as the norm. I lay the blame at the feet of the OEMs, because they cultivate this expectation.

Most of us are already familiar with Moore&apos;s Law, and the extension that computing processing power grows exponentially. However, there is a fallacy implied, that the treatment of Moore&apos;s Law as if it were manifest destiny and somehow, magically, older computers become slower. This falsehood is encouraged, mind you, by those chasing after market share. &quot;Your computer is two years old! It&apos;s time for a new one!&quot;

If your machine already has broken or malfunctioning parts, right out of the box, then why wouldn&apos;t you believe other hardware will break? And what better way to hide malware than a firm belief not that it doesn&apos;t exist, but that it&apos;s due to something else and &quot;Just happens&quot;?

Simply put, by lowering expectations on the standard of hardware, OEMs are lowering the expectations on the standard of software, lowering the guard of the average user. Even if the user eventually realizes that they&apos;re infected, the extra time given to the malware is a crucial factor to consider and eliminate.

The solution, like in PEBKAC, is not simply smarter algorithms and fancier tricks. It requires the user to expect high quality software and hardware. This comes not only in the form of rejecting adware and other software that makes the user accustomed to such intrusions, but also in a vigilance in the performance of the machine.
   </content>
</entry>
<entry>
   <title>And now, how to determine the mouse location as a CGPoint</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/and_now_how_to_determine_the_m.html" />
   <id>tag:unlogica.com,2008:/blog//1.33</id>
   
   <published>2008-02-17T02:40:05Z</published>
   <updated>2008-03-28T21:41:52Z</updated>
   
   <summary>There&apos;s a saying in regards to Mac OS X programming, and it&apos;s proven useful time and time again. &quot;If it&apos;s getting too difficult, stop and back up. You&apos;re probably going about it all wrong.&quot; And, well, this is another one...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="2" label="Code" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[There's a saying in regards to Mac OS X programming, and it's proven useful time and time again. "If it's getting too difficult, stop and back up. You're probably going about it all wrong." And, well, this is another one of those times. I've been working on a pet project, a user-level driver for a toy called <a href="http://3dconnexion.com/3dmouse/spacenavigator.php">Space Navigator</a> (Long story there), and one of the parts to work on is emulating a mouse. Of course, that requires knowing the current mouse location, so that I can set a new location relative to it.

With the multi-OS and API heritage of Classic, Carbon, and Cocoa, there's quite a few ways to do this, but they have drawbacks. Since this was emulating an input device, <code>CGEvent.h</code > is used, to create events, adjust them, and post them. This calls for <code>CGPoint</code>s, which are floating point values, and from the top left corner.]]>
      <![CDATA[<code>void GetGlobalMouse (Point * globalMouse);</code> is outdated. It's supported in Carbon, but depreciated. Not only that, but Point uses integers.

<code>OSStatus DSpGetMouse (Point *outGlobalPoint);</code> is again outdated. It uses Display Sprockets, and again, Point.

<code>OSStatus TrackMouseLocation (GrafPtr inPort, Point *outPt, MouseTrackingResult *outResult);</code> is out of the question. No, it's not depreciated, but again with the Point. Not only that, but it blocks until a mousedown or mouseup. That simply won't do.

<code>(NSPoint)[NSEvent mouseLocation];</code> is a lot closer. It's also floating points, and <code>NSPointToCGPoint</code> takes care of that. But there's one big problem; NSPoint measures from the bottom left corner; the y axis is flipped.

To fix the flip, you have to subtract that vertical value from <code>([[NSScreen mainScreen] frame]).size.height</code>, which is quite a mouthful. Not only that, but it's quite a bit of work and CPU time for something that runs so many times. Sure, you could try to cache it, but then you have to watch out for when someone adds or removes a screen to the laptop, and it's all a big mess.

So. Stop. Back up a bit. We want to know the mouse's position for when we post an event. Wouldn't it be neat if it was already done for us?
<pre>CGEventRef ourEvent = CGEventCreate(NULL);
CGPoint ourLoc = CGEventGetLocation(ourEvent);
NSLog(@"Location? %f, %f", (float)ourLoc.x, (float)ourLoc.y);</pre>

Sure enough, it works! Just make sure to <code>CFRelease</code> after you're done.]]>
   </content>
</entry>
<entry>
   <title>PEBKAC</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/pebkac.html" />
   <id>tag:unlogica.com,2008:/blog//1.32</id>
   
   <published>2008-02-10T20:30:49Z</published>
   <updated>2008-03-28T21:42:50Z</updated>
   
   <summary>We all know the old saying about 7 different eskimo words for snow, and the implications that items that are important in a culture tend to have more words about it in a language. Anyone who&apos;s knowledgeable with computers, especially...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      We all know the old saying about 7 different eskimo words for snow, and the implications that items that are important in a culture tend to have more words about it in a language. Anyone who&apos;s knowledgeable with computers, especially in tech support, knows there&apos;s quite a few ways to convey when the user is not understanding what to do, and that it is not a functional bug in the software.

PEBKAC- Problem exists between keyboard and chair. The ID ten T error, spelled idiot. Newb, n00b, newbie, luser, pilot error. Trying to find the any key, or use the computer&apos;s cupholder. My father has a saying, in terms of bad drivers, of a &quot;Loose nut behind the wheel.&quot;

With the rise of social engineering, nigerian 419 scams, phishing, malware, spyware, and other online attacks that rely more on psychological insecurities than buffer overflows, the user has become more and more the weak link in software security. Unfortunately, I see much of the security debates focus on technical aspects, when we should be looking at personal ones.
      Mac users are known to not use antivirus software, and for good reason.  During the days of System 6 or MacOS 9, we all had Disinfectant, and perhaps Symantec or Norton, but that was also the days of nvir, cdef, or Stardust. The forces that made these viruses, of curiosity and idle hands have been replaced by greed, which has passed the Mac by.

The lack of wild mac OS X viruses in the wild severely reduces the need for antivirus, but worse yet is the current state of commercial antivirus software. In the effort to be proactive and have more tickmarks on the feature matrix, they are constantly monitoring, scanning, and possibly crashing the OS. The cure is worse than the disease, especially when there is no disease!

Worse yet is the style in which antivirus software typically runs. Get the update, run a scan, repeat. This in and of itself is good, but my issue is with what isn&apos;t provided. Security provided by dialog boxes, or by tasks, and then one is magically protected. But antivirus software is reactive by nature, protecting only after the virus is loose, or worse yet, already on your computer.

When you buy a Mac from an Apple retail store, it includes a coupon for a free training session or someone to help set up your computer for you. This is one advantage that PCs lack; an educated user base. Symantec, Microsoft, any vendor concerned about security can do one very simple thing to secure the computer more than anything else: Include a training video to teach the user simple security practices.

It needn&apos;t be complex. Analogies would help, especially in translating common real world sense into an online version. It should also address online security with children. Don&apos;t talk to strangers? Don&apos;t chat with people your parents haven&apos;t okayed yet.

Some way to curtail this endless september, by teaching new users how to surf the web wisely. Have Apple&apos;s task force in black turtlenecks talk about phishing, spam, and how to avoid other online scams. The biggest security hole of any OS is its users, and actual dialog, not endless dialog boxes, is a vital solution.
   </content>
</entry>
<entry>
   <title>Viral Market Share</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/viral_market_share.html" />
   <id>tag:unlogica.com,2008:/blog//1.31</id>
   
   <published>2008-02-08T01:48:45Z</published>
   <updated>2008-03-28T21:42:14Z</updated>
   
   <summary>The most debated factor in the Mac&apos;s relatively low malware (Including spyware, viruses, worms and trojans) count versus the waves of Windows malware has been market share. With Windows market share in the 90 percentile, and Mac OS only in...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[The most debated factor in the Mac's relatively low malware (Including spyware, viruses, worms and trojans) count versus the waves of Windows malware has been market share. With Windows market share in the 90 percentile, and Mac OS only in the single-digits, it makes much better business sense to infect the larger crowd.

The paradox of this, however, is of legitimate software on the Mac, especially indie developers. The ratio is so disproportionate, with only a handful of Mac malware, at most, yet a sizable and healthy legitimate software ecosystem, enough to make things like C4, WWDC, and a second hall at MacWorld SF possible.

The answer, I believe, has been partially stated, both by <a href="http://wilshipley.com/blog/2005/07/student-talk-reloaded-podcast.html">Wil Shipley</a>, and by <a href="http://www.technovia.co.uk/2008/01/daring-fireball.html">Ian Betteridge</a>. The market forces for software and malware are different, and while the Mac healthily supports the former, it offers no help on the latter.

Market share is a factor in Mac OS's security. The pundits are right. However, <strong>market share still doesn't matter</strong> when discussing security.]]>
      <![CDATA[In Wil Shipley's presentation, he argues that by its small nature, the Mac Market presents itself a great opportunity simply because most programmers target Windows, so that there's more users per programmer on the Mac side, and less competition and knockoffs. Similarly, Ian Betteridge also mentioned issues that help the small Mac programmer, of word of mouth, and blog postings. Ian goes a step further, in that word of mouth doesn't help the malware propagate. (Try this new virus! The infection interface is slick!)

What hasn't been mentioned, that further helps the Mac, is of the differences in exclusivities. That is, typically, a user has only one type of software. If they have a good newsreader, they're unlikely to want to use a second one at the same time. The user will have one type of software to the exclusion of others.

This hurts the windows software market, where the plethora of software means competition is fierce, whereas the Mac has many more unfilled niches. But with malware, it's possible or even likely to have multiple infections, all working side by side. With no such exclusiveness, the fact that there's many similar malware programs already out there doesn't affect infection rates. In short, the tiny Mac market is a boon to the indie programmer, but hurts malware. The huge Windows market raises the barrier of entry to the indie programmer, but only aids malware. 

Mind you, there are other factors than market share. The <a href="http://daringfireball.net/2004/06/so_witty">Witty virus</a> is my favorite anomaly, since its target was users of the BlackICE firewall. The installed user base of this software was a paltry 12,000, far below even the most pessimistic Mac headcounts. By the virtue of pure numbers, the Mac, while a smaller target than Windows, should be many times larger than a single firewall program. However, Witty also seems to be a throw-back to the ancient days when viruses caused damage directly to the computer's data, instead of silently lurking and collecting identity theft information.

Whatever the cause, and however significant a factor market share is, paradoxically, it's completely irrelevant in discussions of security. These numbers won't change significantly in the foreseeable future, making all conjecture of "What if the percentages were reversed?" purely academic. This factor teaches us nothing about security. What would the moral of the story be, "Don't have a large user base"?

There's more important factors to investigate. The mere fact of market share has secondary effects, ones that we <em>can</em> learn from, should gain our focus. Market share is part of the history of computing, and what arises from the history can be very educational.]]>
   </content>
</entry>
<entry>
   <title>Artie MacStrawman&apos;s Revenge</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/artie_macstrawmans_revenge.html" />
   <id>tag:unlogica.com,2008:/blog//1.30</id>
   
   <published>2008-02-05T22:27:40Z</published>
   <updated>2008-02-05T23:21:11Z</updated>
   
   <summary>Good old Artie. For those not in the know, Artie MacStrawman is the legacy of the recently discontinued Crazy Apple Rumors, the name given to the stereotype of a rabid Mac user. While such people do exist, they should be...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="12" label="Security" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      Good old Artie. For those not in the know, Artie MacStrawman is the legacy of the recently discontinued Crazy Apple Rumors, the name given to the stereotype of a rabid Mac user. While such people do exist, they should be ignored, as they don&apos;t add to the conversation on how to defend against future threats or give any insight onto what issues will arise.

Similarly, there are pundits and consultants that cling to this false image, as a target to rally against. &quot;Mac users don&apos;t understand security,&quot; goes the cry, &quot;and as soon as a single virus happens, it&apos;ll be doomsday for them.&quot; Like Artie himself, they should also be ignored, because they also add nothing; they simply troll for publicity and page views.

Somewhere between these two extremes lie the majority that matters, those that care about security, who know that the MacOS is not invincible, yet also know that they are doing something right. Something that should be understood, so that future security can build upon this.
      
   </content>
</entry>
<entry>
   <title>Lost leaders</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/lost_leaders.html" />
   <id>tag:unlogica.com,2007:/blog//1.28</id>
   
   <published>2008-02-05T00:02:54Z</published>
   <updated>2008-02-05T06:36:40Z</updated>
   
   <summary>Daring Fireball linked to an article a while back about The Myth of Market Share. The site is now locked behind a login, but Google is to the rescue. The article discusses business practices that view the market as a...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="14" label="Business" scheme="http://www.sixapart.com/ns/types#tag" />
   <category term="6" label="Commentary" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      <![CDATA[<a href="daringfireball.net">Daring Fireball</a> linked to an article a while back about <a href="http://knowledge.wharton.upenn.edu/article.cfm?articleid=1645">The Myth of Market Share</a>. The site is now locked behind a login, but <a href="http://209.85.173.104/search?q=cache:nThGJ_KO2zUJ:knowledge.wharton.upenn.edu/article.cfm%3Farticleid%3D1645+http://knowledge.wharton.upenn.edu/article.cfm%3Farticleid%3D1645&hl=en&ct=clnk&cd=1&gl=us&client=safari">Google is to the rescue</a>.

The article discusses business practices that view the market as a zero-sum game. In other words, the belief that doing well isn't as important as doing better than the competition, that market share is more important than profitability. And the study is a surprise: this tactic doesn't work too well. So much a surprise that the implications are still not fully understood.

News flash: Business re-discovers <a href="http://plato.stanford.edu/entries/prisoner-dilemma/">a half-century old concept</a>, and promptly ignores its lesson. The sad part is, even after the article, the first response (Since I read the cache, I didn't find out if there were replies) still doesn't get it. ]]>
      <![CDATA[Joanna Trudeau, Manhattan Assoc/ Customer Dev Mktg, wrote:
<blockquote>Is it not useful to pursue marketshare goals, utilizing loss leaders, to grow the more profitable post-sale service and support revenues?</blockquote>

Implicit in this is that market share immediately means sales. And that the only use of loss leaders is only to get market share with cheap products out there. That if you don't undercut the competition, they'll make the sale instead of you. This sort of flawed "Them or us" thinking is exactly what the article was about!

If you focus on only being the low-price leader, you'll simply be known as the low-price leader. Your customers won't be loyal to you, only to the price savings. And the second that someone comes along that's even cheaper than you, you'll then be known as a has-been ex-leader. It's the race to the bottom, and it's a phyrric victory.

Furthermore, the razor and razor-blade model doesn't really work here. You'll be selling your actual product, the physical thing, with tiny margins, or even at a loss, in hopes of "profitable post-sale service and support revenues." But that doesn't happen. Because for the razor and razor-blade model to work, you need to lock the member into using only your blades. And guess who can undercut your "profitable post-sale service and support revenues"? <strong>Everybody.</strong> From Geek Squad to the kid down the street, they can all work on that PC once it's been sold. And this is why the model of everything for market share doesn't work. Because you trivialize what makes you unique, and by doing so, lose support sales.

That's what makes Apple's loss leader so interesting. Part one is focusing on excellence, making yourself look good, not others look bad. Part two is to not make your cash cow into a loss leader. Part three is that there's fierce competition in the support and service realm. Part four is that a loss leader, any loss leader, serves to get potential customers in the long run. In short, make your support and service a loss leader, beyond the competition of the neighborhood kid, to grow the more profitable and unique computer revenues.

And now you know why the Genius Bars have made Apple Stores so profitable.]]>
   </content>
</entry>
<entry>
   <title>Password retrieval, the quick and dirty way!</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2008/02/password_retrieval_the_quick_a.html" />
   <id>tag:unlogica.com,2008:/blog//1.29</id>
   
   <published>2008-02-03T21:50:14Z</published>
   <updated>2008-02-03T21:50:20Z</updated>
   
   <summary>Yes, it&apos;s been over a month. This time, however, I have an excuse. I lost my password to this posting account. What&apos;s worse is that doing password retrieval would fail. Something about the mime headers. However, I had a few...</summary>
   <author>
      <name></name>
      
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      Yes, it&apos;s been over a month. This time, however, I have an excuse. I lost my password to this posting account. What&apos;s worse is that doing password retrieval would fail. Something about the mime headers. However, I had a few tools at my disposal. On my desktop computer, thanks to the wonders of cookies, I was still logged in. Furthermore, I still had the SSH and FTP passwords to the site. So step one was to login, passwordless.
      <![CDATA[That was simple enough. Pull the cookies.plist from the desktop computer, splice in the appropriate cookies into the cookies.plist on the laptop, and I'm in. I kept trying variants on what I thought was my password, but those were all dead ends. So the next step was to diddle about in the database. Diddle is a technical term, of course.

Sure enough, the Authors.db file held clues and hints. Mostly, that the passwords are properly salted in the database. Fair enough. So of course, the next task is to back up <strong>everything</strong>. It's bad enough getting locked out of your house. It's worse to destroy it trying to get back in.

With a local copy, I tried a few things. Nothing came of it. Still no luck. And then, inspiration! I was still logged on, and as the blog's administrator, no less! So, the next step was to create a dummy account, one with the password I wanted. After the site did its job, it's <a href="http://cyberduck.ch/">Cyberduck</a> again, to download this new and improved authors.db. Next, the services of <a href="http://www.ridiculousfish.com/">Hex Fiend</a> were used. Salted passwords were copied, then pasted.

An upload later, &mdash;easier said than done; <a href="http://www.metrofi.com/">MetroFi</a> is free, and definitely a "You get what you pay for" deal&mdash; and indeed, my account has the new and remembered password. Then, to celebrate, I tried to get <a href="http://www.red-sweater.com/marsedit/">MarsEdit</a> to work with the blog. Turns out that MarsEdit uses a different password altogether. Much ado about nothing.]]>
   </content>
</entry>
<entry>
   <title>Domain and Range</title>
   <link rel="alternate" type="text/html" href="http://unlogica.com/blog/2007/12/domain_and_range_1.html" />
   <id>tag:unlogica.com,2007:/blog//1.27</id>
   
   <published>2007-12-24T08:52:20Z</published>
   <updated>2007-12-24T09:28:20Z</updated>
   
   <summary>I originally had a big, far-reaching article in which I&apos;d muse about copyright, trademark, and other things I don&apos;t really have any authority or knowledge about. But the point was about the coding posts I did before and, time willing,...</summary>
   <author>
      <name></name>
      
   </author>
   
   <category term="18" label="Aside" scheme="http://www.sixapart.com/ns/types#tag" />
   
   <content type="html" xml:lang="en" xml:base="http://unlogica.com/blog/">
      I originally had a big, far-reaching article in which I&apos;d muse about copyright, trademark, and other things I don&apos;t really have any authority or knowledge about. But the point was about the coding posts I did before and, time willing, will do in the future. So far, they&apos;ve been released in a way that seems to be a dying breed: Public domain.

I won&apos;t claim that this is a solution, or that others should or must follow suit, but coding can be a legal minefield these days. Licensing, restrictions, is this for personal or commercial use, all of that. And that&apos;s just with code you buy! The GPL seems to be a response to this problem, but it carries its own mess with it, rules and restrictions under the guise of freedom. There&apos;s the BSD license, which I like the most, but really...

There&apos;s some snippets of code that I don&apos;t intend to get fame or fortune from. And I don&apos;t want to add to the burden of &quot;Can I use this?&quot; for another programmer. So, public domain. Free to use in any way, shape, or form they want. It adds to the general commonwealth, and takes the burden of enforcing off my hands.

&quot;But Blain,&quot; one might say, &quot;how do you combat someone taking your work, and claiming it for their own?&quot; I really dislike the terms &quot;Art theft&quot; and &quot;Intellectual property violation&quot;, when there&apos;s a perfectly good word for it. One that uses stigma for enforcement, with no fancy legalese needed for its karmic backlash to take effect. When someone claims another&apos;s work as their own, be it text, music, or math; be it public domain, unpublished, or commercially owned; we call that plagiarism.
      
   </content>
</entry>

</feed>
