<?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>bugfox blog</title>
	<atom:link href="http://bugfox.net/blog/feed/" rel="self" type="application/rss+xml" />
	<link>http://bugfox.net/blog</link>
	<description></description>
	<lastBuildDate>Mon, 07 May 2012 00:03:52 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Time Zones and Daylight Saving Time in Java</title>
		<link>http://bugfox.net/blog/2012/05/04/time-zones-and-daylight-saving-time-in-java/</link>
		<comments>http://bugfox.net/blog/2012/05/04/time-zones-and-daylight-saving-time-in-java/#comments</comments>
		<pubDate>Fri, 04 May 2012 20:57:24 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[DST]]></category>
		<category><![CDATA[TimeZone]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=262</guid>
		<description><![CDATA[You might think this would be simple but I actually spent a fair amount of time last week tracking down some confusing bugs. The problem is that the official documentation is pretty sparse and if you Google for support you &#8230; <a href="http://bugfox.net/blog/2012/05/04/time-zones-and-daylight-saving-time-in-java/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>You might think this would be simple but I actually spent a fair amount of time last week tracking down some confusing bugs. The problem is that the official documentation is pretty sparse and if you Google for support you will find many answers that are confused or flat-out wrong. Hopefully this will provide the straight dope.</p>
<p>The key Java classes are as follows:<br />
<span id="more-262"></span></p>
<h3>java.util.TimeZone</h3>
<p>This is an abstract class that contains the definition of a time zone, including that zone’s rules for Daylight Saving Time (or what Europeans refer to as &#8220;Summer Time.&#8221;) Any code that needs to explicitly deal with time zones should use a TimeZone object.</p>
<p>The best way to get a TimeZone is to call the static method TimeZone.getTimeZone() and pass it the standard &#8220;Olson name&#8221; such as &#8220;America/New_York&#8221; or &#8220;Pacific/Honolulu&#8221;.</p>
<p><a href="http://en.wikipedia.org/wiki/List_of_tz_database_time_zones">This link</a> lists all the standard time zone names.</p>
<p>You can call TimeZone.getTimeZone(&#8220;GMT&#8221;) or TimeZone.getTimeZone(&#8220;GMT-5&#8243;). None of these GMT-based TimeZone objects support Daylight Saving Time. (Note: &#8220;GMT&#8221; and &#8220;UTC&#8221; mean practically the same thing. GMT is defined in terms of astronomical observations and UTC is used for setting atomic clocks. For most practical purposes they can be treated as identical.)</p>
<p>You can also use common abbreviations e.g. TimeZone.getTimeZone(&#8220;EST&#8221;) instead of TimeZone.getTimeZone(&#8220;America/New_York&#8221;). This is strongly discouraged. Depending on circumstances you might get the wrong Daylight Saving Time behavior or even the totally wrong time zone, since the same 3-letter abbreviations are used around the world for different time zones.</p>
<p>When displaying a time zone to the user you should probably call TimeZone.getDisplayName(). Depending on the parameters you pass this will return a user-friendly value like &#8220;Eastern Standard Time&#8221;, &#8220;EST&#8221;, &#8220;Eastern Daylight Time&#8221; or &#8220;EDT&#8221;.</p>
<h3>java.util.Calendar</h3>
<p>This is an abstract class which serves as a wrapper around two independent values:</p>
<ul>
<li>A time, stored as the number of milliseconds since January 1, 1970 00:000:00 GMT.</li>
<li>A TimeZone object which indicates how the time should be displayed.</li>
</ul>
<p>(This is an oversimplification. The actual implementation is a a bit more complicated, but this is close enough as long as you are not actually digging into the source code.)</p>
<p>Note that the time offset is always supposed to be in GMT. If you see code samples that make a different assumption (and there are many out there on the web) ignore them.</p>
<p>Time zone conversions are simple: if you call setTimeZone() on a Calendar object you get the exact same time but displayed in the new time zone.</p>
<p>A more complex problem occurs when you get a time string from a user in a different time zone. If you parse the string &#8220;05-01-2012 08:35 AM&#8221; then the parser will generally give you a Calendar object for 8:35 AM in the computer’s default time zone. </p>
<p>If this is wrong then you will need to change the time offset to convert it to the correct time. If the time string was supposed to be in GMT then you can use the folowing code to convert it.<br />
<code><br />
public static Calendar convertToGmt(Calendar c) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;java.util.Date date = c.getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;TimeZone tz = c.getTimeZone();<br />
&nbsp;&nbsp;&nbsp;&nbsp;long timeInMilliseconds = date.getTime();<br />
&nbsp;&nbsp;&nbsp;&nbsp;int offsetFromUTC = tz.getOffset(timeInMilliseconds);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Calendar gmtCal = new GregorianCalendar(TimeZone.getTimeZone("GMT"));<br />
&nbsp;&nbsp;&nbsp;&nbsp;gmtCal.setTime(date);<br />
&nbsp;&nbsp;&nbsp;&nbsp;gmtCal.add(Calendar.MILLISECOND, offsetFromUTC);<br />
&nbsp;&nbsp;&nbsp;&nbsp;return gmtCal;<br />
}<br />
</code></p>
<p>If it was supposed to be in a different time zone then you can call TimeZone.getOffset() for both time zones. The difference between the two values will give you the number of milliseconds that you need to add to do the conversion.</p>
<p>This code provides an alternate way to convert between arbitrary time zones.<br />
<code><br />
public static Calendar convertToNewTimeZone(Calendar calendar, TimeZone timezone) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;Calendar newCal = new GregorianCalendar(timezone);<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.setLenient(false);<br />
&nbsp;&nbsp;&nbsp;&nbsp;boolean am = newCal.get(Calendar.AM_PM) == Calendar.AM;<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.YEAR, calendar.get(Calendar.YEAR));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.MONTH, calendar.get(Calendar.MONTH));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.DATE, calendar.get(Calendar.DATE));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.HOUR, calendar.get(Calendar.HOUR));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.MINUTE, calendar.get(Calendar.MINUTE));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.SECOND, calendar.get(Calendar.SECOND));<br />
&nbsp;&nbsp;&nbsp;&nbsp;newCal.set(Calendar.MILLISECOND, calendar.get(Calendar.MILLISECOND));<br />
&nbsp;&nbsp;&nbsp;&nbsp;boolean ampm = calendar.get(Calendar.AM_PM) == Calendar.PM;<br />
&nbsp;&nbsp;&nbsp;&nbsp;if (am &#038;&#038; ampm) { // cal = 0 but we want 1<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCal.roll(Calendar.AM_PM, 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;} else if (!am &#038;&#038; !ampm) { //cal = 1 but we want 0<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newCal.roll(Calendar.AM_PM, -1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;return newCal;<br />
}<br />
</code></p>
<p>Once again, this gives you a Calendar object with the same wall-clock time in a different time zone, as opposed to getting the same actual time in a different time zone.</p>
<h3>ISO 8601</h3>
<p>To avoid such problems when sending dates and times between different time zones you can use the <a href="http://www.w3.org/TR/xmlschema-2/#isoformats">ISO 8601 formats</a> commonly used in XML documents. These formats allow an optional trailing time zone indicator e.g.</p>
<p>2012-05-01T08:35:01.123Z<br />
2012-05-01T08:35:01.123-05:00</p>
<p>A &#8220;Z&#8221; code indicates that the time is GMT. A &#8220;-05:00&#8243; indicates a time zone that is 5 hours behind GMT. In the U.S. this could mean either &#8220;Eastern Standard Time&#8221; or &#8220;Central Daylight Time&#8221;.</p>
<p>Most standard XML libraries can handle these formats.</p>
<p>In the &#8220;-05:00&#8243; example above the parser will return a Calendar subclass whose TimeZone object is &#8220;GMT-5&#8243;, not &#8220;America/New_York&#8221; or &#8220;America/Chicago&#8221;. You have the correct time but you don’t really know which official time zone it is.</p>
<p>The time zone indicator is optional. If the document contains</p>
<p>2012-05-01T08:35:01.123</p>
<p>that will be interpreted as being in the receiving computer’s default time zone.</p>
<h3>java.util.Date</h3>
<p>This is a wrapper around a count of milliseconds since midnight January 1, 1970. There is no associated time zone.</p>
<p>According to the documentation the millisecond count should always be in GMT, but this is often ignored. You will find many code samples on the web that attempt to deal with time zones by adding or subtracting hours. This is NOT recommended.</p>
<p>If you need to deal with time zones you should use a Calendar object.</p>
<p>The Date class has methods like getHours() and getMinutes() which are all deprecated. If you use them they will return the value in the computer’s default time zone. Date.toString() will also display in the computer’s default time zone.</p>
<h3>java.sql.Date</h3>
<p>This is intended to represent a SQL DATE field. The Java implementation is a simple wrapper around java.util.Date which makes sure that the time part is always set to midnight in your computer’s default time zone.</p>
<p>What is actually stored in the database depends on the implementation but can be assumed to consist of a year, month and day in some format.</p>
<h3>java.sql.Time</h3>
<p>This is intended to represent a SQL TIME field. The Java implementation is a thin wrapper around java.util.Date which makes sure that the date part is always set to January 1, 1970.</p>
<p>What is actually stored in the database depends on the implementation but can be assumed to consist of either an offset from midnight or a combination of hour, minutes and seconds in some format.</p>
<p>There is no support for time zones built in. If time zones are important the application will have to keep track of them separately.</p>
<h3>java.sql.TimeStamp</h3>
<p>This intended to represent a SQL TIMESTAMP field. The Java implementation is similar to java.util.Date in that it contains an offset from a fixed starting time, but it is much higher precision, supporting fractions of a microsecond instead of milliseconds.</p>
<p>What is actually stored in the database depends on the implementation but is usually some sort of offset from a starting date.</p>
<p>TimeStamp is similar to java.util.Date in that</p>
<ul>
<li>It does not contain a TimeZone.</li>
<li>The internal offset is supposed to be in GMT and bad things can happen if it is not.</li>
<li>It is typically displayed in the computer’s default time zone.</li>
</ul>
<p>Usually you create a TimeStamp from a java.util.Date object. (If you are starting with a Calendar object just call getTime() on it.) So basically you are writing out the millisecond offset in the GMT time zone. If you started with a Calendar its original time zone is lost.</p>
<p>When you read a TimeStamp from the database you are getting back the time with no time zone information. Calling getDate() will return it as a java.util.Date object. If you want it in a time zone other than your computer&#8217;s default time zone you can do something like this:<br />
<code><br />
Calendar cal = new GregorianCalendar(desiredTimeZone);<br />
cal.setTime(ts.getDate);<br />
</code></p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2012/05/04/time-zones-and-daylight-saving-time-in-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apple will decline after Steve Jobs…</title>
		<link>http://bugfox.net/blog/2011/08/27/apple-will-decline-after-steve-jobs%e2%80%a6/</link>
		<comments>http://bugfox.net/blog/2011/08/27/apple-will-decline-after-steve-jobs%e2%80%a6/#comments</comments>
		<pubDate>Sat, 27 Aug 2011 22:29:43 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Economics]]></category>
		<category><![CDATA[Humor]]></category>
		<category><![CDATA[Apple]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=256</guid>
		<description><![CDATA[A lot of the value in Apple has come from the ineptitude of other companies and the passion and willingness of early adopters to spend huge money. There are inherent limits to growth fueled by those two factors. For example, &#8230; <a href="http://bugfox.net/blog/2011/08/27/apple-will-decline-after-steve-jobs%e2%80%a6/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>A lot of the value in Apple has come from the ineptitude of other companies and the passion and willingness of early adopters to spend huge money. There are inherent limits to growth fueled by those two factors. For example, the early adopters with the greatest willingness to pay for smartphones (and associated service) have already purchased smartphones. Now the big market is from people in emerging countries, such as China, and the average consumer in developed countries. The record companies were so poorly managed that they gave up 30 percent of their digital music revenue because they were too lazy to run their own Web site. What other industry is going to give Apple 30 percent of its revenue in exchange for Apple running a server?<br />
<cite><a href="http://blogs.law.harvard.edu/philg/2011/08/27/apple-will-decline-after-steve-jobs/">Philip Greenspun&#8211;Apple will decline after Steve Jobs…</a></cite>
</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/08/27/apple-will-decline-after-steve-jobs%e2%80%a6/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>I have always wished for my computer to be as easy to use as my telephone</title>
		<link>http://bugfox.net/blog/2011/07/29/i-have-always-wished-for-my-computer-to-be-as-easy-to-use-as-my-telephone/</link>
		<comments>http://bugfox.net/blog/2011/07/29/i-have-always-wished-for-my-computer-to-be-as-easy-to-use-as-my-telephone/#comments</comments>
		<pubDate>Fri, 29 Jul 2011 17:03:38 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Humor]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[User Interfaces]]></category>
		<category><![CDATA[Bjarne Stroustrup]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=249</guid>
		<description><![CDATA[&#8220;I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.&#8221; — Danish computer scientist Bjarne Stroustrup via. &#8230; <a href="http://bugfox.net/blog/2011/07/29/i-have-always-wished-for-my-computer-to-be-as-easy-to-use-as-my-telephone/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone.&#8221;<br />
<cite>— Danish computer scientist Bjarne Stroustrup<cite></p></blockquote>
<p><a href="http://www.doonesbury.com/strip" title="Doonsbury">via</a>.</p>
<p>CLARIFICATION: Bjarne Stroustrup is the inventor of the C++ programming language. <em>Doonsbury</em> refers to him as a &#8220;Danish computer scientist&#8221; and Wikipedia <a href="http://en.wikipedia.org/wiki/Bjarne_Stroustrup">describes</a> him the same way. However he has spent almost his entire professional career in the United States. </p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/07/29/i-have-always-wished-for-my-computer-to-be-as-easy-to-use-as-my-telephone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When Ethicists Steal</title>
		<link>http://bugfox.net/blog/2011/07/19/when-ethicists-steal/</link>
		<comments>http://bugfox.net/blog/2011/07/19/when-ethicists-steal/#comments</comments>
		<pubDate>Tue, 19 Jul 2011 18:41:48 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Computer crime]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=242</guid>
		<description><![CDATA[A bizarre crime story with interesting computer security implications was revealed today when Aaron Swartz, a co-founder of the online news site Reddit and a Fellow at the Harvard University Ethics Center, was indicted for a massive data theft. As &#8230; <a href="http://bugfox.net/blog/2011/07/19/when-ethicists-steal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A bizarre crime story with interesting computer security implications was revealed today when Aaron Swartz, a co-founder of the online news site <a href="http://reddit.com">Reddit</a> and a Fellow at the Harvard University Ethics Center, was indicted for a massive data theft.</p>
<p>As reported in <a href="http://www.theregister.co.uk/2011/07/19/harvard_fellow_indicted/">The Register</a>, Swartz allegedly broke into a MIT wiring closet and installed a hidden laptop with multiple external hard drives. He used this to download over 4.8 million articles from JSTOR, an online archive of academic journals.</p>
<p>MIT&#8217;s network administrators detected the intrusion but were unable to locate the physical access point. When they tried to halt the data theft by blocking first Swartz&#8217;s IP address, then his MAC address, he easily evaded these measures by changing them.<br />
<span id="more-242"></span><br />
The indictment suggests that Swartz intended to sell the articles or perhaps upload them to some Wikileaks-style website. However Swartz&#8217;s <a href="http://www.aaronsw.com/">personal website</a> suggests another motive.</p>
<p>Apparently his published research has involved downloading and and analyzing large numbers of academic articles to determine the source of their funding, hoping to establish a pervasive pattern of evil corporate influence on academic research. This escapade may have part of a project to do the same thing on a much larger scale.</p>
<p>UPDATE: A <a href="http://www.wired.com/threatlevel/2011/07/swartz-arrest/">more sympathetic account in Wired</a> (which has ties to Swartz and is owned by the same company as Reddit) makes his actions seem a bit less outrageous. According to Wired the illicit laptop was hidden in a <em>Harvard</em> wiring closet, still without the permission of the network administrators, but it doesn&#8217;t sound like it involved actual breaking and entering.</p>
<p>Also the Wired article claims that JSTOR would have given him access to the articles if he had asked, that he returned the articles and that JSTOR was satisfied and didn&#8217;t want to prosecute him. The author clearly feels that the federal indictment is overkill.</p>
<p>Personally I am most interested in the network security implications of the story. The MIT admins detected that there was an unauthorized machine on their network stealing their data, but they couldn&#8217;t block it or even figure out where it was located&#8211;and apparently it turned out to be located at Harvard, using an external network link that they couldn&#8217;t monitor!</p>
<p>UPDATE 2: Aaron Swartz clearly has a lot of friends among tech journalists and many of the things being posted seem biased and misleading. Other sources are just quoting from the indictment which is also biased of course. It&#8217;s still not clear to me whether he broke into a building on the MIT campus or did his hacking in a Harvard building that he had legitimate access to&#8211;a significant point in my view.</p>
<p>Timothy B. Lee has posted what may be the <a href="http://blogs.forbes.com/timothylee/2011/07/20/aaron-swartzs-reckless-activism/">best analysis</a> both of Swartz&#8217;s motives and why his actions were wrong and harmful.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/07/19/when-ethicists-steal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Circle Privacy in Google+</title>
		<link>http://bugfox.net/blog/2011/07/15/circle-privacy-in-google/</link>
		<comments>http://bugfox.net/blog/2011/07/15/circle-privacy-in-google/#comments</comments>
		<pubDate>Sat, 16 Jul 2011 00:42:23 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Google+]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=233</guid>
		<description><![CDATA[i just started playing with Google+ and I noticed that by default the list of members of your Circles is visible to everyone on the web. This is similar to Facebook making your Friends list visible&#8211;in both cases it gives &#8230; <a href="http://bugfox.net/blog/2011/07/15/circle-privacy-in-google/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>i just started playing with Google+ and I noticed that by default the list of members of your Circles is visible to everyone on the web. This is similar to Facebook making your Friends list visible&#8211;in both cases it gives away much more information about you than you might wish to random strangers to know.</p>
<p>It took several tries to figure out how to change this:</p>
<ol>
<li>Click your name in the black menu bar and select Privacy</li>
<li>Press the &#8220;Edit visibility on profile&#8221; button</li>
<li>You now have to click on the part of your profile whose visibility you want to change. Click on &#8220;In [your name]&#8216;s circles&#8221;</li>
<li>Change the selection from &#8220;Everyone on the Web&#8221; to &#8220;Your circles.&#8221; Or if you are super paranoid, uncheck &#8220;Show people in&#8221; to hide this from everybody.</li>
<li>Press &#8220;Save&#8221;</li>
<li>Press &#8220;Done editing&#8221; at the top of the page</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/07/15/circle-privacy-in-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>What Happens When an Air Traffic Controller is Asleep?</title>
		<link>http://bugfox.net/blog/2011/04/15/what-happens-when-an-air-traffic-controller-is-asleep/</link>
		<comments>http://bugfox.net/blog/2011/04/15/what-happens-when-an-air-traffic-controller-is-asleep/#comments</comments>
		<pubDate>Fri, 15 Apr 2011 20:23:52 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=231</guid>
		<description><![CDATA[Philip Greenspun has a surprising answer.]]></description>
			<content:encoded><![CDATA[<p>Philip Greenspun has a surprising <a href="http://blogs.law.harvard.edu/philg/2011/04/14/what-happens-when-an-air-traffic-controller-is-asleep/">answer</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/04/15/what-happens-when-an-air-traffic-controller-is-asleep/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Philip Greenspun on the Federal Budget Deal:</title>
		<link>http://bugfox.net/blog/2011/04/10/philip-greenspun-on-the-federal-budget-deal/</link>
		<comments>http://bugfox.net/blog/2011/04/10/philip-greenspun-on-the-federal-budget-deal/#comments</comments>
		<pubDate>Sun, 10 Apr 2011 17:50:51 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Economics]]></category>
		<category><![CDATA[Federal Budget]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=224</guid>
		<description><![CDATA[&#8220;We have a family that is spending $38,200 per year. The family’s income is $21,700 per year. The family adds $16,500 in credit card debt every year in order to pay its bills. After a long and difficult debate among &#8230; <a href="http://bugfox.net/blog/2011/04/10/philip-greenspun-on-the-federal-budget-deal/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<blockquote><p>
&#8220;We have a family that is spending $38,200 per year. The family’s income is $21,700 per year. The family adds $16,500 in credit card debt every year in order to pay its bills. After a long and difficult debate among family members, keeping in mind that it was not going to be possible to borrow $16,500 every year forever, the parents and children agreed that a $380/year premium cable subscription could be terminated. So now the family will have to borrow only $16,120 per year.&#8221;</p>
<div class="small" ><a href="http://blogs.law.harvard.edu/philg/2011/04/10/understanding-congresss-solution-to-the-federal-deficit-problem/">Philip Greenspun</a></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/04/10/philip-greenspun-on-the-federal-budget-deal/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sony Pushes the Envelope</title>
		<link>http://bugfox.net/blog/2011/01/15/sony-pushes-the-envelope/</link>
		<comments>http://bugfox.net/blog/2011/01/15/sony-pushes-the-envelope/#comments</comments>
		<pubDate>Sat, 15 Jan 2011 19:44:41 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Intellectual Property]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=218</guid>
		<description><![CDATA[Orin Kerr eviscerates Sony&#8217;s legal maneuvers against the people who broke the PS3&#8242;s encryption: I realize the complaint characterizes the defendants as hackers, and the CFAA is supposed to be about hacking. But think for a moment about the nature &#8230; <a href="http://bugfox.net/blog/2011/01/15/sony-pushes-the-envelope/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><a href="http://volokh.com/author/orin/">Orin Kerr</a> eviscerates Sony&#8217;s legal maneuvers against the people who broke the PS3&#8242;s encryption:</p>
<blockquote><p>I realize the complaint characterizes the defendants as hackers, and the CFAA is supposed to be about hacking. But think for a moment about the nature of this claim. You bought the computer. You own it. You can sell it. You can light it on fire. You can bring it to the ocean, put it on a life raft, and push it out to sea. But if you dare  do anything that violates the fine print of the license that the manufacturer is trying to impose, then you’re guilty of trespassing onto your own property. And it’s not just a civil wrong, it’s a crime. And according to the motion for a TRO, it’s not just a crime, it’s a serious felony crime.</p>
<div class="small"><a href="http://volokh.com/2011/01/13/todays-award-for-the-lawyer-who-has-advocated-the-silliest-theory-of-the-computer-fraud-and-abuse-act/">Today’s Award for the Silliest Theory of the Computer Fraud and Abuse Act</a></div>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2011/01/15/sony-pushes-the-envelope/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Evil Password Change</title>
		<link>http://bugfox.net/blog/2010/11/17/evil-password-change/</link>
		<comments>http://bugfox.net/blog/2010/11/17/evil-password-change/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 15:19:30 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[Security]]></category>
		<category><![CDATA[Software Development]]></category>
		<category><![CDATA[password]]></category>
		<category><![CDATA[wtf]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=211</guid>
		<description><![CDATA[..or at least an extremely secure password change method. (Actual production code.) UPDATE: It&#8217;s hard to believe that this code isn&#8217;t malicious, but it&#8217;s just possible that it was put in as a placeholder and the developer never got around &#8230; <a href="http://bugfox.net/blog/2010/11/17/evil-password-change/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>..or at least an <em>extremely secure</em> <a href="http://thedailywtf.com/Articles/The-Password-Reset-Facade.aspx">password change method</a>. (Actual production code.)</p>
<p>UPDATE: It&#8217;s hard to believe that this code isn&#8217;t malicious, but it&#8217;s just possible that it was put in as a placeholder and the developer never got around to actually implementing it. If so it&#8217;s a pretty malicious placeholder since it reports a user error instead of &#8220;not implemented.&#8221;</p>
<p>What&#8217;s more interesting is that this follows a pretty common security anti-pattern. Many sites seem to think that it somehow enhances security to keep their password rules secret and force the user to guess what they are.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2010/11/17/evil-password-change/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aLinks with WordPress 3.0</title>
		<link>http://bugfox.net/blog/2010/07/28/alinks-with-wordpress-3-0/</link>
		<comments>http://bugfox.net/blog/2010/07/28/alinks-with-wordpress-3-0/#comments</comments>
		<pubDate>Thu, 29 Jul 2010 01:41:06 +0000</pubDate>
		<dc:creator>Jonathan Tappan</dc:creator>
				<category><![CDATA[WordPress]]></category>
		<category><![CDATA[aLinks]]></category>

		<guid isPermaLink="false">http://bugfox.net/blog/?p=208</guid>
		<description><![CDATA[I have updated my original aLinks post with a version that works with WP 3.0.]]></description>
			<content:encoded><![CDATA[<p>I have updated my original <a href="http://bugfox.net/blog/2008/11/14/alinks-20-bug-fixes/">aLinks post</a> with a version that works with WP 3.0.</p>
]]></content:encoded>
			<wfw:commentRss>http://bugfox.net/blog/2010/07/28/alinks-with-wordpress-3-0/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

