<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ursecta.com</title>
	<atom:link href="http://ursecta.com/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://ursecta.com/wp</link>
	<description>J. Martin Wehlou on Security, Software Development, and Medicine</description>
	<lastBuildDate>Tue, 08 May 2012 10:19:36 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Beware of Network Solutions</title>
		<link>http://ursecta.com/wp/2012/05/beware-of-network-solutions/</link>
		<comments>http://ursecta.com/wp/2012/05/beware-of-network-solutions/#comments</comments>
		<pubDate>Tue, 08 May 2012 10:18:34 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1273</guid>
		<description><![CDATA[&#8230;in particular if you&#8217;re a European company. I got an invoice ten days back with VAT added from them. Went and checked my account and there&#8217;s a VAT field there now, empty of course. So I filled it in and filed a support ticket about it. Waited a week, filed a new support ticket, more [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;in particular if you&#8217;re a European company. I got an invoice ten days back with VAT added from them. Went and checked my account and there&#8217;s a VAT field there now, empty of course. So I filled it in and filed a support ticket about it. Waited a week, filed a new support ticket, more upset, especially since they promise response within 24 hours. This morning I got a phone call from them that they can&#8217;t refund the VAT. The guy claims they&#8217;ve sent out a notification about this in email.</p>
<p>Ok, maybe they did, but Network Solutions is sending out so much spam all the time, that if there was a notification about a VAT field being added to the account, there&#8217;s no way I would have seen that. Occasionally, other US companies charge VAT when they shouldn&#8217;t, but they&#8217;ve always been able to refund that once they get the number. Not so Network Solutions. Too lazy, too greedy, or simply don&#8217;t give a shit, I don&#8217;t know.</p>
<p>In short, they&#8217;re more expensive than other registrars, their customer support is crap, they spam me, so why do I keep using them? Good question, I see no reason.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2012/05/beware-of-network-solutions/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Invisible failure</title>
		<link>http://ursecta.com/wp/2012/03/invisible-failure/</link>
		<comments>http://ursecta.com/wp/2012/03/invisible-failure/#comments</comments>
		<pubDate>Sun, 04 Mar 2012 17:38:20 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1262</guid>
		<description><![CDATA[Today I noticed the RAID utility icon in the dock and I couldn&#8217;t remember having started it. Weird. Clicked on it and this is what I see: (Click the image for full size.) Oh, sh*t, a drive just died. &#8220;Just&#8221; died? No, not really, it died a week ago, and I didn&#8217;t notice. That&#8217;s not [...]]]></description>
			<content:encoded><![CDATA[<p>Today I noticed the RAID utility icon in the dock and I couldn&#8217;t remember having started it. Weird. Clicked on it and this is what I see:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2012/03/5372.png" title="(24 hits)"><img class="aligncenter size-medium wp-image-1268" title="537" src="http://ursecta.com/wp/wp-content/uploads/2012/03/5372-300x241.png" alt="" width="300" height="241" /></a></p>
<p>(Click the image for full size.)</p>
<p>Oh, sh*t, a drive just died. &#8220;Just&#8221; died? No, not really, it died a week ago, and I didn&#8217;t notice. That&#8217;s not good. Normally, RAID Utility pops up at start to tell you something is going wrong, but what happens is that with Snow Leopard all apps restart in the state they were when closed down, so RAID Utility gets covered by all that other stuff. Any dire warnings are hidden, unless you look for them.</p>
<p>What RAID Utility should do is scream bloody murder, bounce the dock icon, send emails, create Growl popups, any and all of that, but it does none of them. Considering that running on a degraded RAID set is actually several times more risky than not running on RAID at all, the system really should take notifying the user more seriously.</p>
<p>A week&#8230; could just as well have been a month or until the next drive failed. Now let&#8217;s see if I get a new one from Seagate before another one goes titsup. Checking my backups as we speak&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2012/03/invisible-failure/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A platform too many</title>
		<link>http://ursecta.com/wp/2012/01/a-platform-too-many/</link>
		<comments>http://ursecta.com/wp/2012/01/a-platform-too-many/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 10:49:15 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[iPad]]></category>
		<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1258</guid>
		<description><![CDATA[With the new iBooks and iTunes U app, I&#8217;m missing a piece of the puzzle. Just as truckloads of schools have given the kids MacBooks, Apple rolls out the new textbooks to iPads only. Are we supposed to switch over the schoolkids to iPads now, and lose the OSX apps they use? It would seem [...]]]></description>
			<content:encoded><![CDATA[<p>With the new iBooks and iTunes U app, I&#8217;m missing a piece of the puzzle. Just as truckloads of schools have given the kids MacBooks, Apple rolls out the new textbooks to iPads only. Are we supposed to switch over the schoolkids to iPads now, and lose the OSX apps they use?</p>
<p>It would seem logical that iBooks and iTunes U would be available in versions for OSX as well, but there&#8217;s no sign of that. Or is Apple planning on running iOS apps on OSX in something like the iOS simulator? What&#8217;s going on here? As it stands now, it makes no sense.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2012/01/a-platform-too-many/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Another creator pattern for clusters</title>
		<link>http://ursecta.com/wp/2011/09/another-creator-pattern-for-clusters/</link>
		<comments>http://ursecta.com/wp/2011/09/another-creator-pattern-for-clusters/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 11:47:42 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Objective C]]></category>
		<category><![CDATA[class cluster]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[creator pattern]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1239</guid>
		<description><![CDATA[This is about Cocoa, and in particular about class clusters. The problem I wanted to solve was having a class cluster with easily extendable hierarchy without too much interdependency. In my case, I want to create a number of different UITableViewCell descendants, depending on the particular data element the cell should handle. If the data [...]]]></description>
			<content:encoded><![CDATA[<p>This is about Cocoa, and in particular about class clusters. The problem I wanted to solve was having a class cluster with easily extendable hierarchy without too much interdependency. In my case, I want to create a number of different UITableViewCell descendants, depending on the particular data element the cell should handle. If the data element has a field &#8220;string value&#8221;, then a UITableViewCell with a text field for such a string value should be created. If the data element has a field &#8220;check&#8221; representing a yes/no answer, then a UITableViewCell with a yes/no functionality widget should be created instead, and so on. In total, I have less than ten different kinds of UITableViewCell derived classes, but they could become more at any time.</p>
<p><span id="more-1239"></span>I prefer building stuff like this with an object factory in the base class. In this case, my base class is called ItemTableCell and has a factory method with a prototype like this:</p>
<pre>+ (ItemTableCell *)cellForItem:(IDRItem *)item;</pre>
<p>This function needs to determine exactly which ItemTableCell child class can hande the item passed as parameter, and then create an instance of that class. It&#8217;s easy to solve in a naive way, like this:</p>
<pre>#import "ItemTableCellStringInput.h"
#import "ItemTableCellCheckInput.h"
... another ten or so imports

+ (ItemTableCell *)cellForItem:(IDRItem *)item {

  if ([item hasStringInput])
    return [[[ItemTableCellStringInput alloc] initWithItem:item] autorelease];
  else if ([item hasCheckInput])
    return [[[ItemTableCellCheckInput alloc] initWithItem:item] autorelease];
  else if .... (another ten or so if statements)
}</pre>
<p>There are several things I don&#8217;t like about this solution. The first one is the imports, namely that the base class needs to import and know about every child class, while the child classes need to import the base class. This kind of mutual dependency works (at least it does in Objective C), but offends my sense of esthetics. What also disturbs me greatly is that stupid if-statement that is necessary to decide which class gets to create an object. That statement contains knowledge about the capability of handling data objects that properly belongs only in the particular child class that can handle the data object. The way I wrote it here, the knowledge about the data is kept in two places: the base class <em>and</em> the derived class. Not good.</p>
<p>To get to grips with this, I came up with the following freakishly simple solution which I think only works in Objective C, and not in C++, C# or similar. (It may very well work in any number of other languages I don&#8217;t know that much about, though.)</p>
<p>In this pattern, the child class knows about the base class (duh), but the base class does <em>not</em> import the child class. Instead, the base class learns about the existence of the child class at runtime, just as the app starts up. It also delegates to the child classes the decision of which class can handle a particular data item. The result is that if you add a new kind of data item and a matching kind of ItemTableCell child class, you don&#8217;t need to touch the ItemTableCell base class code at all. It still works.</p>
<p>The key to this little miracle is the NSObject class function +load. This function gets called on every class in the system at startup. In case of derived classes, it gets called on the base class first, then on child classes. In my solution, I use this function to register derived classes with the base class. The base class then keeps these child classes in an array, so it can call them one by one to ask them if they can handle a particular data item, and if so it creates an instance and hands that instance the data item. It actually turns out to be pretty simple to do. Minimalistic example code follows:</p>
<pre>@implementation ItemTableCell
static NSMutableArray *subclasses;

+ (void)load {
  [super load];
  subclasses = [[NSMutableArray alloc] initWithCapacity:5];
}

+ (void)addSubclass:(Class)cls {
  [subclasses addObject:cls];
}

+ (ItemTableCell *)cellForItem:(IDRItem *)item {
  ItemTableCell *cell = nil;
  for (Class cls in subclasses) {
    if ([cls canHandle:item]) {
      if (cell != nil)
        [NSException raise:@"Ambiguous canHandle" format:@""];
      cell = [cls subCellForItem:item];
    }
  }
  if (cell == nil)
    [NSException raise:@"No cell could handle item" format:@""];
  return cell;
}</pre>
<p>You will note that the cellForItem function does not return the first child it finds can handle an item, but runs through them all to make sure there isn&#8217;t a second child class that claims it can handle the same item. Also, it throws an exception if no subclass at all finds itself able to handle an item. Believe me, this little extra runtime effort is well worth finding obscure bugs.</p>
<p>A derived class looks like in the following (I&#8217;m just showing one, you can imagine the others):</p>
<pre>#import "ItemTableCellString.h"
@implementation ItemTableCellString

+ (void)load {
  [super addSubclass:self];
}

+ (BOOL)canHandle:(IDRItem *)item {
  return [item hasStringInput] &amp;&amp; [item doesWhateverElse] &amp;&amp; ![item doesNotDoSomething];
}

+ (ItemTableCellString *)subCellForItem:(IDRItem *)item {
  ItemTableCellString *cell = [[[self alloc] initWithItem:item] autorelease];
  return cell;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2011/09/another-creator-pattern-for-clusters/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dr Dobbs circling the drain</title>
		<link>http://ursecta.com/wp/2011/03/dr-dobbs-circling-the-drain/</link>
		<comments>http://ursecta.com/wp/2011/03/dr-dobbs-circling-the-drain/#comments</comments>
		<pubDate>Thu, 17 Mar 2011 18:59:08 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1229</guid>
		<description><![CDATA[I&#8217;ve subscribed to Dr Dobbs journal off and on for decades, probably for ten to 15 years in total. Wherever I turn in this house, I encounter stacks of old issues of DDJ, even though I&#8217;ve thrown away quite a number. A couple of years ago I stopped subscribing, since the main focus of DDJ [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve subscribed to Dr Dobbs journal off and on for decades, probably for ten to 15 years in total. Wherever I turn in this house, I encounter stacks of old issues of DDJ, even though I&#8217;ve thrown away quite a number. A couple of years ago I stopped subscribing, since the main focus of DDJ was drifting away from my main focus, or vice versa, or both. Since Microsoft started buying up all the people central to the C++ evolution, then riddling their version of it with proprietary &#8220;extensions&#8221; (or rather limitations), that language has become more and more of a dead end and both I, and DDJ moved away from it. But during the years, I&#8217;ve often read parts of DDJ on the web and I do get the &#8220;Dr Dobbs Update&#8221; through email every now and then. The most recent arrived two days ago and had the weirdest &#8220;<a href="http://ursecta.com/wp/go.php?http://drdobbs.com/windows/229301144" title="(144 hits)">Editor&#8217;s Note</a>&#8221; ever, at least as far as one would expect from DDJ.</p>
<p><span id="more-1229"></span></p>
<p>The gist of the editor&#8217;s note is that Microsoft isn&#8217;t as bad as it&#8217;s often made out to be. Andrew Binstock, DDJ&#8217;s executive editor, takes great pains in the note to show that he is definitely not a classic Microsoft apologist, and that&#8217;s fine and credible, but way down the note towards the end, there&#8217;s this paragraph:</p>
<blockquote><p>No other company — not Apple, Adobe, HP, IBM, or Oracle — offers such a wide range of products from the consumer level to the enterprise. In many ways, this exposes Microsoft to criticism from which other companies are immune. For example, no one takes Apple to task for its failed (and now withdrawn) server. Yet it was clearly technology that significantly misjudged its audience. The <strong>execrable Objective C language</strong> barely raises a grumble. And so on.</p></blockquote>
<p>(Emphasis mine.)</p>
<p>Wha&#8230; what? WTF? &#8220;Execrable Objective C&#8221;? According to whom and which standard? One would assume that there ought to be a reference here to a study done by IEEE or at least DDJ staff which objectively had determined that Objective C belonged solidly in the &#8220;execrable&#8221; category as defined by an ANSI or ISO standard. This is the kind of writing you expect as an anonymous comment on a PC devoted web site or Apple hate site, not as editorial text, and most certainly not from DDJ. What&#8217;s going on here? So, naturally, I sent Andrew Binstock an email complaining about this. I half expected a response like &#8220;Yes, that&#8217;s overdoing it, sorry&#8221;, but what I got instead was an explanation that &#8220;[he is] not the first person you&#8217;ve run into who has this opinion.&#8221; I didn&#8217;t get much anywhere in the ensuing discussion. It seems that Andrew views it as the most natural thing in the world to have DDJ proclaim publicly that Objective C is &#8220;execrable&#8221; simply because Andrew knows some people who say they hate it. (While in the same sentence actually saying the opposite: &#8220;&#8230;barely raises a grumble&#8221;. It really makes no sense.)</p>
<p>My solid opinion is that an executive editor of DDJ simply can&#8217;t say things like this. It&#8217;s unscientific and simply way beneath the level of discourse one expects from such a journal. Additionally, there is not a single computer language out there that can be objectively called &#8220;execrable&#8221;. All of them are more or less suited for any particular purpose, that is all. And Objective C definitely doesn&#8217;t have more haters than any other language, if we were to sink to that level, which I don&#8217;t think we should.</p>
<p>I am including the full email exchange below, with the permission of Andrew Binstock. I think it is interesting reading, and I think it clearly shows that DDJ is circling the drain, as far as editorial standards go. Too bad, I used to love the mag. First, read the <a href="http://ursecta.com/wp/go.php?http://drdobbs.com/windows/229301144" title="(144 hits)">original editor&#8217;s note</a> from DDJ&#8217;s site. Then the emails, in order as follows.</p>
<p><em>From: Martin Wehlou<br />
To: Andrew Binstock<br />
Date: 15 March 2011</em></p>
<p><em>Andrew,</p>
<p>Just read your note &#8220;The Perpetual Microsoft Canard&#8221; and almost agreed until, out of the blue, you say &#8220;the execrable objective C language&#8221;. I really don&#8217;t understand how you can throw out a sentence like that and expect to be viewed as methodical and reliable. All the words you used to build up your credibility blown to bits in one instant. You don&#8217;t even seem to provide any form of substantiation of such a claim. Why? Because you feel you&#8217;re above that?</p>
<p>From my point of view, having developed for MSDOS, Windows since 1.04 and up to XP, having seriously wielded C++, C#, Delphi, VB, plain C, and maybe five other languages, Objective C is clearly much more productive, orthogonal, powerful than any .NET language, hands down. C# in particular doesn&#8217;t stand up to long term use and can only be described as non-scalable. And believe me, I&#8217;ve tried to make it work for years. It&#8217;s simply too shallow.</p>
<p>The only possible conclusion must be that you either have never used Objective C for any real projects, or that you missed the point. There&#8217;s also a very small possibility that you actually did use it, and that you have grounded objections to it. But in none of these cases is your &#8220;execrable&#8221; twitch acceptable. You could just as well call us Objective C practitioners &#8220;jerk faces&#8221; for all the sensible content your statement has.</p>
<p>Regards,</p>
<p>Martin</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Thanks for taking the time to drop me a note. Execrable might be a bit strong, but not much. Surely, I am not the first person you&#8217;ve run into who has this opinion. I know more than a few Apple developers who would gladly code in any other language if they could.</p>
<p>How exactly is Objective C more scalable than C#? Given that Obj C is barely ever used on servers, I think you&#8217;d be very hard pressed to demonstrate this contention.</p>
<p>Dismissing a language that is disliked by many of its practicioners is not at all like calling people who use it jerks. I really prefer dialog about technologies to not be personalized. I don&#8217;t indulge in ad hominem attacks and expect readers to avoid this too.</p>
<p>With all good wishes,</p>
<p>Andrew Binstock<br />
Exec. Editor, Dr. Dobb&#8217;s<br />
alb@drdobbs.com</p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p></em><span style="font-style: normal;"><em></p>
<p style="display: inline !important;">On 15 Mar 2011, at 23:32, Andrew Binstock wrote:</p>
<p></em></span></p>
<p style="padding-left: 30px;">Thanks for taking the time to drop me a note. Execrable might be a bit strong, but not much. Surely, I am not the first person you&#8217;ve run into who has this opinion. I know more than a few Apple developers who would gladly code in any other language if they could.</p>
<p>And I know more than a few .NET developers who would. That doesn&#8217;t mean anything. Meanwhile, the number of Objective C developers is increasing rapidly, and there certainly is no widespread disgust or even dissatisfaction with the language that I have ever heard of. To be frank, I haven&#8217;t met a single Objective C developer who didn&#8217;t love the language. The more experienced in other languages they were before, the more they love it. As the editor of Dr Dobbs, you have a considerable reputation to uphold, and you should not be surprised that we hold you to a considerably higher standard than &#8220;I know some people who don&#8217;t like it&#8221;.</p>
<p style="padding-left: 30px;">How exactly is Objective C more scalable than C#? Given that Obj C is barely ever used on servers, I think you&#8217;d be very hard pressed to demonstrate this contention.</p>
<p>That is just one meaning of the word &#8220;scalable&#8221; and no language I know of is clearly more suited for this type of scalability than any other. Platforms yes, languages no.</p>
<p>The &#8220;scalable&#8221; attribute I&#8217;m referring to is the ability of the language to grow with the level of abstraction you need. C++ is masterful in this regard. There is hardly any concept or repeated code that you can&#8217;t elevate to a higher level using some nifty, and often very unreadable, template code. If you want to create groups, go ahead. Or a base class or mixin that allows you to do in memory transactions, they can be done. Admittedly with a lot of sweat, but you can do it. I did many years of C++ and I could still sit down and learn entire new abilities and ever higher abstraction levels due to its very clean orthogonality of features. Now if it is a good thing or not that it never ends, is open for discussion, of course, but I admire it for it.</p>
<p>C#, oh boy&#8230; I&#8217;ve spent a couple of years on this beastie as well. The last project I did was a &#8220;model&#8221; project. I created a complete clinical lab client in C# and with the explicit task of making the code a model to be followed by the client&#8217;s own programmers, so it should contain clean, flexible, didactic, and solid code principles. Up to a point, C# is very productive, but when you get into the realm of raising the abstraction level, you hit a brick wall. For instance, I needed to have my in memory objects transacted, so the user could modify orders and line items, then post, and if the post to the DB failed, have the in memory objects roll back to a previous state. In other words, all in memory objects should have &#8220;begin transaction&#8221;, &#8220;commit&#8221;, and &#8220;rollback&#8221;, independently of the database transactions. A complete undo functionality, is another way of expressing it.</p>
<p>This in C# is as close to total madness as you can get. It is also not too much to ask of a decent language or runtime, but .NET falls down badly. At every turn, things work almost but not quite, everything has exceptions, stuff they didn&#8217;t think of. Generics is a sham. I worked on this train wreck for three or four weeks and got it to work in most situations most of the time, using a complicated system of attributes and reflection (which wouldn&#8217;t even work at all if we ever needed to run .NET in &#8220;secure&#8221; mode), while having the language fight me every inch of the way. This experience was what made me leave the Windows platform for good after more than 30 yrs of programming Microsoft OSs one way or the other. I can only say that my initial experience with MS Basic 1.0 back in the 80&#8242;s was much better. At least you could bypass the runtime if you had to. Not so with .NET.</p>
<p>Turning to OSX and Objective C, this was the first thing I checked for. Not only does it turn out that you can dynamically hook into and monitor any member variable, exactly what is needed for a generalized transactional mechanism, but they even include the undo manager in the frameworks. You have dynamic loading and unloading (!) of code in runtime. You have messaging where you can dynamically delegate to just about anything in runtime. And on and on. This is the kind of functionality you need to stay sane if you build systems beyond the mundane.</p>
<p>I&#8217;m just taking these features as examples, but they reflect on the entire architecture of these platforms. C# can&#8217;t be dragged even kicking and screaming into any decent shape. Objective C, however, is infinitely adaptable, or at least adaptable far beyond the limits of .NET.</p>
<p>If Microsoft would add in a similar kind of runtime dynamics in .NET, I would consider going back at least part time, but they won&#8217;t. An illustrative anecdote: during a &#8220;multithread day&#8221; here at Stockholm University, an audience member asked the Microsoft speaker during a discussion about .NET why MS put in so many barriers for higher level abstractions in .NET, effectively making it a programming platform for idiots. I would have expected the speaker to deny it was for idiots, but no, he said instead: &#8220;Welcome to the real world. Programmers in general ARE idiots!&#8221; Needless to say, the audience, consisting largely of programmers, wasn&#8217;t very pleased. (No, I wasn&#8217;t there, but I heard it confirmed from several sources.) Put in slightly more civilized terms: MS intentionally don&#8217;t provide languages for &#8220;real and experienced coders&#8221;, to which I gratuitously count myself, but to the indifferent coding masses who prefer largely to do copy and paste, and never aspire to higher the abstraction levels. IOW, good for the average coding monkey, but not much more.</p>
<p style="padding-left: 30px;">Dismissing a language that is disliked by many of its practicioners is not at all like calling people who use it jerks.</p>
<p>So, now that you know that I dislike C#, will you dismiss it publically as well? Or do I need a minimum quantity of dislikers to qualify? At least I&#8217;m telling you *why* I dislike it.</p>
<p style="padding-left: 30px;">I really prefer dialog about technologies to not be personalized. I don&#8217;t indulge in ad hominem attacks and expect readers to avoid this too.</p>
<p>As I said, you *are* Dr Dobbs, you can&#8217;t go dropping statements like this around. It did not sound considered or objective in any sense of these words. I can read unsubstantiated opinions anywhere, but I don&#8217;t expect them in Dr Dobbs. Especially after you took pains to clarify how objective you are.</p>
<p>&#8211; Martin</p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p></em>Martin:</p>
<p>If you haven&#8217;t heard anyone complain about Objective C, you need to read programmer forums more:</p>
<p>http://stackoverflow.com/questions/435990/why-do-programmers-love-hate-objective-c</p>
<p>http://amplicate.com/hate/objective-c</p>
<p>Lots of people strongly dislike it, just like I do. If you don&#8217;t dislike it, that&#8217;s fine, but it&#8217;s certainly not because everyone who disagrees with you is wrong, as you imply.</p>
<p>Andrew Binstock<br />
Exec. Editor, Dr. Dobb&#8217;s<br />
alb@drdobbs.com</p>
<p><em>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p></em>On 16 Mar 2011, at 1:04, Andrew Binstock wrote:</p>
<p style="padding-left: 30px;">If you haven&#8217;t heard anyone complain about Objective C, you need to read programmer forums more:</p>
<p style="padding-left: 30px;">http://stackoverflow.com/questions/435990/why-do-programmers-love-hate-objective-c</p>
<p>Of course I use stackoverflow a lot, it&#8217;s has the highest concentration of Objective C tips ever. Please don&#8217;t resort to telling me I&#8217;m poorly read.</p>
<p>Anyway, have you actually read that thread you refer to? I went about two thirds through and did not find anyone who &#8220;hated&#8221; Objective C. Quite the opposite; most stressed that they did *not* hate it, but had objections to square brackets, lack of full point member syntax, and either liked or didn&#8217;t like the value naming in parameters. Yes, the weird syntax can put you off in the beginning, but you get used to it and learn to appreciate it. Just like programmers have a problem going to and fro Basic or Fortran type languages vs C like languages. But this thread in absolutely no way supports your thesis of a lot of hate.</p>
<p style="padding-left: 30px;">http://amplicate.com/hate/objective-c</p>
<p>Hah! A forum dedicated to hating Objective C has a lot of hate comments. Big surprise! Back down a page to the list of programming languages on Amplicate and you&#8217;ll see Objective C haters at 129 opinions, while Objective C lovers only total 80, so yes, if that&#8217;s your criterion, you&#8217;re right. But in that case, Foxpro, Matlab, PHP, Smalltalk, SQL, and Vbscript are even more &#8220;execrable&#8221;, only to be surpassed by Visual Basic, which seems to be the most hated of them all. Since there isn&#8217;t even an entry for C#, we have to conclude that .NET as represented by VBasic, is the most execrable of them all. But you didn&#8217;t write &#8220;execrable VBasic&#8221;, did you?</p>
<p style="padding-left: 30px;">Lots of people strongly dislike it, just like I do. If you don&#8217;t dislike it, that&#8217;s fine, but it&#8217;s certainly not because everyone who disagrees with you is wrong, as you imply.</p>
<p>Of course a lot of people dislike it, just like a lot of people dislike a lot of things. The weird syntax is particularly offputting to beginners. But there is absolutely no excessive dislike of Objective C as compared to other languages.</p>
<p>I tried to reason out the advantages of Objective C with you using real examples, verifiable data, and would have appreciated you blowing holes in my arguments. If you could have, I would have just maybe started appreciating .NET more. Who knows, I could have misunderstood the .NET system even after so many years. Unlikely, but not impossible. But you don&#8217;t do that, preferring to go on the count of anonymous messages in a thread on a hate forum.</p>
<p>The problem here is not that you personally dislike Objective C, it&#8217;s your right to dislike whatever you want. But as chief editor of one of the most respected publications in the software industry, a publication everyone looks up to, your public expressions of dislike *must* be well reasoned out and well founded in fact, not as in &#8220;I saw a forum where a lot of people hated X&#8221;. If you had written &#8220;execrable C#&#8221;, I may have silently agreed, but I&#8217;m sure I would have written to complain anyway. It would have been no more acceptable than what you actually wrote and for exactly the same reasons.</p>
<p>This whole thing is way beneath you, it reflects badly on Dr Dobbs, and I&#8217;m quite disturbed that you don&#8217;t seem to see what your position demands of you.</p>
<p></em></p>
<p><em>&#8211; Martin</em></p>
<p>Here the discussion ended, and I just sent a mail to ask if it was ok to copy the emails to a public blog, and Andrew graciously agreed.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2011/03/dr-dobbs-circling-the-drain/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Death of medical articles?</title>
		<link>http://ursecta.com/wp/2011/02/death-of-medical-articles/</link>
		<comments>http://ursecta.com/wp/2011/02/death-of-medical-articles/#comments</comments>
		<pubDate>Wed, 02 Feb 2011 09:43:56 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Medical Applications]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1225</guid>
		<description><![CDATA[Check out this article on &#8220;Improbable Research&#8221;. In short, it&#8217;s an application that can take raw data and write an article around it. Personally, I think it&#8217;s a good thing if the result is more objective and complete than most journalistic writing we see today. Can&#8217;t be less researched, at least. But it also goes [...]]]></description>
			<content:encoded><![CDATA[<p>Check out <a href="http://ursecta.com/wp/go.php?http://improbable.com/2011/02/01/further-advances-in-brainless-writing/" title="(165 hits)">this article</a> on &#8220;Improbable Research&#8221;. In short, it&#8217;s an application that can take raw data and write an article around it. Personally, I think it&#8217;s a good thing if the result is more objective and complete than most journalistic writing we see today. Can&#8217;t be less researched, at least.</p>
<p>But it also goes to show the opposite, which has a bearing on medical publications. In medicine, we have a huge problem with the sheer amount of articles published. If you want to find out the state of art in some particular disease or treatment, you have to collect a number of articles, skim through them, try to get at the original data that was used (very hard) and make up your mind. There&#8217;s not much guarantee of objectivity in selection or interpretation of the articles, and very little objective data on how reliable the articles are. If you can find a (reliable) meta study, it&#8217;s easier.</p>
<p>If a machine can produce medical articles based on study data, and those articles look like the real thing, this proves that the prose in the article is not a real value add. In other words, nothing in the text adds information beyond what the raw data already contains. And if it does, it&#8217;s probably misleading and wrong, anyway.</p>
<p>In conclusion, this only goes to show that what we need is more studies and less articles. What we need is immediate access to the raw data of all relevant studies and a desktop application that lets us view and manipulate the total of that data according to our needs, without going through the complications of reading articles and reverse-engineer the texts down to the objective facts hiding behind them.</p>
<p>Maybe this heralds the death of medical publishing as it looks today, and if so, good riddance. </p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2011/02/death-of-medical-articles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Netbooting on OSX SL Server</title>
		<link>http://ursecta.com/wp/2011/01/netbooting-on-osx-sl-server/</link>
		<comments>http://ursecta.com/wp/2011/01/netbooting-on-osx-sl-server/#comments</comments>
		<pubDate>Thu, 13 Jan 2011 14:12:22 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Mac]]></category>
		<category><![CDATA[Networks]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1213</guid>
		<description><![CDATA[Once I got tftp working on IPv4, I still couldn&#8217;t get the Macbook client to download the boot or image files. Wireshark showed that the client didn&#8217;t get any file when it sent &#8220;acknowledge data block 0&#8243;. Nothing. So I installed tftp-hpa from Macports, hoping that would solve my problem, which it didn&#8217;t. But a [...]]]></description>
			<content:encoded><![CDATA[<p>Once <a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/2011/01/osx-sl-tftp-doesnt-work/" title="(120 hits)">I got tftp working on IPv4</a>, I still couldn&#8217;t get the Macbook client to download the boot or image files. Wireshark showed that the client didn&#8217;t get any file when it sent &#8220;acknowledge data block 0&#8243;. Nothing. So I installed tftp-hpa from Macports, hoping that would solve my problem, which it didn&#8217;t. But a few tips on that:</p>
<p>Install tftp-hpa using the &#8220;server&#8221; variant like so:</p>
<pre>sudo port install tftp-hpa +server</pre>
<p>Then go into the preference file (which isn&#8217;t in the same place as most plist files):</p>
<pre>sudo pico /Library/LaunchDaemons/org.macports.tftpd.plist</pre>
<p>&#8230;and remove the &#8220;-s&#8221; command line parameter, while changing the path to &#8220;/private/tftpboot/&#8221;. The &#8220;-s&#8221; parameter forced a chroot which won&#8217;t allow tftp to follow symlinks outside the given path, making netbooting impossible.</p>
<p>Then, and this is the crucial step, change the block size to max 512 by adding the &#8220;-B&#8221; option with the value &#8220;512&#8243;. What seemed to be happening in my installation is that the client requested a block size of 8192, the server approved it, and things just stopped working. Probably something to do with the switches I have, but crimping it to 512 fixed the problem. Of course, if you&#8217;re doing netbooting on a regular basis, or run diskless workstations, 512 may be intolerably slow, so then it could be worth experimenting with higher values.</p>
<p>I ended up with a plist file for tftp-hpa looking like this:</p>
<pre>
&lt;?xml version=&#x27;1.0&#x27; encoding=&#x27;UTF-8&#x27;?&gt;
&lt;!DOCTYPE plist PUBLIC &quot;-//Apple Computer//DTD PLIST 1.0//EN&quot;
&quot;http://www.apple.com/DTDs/PropertyList-1.0.dtd&quot; &gt;
&lt;plist version=&#x27;1.0&#x27;&gt;
&lt;dict&gt;
&lt;key&gt;Label&lt;/key&gt;&lt;string&gt;org.macports.tftpd&lt;/string&gt;
&lt;key&gt;ProgramArguments&lt;/key&gt;
&lt;array&gt;
        &lt;string&gt;/opt/local/bin/daemondo&lt;/string&gt;
        &lt;string&gt;--label=tftpd&lt;/string&gt;
        &lt;string&gt;--start-cmd&lt;/string&gt;
        &lt;string&gt;/opt/local/sbin/tftpd&lt;/string&gt;
        <b>&lt;string&gt;-B&lt;/string&gt;
        &lt;string&gt;512&lt;/string&gt;</b>
        &lt;string&gt;-L&lt;/string&gt;
        &lt;string&gt;<b>/private/tftpboot/</b>&lt;/string&gt;
        &lt;string&gt;;&lt;/string&gt;
        &lt;string&gt;--pid=exec&lt;/string&gt;
&lt;/array&gt;
&lt;key&gt;Debug&lt;/key&gt;&lt;false/&gt;
&lt;key&gt;Disabled&lt;/key&gt;&lt;true/&gt;
&lt;key&gt;OnDemand&lt;/key&gt;&lt;false/&gt;
&lt;/dict&gt;
&lt;/plist&gt;
</pre>
<p>After modifying the file, stop and restart tftp-hpa by:</p>
<pre>sudo launchctl unload /Library/LaunchDaemons/org.macports.tftpd.plist
sudo launchctl load -F /Library/LaunchDaemons/org.macports.tftpd.plist</pre>
<p>It&#8217;s entirely possible I never needed to switch tftp servers from the default to tftp-hpa, but now I did, I don&#8217;t know if I&#8217;ve got the courage to switch back to try the original. Checking the man pages for the original tftpd server, I can find no setting for max block-size, so maybe tftp-hpa is necessary after all, just to be able to crimp the blocks enough.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2011/01/netbooting-on-osx-sl-server/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OSX SL tftp doesn&#8217;t work?</title>
		<link>http://ursecta.com/wp/2011/01/osx-sl-tftp-doesnt-work/</link>
		<comments>http://ursecta.com/wp/2011/01/osx-sl-tftp-doesnt-work/#comments</comments>
		<pubDate>Wed, 12 Jan 2011 22:41:13 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1198</guid>
		<description><![CDATA[&#8230;then this may be the reason&#8230; took me hours to figure out. Had to get it going for a netboot project, and the netboot just kept circling around the boot image download without getting much anywhere. First, check out Bombich&#8217;s troubleshooting, which put me on the right track without actually giving me the solution, but [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;then this may be the reason&#8230; took me hours to figure out. Had to get it going for a netboot project, and the netboot just kept circling around the boot image download without getting much anywhere. First, check out <a href="http://ursecta.com/wp/go.php?http://www.afp548.com/netboot/mactips/netboot.html" target="_blank" title="(127 hits)">Bombich&#8217;s troubleshooting</a>, which put me on the right track without actually giving me the solution, but maybe that&#8217;s because my particular problem is relatively new. It may have been introduced with Snow Leopard.</p>
<p>What happened in my case is that I was able to download an image using the form:</p>
<pre>tftp myserver.local
get NetBoot/NetBootSP0/Netinstall.nbi/i386/booter</pre>
<p>&#8230;but not using the form:</p>
<pre>tftp 172.25.26.27
get NetBoot/NetBootSP0/Netinstall.nbi/i386/booter</pre>
<p>even though the &#8220;myserver.local&#8221; name pointed to the IP 172.25.26.27. At least, that&#8217;s what I presumed until I whipped out Wireshark and found out that using the &#8220;myserver.local&#8221; name resolved to an IPv6 address, not the IPv4 address I expected.</p>
<p>Next, I ran this on the server:</p>
<pre>sudo lsof -i :69

COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
launchd   1 root  144u  IPv6 0x0a9ab4a0      0t0  UDP *:tftp
</pre>
<p>Aha! The tftp server only runs IPv6 for some reason. <i>That</i> explains it.</p>
<p>To fix this, go into the tftp.plist file with pico:</p>
<pre>sudo pico /System/Library/LaunchDeamons/tftp.plist</pre>
<p>and add the optional key for IPv4 a bit down:</p>
<pre>...
&lt;key&gt;Sockets&lt;/key&gt;
&lt;dict&gt;
    &lt;key&gt;Listeners&lt;/key&gt;
    &lt;dict&gt;
        &lt;key&gt;SockServiceName&lt;/key&gt;
        &lt;string&gt;tftp&lt;/string&gt;
        &lt;key&gt;SockType&lt;/key&gt;
        &lt;string&gt;dgram&lt;/string&gt;
       <strong> &lt;key&gt;SockFamily&lt;/key&gt;
        &lt;string&gt;IPv4&lt;/string&gt;</strong>
    &lt;/dict&gt;
&lt;/dict&gt;
...
</pre>
<p>After that, all you need to do is stop and restart tftp:</p>
<pre>sudo launchctl unload /System/Library/LaunchDaemons/tftp.plist
sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist</pre>
<p>Then check that the port is working on IPv4 as well:</p>
<pre>COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF NODE NAME
launchd   1 root  144u  IPv6 0x0a9ab4a0      0t0  UDP *:tftp
launchd   1 root  150u  IPv4 0x07e2ee14      0t0  UDP *:tftp
</pre>
<p>After that, retry the tftp get command using both IPv4 and &#8220;myserver.local&#8221; addressing. Should work now. I must admit I don&#8217;t understand why IPv6 keeps working, though. Oh well, not that it bothers me, but it bothers me a little bit.</p>
<p><i>Update: this post is correct, but it still didn&#8217;t solve my problem, so please see next blog post for more, at least if you&#8217;re doing netboot stuff on Snow Leopard</i></p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2011/01/osx-sl-tftp-doesnt-work/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Don&#8217;t trust iTunes gift cards</title>
		<link>http://ursecta.com/wp/2010/12/dont-trust-itunes-gift-cards/</link>
		<comments>http://ursecta.com/wp/2010/12/dont-trust-itunes-gift-cards/#comments</comments>
		<pubDate>Thu, 23 Dec 2010 12:34:04 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Best Buy]]></category>
		<category><![CDATA[iTunes gift cards]]></category>
		<category><![CDATA[iTunes scam]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1166</guid>
		<description><![CDATA[This is what happened to me. I gave a friend $300 to buy gift cards for iTunes, and he got me six $50 cards in the Woodlands Best Buy store in Texas. This was in november 2009. Me and a relative redeemed three of these cards during the following months, but I only got around [...]]]></description>
			<content:encoded><![CDATA[<p>This is what happened to me. I gave a friend $300 to buy gift cards for iTunes, and he got me six $50 cards in the Woodlands Best Buy store in Texas. This was in november 2009. Me and a relative redeemed three of these cards during the following months, but I only got around to redeeming the last three in september 2010. When I did, they didn&#8217;t work. The error I got was that these codes did not exist.</p>
<p><span id="more-1166"></span></p>
<p><em>In order to follow along, you need to understand the gift card process. When you buy a card, it is &#8220;activated&#8221; at the store&#8217;s cash register. It&#8217;s only after &#8220;activation&#8221; that the card exists in the iTunes system. Vice versa: if it is &#8220;activated&#8221; it was duly bought and paid for in a store. Once the recipient of the card wants to use it, he/she has to &#8220;redeem&#8221; it, which you do using the iTunes application. So, &#8220;activate&#8221; and &#8220;redeem&#8221; are two different steps in the process.</em></p>
<p>So I contacted iTunes support and what they said is this:</p>
<blockquote><p>Martin, I did little investigation on this issue and my records indicate that your iTunes Gift Cards (&lt;here the numbers were repeated&gt;) have been canceled and that Best Buy provided a refund for the purchase price. I&#8217;m sorry that I could not  reactivate the card for you.</p></blockquote>
<p>The key terms here are: &#8220;canceled&#8221; and &#8220;could not reactivate&#8221;, both of which make very clear that the cards were indeed activated at the point of purchase, but later canceled.</p>
<p>I checked with my friend, and he had no such refund on his credit card. So I asked again to find out more exactly when this refund was supposed to have happened, and got this reply:</p>
<blockquote><p>Martin, I did research on this and found that the Gift cards with serial numbers &#8230;, &#8230; and &#8230; were cancelled on 09/16/2010. The reversed or the refunded might be deposited back onto your credit card. Please look for the receipt on your email and  also the credit card statement of this particular date.</p></blockquote>
<p>Ok, so on September 16, according to Apple, Best Buy requested that the cards should be cancelled. I tried to redeem them a week after that. My friend then called Best Buy about it, and they could not find any record of any refund connected to this. They didn&#8217;t find any record of the cancellation either. Another round with iTunes support and I got this:</p>
<blockquote><p>As the Gift cards were cancelled by the Best Buy,  with our resource I could only see that these cards were cancelled and refunded. Please contact Best Buy (1-888-BEST BUY/1-888-237-8289), with the receipt and they will be able to provide the more information and help you on this issue.</p></blockquote>
<p>So now I called Best Buy and got Rick W. aka &#8220;Mitch&#8221; on the line. I gave him the story and he looked up the sales transaction. He confirmed that there was no refund requested or given. He even said he had no idea Best Buy <em>could</em> cancel iTunes gift cards. But he promised to look into it. I sent him forwards of the mails I had got from iTunes support, and he was going to take care of this pronto.</p>
<p>A few more back and forths, while Rick W&#8217;s enthousiasm clearly waned, response times becoming longer and longer, messages becoming more and more terse, until he finally said:</p>
<blockquote><p>Martin</p>
<p>Best I can do is 75 dollar gift card to the purchaser</p>
<p>Mitch</p></blockquote>
<p>My reaction to this was&#8230; &#8220;WTF??!&#8221;. His email was rude, late, brief, and wrong. The only reason I can imagine why I would accept half the amount is if I was trying to scam Best Buy and he didn&#8217;t find it worth his time to prove it. Oh, boy, do I dislike Best Buy customer support now&#8230; I wrote back saying it was entirely unacceptable. It&#8217;s my money and I want it back. Nothing more was heard from Best Buy, even though I sent reminder mails. Stone dead cold.</p>
<p>So, it&#8217;s back to iTunes. This time I get the following request:</p>
<blockquote><p>In order to help you further, please take scans of the front and back of each Gift Card and include the scans with your response. I&#8217;ll need to see a photocopy or scan of the cards themselves. I&#8217;ll also need to see the receipt for each card.</p></blockquote>
<p>This request makes sense, since iTunes support probably wanted to make sure I had the cards in my possession. So I scan in the cards, include an email with the scans explaining that my friend does not have the paper receipt, but that we do know the transaction number and they can use that to check with Best Buy that the cards were sold there. Response from iTunes:</p>
<blockquote><p>Thank you for including the scans of the Gift Cards. I have verified that they are adequate scans. Finding a solution for you is important to me, so I have requested assistance with the issue you reported. You will receive an email after the matter has been investigated and further information is available.</p></blockquote>
<p>We&#8217;re already past half november, but now I&#8217;m starting to see the light at the end of the tunnel. But then, a week later, &#8220;Tim, senior advisor&#8221; responds:</p>
<blockquote><p>I appreciate your patience while I&#8217;ve been reviewing the information you sent about your gift card. Unfortunately, I will have to have a scanned copy of the receipt itself in order to assist further; I&#8217;ve been unable to verify the purchase of the card with the information you provided, since we don&#8217;t have direct access to Best Buy&#8217;s systems.</p>
<p>You may be able to contact the store in question to request a reprint of this receipt, but I won&#8217;t be able to assist further without an image of the actual receipt itself. I apologize for any inconvenience this may cause, but I look forward to your reply.</p></blockquote>
<p>At this point, I started to lose my cool. I sent this to Tim:</p>
<blockquote><p>I&#8217;ve been giving your message a day&#8217;s thought and it doesn&#8217;t make sense. Both Apple and Best Buy have confirmed to me that these three gift cards are the real thing, that they&#8217;ve been properly purchased, properly activated at the register, and properly activated in Apple&#8217;s systems. There has never been a doubt about that. A copy of the receipt will prove nothing to you that you don&#8217;t already know. It will only cost me hours on the line with Best Buy again.</p>
<p>*After* being properly activated, these cards were then de-activated September 16 this year. Apple told me so, and you know it. Best Buy tells me they don&#8217;t know that. The problem then is to find out if Best Buy did get a refund from you or not. They claim not. There is no way for me to prove a negative.</p>
<p>So, in conclusion, you know for a fact these cards are bona fide. If you have doubts about Best Buy having been refunded or not, *you have to take that up with Best Buy*! I can&#8217;t do this for you!</p>
<p>What we have here is Apple and Best Buy both knowing one or both of you cancelled my cards for no good reason and without refunding them, but you keep giving me the run around. I&#8217;ve spent two months and untold hours on this, and it has to stop right now. If you have any sense of customer service, you fix this without bothering me again. OR you state clearly and unambigiously that you&#8217;re not planning on honoring the gift card commitment. But I will not keep spending time on this.</p></blockquote>
<p>Needless to say, Tim didn&#8217;t even respond, didn&#8217;t even acknowledge my message. I even sent a brief synopsis to Steve J himself. He didn&#8217;t bother either. This kind of thing, the theft of customer&#8217;s money, doesn&#8217;t seem to interest anyone.</p>
<p>So, back to phoning Best Buy again, trying to get a copy of the receipt, only to run up against another wall: they won&#8217;t send a copy to anyone else except the original purchaser. But my friend in the meanwhile, was incommunicado in Africa somewhere. Another two weeks go by, he returns, calls Best Buy and finally gets an email with a receipt, which is just a listing from their accounting system, not the &#8220;scanned image&#8221; iTunes support requires. And, interestingly, the credit card number was in the clear in that listing; makes one wonder&#8230;</p>
<p>So I send this non-scanned-image-of-a-receipt to Tim at iTunes, and finally, on December 21, I get this:</p>
<blockquote><p>Thank you for the additional information. With this receipt information I&#8217;ve been able to obtain replacement codes for your gift cards; here are the codes:</p></blockquote>
<p>You could say it all turned out allright, but I don&#8217;t think so. I&#8217;ve wasted untold hours on this crap. Right from the start, iTunes and Best Buy both knew with absolute 100% certainty that the cards were entirely legit and that no refund had been given. Both knew I, or my friend, had not cancelled them. Both totally refused to pick up the phone and call each other, instead letting the customer (me and my friend) do all their legwork. Finally, the only point they actually should have verified, namely that Best Buy never got the refund Apple says they gave them, never was verified.</p>
<p>My theory, which I&#8217;ve shared with all three (iTunes, Best Buy, and Steve J, even though he probably never even read it) is that someone at Apple or Best Buy has a scam going, where he/she is &#8220;cancelling&#8221; iTunes gift cards which have not been redeemed for a number of months after purchase, taking the money somehow and (usually) never get caught. Neither BB or iTunes have ever responded to my theory. They seem totally uninterested.</p>
<p>Another point is brought home by the request to scan my cards for iTunes. The only reason to ask for that is probably to see if I bought my iTunes &#8220;codes&#8221; over the internet, and refuse me a refund or replacement if I did. This strikes me as highly dubious. If I had indeed bought them over the internet, what right does iTunes have of not honoring them? Maybe such a clause is buried somewhere in the iTunes user agreement, I really don&#8217;t know, but it doesn&#8217;t sound very fair to me. In any case, that was not my problem, so I&#8217;m not going to research the EULA just for that.</p>
<p>My main conclusion is: iTunes gift cards are a really, really dangerous purchase. They are not to be trusted, since Apple by no means stands behind them. It&#8217;s a toss-up if they&#8217;re going to honor them or not. If you do buy any for friends or family, give them a copy of the receipt and ask them to redeem pronto. Which all seems to make the &#8220;gift&#8221; in &#8220;iTunes gift card&#8221; a very dubious term.</p>
<p>My second conclusion is that someone has found a nice extra income by ripping off late redeemers, and Apple doesn&#8217;t seem to care. That worries me as an Apple shareholder.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2010/12/dont-trust-itunes-gift-cards/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>The first thing you should do on a new Mac</title>
		<link>http://ursecta.com/wp/2010/12/the-first-thing-you-should-do-on-a-new-mac/</link>
		<comments>http://ursecta.com/wp/2010/12/the-first-thing-you-should-do-on-a-new-mac/#comments</comments>
		<pubDate>Tue, 21 Dec 2010 14:21:46 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Mac]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1127</guid>
		<description><![CDATA[The very first thing you should always do on your new Mac is to make sure you run as non-admin. This protects you against most malware out on the net, since it makes it very difficult to install anything without you knowing about it. It doesn&#8217;t exclude it entirely, but it makes a major difference. [...]]]></description>
			<content:encoded><![CDATA[<p>The very first thing you should always do on your new Mac is to make sure you run as non-admin. This protects you against most malware out on the net, since it makes it very difficult to install anything without you knowing about it. It doesn&#8217;t exclude it entirely, but it makes a major difference.</p>
<p><span id="more-1127"></span></p>
<p>First, open System Preferences&#8230;:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/2341.png" title="(46 hits)"><img class="aligncenter size-full wp-image-1164" title="234" src="http://ursecta.com/wp/wp-content/uploads/2010/12/2341.png" alt="" width="242" height="341" /></a></p>
<p>Then, select &#8220;Accounts&#8221;:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/235.png" title="(43 hits)"><img class="aligncenter size-medium wp-image-1134" title="235" src="http://ursecta.com/wp/wp-content/uploads/2010/12/235-273x300.png" alt="" width="273" height="300" /></a></p>
<p>Once in the accounts panel, you&#8217;ll see your accounts to the left. Chances are you&#8217;ll only have one, while I have a bunch on this system. The one you have will probably have the subtitle &#8220;Admin&#8221;:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/2361.png" title="(45 hits)"><img class="aligncenter size-full wp-image-1137" title="236" src="http://ursecta.com/wp/wp-content/uploads/2010/12/2361.png" alt="" width="378" height="546" /></a></p>
<p>You&#8217;ll see a checkbox to the right that says &#8220;Allow user to administer this computer&#8221;, but you can&#8217;t unselect this unless there is at least one other account that is set to &#8220;administer this computer&#8221;, so we need to create another account with that ability first.</p>
<p>So, click the &#8220;+&#8221; down to the left, and what you&#8217;ll see then is this:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/237.png" title="(42 hits)"><img class="aligncenter size-medium wp-image-1138" title="237" src="http://ursecta.com/wp/wp-content/uploads/2010/12/237-300x240.png" alt="" width="300" height="240" /></a></p>
<p><a href="http://ursecta.com/wp/wp-content/uploads/2010/12/237.png"></a>See to it that the dropbox at the top says &#8220;Administrator&#8221;, then fill in the rest as you wish. You can use the same password for this account as for your regular account, but see to it that it is a strong password (long and complex). I see no reason why you should necessarily choose another password here. It could look like this, when you&#8217;re done:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/238.png" title="(47 hits)"><img class="aligncenter size-full wp-image-1139" title="238" src="http://ursecta.com/wp/wp-content/uploads/2010/12/238.png" alt="" width="477" height="381" /></a></p>
<p>Click &#8220;Create Account&#8221; and this is what you should see in the &#8220;Accounts&#8221; pane:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/239.png" title="(44 hits)"><img class="aligncenter size-full wp-image-1141" title="239" src="http://ursecta.com/wp/wp-content/uploads/2010/12/239.png" alt="" width="378" height="546" /></a></p>
<p><a href="http://ursecta.com/wp/wp-content/uploads/2010/12/239.png"></a>Now you can select your original account and deselect &#8220;Allow user to administer this computer&#8221;:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/240.png" title="(45 hits)"><img class="aligncenter size-full wp-image-1142" title="240" src="http://ursecta.com/wp/wp-content/uploads/2010/12/240.png" alt="" width="378" height="546" /></a></p>
<p>You&#8217;ll probably be asked to reboot at this point, at least if you were logged in as &#8220;Noobie Json&#8221; as in this example (which I wasn&#8217;t). Once you start up again, log in as &#8220;Noobie Json&#8221; or whatever your account is called, <em>not </em>as &#8220;NoobieAdmin&#8221;. You should probably <em>never</em> log in as &#8220;NoobieAdmin&#8221;, ever.</p>
<p>From now on, whenever you need to do something that requires admin level rights, the system will ask you to provide an admin username and password in a dialogbox. For example, if I try to delete an application from &#8220;Applications&#8221;, the system pops up a dialog box and I have to provide the &#8220;NoobieAdmin&#8221; credentials:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/241.png" title="(49 hits)"><img class="aligncenter size-full wp-image-1143" title="241" src="http://ursecta.com/wp/wp-content/uploads/2010/12/241.png" alt="" width="468" height="271" /></a></p>
<p>Now, this never happens without me knowing exactly why it happened, so don&#8217;t <em>ever</em> go input your admin credentials unless you know why you should. If you have any doubt, click on the &#8220;Details&#8221; and it will tell you a little bit more:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/243.png" title="(47 hits)"><img class="aligncenter size-full wp-image-1145" title="243" src="http://ursecta.com/wp/wp-content/uploads/2010/12/243.png" alt="" width="468" height="351" /></a></p>
<p>In this particular case, &#8220;Details&#8221; didn&#8217;t tell me much I didn&#8217;t already know, but when in doubt, in may often tell you exactly what you want to know. If some malware is requesting admin credentials, the app that issued the request will be clearly shown.</p>
<p>If you&#8217;re really paranoid, click the double arrow to the right and you&#8217;ll see the entire folder hierarchy leading to the app that requested the credentials. Just in case some malware called itself &#8220;Finder&#8221; for instance. In this case we&#8217;ll see that &#8220;Finder&#8221; is part of &#8220;Core Services&#8221; which in turn is in the System/Library. Totally kosher, in other words:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/12/2441.png" title="(45 hits)"><img class="aligncenter size-full wp-image-1154" title="244" src="http://ursecta.com/wp/wp-content/uploads/2010/12/2441.png" alt="" width="468" height="395" /></a></p>
<p>OSX very rarely asks for admin rights, so there is very little risk of you getting into a habit of just entering your credentials without thinking. Yes, the first day you use your new Mac, you will do this a number of times until it is all set up, but after that, it becomes a rarity.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2010/12/the-first-thing-you-should-do-on-a-new-mac/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

