<?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>dannyman.toldme.com &#187; Technical</title>
	<atom:link href="http://dannyman.toldme.com/category/technical/feed/" rel="self" type="application/rss+xml" />
	<link>http://dannyman.toldme.com</link>
	<description>Interesting bits of information and editorial, evolving online since 1995.</description>
	<lastBuildDate>Fri, 24 May 2013 20:51:04 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Perforce: Move Files to a Subdirectory</title>
		<link>http://dannyman.toldme.com/2013/05/22/p4-move-files/</link>
		<comments>http://dannyman.toldme.com/2013/05/22/p4-move-files/#comments</comments>
		<pubDate>Wed, 22 May 2013 21:31:15 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=7020</guid>
		<description><![CDATA[I wanted to move my existing *.py files for JIRA to a subdirectory.  I had a bit of a time figuring this out, so maybe this will help someone when googling on the issue.]]></description>
				<content:encoded><![CDATA[<p>Some quick notes.  I wanted to move my existing *.py files for JIRA to a subdirectory.  I had a bit of a time figuring this out, so maybe this will help someone when googling on the issue:</p>
<pre>p4 sync
mkdir -p jython/workflow
p4 edit *.py
bash # I use tcsh
for f in *.py; do
 p4 move $f jython/workflow/$f
done
exit # Back to tcsh
p4 submit</pre>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/05/22/p4-move-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Embed Page Refresh</title>
		<link>http://dannyman.toldme.com/2013/05/13/embed-page-refresh/</link>
		<comments>http://dannyman.toldme.com/2013/05/13/embed-page-refresh/#comments</comments>
		<pubDate>Mon, 13 May 2013 23:33:08 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[JIRA]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6995</guid>
		<description><![CDATA[Now users can add <code>refresh=nn</code> and the page will reload every nn seconds.  This ought to work in most cases where you can sneak some HTML into a Web App.]]></description>
				<content:encoded><![CDATA[<p>Feature request that certain JIRA dashboards should reload more frequently than every fifteen minutes.  So, I cooked up some JavaScript to hide in the announcement banner:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">function</span> gup<span style="color: #009900;">&#40;</span> name <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
name <span style="color: #339933;">=</span> name.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[\[]/</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\[</span>&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">replace</span><span style="color: #009900;">&#40;</span><span style="color: #009966; font-style: italic;">/[\]]/</span><span style="color: #339933;">,</span><span style="color: #3366CC;">&quot;<span style="color: #000099; font-weight: bold;">\\</span><span style="color: #000099; font-weight: bold;">\]</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">var</span> regexS <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;[<span style="color: #000099; font-weight: bold;">\\</span>?&amp;]&quot;</span><span style="color: #339933;">+</span>name<span style="color: #339933;">+</span><span style="color: #3366CC;">&quot;=([^&amp;#]*)&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">var</span> regex <span style="color: #339933;">=</span> <span style="color: #000066; font-weight: bold;">new</span> RegExp<span style="color: #009900;">&#40;</span> regexS <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">var</span> results <span style="color: #339933;">=</span> regex.<span style="color: #660066;">exec</span><span style="color: #009900;">&#40;</span> window.<span style="color: #660066;">location</span>.<span style="color: #660066;">href</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
 <span style="color: #000066; font-weight: bold;">if</span><span style="color: #009900;">&#40;</span> results <span style="color: #339933;">==</span> <span style="color: #003366; font-weight: bold;">null</span> <span style="color: #009900;">&#41;</span>    <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #3366CC;">&quot;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">else</span>    <span style="color: #000066; font-weight: bold;">return</span> results<span style="color: #009900;">&#91;</span><span style="color: #CC0000;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">function</span> reload<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
 window.<span style="color: #660066;">location</span> <span style="color: #339933;">=</span> window.<span style="color: #660066;">location</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000066; font-weight: bold;">var</span> refresh <span style="color: #339933;">=</span> gup<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'refresh'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000066; font-weight: bold;">if</span> <span style="color: #009900;">&#40;</span> refresh <span style="color: #339933;">&gt;</span> <span style="color: #CC0000;">0</span> <span style="color: #009900;">&#41;</span>    window.<span style="color: #660066;">setInterval</span><span style="color: #009900;">&#40;</span>reload<span style="color: #339933;">,</span> refresh<span style="color: #339933;">*</span><span style="color: #CC0000;">1000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Now users can add <code>refresh=nn</code> and the page will reload every nn seconds.  This ought to work in most cases where you can sneak some HTML into a Web App.</p>
<p>Function <code>gup</code> stolen from <a href="http://stackoverflow.com/a/979997">http://stackoverflow.com/questions/979975/how-to-get-the-value-from-url-parameter</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/05/13/embed-page-refresh/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>VMWare Workstation: Excessive Key Repeating in Ubuntu guest</title>
		<link>http://dannyman.toldme.com/2013/04/19/vmware-workstation-excessive-key-repeating-in-ubuntu-guest/</link>
		<comments>http://dannyman.toldme.com/2013/04/19/vmware-workstation-excessive-key-repeating-in-ubuntu-guest/#comments</comments>
		<pubDate>Fri, 19 Apr 2013 23:17:36 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6990</guid>
		<description><![CDATA[What did the trick is good old <code>xset</code>.]]></description>
				<content:encoded><![CDATA[<p>I like to virtualize my workstation using VMWare Workstation.  Lately, my Ubuntu (kubuntu) 12.04 guest would exhibit really annoying behavior whereby it would insert lots of extra letters as I typed, seemingly at random.</p>
<p>I cast about a few times for a fix.  I tried <a href="http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&#038;cmd=displayKC&#038;externalId=196">VMWare KB 196</a>, and <a href="http://maradns.blogspot.com/2009/02/vmware-update-keyboard-repeat-problem.html">a few solutions offered in an abandoned blog</a>.  But what did the trick is good old <code>xset</code>.</p>
<p>I added this to my <code>.bashrc</code>:</p>
<p><code>xset r rate 500 20</code></p>
<p>As I understand it, this means &#8220;key repeat only happens if you hold a key down for at least half a second, and then not for more than 20 times.&#8221;</p>
<p>My workstation has been way more pleasant to deal with ever since.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/04/19/vmware-workstation-excessive-key-repeating-in-ubuntu-guest/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>With Google, You Can Not Trust the Cloud</title>
		<link>http://dannyman.toldme.com/2013/03/21/with-google-you-can-not-trust-the-cloud/</link>
		<comments>http://dannyman.toldme.com/2013/03/21/with-google-you-can-not-trust-the-cloud/#comments</comments>
		<pubDate>Thu, 21 Mar 2013 21:46:51 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[About Me]]></category>
		<category><![CDATA[News and Reaction]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6968</guid>
		<description><![CDATA["How can I contemplate moving everything to the cloud, especially Google’s cloud, if services are going to flicker in and out of existence at the whim of Google’s management?"]]></description>
				<content:encoded><![CDATA[<p><a href="http://radar.oreilly.com/2013/03/the-demise-of-google-reader-stability-as-a-service.html">Mike Loukides strikes a chord:</a></p>
<blockquote><p>How can I contemplate moving everything to the cloud, especially Google’s cloud, if services are going to flicker in and out of existence at the whim of Google’s management? That’s a non-starter. Google has scrapped services in the past, and though I’ve been sympathetic with the people who complained about the cancellation, they’ve been services that haven’t reached critical mass. You can’t say that about Google Reader. And if they’re willing to scrap Google Reader, why not Google Docs?</p></blockquote>
<p>An excellent point.</p>
<p>I recall the first time I adopted a &#8220;cloud&#8221; service for my technology.  It was <a href="http://www.flickr.com/">Flickr</a>.  I had managed <a href="/Photos/">my photos</a> with <a href="/warez/">my own scripts</a> for years.  Others had installed <a href="http://galleryproject.org/">Gallery</a>, which always struck me as limited and ugly.    Flickr was new at the time, and I really liked the aesthetic.  But, upload all my photos there?  They had just been bought by Yahoo.  How long is Yahoo going to support the service?  I still keep local archives of my photos, but <a href="http://www.flickr.com/photos/dannyman/">I have thousands of photos shared on Flickr</a>, and how do I know that all those captions, comments, geotags, annotations, sets and collections, that all that data might not one day go down with the slowly sinking-ship that is Yahoo?</p>
<p>What reassured me was the <a href="http://www.flickr.com/services/api/">Flickr API</a>.  Worst case, I should be able to write a script to pull all that data to a local place somewhere and later reconstruct my online photo archive.  If Flickr were going down, someone else would probably write that script better than I could.  It is a grim thought, but at least when Flickr dies, there is an exit strategy.</p>
<p>That is one reason why I can sort of trust Google.  They&#8217;re pretty good about supporting APIs.  They&#8217;re killing Reader?  That&#8217;s dumb.  But in an instant, <a href="http://www.feedly.com/">Feedly</a> was able to take over my subscriptions from Google for me, and I just had to <a href="http://blog.feedly.com/2013/03/14/google-reader/">spend a few minutes learning a somewhat different interface</a>.</p>
<p>It would be nice, though, if, when software was retired, especially cloud software, that it could be open sourced and available for the die-hard users to keep it running on their own servers somewhere.  Admittedly, cloud services especially are vulnerable to further external dependencies . . .</p>
<p>You would think, though, that it shouldn&#8217;t take much effort on Google&#8217;s part to announce that a service has been retired, but they&#8217;ll keep it running indefinitely, at least until some point where the vast majority of the users had wandered on to more compelling alternatives.  <a href="http://www.google.com/googlegroups/archive_announce_20.html">They still keep the Usenet archive around.</a></p>
<p>And, yes, I rely on <del datetime="2013-03-21T21:20:22+00:00">Docs</del><ins datetime="2013-03-21T21:20:22+00:00">Drive</ins>.  This killing Reader fiasco sounds like an advertising ploy for Microsoft.  I rely on <del datetime="2013-03-21T21:20:22+00:00">Docs</del><ins datetime="2013-03-21T21:20:22+00:00">Drive</ins>, but maybe Excel is a more trustworthy option for the long term . . . ?</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/03/21/with-google-you-can-not-trust-the-cloud/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2013-02-27, Indeed!</title>
		<link>http://dannyman.toldme.com/2013/02/27/2013-02-27-indeed/</link>
		<comments>http://dannyman.toldme.com/2013/02/27/2013-02-27-indeed/#comments</comments>
		<pubDate>Wed, 27 Feb 2013 19:49:30 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6956</guid>
		<description><![CDATA[If you are naming files on a computer, please use this format.]]></description>
				<content:encoded><![CDATA[<p>Okay, I just have to say, Amen, XKCD and ISO!</p>
<p style="text-align: center"><a href="http://xkcd.com/1179/"><img alt="The correct way to write dates is: 2013-02-27 ..." src="http://imgs.xkcd.com/comics/iso_8601.png" width="392" height="457" class="aligncenter" /></a></p>
<p>If you are naming files on a computer, please use this format.  The beauty is that if you list files in &#8220;alphabetical order&#8221; then these dates get listed in chronological order, because as far as a computer is concerned, the &#8220;0&#8243; comes before &#8220;1&#8243; and so forth.  (And a year is more significant than a month is more significant than a day of the month . . .)</p>
<p>It is important to have that leading zero!  Why?  Because we have more than 10 months!  Allow me to demonstrate:</p>
<pre>
0-11:32 djh@noneedto ~$ <b>(echo "2013-02-27" &#038;&#038; echo "2013-12-27") | sort</b>
2013-02-27
2013-12-27
0-11:32 djh@noneedto ~$ <b>(echo "2013-2-27" &#038;&#038; echo "2013-12-27") | sort</b>
2013-12-27
2013-2-27
</pre>
<p>If you are interacting with <code>strftime()</code> then what you want to remember is <strong>%F</strong>!</p>
<pre>
0-11:38 djh@noneedto ~$ <b>date +%Y-%m-%d</b>
2013-02-27
0-11:38 djh@noneedto ~$ <b>date +%F</b>
2013-02-27
0-11:38 djh@noneedto ~$ <b>date +%Y%m%d%H%M # I sometimes use this for file timestamps but dont tell Randall Monroe</b>
201302271138
</pre>
<p>For my photographs, I have a directory hierarchy of <code>%Y/%m-%B</code>:</p>
<pre>
0-11:43 djh@noneedto Photographs$ <b>find . -type d | sort | tail</b>
./2012/08-August/Costa_Rica/Santa_Teresa
./2012/08-August/Costa_Rica/Ziplines
./2012/09-September
./2012/09-September/Sonogram
./2012/10-October
./2012/11-November
./2012/12-December
./2013
./2013/01-January
./2013/02-February
</pre>
<p>This gives me the human convenience of seeing the month name on my folders, but the computer sorts those folders in chronological order.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/02/27/2013-02-27-indeed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yahoo Mandates 19th Century Commuting</title>
		<link>http://dannyman.toldme.com/2013/02/25/yahoo-mandates-19th-century-commuting/</link>
		<comments>http://dannyman.toldme.com/2013/02/25/yahoo-mandates-19th-century-commuting/#comments</comments>
		<pubDate>Mon, 25 Feb 2013 22:09:51 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[About Me]]></category>
		<category><![CDATA[Biography]]></category>
		<category><![CDATA[News and Reaction]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6940</guid>
		<description><![CDATA[I believe that managers who can structure the working and communication practices of their teams to effectively collaborate and track work progress without requiring a physical presence have an advantage over those who can not.]]></description>
				<content:encoded><![CDATA[<p>I have been excited to see what might come of Yahoo! with <a href="http://pressroom.yahoo.net/pr/ycorp/marissa-mayer.aspx">Marissa Meyers at the helm</a>.  I am really glad to see that, after years of stagnation, Flickr has been improving.  Free food and smartphones for employees?  Sounds swell.  But the buzz now is that there shall be <a href="http://www.npr.org/blogs/alltechconsidered/2013/02/23/172792467/working-from-home-the-end-of-productivity-or-the-future-of-work">no more remote work</a>.  The only way to be productive is to come to the office and feel the buzz and bounce ideas off coworkers.</p>
<p>I am happy to point out that, while we don&#8217;t get free smartphones or free food, <a href="http://www.cisco.com/">my employer</a> does issue remote employees with a hardware VPN device that provides corporate wifi, and a videophone.  And <a href="http://www.cisco.com/web/about/ac40/about_cisco_careers_home.html">we are hiring</a>.</p>
<p>In my experience as a non-management technical professional, there is some virtue both to working from home, and to working at the office.  The office presents great opportunities for collaboration: working through ideas and solving problems.  Working from home, for some people, provides an excellent space to focus on getting some work done without interruption.  You can get more hours of productive work when your commute is shortened to a walk across the dining room, and when there&#8217;s no pressure to quit at a certain time to appease the demands of the train schedule or traffic.</p>
<p>For some people, there&#8217;s no place like the office . . . some people can do better work from home, some people do not.  Managers and executives, the bulk of whose work is meeting with others to make collaborative decisions . . . it seems that they may take several meetings from home and when they get to the office they feel uncomfortable that the busy hum of productive creative energy isn&#8217;t located there.  <strong>I believe that managers who can structure the working and communication practices of their teams to effectively collaborate and track work progress without requiring a physical presence have an advantage over those who can not.</strong></p>
<p>I live near the office and frequently collaborate with my manager, so most days I make the trip in.  Sometimes when I need to focus on a project, or work with a remote time zone, I&#8217;ll commute to the home office.  I have been with Cisco for over five years, now.  I spent one of those years in New York, and my tenure here would have been much shorter without the flexibility to telecommute.</p>
<p>David Fullerton makes <a href="http://blog.stackoverflow.com/2013/02/why-we-still-believe-in-working-remotely/">a good case for effective remote work</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/02/25/yahoo-mandates-19th-century-commuting/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>SAQ: Is a DSL Modem Actually a Modem?</title>
		<link>http://dannyman.toldme.com/2013/02/19/saq-is-a-dsl-modem-actually-a-modem/</link>
		<comments>http://dannyman.toldme.com/2013/02/19/saq-is-a-dsl-modem-actually-a-modem/#comments</comments>
		<pubDate>Tue, 19 Feb 2013 00:06:30 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testimonials]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6916</guid>
		<description><![CDATA[A DSL modem is still a modem.  It modulates and demodulates a digital signal into the RF band of a telephone line.]]></description>
				<content:encoded><![CDATA[<p>This question came to mind the other day.  &#8220;DSL modem&#8221; sounds dumb, because as any geek over the age of 30 knows, a &#8220;modem&#8221; is a device with MODulates and DEmodulates a digital signal over an analog network.  Thus a &#8220;Digital Subscriber Line&#8221; has no need for modulating and demodulating.</p>
<div class="wp-caption capRight" style="width: 463px"><img src="http://farm4.staticflickr.com/3227/2979693877_c601ac432a.jpg" width="453" height="352" alt="modem and phone" class /><p class="wp-caption-text">THIS is a modem!<br />CC: <a href="http://www.flickr.com/photos/bryanalexander/2979693877/">BryanAlexander</a></p></div>
<p>Except, DSL is actually an overlay on the analog telephone network.  So, wait . . . what?</p>
<p><a href="http://en.wikipedia.org/wiki/DSL_modem">Wikipedia wastes its time</a> on a pointless distinction:</p>
<blockquote><p>&#8220;The term DSL modem is technically used to describe a modem which connects to a single computer, through a USB port or is installed in a computer PCI slot. The more common DSL router which combines the function of a DSL modem and a home router, is a standalone device which can be connected to multiple computers &#8230;&#8221;</p></blockquote>
<p>Yeah, really helpful.  But as geeks know, you need to <a href="http://en.wikipedia.org/wiki/Talk:DSL_modem#Debate_about_use_of_.22ATU-R.22.2C_.22ADSL_Transeiver_Unit.22_Vs._.22DSL_Modem.22.2C_.22DSL_Router.22">check the Wikipedia talk page</a>:</p>
<blockquote><p>The usage &#8220;DSL Modem&#8221; is not erroneous. A DSL modem does indeed perform modulation and demodulation. It uses either Quadrature Amplitude Modulation (QAM) or Phase Shift Keying (PSK) modulation. Multiple modulated subcarriers are then combined into an OFDM stream. The distinction between this type of modem and a traditional one is that the traditional one modulates audio frequency signals whereas the DSL modem is upconverted to an RF band. But they both perform modulation and demodulation. The digital signals are not sent as baseband digital signals.</p></blockquote>
<p>I do not know what all those words mean, but I read that as <strong>&#8220;a DSL modem is still a modem.  It modulates and demodulates a digital signal into the RF band of a telephone line.&#8221;</strong></p>
<p>I made my own contribution to Wikipedia&#8217;s Talk page:</p>
<blockquote><p>The distinction between whether your &#8220;DSL modem&#8221; connects via USB, ethernet, wireless, or provides NAT, sounds like a spurious distinction to me. I interpret and interchange &#8220;DSL modem&#8221; and &#8220;DSL router&#8221; as &#8220;the network device that bridges your local computing resources to your network service provider.&#8221;</p></blockquote>
<p>But if I have learned anything about nomenclature disputes on Wikipedia, it is that they are <a href="http://en.wikipedia.org/wiki/Talk:HO_scale#Number_0_versus_letter_O">not worth the effort</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/02/19/saq-is-a-dsl-modem-actually-a-modem/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Our Future: Autonomous Cars and Transit</title>
		<link>http://dannyman.toldme.com/2013/01/04/our-future-autonomous-cars-and-transit/</link>
		<comments>http://dannyman.toldme.com/2013/01/04/our-future-autonomous-cars-and-transit/#comments</comments>
		<pubDate>Fri, 04 Jan 2013 19:27:03 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[News and Reaction]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6879</guid>
		<description><![CDATA[The autotaxi will make getting around so convenient, that car ownership will continue to decline.]]></description>
				<content:encoded><![CDATA[<p>My opinion, one of <a href="http://www.humantransit.org/2013/01/driverless-cars-and-the-limitations-of-the-complete-imagined-future.html">many</a>, as left in a comment:</p>
<blockquote><p>The current Google Car can operate on city streets autonomously, but it needs someone doing the backend work of getting all the streets mapped out perfectly, figuring out exactly where the lanes are. Then in order to do a truly autonomous taxi service, you&#8217;ll want a two-way video linkup for the dispatcher to pilot the car if it gets stuck in some situation like the fire department blocking the street, or to monitor security.</p>
<p>For that reason, the current livery model works really well: a small, local company will service its fleet and its IT needs. The biggest expense, the driver, will be eliminated. This will serve an evolutionary role of a taxi service within a limited service area. This will be mostly shopping trips for car-less people, and &#8220;last mile&#8221; services to transit connection points, like Taxis serve now. The evolution comes with lower cost: short-haul, off-peak commuter needs, more &#8220;last mile&#8221; transit service where an autotaxi will be faster and more convenient than the local bus service, but also cheap.</p>
<p>What happens next? &#8220;Roaming&#8221; agreements among carriers sharing a common technology platform. The service areas of the autotaxi companies grow larger: your local autotaxi can drop you off on a shopping trip to a regional big-box store two towns over and the local autotaxi there can bring you back cheap. Expanded mobility, less reliance on transit.</p>
<p>This doesn&#8217;t mean the end of transit. Individual automobiles still require more energy and infrastructure to operate. The autotaxi will dominate short trips, but especially at peak demand, we will need to rely on higher-capacity transit backbones.</p>
<p>The biggest driver of the need for peak-period transit handoff is the capacity limitations of the autotaxi carriers. You simply can not carry everyone, but you want to be a part of the picture. So, yeah, the service gets you from your house to the transit hub, maybe work out relationships with local transit agencies so thaty &#8220;last mile&#8221; can be served by auto-taxi as a part of the transit fare itself.</p>
<p>The other limitation is for longer-range travel, even a fully autonomous rubber-on-pavement highway system will not be able to match the speed of rail-based or air travel. The autotaxi might drive you fifty miles to the high-speed train station, but then you&#8217;ll board the bullet train for LA which will be faster and charge a lower fare.</p>
<p>Anyway, the roaming evolution will mean that we go from local taxi service to regional airport shuttle service, and this will be great for those who live some distance from a long-haul transportation hub who want to make it to/from the airport, &#038;c.</p>
<p>I think autonomous cars are a very reasonable evolution on human-piloted cars, which were a very reasonable evolution on horse-drawn carriages. In the twentieth century we evolved from horses to humans, and in the twenty-first we will evolve even more seamlessly from human to computer.</p>
<p>Our streets didn&#8217;t change much from the carriage to the automobile era. They&#8217;re wider and too dangerous for people to walk in. I doubt the streets will change much in the autonomous era, except they&#8217;ll narrow again and it will be safe to walk, bike, and play in them again.</p></blockquote>
<p>My other prediction is that the autotaxi will make getting around so convenient, that car ownership will continue to decline.  You will see a winners-and-losers scenario in the auto industry: the losers will realize too late just how badly they are in trouble.  They will try to spread Fear, Uncertainty, and Doubt as to the safety and wisdom of reliance on autonomous vehicles, just as they try to sell some.  The winners will have identified the coming trend and geared their business to serving the needs of autonomous fleet operators, and to those niche consumers for whom autonomous vehicles are not appropriate, or who just love driving their own car.  Other winners will include pedestrians, cyclists, the young, the elderly, people with disabilities, suburbanites, night life, and very likely the environment.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2013/01/04/our-future-autonomous-cars-and-transit/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JIRA Cascading Select in Jython</title>
		<link>http://dannyman.toldme.com/2012/12/06/jira-cascading-select-in-jython/</link>
		<comments>http://dannyman.toldme.com/2012/12/06/jira-cascading-select-in-jython/#comments</comments>
		<pubDate>Thu, 06 Dec 2012 23:35:59 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[JIRA]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6857</guid>
		<description><![CDATA[The Cascading Select Custom Field type in JIRA is a bear.  So, in the interests of saving me sanity next time I need to set a Cascading Select, here's a Jython function that works in Jira 4.2 . . .]]></description>
				<content:encoded><![CDATA[<p>The Cascading Select Custom Field type in JIRA is a bear.  The first trick is learning to set the &#8220;null&#8221; value and then the &#8220;1&#8243; child value.  The next trick is building out a ModifiedValue object to hold your change.  Then you get to jump down the rabbit hole of finding the correct Option values for the custom field, and setting them with the tricks just mentioned.</p>
<p>So, in the interests of saving me sanity next time I need to set a Cascading Select, here&#8217;s a Jython function that works in Jira 4.2:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">logging</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span> <span style="color: #ff7700;font-weight:bold;">import</span> ComponentManager
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span>.<span style="color: black;">customfields</span>.<span style="color: black;">manager</span> <span style="color: #ff7700;font-weight:bold;">import</span> OptionsManager
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span>.<span style="color: black;">customfields</span>.<span style="color: black;">view</span> <span style="color: #ff7700;font-weight:bold;">import</span> CustomFieldParamsImpl
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span> <span style="color: #ff7700;font-weight:bold;">import</span> ModifiedValue
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span>.<span style="color: black;">util</span> <span style="color: #ff7700;font-weight:bold;">import</span> DefaultIssueChangeHolder
<span style="color: #ff7700;font-weight:bold;">from</span> java.<span style="color: black;">util</span> <span style="color: #ff7700;font-weight:bold;">import</span> HashSet
&nbsp;
<span style="color: #808080; font-style: italic;"># cf = custom field</span>
<span style="color: #808080; font-style: italic;"># issue = issue to modify</span>
<span style="color: #808080; font-style: italic;"># parent = top value to set (string value)</span>
<span style="color: #808080; font-style: italic;"># child = child value to set (string value)</span>
<span style="color: #ff7700;font-weight:bold;">def</span> set_cascading_select<span style="color: black;">&#40;</span>cf<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> parent<span style="color: #66cc66;">,</span> child<span style="color: black;">&#41;</span>:
    <span style="color: #808080; font-style: italic;"># Get the managers</span>
    cfm <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getCustomFieldManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    om <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getComponentInstanceOfType</span><span style="color: black;">&#40;</span>OptionsManager<span style="color: black;">&#41;</span>
    fli <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getFieldLayoutManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getFieldLayout</span><span style="color: black;">&#40;</span>issue<span style="color: black;">&#41;</span>.<span style="color: black;">getFieldLayoutItem</span><span style="color: black;">&#40;</span>cf<span style="color: black;">&#41;</span>
&nbsp;
    parent_options <span style="color: #66cc66;">=</span> om.<span style="color: black;">getOptions</span><span style="color: black;">&#40;</span>cf.<span style="color: black;">getRelevantConfig</span><span style="color: black;">&#40;</span>issue<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    parent_option <span style="color: #66cc66;">=</span> <span style="color: #008000;">None</span>
    child_option <span style="color: #66cc66;">=</span> <span style="color: #008000;">None</span>
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        parent_option <span style="color: #66cc66;">=</span> parent_options.<span style="color: black;">getOptionForValue</span><span style="color: black;">&#40;</span>parent<span style="color: #66cc66;">,</span> <span style="color: #008000;">None</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span>:
        <span style="color: #ff7700;font-weight:bold;">pass</span>
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        child_option <span style="color: #66cc66;">=</span> parent_options.<span style="color: black;">getOptionForValue</span><span style="color: black;">&#40;</span>child<span style="color: #66cc66;">,</span> parent_option.<span style="color: black;">getOptionId</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span>:
        <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> parent_option <span style="color: #ff7700;font-weight:bold;">and</span> child_option:
        old_application <span style="color: #66cc66;">=</span> issue.<span style="color: black;">getCustomFieldValue</span><span style="color: black;">&#40;</span>cf<span style="color: black;">&#41;</span>
        new_application <span style="color: #66cc66;">=</span> CustomFieldParamsImpl<span style="color: black;">&#40;</span>cf<span style="color: black;">&#41;</span>
        a_none <span style="color: #66cc66;">=</span> HashSet<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        a_none.<span style="color: black;">add</span><span style="color: black;">&#40;</span>parent_option<span style="color: black;">&#41;</span>
        a_1 <span style="color: #66cc66;">=</span> HashSet<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        a_1.<span style="color: black;">add</span><span style="color: black;">&#40;</span>child_option<span style="color: black;">&#41;</span>
        new_application.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: #008000;">None</span><span style="color: #66cc66;">,</span> a_none<span style="color: black;">&#41;</span>
        new_application.<span style="color: black;">put</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;1&quot;</span><span style="color: #66cc66;">,</span> a_1<span style="color: black;">&#41;</span>
        mf <span style="color: #66cc66;">=</span> ModifiedValue<span style="color: black;">&#40;</span>old_application<span style="color: #66cc66;">,</span> new_application<span style="color: black;">&#41;</span>
        cf.<span style="color: black;">updateValue</span><span style="color: black;">&#40;</span>fli<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> mf<span style="color: #66cc66;">,</span> DefaultIssueChangeHolder<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">logging</span>.<span style="color: black;">debug</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;set issue &quot;</span> + issue.<span style="color: black;">getKey</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; cf &quot;</span> + cf.<span style="color: black;">getName</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> + <span style="color: #483d8b;">&quot; setting &quot;</span> + parent + <span style="color: #483d8b;">&quot;/&quot;</span> + child<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">True</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        <span style="color: #dc143c;">logging</span>.<span style="color: black;">error</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;invalid parent/child option: &quot;</span> + parent + <span style="color: #483d8b;">&quot;/&quot;</span> + child<span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">return</span> <span style="color: #008000;">None</span></pre></td></tr></table></div>

<p>Example function calls from within a validation hook:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;">cfm <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getCustomFieldManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
application_cf <span style="color: #66cc66;">=</span> cfm.<span style="color: black;">getCustomFieldObjectByName</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;Beverages&quot;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># good</span>
set_cascading_select<span style="color: black;">&#40;</span>application_cf<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Hard Drinks&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Whiskey&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># bad child</span>
set_cascading_select<span style="color: black;">&#40;</span>application_cf<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Hard Drinks&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Coke&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># bad parent</span>
set_cascading_select<span style="color: black;">&#40;</span>application_cf<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Soft Drinks&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Whiskey&quot;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># total crap</span>
set_cascading_select<span style="color: black;">&#40;</span>application_cf<span style="color: #66cc66;">,</span> issue<span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Illicit Drugs&quot;</span><span style="color: #66cc66;">,</span> <span style="color: #483d8b;">&quot;Bath Salts&quot;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>The <code>logging</code> stuff is useful for debugging, if you have that set up, else just remove those bits.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/12/06/jira-cascading-select-in-jython/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Collocation vs Colocation</title>
		<link>http://dannyman.toldme.com/2012/12/03/collocation-vs-colocation/</link>
		<comments>http://dannyman.toldme.com/2012/12/03/collocation-vs-colocation/#comments</comments>
		<pubDate>Mon, 03 Dec 2012 21:10:38 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Excerpts]]></category>
		<category><![CDATA[Letters to The Man]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6838</guid>
		<description><![CDATA[Part of the challenge is that most software dictionaries are unaware of the word "colocation" and are happy to offer "collocation" as an alternative, but that is wrong wrong wrong wrong and it makes me a little nuts every time.]]></description>
				<content:encoded><![CDATA[<p>This drives me insane.  Part of the challenge is that most software dictionaries are unaware of the word &#8220;colocation&#8221; and are happy to offer &#8220;collocation&#8221; as an alternative, but that is wrong wrong wrong wrong and it makes me a little nuts every time.</p>
<p>So, here is some explanation I just sent to the NOC and copied to the Sales team of a &#8220;Colocation Provider&#8221; who keeps sending me messages from something called &#8220;Collocation Status Report&#8221;:</p>
<blockquote><p>Dear NOC:</p>
<p>A collocation is a statistic used by linguists to determine the<br />
frequency with which words and phrases are found together.</p>
<p>On your contact information page, there is an option to contact Sales<br />
about &#8220;Colocation&#8221;</p>
<p>Assuming that you are indeed in the business of Colocation, and not<br />
actually updating us on the status of word frequencies, please fix the<br />
name in your outgoing envelope from &#8220;Collocation Status Reports&#8221; to<br />
&#8220;Colocation Status Reports&#8221;</p>
<p>Thanks,<br />
-danny</p></blockquote>
<p>Yup.  That&#8217;s all I have to say about that.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/12/03/collocation-vs-colocation/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amazon Hack: Reverse Showrooming</title>
		<link>http://dannyman.toldme.com/2012/11/12/amazon-hack-reverse-showrooming/</link>
		<comments>http://dannyman.toldme.com/2012/11/12/amazon-hack-reverse-showrooming/#comments</comments>
		<pubDate>Mon, 12 Nov 2012 22:43:16 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6804</guid>
		<description><![CDATA[Modern retailers have a challenge we have come to call "showrooming" where a consumer visits the local store to try out a product, then they go and order the product off Amazon.com or another retailer for less money.]]></description>
				<content:encoded><![CDATA[<p>Modern retailers have a challenge we have come to call &#8220;showrooming&#8221; where a consumer visits the local store to try out a product, then they go and order the product off Amazon.com or another retailer for less money.  Some retailers will do online price matching, which is reasonable because even though that lowers their margin, they still get the sale, and can upsell you a few accessories.  I saved a few dollars this way while buying a TV from Fry&#8217;s.</p>
<p>However, I was just browsing Amazon.com for a resin adirondack chair, where I saw:</p>
<p style="text-align: center"><a href="http://dannyman.toldme.com/2012/11/12/amazon-hack-reverse-showrooming/adirondack1/" rel="attachment wp-att-6805"><img src="http://dannyman.toldme.com/wp-content/uploads/2012/11/adirondack1-600x272.png" alt="" title="adirondack1" width="600" height="272" class="aligncenter size-large wp-image-6805" /></a></p>
<p>Twenty six bucks!?  Sounds good . . . not eligible for Prime, so let&#8217;s check the shipping . . .</p>
<p style="text-align: center"><a href="http://dannyman.toldme.com/2012/11/12/amazon-hack-reverse-showrooming/adirondack2/" rel="attachment wp-att-6806"><img src="http://dannyman.toldme.com/wp-content/uploads/2012/11/adirondack2.png" alt="" title="adirondack2" width="221" height="265" class="aligncenter size-full wp-image-6806" /></a></p>
<p>Whiskey . . . Tango . . . Foxtrot . . . $192 shipping you say?!!  Something is fishy here . . .</p>
<p>So, I surf on over to True Value&#8217;s web site, where the chairs are $20, and they&#8217;ll ship to the local store.</p>
<p>Which makes me wonder if this is a case of &#8220;reverse showrooming&#8221; . . . I go to Amazon.com because I can probably find what I am looking for, then I am led to a local retailer to save money.  Very clever . . .</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/11/12/amazon-hack-reverse-showrooming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JIRA Workflow Transition Condition: check_parent_resolved.py</title>
		<link>http://dannyman.toldme.com/2012/11/07/jython-workflow-transition-check-parent/</link>
		<comments>http://dannyman.toldme.com/2012/11/07/jython-workflow-transition-check-parent/#comments</comments>
		<pubDate>Wed, 07 Nov 2012 02:23:58 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[JIRA]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6797</guid>
		<description><![CDATA[It took a few hours to figure this hook out, so I'm including my hard-won lines of code here.]]></description>
				<content:encoded><![CDATA[<p>It took a few hours to figure this hook out, so I&#8217;m including my hard-won lines of code here.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: UTF-8 -*-</span>
<span style="color: #808080; font-style: italic;"># Check if PARENT is resolved.</span>
<span style="color: #808080; font-style: italic;"># Monitoring creates Events in the Event queue, these Events</span>
<span style="color: #808080; font-style: italic;"># automatically create Incident children.</span>
<span style="color: #808080; font-style: italic;"># We don't want to resolve any Incident children until the parent Event</span>
<span style="color: #808080; font-style: italic;"># resolves.</span>
<span style="color: #808080; font-style: italic;"># </span>
<span style="color: #808080; font-style: italic;"># (Normally you want to block on your children instead of your parent.)</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span> <span style="color: #ff7700;font-weight:bold;">import</span> ComponentManager
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span>.<span style="color: black;">link</span> <span style="color: #ff7700;font-weight:bold;">import</span> IssueLinkManager
&nbsp;
ilm <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getIssueLinkManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Assume we are okay ...</span>
result <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">for</span> link <span style="color: #ff7700;font-weight:bold;">in</span> ilm.<span style="color: black;">getInwardLinks</span><span style="color: black;">&#40;</span>issue.<span style="color: black;">getId</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">if</span> link.<span style="color: black;">getIssueLinkType</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getName</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;Parent&quot;</span> <span style="color: #ff7700;font-weight:bold;">and</span> link.<span style="color: black;">getSourceObject</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getResolution</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #008000;">None</span>:
        result <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/11/07/jython-workflow-transition-check-parent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO: Style a Multi-Column List in HTML</title>
		<link>http://dannyman.toldme.com/2012/10/22/html-css-ul-li-columns/</link>
		<comments>http://dannyman.toldme.com/2012/10/22/html-css-ul-li-columns/#comments</comments>
		<pubDate>Mon, 22 Oct 2012 18:38:17 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6761</guid>
		<description><![CDATA[Preposterous questions can be very interesting.]]></description>
				<content:encoded><![CDATA[<p>For a project at work I was asked if I could lay out a long table-of-contents in our CMS as multiple columns.  Logically enough, the table-of-contents renders as a flat, unordered list (UL) of list items (LI) &#8230; arranging that as multiple columns is a preposterous idea!  Of course, preposterous questions can be very interesting.</p>
<p>So, we start with something like this:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">		&lt;h1&gt;Yadda Yadda&lt;/h1&gt;
&nbsp;
		&lt;ul class=&quot;columns&quot;&gt;
			&lt;li&gt;BLAH blah blah one&lt;/li&gt;
			&lt;li&gt;BLAH blah blah two&lt;/li&gt;
			&lt;li&gt;BLAH blah blah three&lt;/li&gt;
			&lt;li&gt;BLAH blah blah four&lt;/li&gt;
			&lt;li&gt;BLAH blah blah five&lt;/li&gt;
			&lt;li&gt;BLAH blah blah six&lt;/li&gt;
			&lt;li&gt;BLAH blah blah seven&lt;/li&gt;
			&lt;li&gt;BLAH blah blah eight really long example&lt;/li&gt;
			&lt;li&gt;BLAH blah blah nine&lt;/li&gt;
			&lt;li&gt;BLAH blah blah ten&lt;/li&gt;
			&lt;li&gt;BLAH blah blah eleven&lt;/li&gt;
			&lt;li&gt;BLAH blah blah twelve&lt;/li&gt;
		&lt;/ul&gt;
&nbsp;
		&lt;h1&gt;Yappa Yappa&lt;/h1&gt;</pre></td></tr></table></div>

<p>Which renders as:</p>
<h1>Yadda Yadda</h1>
<ul class="columns">
<li>BLAH blah blah one</li>
<li>BLAH blah blah two</li>
<li>BLAH blah blah three</li>
<li>BLAH blah blah four</li>
<li>BLAH blah blah five</li>
<li>BLAH blah blah six</li>
<li>BLAH blah blah seven</li>
<li>BLAH blah blah eight really long example</li>
<li>BLAH blah blah nine</li>
<li>BLAH blah blah ten</li>
<li>BLAH blah blah eleven</li>
<li>BLAH blah blah twelve</li>
</ul>
<h1>Yappa Yappa</h1>
<p>Okay. So, multiple columns?  That is what TABLE is for, but we are dealing with UL.  But I have my old friend <a href="http://www.w3.org/wiki/CSS/Properties/float">the float attribute</a>, so I define a style sheet:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">			ul.columns li {
				list-style: none;
				float: left;
				width: 30%;
			}
			h1 { clear: left; }</pre></td></tr></table></div>

<p>Now we render as three columns:</p>
<h1>Yadda Yadda</h1>
<ul class="columns">
<li style="list-style: none; float: left; width: 30%">BLAH blah blah one</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah two</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah three</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah four</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah five</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah six</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah seven</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah eight really long example</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah nine</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah ten</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah eleven</li>
<li style="list-style: none; float: left; width: 30%">BLAH blah blah twelve</li>
</ul>
<h1 style="clear: left">Yappa Yappa</h1>
<p>Two columns?  Four?  Just tune the width attribute:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">			ul.columns li {
				list-style: none;
				float: left;
				width: 45%;
			}
			h1 { clear: left; }</pre></td></tr></table></div>

<p>And you get:</p>
<ul class="columns">
<li style="list-style: none; float: left; width: 45%">BLAH blah blah one</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah two</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah three</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah four</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah five</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah six</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah seven</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah eight really long example</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah nine</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah ten</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah eleven</li>
<li style="list-style: none; float: left; width: 45%">BLAH blah blah twelve</li>
</ul>
<p><br style="clear: left" /></p>
<p>It is not perfect.  The content renders left-to-right, so strictly speaking, these aren&#8217;t columns.  </p>
<p>If you narrow enough to cause wrapping you get some odd gaps.</p>
<p>Due to margins and the like, you can&#8217;t just say three columns is 33%, two columns is 50% . . . if you narrow this page enough you&#8217;ll see a graceful degradation from more columns to fewer.</p>
<p>Here&#8217;s a more dynamic example, where wider pages will get more columns:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="html" style="font-family:monospace;">			ul.columns li {
				list-style: none;
				float: left;
				width: 15em;
			}
			h1 { clear: left; }</pre></td></tr></table></div>

<p>Renders as:</p>
<ul class="columns">
<li style="list-style: none; float: left; width: 15em">BLAH blah blah one</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah two</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah three</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah four</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah five</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah six</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah seven</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah eight really long example</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah nine</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah ten</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah eleven</li>
<li style="list-style: none; float: left; width: 15em">BLAH blah blah twelve</li>
</ul>
<p><br style="clear: left" /></p>
<p>The block following your UL will need to clear the floated content, hence the <code>clear: left</code> on the H1, above.</p>
<p>See also:</p>
<ul>
<li><a href="http://dannyman.toldme.com/scratch/li-column.html">http://dannyman.toldme.com/scratch/li-column.html</a> &#8212; my &#8220;scratch pad&#8221; for this specific question.</li>
<li><a href="http://dannyman.toldme.com/scratch/columns.html">http://dannyman.toldme.com/scratch/columns.html</a> &#8212; some related experimentation I did in 2003.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/10/22/html-css-ul-li-columns/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Jython Validator Cookbook</title>
		<link>http://dannyman.toldme.com/2012/09/25/jython-validator-cookbook/</link>
		<comments>http://dannyman.toldme.com/2012/09/25/jython-validator-cookbook/#comments</comments>
		<pubDate>Tue, 25 Sep 2012 00:01:54 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[JIRA]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Technical]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6752</guid>
		<description><![CDATA[Building on <a href="/2011/12/01/jira-jython-validator-enforce-time-spent/">a previous post to validate user time tracking</a>, a few "cookbook" scripts that may be handy to you or me in the future.]]></description>
				<content:encoded><![CDATA[<p>Building on <a href="/2011/12/01/jira-jython-validator-enforce-time-spent/">a previous post to validate user time tracking</a>, a few &#8220;cookbook&#8221; scripts that may be handy to you or me in the future.</p>
<p>JIRA 4.2, YMMV.</p>
<h3>Validate User Time Tracking</h3>
<p>Somewhat elaborate: enforce that time worked has been logged, except under certain circumstances.  <a href="/2011/12/01/jira-jython-validator-enforce-time-spent/">See original post.</a></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">import</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span>.<span style="color: black;">issue</span>.<span style="color: black;">worklog</span>.<span style="color: black;">Worklog</span>
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span> <span style="color: #ff7700;font-weight:bold;">import</span> ComponentManager
&nbsp;
<span style="color: #808080; font-style: italic;"># Time Already Logged</span>
timespent <span style="color: #66cc66;">=</span> issue.<span style="color: black;">getTimeSpent</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #808080; font-style: italic;"># Time Logged via current screen</span>
<span style="color: #ff7700;font-weight:bold;">try</span>:
    timelogged <span style="color: #66cc66;">=</span> <span style="color: #008000;">dict</span><span style="color: black;">&#40;</span>issue.<span style="color: black;">getModifiedFields</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'worklog'</span><span style="color: black;">&#93;</span>
<span style="color: #ff7700;font-weight:bold;">except</span>:
    timelogged <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Duplicate Issue?  It is as good as logged!</span>
resolution <span style="color: #66cc66;">=</span> issue.<span style="color: black;">getResolution</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> resolution<span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;Duplicate&quot;</span>:
    timelogged <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span>
<span style="color: #ff7700;font-weight:bold;">if</span> resolution<span style="color: black;">&#91;</span><span style="color: #483d8b;">'name'</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;Self Corrected&quot;</span>:
    timelogged <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span>
&nbsp;
<span style="color: #808080; font-style: italic;"># Nagios likes to close tickets, but doesn't get paid</span>
<span style="color: #dc143c;">user</span> <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getJiraAuthenticationContext</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getUser</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #dc143c;">user</span>.<span style="color: black;">getName</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">&quot;nagios&quot;</span>:
    timelogged <span style="color: #66cc66;">=</span> <span style="color: #008000;">True</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> timespent <span style="color: #66cc66;">&lt;</span> <span style="color: #66cc66;">=</span> <span style="color: #ff4500;">0</span> <span style="color: #ff7700;font-weight:bold;">and</span> timelogged <span style="color: #66cc66;">==</span> <span style="color: #008000;">False</span>:
    result <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span>
    description <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Please log the time you spent on this ticket.&quot;</span></pre></td></tr></table></div>

<h3>Assign Unassigned Issue to User</h3>
<p>This helps make sure tickets get assigned.</p>
</pre>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;"># -*- coding: UTF-8 -*-</span>
<span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span> <span style="color: #ff7700;font-weight:bold;">import</span> ComponentManager
&nbsp;
assignee <span style="color: #66cc66;">=</span> issue.<span style="color: black;">getAssignee</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #dc143c;">user</span> <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getJiraAuthenticationContext</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getUser</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> issue.<span style="color: black;">getAssignee</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    issue.<span style="color: black;">setAssignee</span><span style="color: black;">&#40;</span>ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getJiraAuthenticationContext</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getUser</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<h3>Validate Custom Field Value</h3>
<p>We have a particular custom field which can be set UNKNOWN by the Reporter, but which should be cleaned up by the Assignee.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff7700;font-weight:bold;">from</span> com.<span style="color: black;">atlassian</span>.<span style="color: black;">jira</span> <span style="color: #ff7700;font-weight:bold;">import</span> ComponentManager
&nbsp;
cfm <span style="color: #66cc66;">=</span> ComponentManager.<span style="color: black;">getInstance</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>.<span style="color: black;">getCustomFieldManager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
product <span style="color: #66cc66;">=</span> issue.<span style="color: black;">getCustomFieldValue</span><span style="color: black;">&#40;</span>cfm.<span style="color: black;">getCustomFieldObject</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'customfield_12345'</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> product <span style="color: #66cc66;">==</span> <span style="color: #483d8b;">'UNKNOWN'</span>:
    result <span style="color: #66cc66;">=</span> <span style="color: #008000;">False</span>
    description <span style="color: #66cc66;">=</span> <span style="color: #483d8b;">&quot;Please set CUSTOM_FIELD value appropriately.&quot;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/09/25/jython-validator-cookbook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Smoothing Out Fonts on kubuntu-desktop</title>
		<link>http://dannyman.toldme.com/2012/09/13/make-kubuntu-kde-fonts-pretty/</link>
		<comments>http://dannyman.toldme.com/2012/09/13/make-kubuntu-kde-fonts-pretty/#comments</comments>
		<pubDate>Thu, 13 Sep 2012 03:11:10 +0000</pubDate>
		<dc:creator>dannyman</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sundry]]></category>
		<category><![CDATA[Technical]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Testimonials]]></category>

		<guid isPermaLink="false">http://dannyman.toldme.com/?p=6743</guid>
		<description><![CDATA[So, I really like <a href="http://www.ubuntu.com/">Ubuntu</a>.  Its Linux and it just mostly works.  Except when they try to force everyone into some experimental new desktop environment. ]]></description>
				<content:encoded><![CDATA[<p>So, I really like <a href="http://www.ubuntu.com/">Ubuntu</a>.  Its Linux and it just mostly works.  Except when they try to force everyone into some experimental new desktop environment.  That is pretty awful, but I&#8217;m happy again now that I switched to kubuntu-desktop.  (<code>apt-get install kubuntu-desktop</code>)</p>
<p><a href="http://www.kubuntu.org/">Kubuntu</a> is Ubuntu with a nicely set-up KDE environment.  They try to get you to use their own home-grown web browser, and the file manager takes some getting used to, but you can pretty quickly get under the hood, set up all your little window manager preferences, and get back to jamming.  (Focus Follows Mouse in my house!)</p>
<p>The only thing that was missing is the fonts were rendering . . . not as pretty as regular Ubuntu.  Kubuntu is set up to use the Ubuntu font, but in KDE things render kind of pixelly looking, like I was still in the 90s.  A bit of searching and they seem to look nicer:</p>
<p>System Settings > Application Appearance > Fonts<br />
Use anti-aliasing: Enabled<br />
Configure&#8230;<br />
Use sub-pixel rendering: RGB<br />
Hinting style: Slight</p>
<p>Now things feel a little more 21st century.</p>
]]></content:encoded>
			<wfw:commentRss>http://dannyman.toldme.com/2012/09/13/make-kubuntu-kde-fonts-pretty/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using disk: enhanced
Database Caching 20/31 queries in 0.033 seconds using disk: basic
Object Caching 1098/1263 objects using disk: basic

 Served from: dannyman.toldme.com @ 2013-05-25 22:01:04 by W3 Total Cache -->