<?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 &#187; Uncategorized</title>
	<atom:link href="http://ursecta.com/wp/category/uncategorized/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>Wed, 25 Jan 2012 10:49:48 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
		<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="(112 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>17</slash:comments>
		</item>
		<item>
		<title>Even the machine agrees</title>
		<link>http://ursecta.com/wp/2010/10/even-the-machine-agrees/</link>
		<comments>http://ursecta.com/wp/2010/10/even-the-machine-agrees/#comments</comments>
		<pubDate>Fri, 08 Oct 2010 18:32:35 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=1077</guid>
		<description><![CDATA[Picture this. I&#8217;m a little nervous, not much, but a little, since I&#8217;m to present my first running code on an iPad of my own entirely different idea of what a medical record should actually look like. I&#8217;m presenting this to a group of industry folks, doctors, and professors of different kinds, a power group. [...]]]></description>
			<content:encoded><![CDATA[<p>Picture this. I&#8217;m a little nervous, not much, but a little, since I&#8217;m to present my first running code on an iPad of my own entirely different idea of what a medical record should actually look like. I&#8217;m presenting this to a group of industry folks, doctors, and professors of different kinds, a power group. So we park the car at Karolinska Hospital in Stockholm and I swipe my credit card in the parking ticket dispenser and this is what comes out:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2010/10/039.png" title="(60 hits)"><img src="http://ursecta.com/wp/wp-content/uploads/2010/10/039-300x197.png" alt="" title="039" width="300" height="197" class="aligncenter size-medium wp-image-1082" /></a></p>
<p>Now, seriously, if even the parking ticket dispenser calls you &#8220;leet&#8221;, how can you lose? It went beyond great, by the way. But I can&#8217;t figure out how the machine knew that in advance.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2010/10/even-the-machine-agrees/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>They sell anything</title>
		<link>http://ursecta.com/wp/2010/02/they-sell-anything/</link>
		<comments>http://ursecta.com/wp/2010/02/they-sell-anything/#comments</comments>
		<pubDate>Mon, 15 Feb 2010 20:56:13 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=458</guid>
		<description><![CDATA[Pet shop. Dog food. Too expensive and, seriously, we left.]]></description>
			<content:encoded><![CDATA[<p>Pet shop. Dog food. Too expensive and, seriously, we left.</p>
<p><img class="aligncenter size-medium wp-image-461" title="IMG_0570" src="http://ursecta.com/wp/wp-content/uploads/2010/02/IMG_05701-225x300.jpg" alt="IMG_0570" width="225" height="300" /></p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2010/02/they-sell-anything/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I can&#8217;t help it&#8230;</title>
		<link>http://ursecta.com/wp/2010/02/i-cant-help-it/</link>
		<comments>http://ursecta.com/wp/2010/02/i-cant-help-it/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 23:37:43 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=443</guid>
		<description><![CDATA[&#8230;but I have to show you this. I almost wet myself reading it. From: Central Inteligency Agency Subject: From Central Intelligence Agency Date: 8 February 2010 9:22:14 GMT+01:00 To: undisclosed recipients: ; Reply-To: inteligencyofficer@yahoo.in Central Intelligence Agency City in Carter Lane, next to St.Paul's. https://www.cia.gov/ Att: Beneficiary, This is letter from the Central Intelligence Agency [...]]]></description>
			<content:encoded><![CDATA[<p>&#8230;but I have to show you this. I almost wet myself reading it.</p>
<pre>

	From:     Central Inteligency Agency <sueleonhardt@rogers.com>
	Subject:  From Central Intelligence Agency
	Date:      8 February 2010 9:22:14 GMT+01:00
	To:         undisclosed recipients: ;
	Reply-To: inteligencyofficer@yahoo.in

Central Intelligence Agency
City in Carter Lane, next to St.Paul's.

https://www.cia.gov/

Att: Beneficiary,

This is letter from the Central Intelligence Agency (CIA) You was

reported in this office last year that you have been dealing with
some Nigeria Hoodlums through the internet, which we have monitored
you and confirm that you have sent so much amount of money to some
Hoodlums in the internet through Western Union and Money Gram all in
the name of transaction.

You have been advice to quit every communication that you have with
all those Hoodlums for the main time because we have marked some
trace on there email address and we are trying to get them arrested
and if you insist and continue with them you will be arrested, So
right now you are advice to disconnect communication with them and
give us details about them.

Get back to us as soon as possible.
Mr. Mualler
Central Intelligence Agency
</pre>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2010/02/i-cant-help-it/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evidence based vs anecdotal</title>
		<link>http://ursecta.com/wp/2009/10/evidence-based-vs-anecdotal/</link>
		<comments>http://ursecta.com/wp/2009/10/evidence-based-vs-anecdotal/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 14:03:23 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=376</guid>
		<description><![CDATA[I&#8217;m increasingly disturbed by a very backward tendency to implement bad science in healthcare IT systems. More and more often, I read about initiatives to mine electronic healthcare records for data and build some kind of knowledgebase from this, then use it to support clinical decision making. It sure sounds sexy from a technical standpoint, [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m increasingly disturbed by a very backward tendency to implement bad science in healthcare IT systems. More and more often, I read about initiatives to mine electronic healthcare records for data and build some kind of knowledgebase from this, then use it to support clinical decision making. It sure sounds sexy from a technical standpoint, but it&#8217;s so wrong.</p>
<p>We used to have anecdotal medicine, or experience-based medicine if you prefer, where each doctor largely learned from his own patients, mistakes, and successes. This led to a lot of wrong conclusions, since outcomes are multifactorial. That is, there are a bunch of reasons why any particular case goes right or goes wrong, and you can&#8217;t control for those reasons if you learn from cases after the fact.</p>
<p>Then we decided to only advance medical science on properly designed, prospective, and controlled clinical studies, which seems to be the only way to get anywhere in the long run. So that&#8217;s what we should do.</p>
<p>The reason I posted this today is that I just read something horrifying in an otherwise excellent book (which you can <a href="http://ursecta.com/wp/go.php?http://research.microsoft.com/en-us/collaboration/fourthparadigm/4th_paradigm_book_complete_lr.pdf" target="_blank" title="(144 hits)">get for free here)</a>, the &#8220;4th Paradigm&#8221;, Microsoft Press. This is an excerpt:</p>
<blockquote><p><em>&#8230;current trends toward universal electronic healthcare records mean that a large proportion of the global population will soon have records of their health available in a digital form. This will constitute in aggregate a dataset of a size and complexity rivaling those of neuroscience. Here we find parallel challenges and opportunities. Buchan, Winn, and Bishop apply novel machine learning techniques to this vast body of healthcare data to automate the selection of therapies that have the most desirable outcome. Technologies such as these will be needed if we are to realize the world of the “Healthcare Singularity,” in which the collective experience of human healthcare is used to inform clinical best practice at the speed of computation.</em></p></blockquote>
<p>No, please don&#8217;t destroy medical science like this&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2009/10/evidence-based-vs-anecdotal/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Need for push</title>
		<link>http://ursecta.com/wp/2009/10/need-for-push/</link>
		<comments>http://ursecta.com/wp/2009/10/need-for-push/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 11:42:15 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=373</guid>
		<description><![CDATA[A number of Swedish media sites are down right now, newspapers and stuff, due to a DDoS attack of some kind. Now, this is serious. News sites are at the core of a free and open society. This got me thinking about how to solve DoS in general and there are ways. I&#8217;d suggest two [...]]]></description>
			<content:encoded><![CDATA[<p>A number of Swedish media sites are down right now, newspapers and stuff, due to a DDoS attack of some kind. Now, this is serious. News sites are at the core of a free and open society.</p>
<p>This got me thinking about how to solve DoS in general and there are ways. I&#8217;d suggest two mechanisms.</p>
<p>1. Move from a pull model to a push model for subscribed web content. Push can be done from any old place, so there&#8217;s nothing for the attackers do DoS. I&#8217;d imagine the client to have a front end or proxy that checks for the right digital signatures to allow content in. The bad guys can still DoS the clients, but with very little return on investment. Not so surprisingly, we don&#8217;t have the required technologies in place, but there&#8217;s an abundance of components already in existence for such a system, so it should be straightforward to assemble.</p>
<p>2. For those services that can&#8217;t be done with push, use a smarter client that is able to go look for services according to preset algorithms or using a form of dynamic DNS. IOW, move the load balancer to the client side instead of the server side. (I&#8217;ve done this, it works.) This won&#8217;t eliminate a DoS entirely, but will make it orders of magnitude more difficult.</p>
<p>The problem here is that there is no incentive for the large hosting players to do anything that diminishes the need for giant pipes and huge data centers. So we can&#8217;t count on them to help out.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2009/10/need-for-push/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Protected media truly stink</title>
		<link>http://ursecta.com/wp/2009/10/protected-media-truly-stink/</link>
		<comments>http://ursecta.com/wp/2009/10/protected-media-truly-stink/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 10:11:01 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=303</guid>
		<description><![CDATA[I&#8217;m so fed up with protected media of all kinds making me spend time doing shit that I shouldn&#8217;t have to do. This is what I encountered today for the hundredth time (less, but it feels so): Every time this happens, you have to uninstall Zinio, delete its prefs, clear up a cache somewhere, then [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m so fed up with protected media of all kinds making me spend time doing shit that I shouldn&#8217;t have to do. This is what I encountered today for the hundredth time (less, but it feels so):</p>
<p><img class="alignnone size-medium wp-image-304" title="Zinio ReaderScreenSnapz002" src="http://ursecta.com/wp/wp-content/uploads/2009/10/Zinio-ReaderScreenSnapz002-300x132.jpg" alt="Zinio ReaderScreenSnapz002" width="300" height="132" /></p>
<p>Every time this happens, you have to uninstall Zinio, delete its prefs, clear up a cache somewhere, then reinstall and reauthenticate it. Yes, I&#8217;ve got the routine documented, but man, this isn&#8217;t right. So I wrote them this letter, with absolutely no hope of them giving a damn:</p>
<blockquote><p><em>Guys,</em></p>
<p><em>Really, time for you to get a grip. I&#8217;ve had MacWorld on Zinio for a couple of years now, and I&#8217;m growing so sick and tired of this 22-M error you never seem to fix, that I&#8217;m almost prepared to give up on subscribing to MacWorld anymore. You really need to fix this pronto. Show that you care, for once.</em></p>
<p><em>Every time anything at all changes on my machine, I have to manually go uninstall all of Zinio and reinstall it again, just to make it stop accusing me of being a thief. I can&#8217;t count the number of times I&#8217;ve had to do this. I have it installed on two machines, a Pro and a MacBook, and if that is too much for you, well, it&#8217;s going to be goodbye at next renewal.</em></p>
<p><em>I&#8217;m copying MacWorld too, since I think they should be aware of why they&#8217;re losing this particular subscriber at least. I&#8217;d sincerely suggest they&#8217;ve got a better chance of keeping paying subscribers by distributing unprotected pdf&#8217;s, or at least pdf&#8217;s protected by somebody else than Zinio.</em></p>
<p><em>Sincerely,</em></p>
<p><em>&#8211; Martin</em></p></blockquote>
<p>PS: I could have added &#8220;You&#8217;re worse than Microsoft&#8221;, but that would be overdoing it.</p>
<p>PPS: No, I haven&#8217;t read the MacWorld issue. I&#8217;ll try to find the energy to go through that crap later, so I can actually see it, but I can&#8217;t keep myself from wondering if it&#8217;s worth the trouble. Very bad sign.</p>
<p><strong>Update Oct 11</strong>: after reinstalling on my desktop Mac Pro and redownloading the last issue of MacWorld, I got this dialog box instead:</p>
<p><img class="alignnone size-medium wp-image-314" title="576" src="http://ursecta.com/wp/wp-content/uploads/2009/10/576-300x112.jpg" alt="576" width="300" height="112" /></p>
<p>I mean, seriously, reading a mag is supposed to be relaxing, but <em>this</em>??!</p>
<p><strong>Update Oct 16:</strong> Got another message from Zinio support telling me to do the exact same thing their previous message told me to do. That is, download the uninstaller, uninstall, download the installer, install, authenticate, hope for best, try. Since they sent that message twice, I figured I could repeat the procedure just for kicks, and sure enough, this time it worked. Um, no, actually not. I discovered that the issue file I redownloaded from Zinio according to the instructions I got the last time was corrupt, with a bad filename and extension. In other words, when Zinio told me &#8220;you do not have rights to this publication on this computer&#8221; it actually meant &#8220;this file is corrupt&#8221;. Would you have guessed? So I copied the file I had on my MacBook to the Mac Pro, and then it worked. Except it took another hour or so until I could read the MacWorld issue due to this problem:</p>
<p><img class="alignnone size-medium wp-image-316" title="580" src="http://ursecta.com/wp/wp-content/uploads/2009/10/580-300x127.jpg" alt="580" width="300" height="127" /></p>
<p>In other words, if the Zinio server is down anytime the reader wants to verify your status, which is the first time you open it and whenever it feels unsure of itself, you&#8217;re out of luck yet again.</p>
<p>Right, now I can finally read the November issue of MacWorld on my portable and my desktop. Am I happy? Not really. As I already said, reading a mag is supposed to be relaxing. I&#8217;m prepared to pay for convenience. But all I&#8217;m getting for my money is aggravation. I&#8217;m not going to extend my subscription anymore, hoping instead that the so far mythical Apple iTablet will revolutionize this market and bring something much more useful and pleasant. But if it doesn&#8217;t, I fear the end is near for DRM&#8217;ed online publications.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2009/10/protected-media-truly-stink/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>.NET considered harmful</title>
		<link>http://ursecta.com/wp/2009/09/net-considered-harmful/</link>
		<comments>http://ursecta.com/wp/2009/09/net-considered-harmful/#comments</comments>
		<pubDate>Mon, 07 Sep 2009 11:24:50 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Development]]></category>
		<category><![CDATA[Dotnet]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=285</guid>
		<description><![CDATA[A friend of mine just told me about what an MS evangelist said at a symposium on multicore (paraphrased), after getting the question: &#8220;Did MS consider that cache awareness for programmers in multicore development?&#8221; &#8230;and he answered: &#8220;The average developer is not capable of handling that kind of level of detail. &#8230; Most developers are [...]]]></description>
			<content:encoded><![CDATA[<p>A friend of mine just told me about what an MS evangelist said at a symposium on multicore (paraphrased), after getting the question:</p>
<blockquote><p>&#8220;Did MS consider that cache awareness for programmers in multicore development?&#8221;</p></blockquote>
<p>&#8230;and he answered:</p>
<blockquote><p>&#8220;The average developer is not capable of handling that kind of level of detail. &#8230; Most developers are that ignorant. Welcome to the real world.&#8221;</p></blockquote>
<p>To me, this explains a lot. It explains why .NET looks like it does, and to clarify what I mean by that, let me simply copy in extracts from what I had to say about it in a private forum just weeks ago. In what follows, the italics are brief extracts of comments from others. The rest is my own text. It&#8217;s not always in a totally logical order and it starts out in midflight, but it&#8217;s a synthesis of a longish thread on a security related forum.</p>
<p><span id="more-285"></span></p>
<p><strong><em>Note: I didn&#8217;t ask any of my correspondents for permission to quote, but the quotes are so limited that I consider them &#8220;fair use&#8221;. If you think I crossed a line here, beat me into submission and I&#8217;ll never do it again.</em></strong></p>
<p>- &#8211; - here we go &#8211; - -</p>
<p><em>Even Java, Ada, and COBOL  do not inherently encourage &#8220;good programming style&#8221;.</em></p>
<p>Well, I wasn&#8217;t thinking of which language &#8220;encourages&#8221; good programming practices. IMNSHO, none really does. That&#8217;s an idea that isn&#8217;t even viable once you get into programming for real. The idea of &#8220;encouragement&#8221; from a language standpoint is, let me be blunt, something only wannabe programmers could think is relevant.</p>
<p>Once you really use a language and its platform, one is not bothered in the least about what the language or platform &#8220;encourages&#8221;, but what the language or platform *allows*, and that&#8217;s an entirely different kettle of fish. And this is where .NET falls down severely.</p>
<p>In .NET you can do reflection. Up to a point, and then not. You can do generics/templates. Up to a point, then it comes to a screeching halt. You can do aspects, but only to a very small point. You can do dynamic scripts, but only to a severely complicated and fairly worthless point. And on and on it goes. For every good abstraction technology they implement, you soon discover it&#8217;s just a faked out front that can&#8217;t scale up to something really useful.</p>
<p>So, like MS Basic before it, .NET languages and the platform have cheap selling points, leading you down a path of instant gratification and then you hit a wall. But it&#8217;s actually much worse than good ol&#8217; MS Basic was, since MS Basic was actually pretty close to what could be done back then, which wasn&#8217;t much. And you hit the wall soon enough to realize you should take another path. .NET, on the other hand, limits you from exploiting what currently very well can be done with computers, and it let&#8217;s you invest considerable energy and time in the platform before you get down to the bare metal behind it, only to discover it&#8217;s a rusty shell of improvised junk.</p>
<p>Let me put this in yet another way. Limiting languages to what is considered &#8220;safe&#8221; by non-programmers may limit the damage relative amateurs can do with these languages. But if this limitation also means you limit the *depth* of the language, like .NET does, then you actually put a ceiling on the level of abstraction than can be reached in larger systems built by people who actually know what they&#8217;re doing. Meaning that you exchange junk on a small and local scale for architectural and design junk on an epic scale.</p>
<p><em>With the reality of rapid time to market/deployment and a realistic assessment of the skills many programmers bring to the table, limited is what is needed quite often.</em></p>
<p>Yes, but what&#8230; um. Let me restart. It&#8217;s not a &#8220;yes, but&#8221; thing.</p>
<p>No, that&#8217;s wrong. Because it let&#8217;s you build small systems quicker and safer, that&#8217;s true, but small systems almost always become large systems. And these large systems almost always become monsters, due to the limitation that was built into them from the start. IOW, the limitation you talk about will practically always result in severe problems a bit down the road. It rewards shortsighted development.</p>
<p>Maybe, just maybe, limited and &#8220;safe&#8221; languages will reduce stupid errors in small systems by unskilled programmers more than they will cause deep errors in architecture of large systems (written by skilled or unskilled programmers, since skill doesn&#8217;t bring much to the table if the system won&#8217;t allow advanced techniques), but do we know that to be true? Has anyone tried to find out? As long as we don&#8217;t know that, you buy into &#8220;safe&#8221; languages on no better basis than what you do when you choose one shampoo over another.</p>
<p>- &#8211; -</p>
<p>Let me take a real life example to show what I mean, and why I currently detest .NET so much. (Maybe, just maybe, someone on the forum then tells me the one feature I missed in .NET and everyone gets to laugh at me, but I&#8217;m willing to risk that. I&#8217;m actually willing to *welcome* that, since it would be such a relief.)</p>
<p>When doing an app with grids and details, like 90% of everything out there, you want to let the user change details, add lines, delete lines, whatever, and then hit &#8220;Save&#8221; to save it all to the database, or &#8220;Revert&#8221; to go back to the original state. You also want the system to ask &#8220;Do you want to save first?&#8221; when you try to leave without saving changes. Right?</p>
<p>Ok, there are several ways of doing this. The &#8220;right&#8221; way would be to have the objects in memory versioned. You should be able to ask any object &#8220;did you change?&#8221; and &#8220;what did you change?&#8221;, and tell the object to roll back to a previous state or commit to the current state and start recording changes from there from now on.</p>
<p>You can&#8217;t do that in .NET, there&#8217;s no such feature. So, you say, what else is new, let&#8217;s fix that. With, um, AOP, which sounds just about right. Looking for solutions on the net shows nothing but spurious outbursts of unprintable language and gnashing of teeth. So forget it.</p>
<p>A mix-in, then? Um, no, .NET doesn&#8217;t support mix-ins, that&#8217;s only if you&#8217;ve got multiple inheritance.</p>
<p>Ah, let the objects deep-copy themselves to save state. Um, no, .NET has no reliable or complete deep-copy. And even if it had, it would copy too much of dependent object trees.</p>
<p>Then, let&#8217;s try good ol&#8217; raw bitblitting into memalloced save spaces and calculate our own offsets (and make the company CISSP, if there is one, turn blue in the face)? Um, no, such &#8220;unsafe techniques&#8221; aren&#8217;t allowed in .NET.</p>
<p>Let&#8217;s inject the dispatch table with a pre- and post-function to record changes (key/value observing or AOP, depending on taste)? Nope, can&#8217;t do. Unsafe.</p>
<p>Finally, if you still haven&#8217;t dumped the whole idea and started a bicycle shop instead, you may have worked your ass off to get a kind of reflection function lib going that can copy, compare, rollback your objects, if your objects conform to a fairly limited feature set and implement some clumsy attributes. That&#8217;s what I did, and I keep debugging this thing long past the time when it should have been clean. I&#8217;m also pretty sure it&#8217;s slow, but I don&#8217;t care anymore.</p>
<p>Or, you do what everyone else does, and that is riddling your code with checks if anything changed, and saving old values here and there when you think they may need to roll back. So if there are 15 ways of leaving that screen, you&#8217;ve got 15 different places you need to check if you need to reload or save any of maybe 20 different objects in your app. Leaving the support desk a never ending source of joy and happiness for years to come as customers find new and inventive ways of leaving half edited objects in memory.</p>
<p>You know what? If this had been C++, I would have done a real down to the metal hack of the dispatch vtable mechanism maybe, and gotten a fast solution working that could be used anywhere and forever to solve this problem. It would be &#8220;dangerous&#8221; but once debugged it would last forever.</p>
<p>What you see now in .NET is much less dangerous solutions, but they have to be done over and over again and everytime they risk new bugs, each of which is much harder to find than any bug I would have in my &#8220;unsafe&#8221; solution.</p>
<p>BTW, even my halfassed solution won&#8217;t work if you compile .NET apps in &#8220;secure&#8221; mode (or whatever it&#8217;s called) since reflection can&#8217;t be used then. (Meaning an even buggier solution with hundreds of times more code for the same thing&#8230;) And you know what, it&#8217;s actually *much more* difficult to get the 15 * 20 simple-code solution debugged than the one advanced vtable injection technique debugged.</p>
<p>So, that&#8217;s what &#8220;safe&#8221; languages deliver even for pedestrian apps. Hurrah.</p>
<p>- &#8211; -</p>
<p><em>Not sure I&#8217;d let most developers any where near C or C++.</em></p>
<p>Yes, but you also lose the opportunity to get really good scalable apps. I would suggest finding a few &#8220;real developers&#8221; instead of a load of &#8220;most developers&#8221;. Quantity can&#8217;t compensate lack of quality.</p>
<p><em>As for .Net, you could always mix managed and unmanaged code and do what you need to do in C++ if you&#8217;ve got the guys with the skills to do it right.</em></p>
<p>If that would let me attack the basic dispatch mechanism in .NET and have it install itself into all the objects in memory that I pointed out to it, with for instance attributes, I&#8217;d do it. But, AFAIK, you can&#8217;t do that. Then you need to switch over to C++ unmanaged for the entire project. Which, if we look back, was my exact argument. You *can&#8217;t* do scalable and safe programming in managed .NET even if you&#8217;re able to.</p>
<p>My argument is this: if you cripple a language, you&#8217;ve exchanged a few &#8220;dangerous&#8221; and qualified pieces of code against a sh..load of slightly dubious and simple pieces of code. And of the two ills, I am convinced the latter is the worst.</p>
<p>PS: I&#8217;m still waiting for someone to tell me I should&#8217;ve used disconnected datasets. Here I am, fully loaded for war and nobody shows up?</p>
<p>- &#8211; -</p>
<p><em>I&#8217;ve found it surprisingly practical on the scales I normally work with. I certainly concur that it&#8217;s not what you might call &#8220;large enterprise ready&#8221;, but then what really is?</em></p>
<p><em>BTW, couldn&#8217;t we define a &#8220;large system&#8221; as one in which none of the builders (are really able to) know what everything is doing?</em></p>
<p>I&#8217;ll take those two as the same question.</p>
<p>It *is* surprisingly practical for small scale stuff, or as the technical term goes: quick and dirty. But what is a &#8220;large system&#8221;? I&#8217;d say most useful systems are &#8220;large systems&#8221;, since the builder, even if he&#8217;s alone, can&#8217;t keep all parts of the system in his head all the time. I don&#8217;t think there are any, or more than very few, really &#8220;small&#8221; and useful systems out there, according to this definition.</p>
<p>A good programming system allows you to write &#8220;straight code&#8221;, or quick-and-dirty, as you start out and as soon as you see a pattern in your code, you are able to replace that pattern with a single implementation of an abstraction somewhere. All on the basis of DRY (Don&#8217;t Repeat Yourself). You *have* to be able to do this, else you get inheritance-by-editor, that is repeated and almost identical code in multiple places. Which is the most sure-fire way of making it a unmaintainable slag heap in no time.</p>
<p>For simple code sequences, we have functions. Even C# can do that. For structures we have objects. C# can, yay. For behaviours, we have templates aka generics. C# does that better than C++ in the &#8220;cute and nice to have&#8221; ways, but doesn&#8217;t do it at all in the &#8220;OMG-what&#8217;s-this- weird-code-but-it-saves-the-project&#8221; ways. It&#8217;s just cute and tantalizingly close to being real-world useful. Aspect oriented programming (AOP) or Key-value observing (KVO): C# is totally braindead. Same for run-time object extensions. Same for object delegation or runtime discovery of implementation (cfr respondsToSelector in Objective-C). None of these things are even there in any form. Even swapping out one DLL for another in runtime is painful in the extreme.</p>
<p>A highly abstract way to view this is to visualize a development effort curve that starts out linearly, then goes exponentially up. You stop there, grab the language by the neck and raise your code an abstraction level. You drop back to linear for a while, then you go exponential again, then you raise the code an abstraction level, etc.</p>
<p>With .NET, you can do this for a couple of times, then you either run out of abstraction levels or they don&#8217;t return you to a linear curve, but to another exponential curve (IOW, whatever you do, C# bites back). With C++ I&#8217;ve never run out of abstraction levels, they go on and on, right into user domain territory to an amazing degree. I suspect Objective-C won&#8217;t run out of them either. Languages like PHP don&#8217;t have them at all, they&#8217;re more or less at the level of MS Basic way back when. Almost. Which in itself is a kind of honesty, since PHP doesn&#8217;t even pretend to be a &#8220;real&#8221; language in that sense. It&#8217;s quick- and-dirty elevated to a religion.</p>
<p>Even though I can&#8217;t prove it, I strongly suspect that there are no simple projects really suitable for .NET. Almost all projects start out being the right scale, but almost all of them ultimately (or even &#8220;quickly&#8221;) escalate beyond the level where .NET is a good fit, but then they&#8217;re stuck on that platform. And it is in this phase of its lifecycle that we see the problems with unmaintainability and bugs, not while they&#8217;re still small.</p>
<p>So, in conclusion, I strongly doubt that &#8220;safe&#8221; programming systems bring us that safety. I think it&#8217;s the other way around. The problems we see due to poor use of sharp knives (horrible C++ code, for instance) can&#8217;t be solved by switching languages, but should be solved by switching or training programmers and fixing project management issues.</p>
<p>If you don&#8217;t have the project management and the developers you need to write solid, maintainable, and safe code with a real language, switching to &#8220;safe&#8221; languages won&#8217;t help you. I think that is what I&#8217;m trying to say.</p>
<p>- &#8211; -</p>
<p><em>A well-designed module will be maintainable. &#8220;Take the time to do the design before coding&#8221; beats the snot out of &#8220;pick the write language&#8221; when it comes to making the source readable and maintainable.</em></p>
<p>Uh, no. And yes. And no again.</p>
<p>The problem is that if you design your stuff first, the language has to be able to express that design. Unless you keep the design trivial enough to be expressed by any old (new) language.</p>
<p>For instance, if your design has the element &#8220;Restore this object tree to last savepoint&#8221; and your language has a feature that can be used to achieve that, you may get away with a handful of lines of code that clearly and succinctly express what you&#8217;re doing even without comments or docs, and that can be tacked onto your objects as mix-ins, categories, templates, reflection, or whatever.</p>
<p>If your language does not support the necessary operations and declarations, you&#8217;ll end up with stereotypical code that needs to be manually replicated into each and every darn class you&#8217;re building and that is specific for the very project you do them in, hindering reuse across projects. You end up with hundreds or thousands of lines of code spread all over, hard to understand, even harder to find when you need to find it and a real f&#8230;up to debug.</p>
<p>You can&#8217;t get around that if the language is too limited. Or &#8220;safe&#8221; as they call them nowadays.<br />
<em><br />
I have seen readable structured code in assembler and incomprehensible spaghetti in Modula-2</em></p>
<p>Assembler is much less limited than C# in this respect, so that isn&#8217;t so strange. It starts out at a very low abstraction level, but can reach very, very high. I&#8217;d say assembler is more or less linear in development complexity, but the problem is that the line, however straight, is very long.</p>
<p>Also, if you&#8217;ve already concluded that assembler can be well structured, then you have to admit C can as well. Same thing, almost. Extend at will to C++.</p>
<p><em>Of course it can!  Any language can!  That&#8217;s my point&#8230;.</em></p>
<p>Hah! OMG&#8230; so tell me, what&#8217;s wrong with MS Basic, then? Or MSDOS batch language?</p>
<p>Do an undo/redo manager for MS Basic, or even (let&#8217;s be generous here) C#, in an average accounting app. Then in Objective-C. Then compare for &#8220;well structured&#8221;. I&#8217;d guarantee you that the C# undo/redo manager will be unreadable, plastered all over the project up to the rafters, a neverending source of joyous bugs and a strongly contributing cause to the death of the product just a few years hence. Not so with Objective-C. (The undo/redo manager is already part of the libraries, but even if it wasn&#8217;t, it could be built by the developer in a very reasonable time. Not so for C#.)</p>
<p>And no amount of design will change that. C# simply doesn&#8217;t have the features you need and is brimming with the &#8220;safety&#8221; to stop you from getting it done. Thanks to the drive for &#8220;safer languages&#8221;, I have to add.</p>
<p><em>Isn&#8217;t the CISSP-relevant point here that your redo manager, or any comparable object, necessarily constitutes a locus of increased risk? Seems to me that might be why it&#8217;s hard to implement in such a language.</em></p>
<p>Yes, maybe, which points out why the CISSP-relevant point is nuts. Somebody decides that the undo/redo manager (or something equivalent) is dangerous, so let&#8217;s not do that. Um, so what do we do when we don&#8217;t have an undo/redo? We fake it in each of the 50 or 100 classes that need it and the problem is now orders of magnitude larger. Or, more likely, we prohibit undo/redo entirely, making the use of the app a bloody nightmare, causing the actual business to suffer. And if the bloody user makes an error, he can&#8217;t correct it, but then it&#8217;s his fault, right?</p>
<p>In any case, this method of suppressing any patterns that carry risk only moves the problem elsewhere, usually making it much worse at the same time.</p>
<p><em>Pretty much all languages these days do the real work with library calls. The accretion of platforms slowly renders specific languages less relevant, as implementations increasingly consist of calls to external libraries and objects held outside the language&#8217;s environment. So-called &#8220;safe&#8221; languages attempt to fulfill their promise by limiting external calls or, in the .Net case, opening holes to &#8220;unmanaged code&#8221;.</em></p>
<p>I intentionally took an example of something that can&#8217;t be done by libraries. You can&#8217;t equip classes or objects with runtime state monitoring by library calls if there is no dynamic injection or intercept functionality in the language. There is no equivalence between language functionality and library functionality; those cover disparate areas of functionality. Libraries have in absolutely no way taken over from languages, but libraries have grown much faster than languages, so it may seem so if you just compare sizes.</p>
<p><em>This is the dichotomy of Java: it lives in a sandbox that makes it very safe, leaving you with the problem of getting things in and out of the sandbox.</em></p>
<p>As taken right out of the marketing book. It&#8217;s BS. If it was as easy as prohibiting dangerous behaviour and then danger went away, Java would have solved world hunger by now.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2009/09/net-considered-harmful/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ReadyNAS even easier</title>
		<link>http://ursecta.com/wp/2009/05/readynas-even-easier/</link>
		<comments>http://ursecta.com/wp/2009/05/readynas-even-easier/#comments</comments>
		<pubDate>Wed, 20 May 2009 21:10:22 +0000</pubDate>
		<dc:creator>martin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://ursecta.com/wp/?p=226</guid>
		<description><![CDATA[I have to add a little niftiness to my previous post about how to start a NAS over the local LAN. After diving into the WebRelay manual a little more carefully, I discovered that you can easily send commands using only the URL. The following command causes relay 1 to close for 7 seconds: &#8230;so [...]]]></description>
			<content:encoded><![CDATA[<p>I have to add a little niftiness to my previous post about how to start a NAS over the local LAN. After diving into the WebRelay manual a little more carefully, I discovered that you can easily send commands using only the URL. The following command causes relay 1 to close for 7 seconds:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2009/05/505.jpg" title="(82 hits)"><img class="alignnone size-medium wp-image-228" title="URL to pulse the relay" src="http://ursecta.com/wp/wp-content/uploads/2009/05/505-300x42.jpg" alt="" width="300" height="42" /></a></p>
<p>&#8230;so I created bookmarks for this one and the corresponding URL for relay number 2 (using relay2State and pulseTime2 parameters), which looks like this in Safari:</p>
<p><a href="http://ursecta.com/wp/go.php?http://ursecta.com/wp/wp-content/uploads/2009/05/503.jpg" title="(82 hits)"><img class="alignnone size-medium wp-image-229" title="Bookmark" src="http://ursecta.com/wp/wp-content/uploads/2009/05/503.jpg" alt="" width="218" height="120" /></a></p>
<p>If you start the ReadyNAS by pressing the button less than 15 seconds, it starts normally. If you press 15 seconds or longer, you enter the diagnostics mode and we don&#8217;t want that.</p>
<p>To shut down the ReadyNAS while it is running, you need to press and hold the button for at least 5 seconds.</p>
<p>So I chose 7 seconds for the pulse, guaranteeing to only start up the unit or shut it down, without entering any weird states.</p>
<p>Oh, one more thing: the URL I use here only work if your WebRelay is not set to use password access for status changes. Including a password is a little trickier.</p>
<p>No, that IP is not the IP I actually use, and anyway, it&#8217;s all on a local net behind a firewall without portmapping.</p>
<p><strong>Update:</strong> don&#8217;t use Safari 4 for these URLs. What happens is that one of them may show up on your &#8220;top sites&#8221; page, and they&#8217;ll refresh every time &#8220;top sites&#8221; is shown, typically every time you start Safari. The effect is that your NAS units will power on and power off at really weird times. Took me a while to figure this one out. And then I moved the bookmarks to OmniWeb instead, since it doesn&#8217;t have a &#8220;top sites&#8221; page. Problem solved.</p>
]]></content:encoded>
			<wfw:commentRss>http://ursecta.com/wp/2009/05/readynas-even-easier/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

