<?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>David Simpson</title>
	<atom:link href="https://davidsimpson.me/feed/" rel="self" type="application/rss+xml" />
	<link>https://davidsimpson.me</link>
	<description>Developing the web. One page at a time.</description>
	<lastBuildDate>Mon, 14 Nov 2016 22:44:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.2.2</generator>
	<item>
		<title>Deleting remote git tags</title>
		<link>https://davidsimpson.me/2016/09/12/deleting-remote-git-tags/?pk_campaign=feed&#038;pk_kwd=deleting-remote-git-tags</link>
		<comments>https://davidsimpson.me/2016/09/12/deleting-remote-git-tags/?pk_campaign=feed&#038;pk_kwd=deleting-remote-git-tags#comments</comments>
		<pubDate>Mon, 12 Sep 2016 21:10:05 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[note to self]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3399</guid>
		<description><![CDATA[<p>A reminder for when you really want to destroy a whole bunch of stuff&#8230; Find out what tags you have locally: Delete them all: Push all those deletes to the remote system: That&#8217;s it. Destruction complete.<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F09%2F12%2Fdeleting-remote-git-tags%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Ddeleting-remote-git-tags&amp;action_name=Deleting+remote+git+tags&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/09/12/deleting-remote-git-tags/?pk_campaign=feed&#038;pk_kwd=deleting-remote-git-tags">Deleting remote git tags</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>A reminder for when you really want to destroy a whole bunch of stuff&#8230;</p>
<p>Find out what tags you have locally:</p>
<pre class="brush: plain; title: ; notranslate">
david$ git tag
v1.0.0
v1.0.1
v1.1.0
v1.1.1
v1.1.2
v1.2.0
</pre>
<p>Delete them all:</p>
<pre class="brush: plain; title: ; notranslate">
david$ git tag -dv1.0.0 v1.0.1 v1.1.0 v1.1.1 v1.1.2 v1.2.0
</pre>
<p>Push all those deletes to the remote system:</p>
<pre class="brush: plain; title: ; notranslate">
david$ git push origin :refs/tags/v1.0.0
david$ git push origin :refs/tags/v1.0.1
david$ git push origin :refs/tags/v1.1.0
david$ git push origin :refs/tags/v1.1.1
david$ git push origin :refs/tags/v1.1.2
david$ git push origin :refs/tags/v1.2.0
</pre>
<p>That&#8217;s it. Destruction complete.</p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F09%2F12%2Fdeleting-remote-git-tags%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Ddeleting-remote-git-tags&amp;action_name=Deleting+remote+git+tags&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/09/12/deleting-remote-git-tags/?pk_campaign=feed&#038;pk_kwd=deleting-remote-git-tags">Deleting remote git tags</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2016/09/12/deleting-remote-git-tags/?pk_campaign=feed&#038;pk_kwd=deleting-remote-git-tags/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to join multiple mp4 files together using ffmpeg on OS X</title>
		<link>https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x</link>
		<comments>https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x#comments</comments>
		<pubDate>Mon, 11 Apr 2016 08:27:10 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3386</guid>
		<description><![CDATA[<p>Sometimes I need to concatenate several mp4 files together. ffmpeg is a good tool for this job. On OSX, it&#8217;s easy to install using Homebrew: If you have MP4 files, these could be losslessly concatenated by first transcoding them to mpeg transport streams. Source &#8211; https://trac.ffmpeg.org/wiki/Concatenate Say we have 2 mp4 files to concatenate or... <a class="moretag" href="https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F04%2F11%2Fhow-to-join-multiple-mp4-files-together-on-os-x%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dhow-to-join-multiple-mp4-files-together-on-os-x&amp;action_name=How+to+join+multiple+mp4+files+together+using+ffmpeg+on+OS+X&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x">How to join multiple mp4 files together using ffmpeg on OS X</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Sometimes I need to concatenate several mp4 files together. <a href="https://www.ffmpeg.org/">ffmpeg</a> is a good tool for this job.</p>
<p>On OSX, it&#8217;s easy to install using <a href="http://brew.sh/">Homebrew</a>:</p>
<pre class="brush: plain; title: ; notranslate">brew install ffmpeg</pre>
<blockquote><p>
If you have MP4 files, these could be losslessly concatenated by first transcoding them to mpeg transport streams.<br />
<em>Source &ndash; <a href="https://trac.ffmpeg.org/wiki/Concatenate">https://trac.ffmpeg.org/wiki/Concatenate</a></em>
</p></blockquote>
<p>Say we have 2 mp4 files to concatenate or join together, first we transcode each of these into an intermediate format:</p>
<pre class="brush: plain; title: ; notranslate">
ffmpeg -i input1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate1.ts
ffmpeg -i input2.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts intermediate2.ts
</pre>
<p>After that we can concatenate these together using the following:</p>
<pre class="brush: plain; title: ; notranslate">
ffmpeg -i &quot;concat:intermediate1.ts|intermediate2.ts&quot; -c copy -bsf:a aac_adtstoasc output.mp4
</pre>
<p>For more file, just piple separate the additional files here: <code>"concat:intermediate1.ts|intermediate2.ts"</code></p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F04%2F11%2Fhow-to-join-multiple-mp4-files-together-on-os-x%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dhow-to-join-multiple-mp4-files-together-on-os-x&amp;action_name=How+to+join+multiple+mp4+files+together+using+ffmpeg+on+OS+X&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x">How to join multiple mp4 files together using ffmpeg on OS X</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2016/04/11/how-to-join-multiple-mp4-files-together-on-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-join-multiple-mp4-files-together-on-os-x/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>IBM Connect 2016: 1402 &#8211; Getting Technically Cozy with IBM Connections Cloud APIs and App Dev</title>
		<link>https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev</link>
		<comments>https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev#comments</comments>
		<pubDate>Tue, 09 Feb 2016 10:39:18 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Programming]]></category>
		<category><![CDATA[Social Business]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[activity streams]]></category>
		<category><![CDATA[APIs]]></category>
		<category><![CDATA[ibm connect]]></category>
		<category><![CDATA[ibm connections]]></category>
		<category><![CDATA[ibm connections cloud]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3362</guid>
		<description><![CDATA[<p>Last week, whilst at IBM Connect 2016 in Orlando, Florida, I gave a presentation with Patrick Li from AppFusions. The slides from the presentation are below: IBM Connect 2016: 1402 &#8211; Getting Technically Cozy with IBM Connections Cloud APIs and App Dev from David Simpson The full code examples from the presentation are hosted on... <a class="moretag" href="https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F02%2F09%2Fibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev&amp;action_name=IBM+Connect+2016%3A+1402+%26%238211%3B+Getting+Technically+Cozy+with+IBM+Connections+Cloud+APIs+and+App+Dev&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev">IBM Connect 2016: 1402 &#8211; Getting Technically Cozy with IBM Connections Cloud APIs and App Dev</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Last week, whilst at IBM Connect 2016 in Orlando, Florida, I gave a presentation with <a href="https://twitter.com/patrickli">Patrick Li</a> from <a href="//www.appfusions.com/">AppFusions</a>. The slides from the presentation are below:</p>
<style>
.embed-container { position: relative; padding-bottom: 65.5%; height: 0; overflow: hidden; max-width: 100%; margin-bottom: 10px; } 
.embed-container iframe { border: 1px solid #000; }
.embed-container iframe, .embed-container object, .embed-container embed { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }</style>
<div class='embed-container'>
<iframe src="//www.slideshare.net/slideshow/embed_code/key/6baiUINmpmzRrB" allowfullscreen> </iframe> </p>
<div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/dvdsmpsn/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev" title="IBM Connect 2016: 1402 - Getting Technically Cozy with IBM Connections Cloud APIs and App Dev" target="_blank">IBM Connect 2016: 1402 &#8211; Getting Technically Cozy with IBM Connections Cloud APIs and App Dev</a> </strong> from <strong><a href="//www.slideshare.net/dvdsmpsn" target="_blank">David Simpson</a></strong> </div>
</div>
<p>The full code examples from the presentation are hosted on GitHub here:<br />
<a href="https://github.com/dvdsmpsn/ibm-connect-2016-examples/">https://github.com/dvdsmpsn/ibm-connect-2016-examples/</a></p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F02%2F09%2Fibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev&amp;action_name=IBM+Connect+2016%3A+1402+%26%238211%3B+Getting+Technically+Cozy+with+IBM+Connections+Cloud+APIs+and+App+Dev&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev">IBM Connect 2016: 1402 &#8211; Getting Technically Cozy with IBM Connections Cloud APIs and App Dev</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2016/02/09/ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/?pk_campaign=feed&#038;pk_kwd=ibm-connect-2016-1402-getting-technically-cozy-with-ibm-connections-cloud-apis-and-app-dev/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Push speed test results from OpenWRT to Google Sheets</title>
		<link>https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets</link>
		<comments>https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets#comments</comments>
		<pubDate>Fri, 05 Feb 2016 20:16:33 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3350</guid>
		<description><![CDATA[<p>I recently read Use Raspberry Pi to Measure Broadband Speeds to Hold Your ISP Accountable on Make and realised that this was an excellent candidate for monitoring my somewhat unstable Virgin Media connection. I use an OpenWRT router (running a VPN to add a little bit of privacy), so I could adapt the article to... <a class="moretag" href="https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F02%2F05%2Fpush-speed-test-results-from-openwrt-to-google-sheets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dpush-speed-test-results-from-openwrt-to-google-sheets&amp;action_name=Push+speed+test+results+from+OpenWRT+to+Google+Sheets&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets">Push speed test results from OpenWRT to Google Sheets</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>I recently read <a href="http://makezine.com/projects/send-ticket-isp-when-your-internet-drops/">Use Raspberry Pi to Measure Broadband Speeds to Hold Your ISP Accountable</a> on <a href="http://makezine.com/">Make</a> and realised that this was an excellent candidate for monitoring my somewhat unstable Virgin Media connection.</p>
<p>I use an OpenWRT router (running a VPN to add a little bit of privacy), so I could adapt the article to run on the router rather than an attached Raspberry Pi.</p>
<p>Here are the steps adapted for OpenWRT&#8230;<br />
<span id="more-3350"></span></p>
<p>OpenWRT uses <code>opkg</code> rather than <code>apt-get</code>, so that is used throughout as a replacement.</p>
<p>Install <code>pip</code> &#8212; a packaging manager for Python and the <code>speedtest-cli</code> package from the <code>pip</code> repositories.</p>
<pre class="brush: plain; title: ; notranslate">opkg install python-pip
pip install speedtest-cli
</pre>
<p>Test out the installed package:</p>
<pre class="brush: plain; title: ; notranslate">root@OpenWrt:~# speedtest-cli
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Virgin Media (x.x.x.x)...
Selecting best server based on latency...
Hosted by Virgin Media (Nottingham) [2.68 km]: 20.29 ms
Testing download speed........................................
Download: 156.39 Mbit/s
Testing upload speed..................................................
Upload: 9.84 Mbit/s
</pre>
<p>So far so good.</p>
<p>Next, we need to run the following script. I&#8217;ve saved it at <code>/root/bin/speedtest-ifttt.sh</code></p>
<p><script src="https://gist.github.com/dvdsmpsn/2021b5c68b09d2002f4e.js"></script></p>
<p>Update <code>log=/tmp/$user/speedtest-csv.log</code> to <code>log=/$user/tmp/speedtest-csv.log</code></p>
<p>Add the key to line 82</p>
<pre class="brush: plain; title: ; notranslate">secret_key=&quot;SECRET_KEY&quot;
</pre>
<p>OOTB, OpenWRT doesn&#8217;t have bash or curl, so install that too:</p>
<pre class="brush: plain; title: ; notranslate">opkg install bash curl
</pre>
<p>Make a directory to save the temperary file:</p>
<pre class="brush: plain; title: ; notranslate">mkdir ~/tmp
</pre>
<p>Add execute permission:</p>
<pre class="brush: plain; title: ; notranslate">chmox +x /root/bin/speedtest-ifttt.sh
</pre>
<p>Now, run the file once &amp; see if it creates a Google Sheet and saves details to the sheet</p>
<pre class="brush: plain; title: ; notranslate">/root/bin/speedtest-ifttt.sh
</pre>
<p>If all is good, add this to the <code>cron</code> job and sit back:</p>
<pre class="brush: plain; title: ; notranslate">crontab -e
15,45 * * * * /root/bin/speedtest-ifttt.sh
</pre>
<p>Right now, I&#8217;m measuring the speed every 30 minutes at 15, 45 mins past the hour. This can be changed to be run more frequently, as required.</p>
<p>At this point, I created a chart in the Sheet so that I could view the data being collected.</p>
<p>Here are the results so far:</p>
<p><iframe width="100%" height="400" style="border: 1px solid #eee; border-radius: 5px;" src="https://docs.google.com/spreadsheets/d/1Dk3LJS4Qqs-bc7diTJfREb5KRF1ohO7G_z8_hVu7fkI/pubchart?oid=31045440&amp;format=interactive"></iframe></p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2016%2F02%2F05%2Fpush-speed-test-results-from-openwrt-to-google-sheets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dpush-speed-test-results-from-openwrt-to-google-sheets&amp;action_name=Push+speed+test+results+from+OpenWRT+to+Google+Sheets&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets">Push speed test results from OpenWRT to Google Sheets</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2016/02/05/push-speed-test-results-from-openwrt-to-google-sheets/?pk_campaign=feed&#038;pk_kwd=push-speed-test-results-from-openwrt-to-google-sheets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adding styles to the Confluence editor</title>
		<link>https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor</link>
		<comments>https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor#comments</comments>
		<pubDate>Wed, 25 Nov 2015 11:06:16 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3064</guid>
		<description><![CDATA[<p>I&#8217;ve tried to add styles to the Confluence editor. It wouldn&#8217;t take them. Perhaps one of Atlassian&#8217;s values is &#8220;Don&#8217;t f@@k the editor&#8221;. My confluence-editor.css styles just wouldn&#8217;t be accepted. Javascript injection worked just fine though. Perhaps I could use JS to inject my styles? Yup. Adding this to my editor-templates.js file worked a treat:... <a class="moretag" href="https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F25%2Fadding-styles-confluence-editor%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dadding-styles-confluence-editor&amp;action_name=Adding+styles+to+the+Confluence+editor&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor">Adding styles to the Confluence editor</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve tried to add styles to the Confluence editor. It wouldn&#8217;t take them. Perhaps one of Atlassian&#8217;s values is &#8220;Don&#8217;t f@@k the editor&#8221;.</p>
<pre class="brush: plain; title: ; notranslate">
&lt;web-resource name=&quot;editor-scripts&quot; key=&quot;editor-scripts&quot;&gt;
  &lt;resource name=&quot;editor-templates.js&quot; type=&quot;download&quot; 
    location=&quot;assets/js/editor-templates.js&quot; /&gt;
  &lt;!-- // TODO: Check whether I need a context here --&gt;
&lt;/web-resource&gt;

&lt;web-resource name=&quot;editor-styles&quot; key=&quot;editor-styles&quot;&gt;
  &lt;resource name=&quot;css/confluence-editor.css&quot; type=&quot;download&quot; 
    location=&quot;assets/css/confluence-editor.css&quot;/&gt;
  
  &lt;dependency&gt;com.atlassian.confluence.plugins:confluence-editor-plugins&lt;/dependency&gt;
  &lt;dependency&gt;${project.groupId}.${project.artifactId}:editor-scripts&lt;/dependency&gt;
  &lt;dependency&gt;com.atlassian.auiplugin:ajs&lt;/dependency&gt;
  &lt;context&gt;editor&lt;/context&gt;
  &lt;!-- // TODO: Check whether I need all the dependencies here --&gt;
&lt;/web-resource&gt;
</pre>
<p>My <code>confluence-editor.css</code> styles just wouldn&#8217;t be accepted. Javascript injection worked just fine though. Perhaps I could use JS to inject my styles?</p>
<p>Yup. Adding this to my <code>editor-templates.js</code> file worked a treat:</p>
<pre class="brush: plain; title: ; notranslate">
var editorCss = AJS.params.staticResourceUrlPrefix 
  + '/download/resources/me.davidsimpson.confluence.addon.awesome-addon'
  + ':editor-styles/css/confluence-editor.css';

if (AJS.params.isDevMode) {
  editorCss = editorCss + '?_=' + Date.now();
}

$('#wysiwygTextarea_ifr').contents().find('head').append(
  '&lt;link type=&quot;text/css&quot; rel=&quot;stylesheet&quot; href=&quot;' + editorCss + '&quot; media=&quot;all&quot;&gt;'
);
</pre>
<p>Note the cache busting timestamp for local development.</p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F25%2Fadding-styles-confluence-editor%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dadding-styles-confluence-editor&amp;action_name=Adding+styles+to+the+Confluence+editor&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor">Adding styles to the Confluence editor</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/11/25/adding-styles-confluence-editor/?pk_campaign=feed&#038;pk_kwd=adding-styles-confluence-editor/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Why is my machine contacting all-systems.mcast.net?</title>
		<link>https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net</link>
		<comments>https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net#comments</comments>
		<pubDate>Mon, 16 Nov 2015 00:03:16 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3335</guid>
		<description><![CDATA[<p>I&#8217;ve been looking at the network traffic and noticed a lot of calls from one machine to an address I&#8217;d never heard of: all-systems.mcast.net Information on this seemed somewhat sketchy until I spotted this page on Multicast Addresses ALL-SYSTEMS.MCAST.NET 224.0.0.1 All systems on the local subnet. What? All the machines on my local network? Really?... <a class="moretag" href="https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F16%2Fwhy-is-my-machine-contacting-all-systems-mcast-net%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dwhy-is-my-machine-contacting-all-systems-mcast-net&amp;action_name=Why+is+my+machine+contacting+all-systems.mcast.net%3F&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net">Why is my machine contacting all-systems.mcast.net?</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>I&#8217;ve been looking at the network traffic and noticed a lot of calls from one machine to an address I&#8217;d never heard of: <code>all-systems.mcast.net</code></p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/Screen-Shot-2015-11-16-at-00.59.42.png"><img src="https://davidsimpson.me/wp-content/uploads/2015/11/Screen-Shot-2015-11-16-at-00.59.42.png" alt="Screen Shot 2015-11-16 at 00.59.42" width="1011" height="603" class="alignnone size-full wp-image-3336" /></a></p>
<p>Information on this seemed somewhat sketchy until I spotted this page on <a href="http://distrosys.wikia.com/wiki/Multicast_Addresses">Multicast Addresses</a></p>
<blockquote><p>
ALL-SYSTEMS.MCAST.NET<br />
224.0.0.1 All systems on the local subnet.
</p></blockquote>
<p>What? All the machines on my local network? Really?</p>
<p>Pinging it confirmed this:</p>
<pre class="brush: plain; title: ; notranslate">
$ ping all-systems.mcast.net
PING all-systems.mcast.net (224.0.0.1): 56 data bytes
64 bytes from 192.168.1.136: icmp_seq=0 ttl=64 time=0.103 ms
64 bytes from 192.168.1.153: icmp_seq=0 ttl=64 time=14.788 ms
64 bytes from 192.168.1.120: icmp_seq=0 ttl=64 time=239.376 ms
64 bytes from 192.168.1.162: icmp_seq=0 ttl=64 time=256.191 ms
...
64 bytes from 192.168.1.119: icmp_seq=1 ttl=64 time=50.762 ms
</pre>
<p>The machine accessing <code>all-systems.mcast.net</code> is running a DLNA server, so it appears to be broadcasting its presence to all the machines on the local network. Panic over.</p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F16%2Fwhy-is-my-machine-contacting-all-systems-mcast-net%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dwhy-is-my-machine-contacting-all-systems-mcast-net&amp;action_name=Why+is+my+machine+contacting+all-systems.mcast.net%3F&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net">Why is my machine contacting all-systems.mcast.net?</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/11/16/why-is-my-machine-contacting-all-systems-mcast-net/?pk_campaign=feed&#038;pk_kwd=why-is-my-machine-contacting-all-systems-mcast-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Installing OpenWRT on a Linksys WRT1900ACS</title>
		<link>https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs</link>
		<comments>https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs#comments</comments>
		<pubDate>Sat, 14 Nov 2015 23:24:47 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3309</guid>
		<description><![CDATA[<p>Linksys recently released their WRT1900ACS router. Linksys said it collaborated with Marvell andOpenWrt.org to ensure full open source support in the latest version of OpenWrt&#8217;s Chaos Calmer release (15.05) at launch. I&#8217;ve not seen many OpenWRT compatible routers on the market in the UK, so my interest was piqued. It seems like a decent (though... <a class="moretag" href="https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F14%2Finstalling-openwrt-on-a-linksys-wrt1900acs%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dinstalling-openwrt-on-a-linksys-wrt1900acs&amp;action_name=Installing+OpenWRT+on+a+Linksys+WRT1900ACS&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs">Installing OpenWRT on a Linksys WRT1900ACS</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Linksys recently released their <a href="http://www.linksys.com/gb/p/P-WRT1900ACS/">WRT1900ACS</a> router. Linksys said it <a href="https://lwn.net/Articles/660229/">collaborated with Marvell andOpenWrt.org to ensure full open source support</a> in the latest version of <a href="http://wiki.openwrt.org/toh/linksys/wrt1900acs">OpenWrt&#8217;s Chaos Calmer release</a> (15.05) at launch. I&#8217;ve not seen many OpenWRT compatible routers on the market in the UK, so my interest was piqued. It seems like a decent (though expensive) router, so I thought I&#8217;d give it a go and install OpenWRT.</p>
<p>The <a href="http://wiki.openwrt.org/toh/linksys/wrt1900acs">WRT1900ACS page</a> on the OpenWRT wiki was a little vague about which version of the firmware to install, but stated that the router had Marvell Armada 385 &amp; Shelby hardware, so I used the <a href="https://downloads.openwrt.org/snapshots/trunk/mvebu/generic/openwrt-mvebu-armada-385-linksys-shelby-squashfs-factory.img">openwrt-mvebu-armada-385-linksys-shelby-squashfs-factory.img</a> image to flash the firmware. This worked, so I&#8217;ve document it here for others.</p>
<p>This merely documents what worked for me. If you brick your router following these instructions, I&#8217;m sorry, but you do so at your own risk.</p>
<h2>Installing OpenWRT</h2>
<p>Download the OpenWRT firmware: <a href="https://downloads.openwrt.org/snapshots/trunk/mvebu/generic/openwrt-mvebu-armada-385-linksys-shelby-squashfs-factory.img">openwrt-mvebu-armada-385-linksys-shelby-squashfs-factory.img</a></p>
<p>Connect to the router with the supplied network cable.</p>
<p>Login to <a href="http://192.168.1.1/">http://192.168.1.1/</a>. The password is <code>admin</code>. Don&#8217;t use the setup wizard. Specify manual setup.</p>
<p>Browse to <strong>Connectivity</strong> and in <strong>Router Firmware Update</strong> click on <strong>Manual &gt; Select File</strong></p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-1.png"><img class="alignnone size-full wp-image-3316" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-1.png" alt="linksys-1" width="1801" height="1342" /></a></p>
<p>Select the previously downloaded <strong>openwrt-mvebu-armada-385-linksys-shelby-squashfs-factor.img</strong>, then click on <strong>Start</strong>.</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-2.png"><img class="alignnone size-full wp-image-3315" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-2.png" alt="linksys-2" width="1801" height="1342" /></a></p>
<p>Click on <strong>Yes</strong> in the <strong>Unrecognized file name</strong> modal:</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-3.png"><img class="alignnone size-full wp-image-3314" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-3.png" alt="linksys-3" width="1801" height="1342" /></a></p>
<p>Click on <strong>Yes</strong> in the <strong>Update firmware</strong> modal:</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-4.png"><img class="alignnone size-full wp-image-3313" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-4.png" alt="linksys-4" width="1801" height="1342" /></a></p>
<p>Click on <strong>OK</strong> in the <strong>Reboot Router</strong> modal:</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-5.png"><img class="alignnone size-full wp-image-3312" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-5.png" alt="linksys-5" width="1801" height="1342" /></a></p>
<p>Almost immediately, you&#8217;ll be able to browse to <a href="http://192.168.1.1">http://192.168.1.1</a> and see that OpenWrt has been installed:</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-6.png"><img class="alignnone size-full wp-image-3311" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-6.png" alt="linksys-6" width="964" height="723" /></a></p>
<p>It should ask you to set a password at this point. (I forgot to get a screenshot of that).</p>
<p>By default, the wifi is disabled, but it&#8217;s really straightforward to enable and secure in the admin UI.</p>
<p>You&#8217;ll also be able to <code>ssh</code> into your router. This is where the fun begins&#8230;</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-7_.png"><img class="alignnone size-full wp-image-3310" src="https://davidsimpson.me/wp-content/uploads/2015/11/linksys-7_.png" alt="linksys-7" width="782" height="494" /></a></p>
<h2>Secure your internet access with a VPN</h2>
<p>The next sensible step is to setup your VPN connection. I use <a href="https://www.privateinternetaccess.com">Private Internet Access</a> as my VPN provider, so my <a href="https://github.com/dvdsmpsn/privateinternetaccess-on-openwrt/blob/master/README.md">VPN setup is tailored to PIA</a>. This is incredibly easy to configure, thanks to previous work by <a href="https://www.loganmarchione.com/2014/10/openwrt-with-openvpn-client-on-tp-link-tl-mr3020/">Logan Marchione</a> and <a href="https://github.com/andrewbrereton/privateinternetaccess-on-openwrt">Andrew Brereton</a>.</p>
<p><a href="https://github.com/dvdsmpsn/privateinternetaccess-on-openwrt/blob/master/README.md">Follow the script</a> and you&#8217;ll be done in a couple of minutes.</p>
<h2>Reboot nightly</h2>
<p>Sometimes it&#8217;s best to just restart regularly. Here&#8217;s how:</p>
<p>Start &amp; enable cron as it&#8217;s not enabled by default.</p>
<pre class="brush: plain; title: ; notranslate">
/etc/init.d/cron start
/etc/init.d/cron enable
</pre>
<p>Add this line to the crontab to reboot every day at 3am:</p>
<pre class="brush: plain; title: ; notranslate">
0 3 * * * * reboot
</pre>
<h2>Save your eyes, enable the Bootstrap theme</h2>
<p>One last thing, go into <strong>System | System | Language and Styles</strong> and enable the Bootstrap theme. It means that your admin UI is no longer an eyesore.</p>
<p>It turns this:</p>
<p><a href="https://davidsimpson.me/wp-content/uploads/2015/11/Screen-Shot-2015-11-16-at-00.30.14.png"><img class="alignnone size-full wp-image-3333" src="https://davidsimpson.me/wp-content/uploads/2015/11/Screen-Shot-2015-11-16-at-00.30.14.png" alt="Screen Shot 2015-11-16 at 00.30.14" width="1104" height="835" /></a></p>
<p>Into this:</p>
<p><img class="alignnone size-full wp-image-3332" src="https://davidsimpson.me/wp-content/uploads/2015/11/Screen-Shot-2015-11-16-at-00.32.48.png" alt="Screen Shot 2015-11-16 at 00.32.48" width="1228" height="951" /></p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F11%2F14%2Finstalling-openwrt-on-a-linksys-wrt1900acs%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dinstalling-openwrt-on-a-linksys-wrt1900acs&amp;action_name=Installing+OpenWRT+on+a+Linksys+WRT1900ACS&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs">Installing OpenWRT on a Linksys WRT1900ACS</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/11/14/installing-openwrt-on-a-linksys-wrt1900acs/?pk_campaign=feed&#038;pk_kwd=installing-openwrt-on-a-linksys-wrt1900acs/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Separation of concerns for JIRA gadgets</title>
		<link>https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets</link>
		<comments>https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets#comments</comments>
		<pubDate>Fri, 16 Oct 2015 19:43:48 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[web]]></category>
		<category><![CDATA[atlassian]]></category>
		<category><![CDATA[atlassian plugin sdk]]></category>
		<category><![CDATA[JIRA]]></category>
		<category><![CDATA[opensocial]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3300</guid>
		<description><![CDATA[<p>This blog post started out as an answer to a Stack Overflow question. For my gadgets, I separate out all the XML, HTML, JavaScript and CSS from the atlassian-plugin.xml. The setup is initially more complex, but once you&#8217;ve got this correct, the separation of concerns is much nicer than mangling everything into the atlassian-plugin.xml file.... <a class="moretag" href="https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F10%2F16%2Fseparation-of-concerns-for-jira-gadgets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dseparation-of-concerns-for-jira-gadgets&amp;action_name=Separation+of+concerns+for+JIRA+gadgets&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets">Separation of concerns for JIRA gadgets</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>This blog post started out as an answer to a <a href="http://stackoverflow.com/a/27178827/1958200">Stack Overflow question</a>.</p>
<p>For my gadgets, I separate out all the XML, HTML, JavaScript and CSS from the <code>atlassian-plugin.xml</code>.</p>
<p>The setup is initially more complex, but once you&#8217;ve got this correct, the separation of concerns is much nicer than mangling everything into the <code>atlassian-plugin.xml</code> file.</p>
<p>The relative paths on the other hand do indeed look crazy.</p>
<p>My file system looks like this:</p>
<pre class="brush: plain; title: ; notranslate">
- resources/
    - gadgets/
        - css/
            - example.css
        - html/
            - example.html
        - js/
            - example.js
        - examaple-gadget.xml
    - atlassian-plugin.xml
</pre>
<p>In <code>/resources/atlassian-plugin.xml</code>:</p>
<pre class="brush: plain; title: ; notranslate">
&lt;!-- add our web resources --&gt;
&lt;web-resource key=&quot;${project.artifactId}-resources&quot; name=&quot;${project.artifactId} Web Resources&quot;&gt;
  &lt;dependency&gt;com.atlassian.auiplugin:ajs&lt;/dependency&gt;
  &lt;resource type=&quot;download&quot; name=&quot;example-gadgets/&quot; location=&quot;/gadgets&quot;/&gt;
  &lt;context&gt;immersive-for-connections&lt;/context&gt;
&lt;/web-resource&gt;

&lt;gadget name=&quot;Example JIRA Gadget&quot; i18n-name-key=&quot;example-jira-gadget.name&quot; 
        key=&quot;example-jira-gadget&quot; location=&quot;gadgets/example-gadget.xml&quot;&gt;
  &lt;!--
    hosted at: 
    /rest/gadgets/1.0/g/${project.groupId}.${project.artifactId}:example-gadgets/gadgets/example-gadget.xml
  --&gt;
  &lt;description key=&quot;jira-query-gadget.description&quot;&gt;The JIRA Query Gadget Plugin&lt;/description&gt;
&lt;/gadget&gt;
</pre>
<p>In <code>/resources/gadgets/example-gadget.xml</code> (replace $<code>{project.artifactId}</code> &amp; <code>${project.groupId}</code> with the correct value):</p>
<pre class="brush: plain; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&gt;
&lt;Module&gt;
  ...
  &lt;Content type=&quot;html&quot; view=&quot;example.view&quot; preferred_width=&quot;100%&quot; 
    href=&quot;../../../../../../download/resources/${project.groupId}.${project.artifactId}:${project.artifactId}-resources/gadgets/html/example.html&quot;/&gt;
&lt;/Module&gt;
</pre>
<p>In <code>/resources/gadgets/html/example.html</code> (replace $<code>{project.artifactId}</code> &amp; <code>${project.groupId}</code> with the correct value):</p>
<pre class="brush: plain; title: ; notranslate">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    ...
    &lt;link href=&quot;../../../../../../download/resources/${project.groupId}.${project.artifactId}:${project.artifactId}-resources/gadgets/css/example.css&quot; 
      type=&quot;text/css&quot; rel=&quot;stylesheet&quot;&gt;
    &lt;script src=&quot;../../../../../../download/resources/${project.groupId}.${project.artifactId}:${project.artifactId}-resources/gadgets/js/example.js&quot;&gt;
    &lt;/script&gt;
  &lt;/head&gt;
  &lt;body&gt;
    ...
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>From this somewhat excessing starting point, you&#8217;ll have content, behaviour and styles completely separated. If that floats your boat, then you&#8217;ll be happy.</p>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F10%2F16%2Fseparation-of-concerns-for-jira-gadgets%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dseparation-of-concerns-for-jira-gadgets&amp;action_name=Separation+of+concerns+for+JIRA+gadgets&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets">Separation of concerns for JIRA gadgets</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/10/16/separation-of-concerns-for-jira-gadgets/?pk_campaign=feed&#038;pk_kwd=separation-of-concerns-for-jira-gadgets/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A JSFiddle Macro for Atlassian Confluence</title>
		<link>https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence</link>
		<comments>https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence#comments</comments>
		<pubDate>Thu, 10 Sep 2015 21:42:46 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3283</guid>
		<description><![CDATA[<p>Today I had the need for a macro to embed a JSFiddle in Atlassian Confluence. I checked, none exist. No matter. I forked Gister: GitHub Gist Macro for Confluence, changed some code and few minutes later got this: It seems to work nicely. If you want it, get it here If it doesn&#8217;t work, post... <a class="moretag" href="https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F09%2F10%2Fa-jsfiddle-macro-for-atlassian-confluence%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Da-jsfiddle-macro-for-atlassian-confluence&amp;action_name=A+JSFiddle+Macro+for+Atlassian+Confluence&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence">A JSFiddle Macro for Atlassian Confluence</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>Today I had the need for a macro to embed a <a href="https://jsfiddle.net/">JSFiddle</a> in Atlassian Confluence. I checked, none exist.</p>
<p>No matter. I forked <a href="https://marketplace.atlassian.com/plugins/me.davidsimpson.confluence.addon.gister">Gister: GitHub Gist Macro for Confluence</a>, changed some code and few minutes later got this:</p>
<p><iframe style="min-height: 600px" width="100%" height="600" src="https://www.youtube.com/embed/8xrWRItFsmY" frameborder="0" allowfullscreen></iframe></p>
<p>It seems to work nicely.</p>
<ul>
<li>If you want it, get it <a href="https://dl.dropboxusercontent.com/u/658119/davidsimpson.me/jsfiddle-0.1.jar">here</a></li>
<li>If it doesn&#8217;t work, <a href="https://bitbucket.org/dvdsmpsn/jsfiddle-macro-for-confluence-server/issues?status=new&#038;status=open">post an issue</a></li>
<li>If you like it, leave a comment &#038; say so. Or buy me a pot of tea:<br />
<form style="inline;" action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top"><input type="hidden" name="cmd" value="_s-xclick"><input type="hidden" name="hosted_button_id" value="47SSZXRKTN6FJ"><input type="image" src="https://www.paypalobjects.com/en_GB/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal – The safer, easier way to pay online."><img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"></form>
</li>
</ul>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F09%2F10%2Fa-jsfiddle-macro-for-atlassian-confluence%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Da-jsfiddle-macro-for-atlassian-confluence&amp;action_name=A+JSFiddle+Macro+for+Atlassian+Confluence&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence">A JSFiddle Macro for Atlassian Confluence</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/09/10/a-jsfiddle-macro-for-atlassian-confluence/?pk_campaign=feed&#038;pk_kwd=a-jsfiddle-macro-for-atlassian-confluence/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>How to format a disk to FAT32 on a Mac / OS X</title>
		<link>https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x</link>
		<comments>https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x#comments</comments>
		<pubDate>Tue, 01 Sep 2015 08:08:47 +0000</pubDate>
		<dc:creator><![CDATA[David Simpson]]></dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[note to self]]></category>

		<guid isPermaLink="false">https://davidsimpson.me/?p=3279</guid>
		<description><![CDATA[<p>From Alex Plumb on superuser: If you&#8217;re comfortable with using the Terminal, try this: First, look at the partition table by running this command: You should see something like this: The partition we want to change is /dev/disk1. We want to change the device to an MBR-formatted FAT32 partition. To do that, run this command:... <a class="moretag" href="https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x"> <strong>Read More</strong></a><img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F09%2F01%2Fhow-to-format-a-disk-to-fat32-on-a-mac-os-x%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dhow-to-format-a-disk-to-fat32-on-a-mac-os-x&amp;action_name=How+to+format+a+disk+to+FAT32+on+a+Mac+%2F+OS+X&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /></p>
<p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x">How to format a disk to FAT32 on a Mac / OS X</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></description>
				<content:encoded><![CDATA[<p>From <a href="http://superuser.com/users/184265/alex-plumb">Alex Plumb</a> on <a href="http://superuser.com/a/527685/274815">superuser</a>:</p>
<blockquote><p>
If you&#8217;re comfortable with using the Terminal, try this:</p>
<p>First, look at the partition table by running this command:</p>
<pre class="brush: plain; title: ; notranslate">
diskutil list
</pre>
<p>You should see something like this:</p>
<pre class="brush: plain; title: ; notranslate">
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *16.0 GB    disk1
1:                        EFI                         209.7 MB   disk1s1
2:                  Apple_HFS Example                 15.7 GB    disk1s2
</pre>
<p>The partition we want to change is <code>/dev/disk1</code>.</p>
<p>We want to change the device to an MBR-formatted FAT32 partition.<br />
To do that, run this command:</p>
<pre class="brush: plain; title: ; notranslate">
sudo diskutil eraseDisk FAT32 NAME&lt; MBRFormat /dev/disk1
</pre>
<p>where <code>NAME</code> is the name you want to give to the disk.</p>
<p>As mentioned in the comments, you cannot put square brackets into the volume&#8217;s name lest things mess up. To avoid having everything fail, simply ensure that there are no square brackets in the FAT32 volume&#8217;s new name.
</p></blockquote>
<img src="http://piwik.davidsimpson.me/piwik/piwik.php?idsite=2&amp;rec=1&amp;url=https%3A%2F%2Fdavidsimpson.me%2F2015%2F09%2F01%2Fhow-to-format-a-disk-to-fat32-on-a-mac-os-x%2F%3Fpk_campaign%3Dfeed%26pk_kwd%3Dhow-to-format-a-disk-to-fat32-on-a-mac-os-x&amp;action_name=How+to+format+a+disk+to+FAT32+on+a+Mac+%2F+OS+X&amp;urlref=https%3A%2F%2Fdavidsimpson.me%2Ffeed%2F" style="border:0;width:0;height:0" width="0" height="0" alt="" /><p>The post <a rel="nofollow" href="https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x">How to format a disk to FAT32 on a Mac / OS X</a> appeared first on <a rel="nofollow" href="https://davidsimpson.me">David Simpson</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://davidsimpson.me/2015/09/01/how-to-format-a-disk-to-fat32-on-a-mac-os-x/?pk_campaign=feed&#038;pk_kwd=how-to-format-a-disk-to-fat32-on-a-mac-os-x/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
