<?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>Ed's Tech Blog</title>
	<atom:link href="http://techblog.edwardotis.net/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://techblog.edwardotis.net</link>
	<description>My musing on tech and IT, and a place to rant sometimes too</description>
	<lastBuildDate>Fri, 27 Feb 2009 20:00:55 +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>Flickr API gotcha &#8211; Changing User Permissions</title>
		<link>http://techblog.edwardotis.net/?p=150</link>
		<comments>http://techblog.edwardotis.net/?p=150#comments</comments>
		<pubDate>Fri, 27 Feb 2009 20:00:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[flickr api]]></category>

		<guid isPermaLink="false">http://techblog.edwardotis.net/?p=150</guid>
		<description><![CDATA[With the desktop version of Flickr API, you cannot remove or change a permission granted to a user. This is a poor choice by Flickr. If a user grants me READ permission at first, and then wants additional functionality that will require WRITE permissions, there is no way for my program to handle this situation. [...]]]></description>
			<content:encoded><![CDATA[<p>With the desktop version of Flickr API, you cannot remove or change a permission granted to a user. This is a poor choice by Flickr.<br />
If a user grants me READ permission at first, and then wants additional functionality that will require WRITE permissions, there is no way for my program to handle this situation.<br />
Worse yet, Flickr gives back an misleading error to the user (and programmer) when you attempt to change the permission:<br />
&#8221; Oops! The API key or signature is invalid.<br />
An external application has requested your login credentials and permission to perform certain actions on your behalf, but has failed to include all the required data.<br />
You don&#8217;t really need to know what this means, except that you can&#8217;t use the application until this problem is fixed. (It&#8217;s a third-party problem, not a Flickr problem.)&#8221;</p>
<p>Obviously, this message is incorrect, as well as condescending to the developer. It also erodes user trust in your application. </p>
<p>The only way to change permission is to guide the user to the page for manually removing the current permission they granted your app. Then taking them back into your app to add the different permission.</p>
<p>So, as the developer, always start with the highest Permission level that your app will ever need for a user. In that thought, I have a use case for creating temporary photos so the user can approve the change that I am about to make to his Photo Set. The user would then be able to &#8216;rollback&#8217; or &#8216;commit&#8217; the updates after seeing what they look like. It would be nice to have the Delete permission, so I could clean up the album. The alternative is to use the WRITE permission and let the user do any deleting by hand. I personally, think I will go with WRITE. I would rather err on the side of caution, and make it impossible for my app to ever delete a user&#8217;s valuable photo archive. It&#8217;s also scary to give an application that kind of power, and I think I will gain more users if I don&#8217;t require them to give me DELETE permission. </p>
<p>Permission Spec:</p>
<p>http://www.flickr.com/services/auth/list.gne</p>
<p>Cheers,</p>
<p>Ed</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=150</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nested collections of composite value objects in Hibernate</title>
		<link>http://techblog.edwardotis.net/?p=147</link>
		<comments>http://techblog.edwardotis.net/?p=147#comments</comments>
		<pubDate>Wed, 25 Feb 2009 00:16:30 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://techblog.edwardotis.net/?p=147</guid>
		<description><![CDATA[It doesn&#8217;t appear that you can do it. You can only embed a collection of value objects one layer deep. Nesting deeper will throw a ConcurrentModificationException. Either move one of your nested tables up to a full Entity (and entity relationship) or denormalize one of your nested tables. A Speed vs Space trade off for [...]]]></description>
			<content:encoded><![CDATA[<p>It doesn&#8217;t appear that you can do it.<br />
You can only embed a collection of value objects one layer deep. Nesting deeper will throw a ConcurrentModificationException.</p>
<p>Either move one of your nested tables up to a full Entity (and entity relationship) or denormalize one of your nested tables.<br />
A Speed vs Space trade off for you to make based on your app.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=147</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Problem with Manning Hibernate example about annotated collections of embeddable elements</title>
		<link>http://techblog.edwardotis.net/?p=142</link>
		<comments>http://techblog.edwardotis.net/?p=142#comments</comments>
		<pubDate>Tue, 24 Feb 2009 21:23:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[hibernate]]></category>

		<guid isPermaLink="false">http://techblog.edwardotis.net/?p=142</guid>
		<description><![CDATA[If you are following the example in the book on page 259, and using Spring 2.5.6 and Hibernate 3.3.0.ga, you may get an error like: nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#8216;txSessionFactory&#8217; defined in ServletContext resource [/WEB-INF/mymodule-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: java.util.Set, [...]]]></description>
			<content:encoded><![CDATA[<p>If you are following the example in the <a href="http://www.manning.com/bauer2/">book</a> on page 259, and using Spring 2.5.6 and Hibernate 3.3.0.ga, you may get an error like:</p>
<p>nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#8216;txSessionFactory&#8217; defined in ServletContext resource [/WEB-INF/mymodule-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not determine type for: java.util.Set, for columns: [org.hibernate.mapping.Column(Image)]</p>
<p>The example in the book shows that the annotations should be set on the private field, but they should actually be set on the public getter.</p>
<p><code>@org.hibernate.annotations.CollectionOfElements<br />
@JoinTable(<br />
name = "ITEM_IMAGE",<br />
joinColumns = @JoinColumn(name = "ITEM_ID")<br />
)</code></p>
<p>private Set&lt;Image&gt; images = new HashSet&lt;Image&gt;();</p>
<p>should be:</p>
<p><code>@org.hibernate.annotations.CollectionOfElements<br />
@JoinTable(<br />
name = "ITEM_IMAGE",<br />
joinColumns = @JoinColumn(name = "ITEM_ID")</p>
<p>)</p>
<p>public Set&lt;Image&gt; getImages() {<br />
return images;</p>
<p>}</code></p>
<p>This may be due to the added layer of the interaction with Spring. Either way, give it a shot if you are experiencing this problem.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=142</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Developing using 3rd Party REST Servers</title>
		<link>http://techblog.edwardotis.net/?p=141</link>
		<comments>http://techblog.edwardotis.net/?p=141#comments</comments>
		<pubDate>Wed, 04 Feb 2009 23:42:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=141</guid>
		<description><![CDATA[I have found it  imperative to create a suite of integration/functional tests for each 3rd party REST site you use in your app. (Facebook, Flickr, Bebo, etc) These should ideally represent the set of API functions that your app is using for each API. You should create test users and data for the sites. Then, [...]]]></description>
			<content:encoded><![CDATA[<p>I have found it  imperative to create a suite of integration/functional tests for each 3rd party REST site you use in your app. (Facebook, Flickr, Bebo, etc) These should ideally represent the set of API functions that your app is using for each API. You should create test users and data for the sites. Then, when you app goes wonky, you should fire off these tests BEFORE you begin wasting your time looking for a bug in your code.</p>
<p>Ideally, the 3rd party sites would provide status pages that continually hit their own API&#8217;s and show the problems to us and them. Put some RSS feeds on that page, and you have a nice alert system. But none of them bother to provide that.</p>
<p>Ultimately, I want to add these tests into a continuous build system, like Hudson, so that I can get alerted within a short timespan when one of the services I depend on goes down. In addition, I&#8217;m thinking this should trigger an automatic update to my web app. Probably a warning on my site and support forums  that states that features using site XYZ are not behaving properly as of XPM on a given date.  Even better (though more risky?), if the failure shutdown functionality depending on that failed REST server until it passed my integration tests again. This would also show a message to  users and also alert the developers.</p>
<p>At a bare minimum though, setup your own tests, and be ready to run them at a moments notice. It will save you a lot of grief and wasted debugging.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=141</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>When IntelliJ goes bad</title>
		<link>http://techblog.edwardotis.net/?p=139</link>
		<comments>http://techblog.edwardotis.net/?p=139#comments</comments>
		<pubDate>Wed, 04 Feb 2009 23:19:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=139</guid>
		<description><![CDATA[Recently, my IntelliJ 8.01 install stopped recognizing annotations w/ syntax highlighting. Then, it wouldn&#8217;t commit to subversion unless you removed the &#8216;optimize imports&#8217; feature. Then, the debugger stopped working for incoming web requests, but it worked fine for debugging unit tests. I&#8217;m on Mac OS 10.5.x . I reinstalled the IntelliJ application package, but that [...]]]></description>
			<content:encoded><![CDATA[<p>Recently, my IntelliJ 8.01 install stopped recognizing annotations w/ syntax highlighting. Then, it wouldn&#8217;t commit to subversion unless you removed the &#8216;optimize imports&#8217; feature. Then, the debugger stopped working for incoming web requests, but it worked fine for debugging unit tests.</p>
<p>I&#8217;m on Mac OS 10.5.x . I reinstalled the IntelliJ application package, but that did nothing. Next, I renamed the IntelliJ 8 cache folder, so Intellij would create a new one the next time it started. This solved all the problems.</p>
<p>This folder on a Mac is located here:</p>
<p>/Users/[your user name]/Library/Caches/IntelliJIDEA80</p>
<p>/Users/[your user name]/Library/Caches/IntelliJIDEA70</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=139</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iphone mail &#8211; Fail</title>
		<link>http://techblog.edwardotis.net/?p=126</link>
		<comments>http://techblog.edwardotis.net/?p=126#comments</comments>
		<pubDate>Fri, 07 Nov 2008 17:54:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Rants]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=126</guid>
		<description><![CDATA[Wrote my longest ever email on the iphone mail program last night. It went into power save mode a couple times while composing it, and then I sent it. The message is gone. Not in Inbox, Drafts or Sent items. No error message either. Awesome. That sucked, Apple! Rule Number Fucking 1: Don&#8217;t lose the [...]]]></description>
			<content:encoded><![CDATA[<p>Wrote my longest ever email on the iphone mail program last night. It went into power save mode a couple times while composing it, and then I sent it. The message is gone. Not in Inbox, Drafts or Sent items. No error message either. Awesome. That sucked, Apple!</p>
<p>Rule Number Fucking 1: Don&#8217;t lose the user&#8217;s data!</p>
<p>Rule Number  2: Don&#8217;t lose the user&#8217;s data!</p>
<p>Rule Number 3: Find a text editor iphone app that can integrate with mail when it&#8217;s time to send. (Since there&#8217;s no cut and paste still&#8230;&lt;sigh&gt;)</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=126</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jmeter</title>
		<link>http://techblog.edwardotis.net/?p=117</link>
		<comments>http://techblog.edwardotis.net/?p=117#comments</comments>
		<pubDate>Mon, 03 Nov 2008 01:53:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=117</guid>
		<description><![CDATA[I have to load test only survey software for a client. Ran into some bugs w/ Jmeter Proxy feature, but once I got it going&#8230;well, I love this tool! It&#8217;s been around long enough that most features and statistics I need have already been implemented. One note of caution, It fails playback w/ SocketConnection exceptions [...]]]></description>
			<content:encoded><![CDATA[<p>I have to load test only survey software for a client. Ran into some bugs w/ Jmeter Proxy feature, but once I got it going&#8230;well, I love this tool! It&#8217;s been around long enough that most features and statistics I need have already been implemented.</p>
<p>One note of caution, It fails playback w/ SocketConnection exceptions when run under jre 1.6_10. I downgraded to 1.5.0_16 and it played fine. Running it on an ec2 instance so that bandwidth can match the T1. EC2 only give 1.5Mbps upstream from the instance, but that&#8217;s fine in my  case. If I needed more there are Jmeter EC2 slaves already setup in the EC2 repository. And at 2-3$ a day for running a small instance, this is a great solution.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=117</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Selenium Grid on EC2</title>
		<link>http://techblog.edwardotis.net/?p=115</link>
		<comments>http://techblog.edwardotis.net/?p=115#comments</comments>
		<pubDate>Mon, 03 Nov 2008 01:46:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=115</guid>
		<description><![CDATA[I configured the demo for Selenium Grid on EC2. It ran fine as a grid on my local box, but had some issues running over EC2. Mainly the browsers were just hanging instead of executing their scripts. I got quick feedback from Philippe Hanrigou, who is managing the grid project. Unfortunately, I don&#8217;t need to [...]]]></description>
			<content:encoded><![CDATA[<p>I configured the demo for Selenium Grid on EC2. It ran fine as a grid on my local box, but had some issues running over EC2. Mainly the browsers were just hanging instead of executing their scripts. I got quick feedback from <span id="OBJ_PREFIX_DWT481" class="Object">Philippe Hanrigou</span>, who is managing the grid project. Unfortunately, I don&#8217;t need to use this tool more now, but great to know it&#8217;s there in the future.</p>
<p>I&#8217;d really like to see a preconfigured windows selenium grid ec2 instance in the repository since IE is the most used browser still. Currently, only linux is available.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=115</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Amazon EC2</title>
		<link>http://techblog.edwardotis.net/?p=113</link>
		<comments>http://techblog.edwardotis.net/?p=113#comments</comments>
		<pubDate>Mon, 03 Nov 2008 01:42:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=113</guid>
		<description><![CDATA[Got going w/ Amazon EC2 instances last week. ElasticFox certainly made for a nice gui admin tool. Few bugs, but overall good. The only thing that kills me is Amazon&#8217;s decision to not offer a 64bit small instance (or a medium  32 bit instance w/ 4GB of ram.). I know they are doing it to [...]]]></description>
			<content:encoded><![CDATA[<p>Got going w/ Amazon EC2 instances last week. ElasticFox certainly made for a nice gui admin tool. Few bugs, but overall good. The only thing that kills me is Amazon&#8217;s decision to not offer a 64bit small instance (or a medium  32 bit instance w/ 4GB of ram.). I know they are doing it to get people to pay more money for the more expensive 64 bit instances. The 32 bit are supposed to be there to test out your work first. However, if I customize my bundle a lot in 32bit mode and then need more performance offered in the 64 bit instances, I am screwed. I have to do all the effort of setting up a brand new 64bit instance, including installing and configuring all the necessary software. This really defeats the purpose of being able to test ideas cheaply in 32bit small instances.</p>
<p>Small instance: $90/month for purely ec2 payment. (not storage, bandwith, io, etc)</p>
<p>Medium instance: $360/month</p>
<p>That&#8217;s a factor of 4. Not much for a business, but a lot of money for a solo programmer experimenting. Also, it can turn into a lot for a small business if the solution involves clustering.</p>
<p>Overall, a good experience getting started.</p>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=113</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dead body found in Google Maps!</title>
		<link>http://techblog.edwardotis.net/?p=108</link>
		<comments>http://techblog.edwardotis.net/?p=108#comments</comments>
		<pubDate>Thu, 16 Oct 2008 01:11:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.edwardotis.net/tech/?p=108</guid>
		<description><![CDATA[Click here to check it out live on Google Maps! (No this isn&#8217;t a Rick Roll ) Can&#8217;t believe someone managed to sneak this in the production version&#8230;]]></description>
			<content:encoded><![CDATA[<p><a href="http://maps.google.com/maps?f=q&amp;hl=en&amp;geocode=&amp;q=800+montgomery+st,+San+Francisco,+San+Francisco,+California,+United+States&amp;sll=37.796755,-122.403448&amp;sspn=0.000653,0.001422&amp;layer=c&amp;ie=UTF8&amp;ll=37.801553,-122.402544&amp;spn=0.01002,0.022745&amp;t=h&amp;z=16&amp;cbll=37.796522,-122.403515&amp;panoid=7SRnvils3ErEIj0zmgivbg&amp;cbp=2,232.95347907110227,,0,35.37103776663343">Click here to check it out live on Google Maps! (No this isn&#8217;t a Rick Roll )</a></p>
<p>Can&#8217;t believe someone managed to sneak this in the production version&#8230; <img src='http://techblog.edwardotis.net/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<div id="attachment_109" class="wp-caption alignnone" style="width: 310px"><a href="http://techblog.edwardotis.net/wp-content/uploads/techblog.edwardotis.net/2008/10/picture-1.png"><img class="size-medium wp-image-109" title="picture-1" src="http://www.edwardotis.net/tech/wp-content/uploads/2008/10/picture-1-300x160.png" alt="Google maps hit and run" width="300" height="160" /></a><p class="wp-caption-text">Google maps hit and run</p></div>
]]></content:encoded>
			<wfw:commentRss>http://techblog.edwardotis.net/?feed=rss2&#038;p=108</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

