tag:blogger.com,1999:blog-38637027160944892024-02-07T20:21:10.307-08:00Siren of ShameLee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.comBlogger41125tag:blogger.com,1999:blog-3863702716094489.post-72975781328924973992017-02-07T20:42:00.003-08:002017-02-07T20:45:27.336-08:00Released: Siren of Shame 2.4<a href="http://sirenofshame.com/Downloads">Version 2.4</a> has a huge number of features and bug fixes since 2.3. Here are highlights:<br />
<br />
<h3>
Custom Avatars!</h3>
<br />
Custom avatars has been the #1 requested feature (usually predicated with "whoever thought of cat and dog avatars should be shot").<br />
<br />
You can now add custom images by clicking a person and then "change" on the left:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimJKLIbE114e6r_pVtPfmpQAzfyBMXJpPSEKVJ2PNNG5fDi1T0AhsM75d1h0tf1y2IFiIELb2VVZq5c17du2B-0ERG78hHGIQdk2Uj0gA0ZnU-k-zViP6KdNlcjkFtUUKMX6Kt8C8/s1600/PersonPage.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimJKLIbE114e6r_pVtPfmpQAzfyBMXJpPSEKVJ2PNNG5fDi1T0AhsM75d1h0tf1y2IFiIELb2VVZq5c17du2B-0ERG78hHGIQdk2Uj0gA0ZnU-k-zViP6KdNlcjkFtUUKMX6Kt8C8/s400/PersonPage.PNG" width="400" /></a></div>
<br />
Then the new picker dialog gives two additional choices. Gravatar, which requires an e-mail address:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYonJYkGgEjoBsHKkxQFnaof52_2icP3H8KVq1JdQEMTkULC0wfI8EAAbokEaDeg6HDv8awr6tnW2ZjopoMSmatIOuzhqG7VHBNM7K1DLPqIhKrCThEByZJFOFx5eahMDJLk4RxUk/s1600/Gravatar.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYonJYkGgEjoBsHKkxQFnaof52_2icP3H8KVq1JdQEMTkULC0wfI8EAAbokEaDeg6HDv8awr6tnW2ZjopoMSmatIOuzhqG7VHBNM7K1DLPqIhKrCThEByZJFOFx5eahMDJLk4RxUk/s1600/Gravatar.PNG" /></a></div>
<br />
And Custom which allows selecting images on disk, from a url, or from Active Directory. In all cases images will be resized and possibly stretched if they are not already square.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXTqkxgJy4pU2f9rthOSjscpMvzDfAwojbHKklVnIlEBEXf1FjHdL4hD5dDgPaeFE83inBoNfEfOG9at651_jSejysAEHJw5-Jqyj_sReDtK7yrMdBYakDmv31a1zFXAYwyQXX4oY/s1600/Custom.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXTqkxgJy4pU2f9rthOSjscpMvzDfAwojbHKklVnIlEBEXf1FjHdL4hD5dDgPaeFE83inBoNfEfOG9at651_jSejysAEHJw5-Jqyj_sReDtK7yrMdBYakDmv31a1zFXAYwyQXX4oY/s1600/Custom.PNG" /></a></div>
<br />
<br />
<h3>
Import avatars en-mass from AD</h3>
<br />
Theoretically you can now import avatars for all of your users if active directory contains images. Do this from settings.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPT5DyzTgS1R8ZwDrkLUSRBT-1HyajBGsn3ZIIFH-BwbzCOqk9mlU5XScmrNbYUSF2L1GeBP_uyfPKluulmWXFLafmZNVHKVh0-kMxaVN7cftGHrWVeDaYdcwTAAqXymuE72ChvQ/s1600/Settings2.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="345" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPPT5DyzTgS1R8ZwDrkLUSRBT-1HyajBGsn3ZIIFH-BwbzCOqk9mlU5XScmrNbYUSF2L1GeBP_uyfPKluulmWXFLafmZNVHKVh0-kMxaVN7cftGHrWVeDaYdcwTAAqXymuE72ChvQ/s400/Settings2.PNG" width="400" /></a></div>
<div>
<br /></div>
<div>
However, users have seen mixed results. If you have an active directory with images we would greatly appreciate your help in flushing out this feature.</div>
<br />
<h3>
New Full Screen Mode</h3>
<br />
Alt-F (or "Full Screen" from the ribbon) now gives you a lot more information:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOi3VApRamtMzHSPxyOQ_wsZbUZtlIN5LsqVeoxNZgR_VCL5peiBHxKH7D_XSggKsxVC7aCdiejixV03PjLvBFgKypzqQJDwd67lVlvriYjxBcR_YwKZYLzd95WrWTySoSqqaRIdY/s1600/FullScreen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOi3VApRamtMzHSPxyOQ_wsZbUZtlIN5LsqVeoxNZgR_VCL5peiBHxKH7D_XSggKsxVC7aCdiejixV03PjLvBFgKypzqQJDwd67lVlvriYjxBcR_YwKZYLzd95WrWTySoSqqaRIdY/s320/FullScreen.png" width="320" /></a></div>
<br />
If everything is too small by default we now have:<br />
<br />
<h3>
Ability to zoom</h3>
<br />
Ctrl+ and Ctrl- will zoom nearly everything (currently excluding avatars) which is super handy when projecting to a dedicated screen, although it works in normal mode too. Ctrl-0 will reset to normal. On that topic:<br />
<br />
<h3>
Ability to start in full screen mode</h3>
<br />
This long time feature request is handy for dedicated machines that project build info. Get to it in settings.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgalFDudiDLyxPa_IofJfmS4hutHES5GeTj_ly9NUHALEhahAIZVOcIhjcZyzWJyyo_-DGtzWXBPkXrybr_Z3PE7sbSRWuoozeMCqbQ33h2Y6iidZMBynjwLojlPKjatD8gf1HEYQA/s1600/Settings.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgalFDudiDLyxPa_IofJfmS4hutHES5GeTj_ly9NUHALEhahAIZVOcIhjcZyzWJyyo_-DGtzWXBPkXrybr_Z3PE7sbSRWuoozeMCqbQ33h2Y6iidZMBynjwLojlPKjatD8gf1HEYQA/s320/Settings.PNG" width="320" /></a></div>
<br />
<br />
<h3>
TFS 2015 Support and New Build Definitions</h3>
<br />
This is a completely new server type that uses the new TFS REST API and supports the new non-XAML based build definitions. <br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi88hhBQGfCF80hgSjzrl6Z3sOi-x4ZHw9iNtO1FjLZB0-uGLzG8uPJSAOUQeX8qNakG9iMrl706Fo5jITg2f1nhwt0mgMNqxHJQQVAtAwsy92_tiMdApkAkFETfr9KuaJZqgcJ_6Q/s1600/BuildServers.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi88hhBQGfCF80hgSjzrl6Z3sOi-x4ZHw9iNtO1FjLZB0-uGLzG8uPJSAOUQeX8qNakG9iMrl706Fo5jITg2f1nhwt0mgMNqxHJQQVAtAwsy92_tiMdApkAkFETfr9KuaJZqgcJ_6Q/s1600/BuildServers.PNG" /></a></div>
<br />
<br />
If you're using Visual Studio Team Services (Visual Studio Online) you probably need to generate a Personal Access Token for authentication, more details in a future blog post.<br />
<div>
<br /></div>
<h3>
Support for AppVeyor CI Servers</h3>
<br />
Through a generous contribution from from <a href="https://github.com/jezzsantos">jezzsantos</a>.<br />
<br />
<h3>
And Some Other Stuff</h3>
<br />
<br />
<ul>
<li>Replaced all unencrypted server communication with https </li>
<li>Added rank indicator to list of leaders (thanks to Johan Olsson) </li>
<li>Support for Team City 10.0.4 (thanks to <a href="http://github.com/iamkrillin">iamkrillin</a>)</li>
<li>Adds a maximize button (different from full-screen)</li>
<li>App now shows in taskbar when not minimized</li>
</ul>
<br />
<br />
<h3>
And Some Bug Fixes</h3>
<br />
<br />
<ul>
<li>Fixed issue where sos tries to update itself after every reboot</li>
<li>Resolved Issue #67 where leaders where getting duplicated</li>
<li>Fixed bug with long running reputation resets conflicting with in-progress builds</li>
<li>Fixed issue where opening and closing settings dialog would show stale build info</li>
<li>Fixed bug in (older) TFS dialog where checking project or project collection didn't check build definitions</li>
<li>Team city builds that have been deleted on the server can now be removed by editing the server configuration </li>
<li>Fixes Issue #68 - Manually triggered builds in TeamCity had no-one associated with them (generously contributed by @iamkrillin)</li>
</ul>
<div>
<br /></div>
<h3>
Summary</h3>
<div>
<br /></div>
<div>
We hope you'll <a href="http://sirenofshame.com/Downloads">download</a> and try out the new version today. Let us know what you think in the comments, on <a href="http://twitter.com/sirenofshame">twitter</a>, or on <a href="https://www.facebook.com/SirenOfShame">facebook</a>.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com2tag:blogger.com,1999:blog-3863702716094489.post-55845067224571482122016-05-30T23:04:00.001-07:002016-05-30T23:14:14.086-07:00New Nuget Package for Custom UWP Siren AppsWe just release a new <a href="https://www.nuget.org/packages/SirenOfShame.Device/">SirenOfShame.Device</a> nuget package for controlling sirens from Universal Windows Platform (UWP) projects. Between that and the new cross platform <a href="http://blog.sirenofshame.com/2016/05/announcing-soscmd-10jar.html">soscmd.jar</a> capability we released last week, and the <a href="http://blog.sirenofshame.com/2011/09/introduction-to-siren-of-shame-device.html">original device api</a>, there's no reason not to build that siren-based bathroom timer you've always wanted for your office.<br />
<br />
What's cool about our new UWP support is that you can now build apps for a wide range of devices including Windows PC's, tablets, (phones?), Raspberry Pi's running Windows IoT, and even XBox (!). In fact, the first person that successfully runs a siren from an XBox gets a free mug (tweet us).<br />
<br />
The documentation is in the <a href="https://github.com/AutomatedArchitecture/sirenofshame-uwp-device-api/">GitHub project</a>, but at the moment it looks something like the following.<br />
<br />
<h3>
Getting Started</h3>
<br />
<div>
To create your own custom siren of shame device software:</div>
<ol>
<li><div>
In Visual Studio Create new Universal Windows Platform project</div>
</li>
<li><div>
In Nuget Package Manager:</div>
<div>
<code>Install-Package SirenOfShame.Device</code></div>
</li>
<li><div>
Add the following to the Package.appxmanifest:</div>
<div class="highlight highlight-text-xml">
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-break: normal; word-wrap: normal;"><<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">Capabilities</span>>
<<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">DeviceCapability</span> <span class="pl-e" style="box-sizing: border-box; color: #795da3;">Name</span>=<span class="pl-s" style="box-sizing: border-box; color: #183691;"><span class="pl-pds" style="box-sizing: border-box;">"</span>humaninterfacedevice<span class="pl-pds" style="box-sizing: border-box;">"</span></span>>
<<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">Device</span> <span class="pl-e" style="box-sizing: border-box; color: #795da3;">Id</span>=<span class="pl-s" style="box-sizing: border-box; color: #183691;"><span class="pl-pds" style="box-sizing: border-box;">"</span>vidpid:16D0 0646<span class="pl-pds" style="box-sizing: border-box;">"</span></span>>
<<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">Function</span> <span class="pl-e" style="box-sizing: border-box; color: #795da3;">Type</span>=<span class="pl-s" style="box-sizing: border-box; color: #183691;"><span class="pl-pds" style="box-sizing: border-box;">"</span>usage:FF9C 0001<span class="pl-pds" style="box-sizing: border-box;">"</span></span>/>
</<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">Device</span>>
</<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">DeviceCapability</span>>
</<span class="pl-ent" style="box-sizing: border-box; color: #63a35c;">Capabilities</span>></pre>
</div>
</li>
<li><div>
Instantiate a SirenOfShameDevice, subscribe to Connected, try turning on the led's like this:</div>
<div class="highlight highlight-source-cs">
<pre style="background-color: #f7f7f7; border-radius: 3px; box-sizing: border-box; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-break: normal; word-wrap: normal;"><pre style="border-radius: 3px; box-sizing: border-box; color: #333333; font-family: Consolas, 'Liberation Mono', Menlo, Courier, monospace; font-size: 13.6px; font-stretch: normal; line-height: 1.45; overflow: auto; padding: 16px; word-break: normal; word-wrap: normal;"><span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">public</span> MainPage() {
_sirenOfShameDevice = <span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">new</span> SirenOfShameDevice();
_sirenOfShameDevice.Connected += SirenOfShameDeviceOnConnected;
}
<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">private</span> <span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">async</span> <span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">void</span> SirenOfShameDeviceOnConnected(
<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;"> object</span> sender, EventArgs eventArgs) {
<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">
var</span> manualControlData = <span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">new</span> ManualControlData
{
Led0 = (<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">byte</span>)<span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">255</span>,
Led1 = (<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">byte</span>)<span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">255</span>,
Led2 = (<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">byte</span>)<span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">255</span>,
Led3 = (<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">byte</span>)<span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">255</span>,
Led4 = (<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;">byte</span>)<span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">255</span>,
Siren = <span class="pl-c1" style="box-sizing: border-box; color: #0086b3;">false</span>
};
<span class="pl-k" style="box-sizing: border-box; color: #a71d5d;"> await</span> _sirenOfShameDevice.ManualControl(manualControlData);
}</pre>
</pre>
</div>
</li>
<li style="box-sizing: border-box;"><div style="box-sizing: border-box; margin-bottom: 16px; margin-top: 16px;">
For more details on how to use the API check out the SirenOfShame.HardwareTestGui project</div>
</li>
</ol>
<div>
<br /></div>
<h3>
Summary</h3>
<br />
We hope you enjoy. Please consider sharing anything fun that you create. If you have any questions please don't hesitate to ask on <a href="http://twitter.com/sirenofshame">twitter</a>, <a href="http://facebook.com/sirenofshame">facebook</a>, or here in the comments.Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-73768530292300468392016-05-23T21:47:00.003-07:002016-05-23T21:58:25.359-07:00Announcing soscmd-1.0.jarUntil today integrating a siren of shame device into non-continuous integration workflows has involved either writing a custom app or paying for a <a href="http://sirenofshame.com/teamci">Team CI Pro</a> subscription to get a custom HTTP endpoint for your siren. Even still the Linux story has been weak and the Mac story has been non-existent.<br />
<br />
Today we are happy to release a new tool to address non-CI, cross-platform, custom workflow requirements of siren owners. That tool is <a href="http://sirenofshame.com/Downloads/View?downloadId=42">soscmd-1.0.jar</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDxAMe2ztVP1KTMgxjlsNHL7HseNZxCJ10xkYBqyFN_PAYUIBtGLgImx0RsTyhkhaCWZR7oOvOMsW9MFv4WFgSlXq30ruabCSULpp3qlpWot2Ef9UnTeErHjZkcUhj1BbBvoBL1M/s1600/Screen+Shot+2016-05-24+at+12.55.52+AM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="364" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJDxAMe2ztVP1KTMgxjlsNHL7HseNZxCJ10xkYBqyFN_PAYUIBtGLgImx0RsTyhkhaCWZR7oOvOMsW9MFv4WFgSlXq30ruabCSULpp3qlpWot2Ef9UnTeErHjZkcUhj1BbBvoBL1M/s640/Screen+Shot+2016-05-24+at+12.55.52+AM.png" width="640" /></a></div>
<br />
<br />
As with everything, soscmd is <a href="https://github.com/AutomatedArchitecture/SirenOfShame-java">open source</a>. All of the hardest work was performed with a generous contribution from <a href="https://github.com/fhanik">Filip Hanik</a>. We are very grateful to him for his help.<br />
<br />
Finally, this tool is also our first step in working toward a truly cross platform CI monitoring solution. More details to come.<br />
<div>
<br /></div>
<h3>
How-to</h3>
<br />
To get started<br />
<ol>
<li>Download <a href="http://sirenofshame.com/Downloads/View?downloadId=42">soscmd-1.0.jar</a>. </li>
<li>Ensure you have <a href="http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html">Java 8 JRE</a> or later installed</li>
<li>Enter <span style="font-family: "courier new" , "courier" , monospace;">java -jar soscmd-1.0.jar</span></li>
</ol>
<span style="font-family: inherit;">With any luck you'll get something like this:</span><br />
<span style="font-family: inherit;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">usage: soscmd -[i|ra|rl|m|l|a|sa|sl]</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;"> -i Retrieve info about device</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -ra List audio patterns</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -rl List led patterns</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -m Manually set LED's</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -l Play an LED pattern</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -a Play an audio pattern</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -sa Stop audio</span><br />
<span style="font-family: "courier new" , "courier" , monospace;"> -sl Stop LED's</span><br />
<br />
<br />
At this point you should be able to connect a siren and do<br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">java -jar soscmd-1.0.jar -i</span><br />
<br />
and get something like this:<br />
<span style="font-family: "courier new" , "courier" , monospace;"><br /></span>
<span style="font-family: "courier new" , "courier" , monospace;">Firmware Version: 2</span><br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">Hardware Type: Standard</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Hardware Version: 1</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Audio Mode: 0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Audio Play Seconds Remaining: 0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Led Mode: 0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Led Play Seconds Remaining: 0</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">External Memory Size: 0</span><br />
<br />
<br />
Now if you want to manually light up some of the light bars you can do<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">java -jar soscmd-1.0.jar -m 128 0 255 0 0</span><br />
<br />
which will set the 1st led bar to 50%, the 3rd led bar to 100% and the remaining bars to off.<br />
<br />
To view the led or light patterns that your device has (which is based on your device's <a href="http://sirenofshame.com/firmware">firmware</a>) enter either the -ra or -rl command and you'll get something like this:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">java -jar soscmd-1.0.jar -ra</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">Audio Patterns:</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">1 - Sad Trombone</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">2 - Ding!</span><br />
<span style="font-family: "courier new" , "courier" , monospace;">3 - Plunk</span><br />
<br />
If you want to play one of the audio commands above note the ID# and specify it along with a duration in seconds like this:<br />
<br />
<span style="font-family: "courier new" , "courier" , monospace;">java -jar soscmd-1.0.jar -a 1 5</span><br />
<br />
That plays the Sad Trombone for 5 seconds. You can accomplish the same thing with a -l command to play led patterns or you can turn audio or led patterns off with -sa or -sl.<br />
<br />
<h3>
Summary</h3>
<br />
That's it! Hope you enjoy, and if you do something fun with it please let us know.Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com1tag:blogger.com,1999:blog-3863702716094489.post-76285245111522159282016-05-11T22:46:00.000-07:002016-05-11T22:58:23.816-07:00New API: Snapshot StatsIf you're a Team CI Pro user enjoying the weekly e-mails and stats, and thinking what fun you could have with that raw data (we won't judge), then we've got some fantastic news: we've opened up a new API just for you!<br />
<br />
<img alt="Weekly recap e-mail" src="http://sirenofshame.com/Images/TeamCiWeeklyRecap.png" /><br />
<br />
This API is basically a list of weekly snapshots of your teams stats. We originally took these snapshots to get the delta's that are in the e-mails. But now they're available for you to use and abuse.<br />
<div>
<br /></div>
<h3>
API Key</h3>
<br />
To get started you'll need an API key. To get it click the new "Get Your API Key" button in the Team CI section of the site.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIwVNgeiBTnI6Y5M-kAzllOE6Ao70eEy8wl5UkWdylxGy7PpEN0m5hTPdL1KOHPTCR0a5sCdK6gBsLiVMWCofTVPxHHHHxCVyXhUKfhoAmLxetwsVrwig5HuA17m1UJCwGuoqq04/s1600/TeamCiApis.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="328" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgBIwVNgeiBTnI6Y5M-kAzllOE6Ao70eEy8wl5UkWdylxGy7PpEN0m5hTPdL1KOHPTCR0a5sCdK6gBsLiVMWCofTVPxHHHHxCVyXhUKfhoAmLxetwsVrwig5HuA17m1UJCwGuoqq04/s640/TeamCiApis.PNG" width="640" /></a></div>
<br />
<br />
Then type your password, click the button and copy the resulting API Key.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG-NWhPk56qi4_G1A7tF7oD_WEesYbQcsy__RAmQXiLq5kfPHuotw2V77x2BVNzfXvZttg3yHpvUmjELjdXfGHi85_qmNDCCLcF1KoLpLP32r5MHVMhc86LSR_zWHO3ZBsJ_B4nNI/s1600/ApiKey.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiG-NWhPk56qi4_G1A7tF7oD_WEesYbQcsy__RAmQXiLq5kfPHuotw2V77x2BVNzfXvZttg3yHpvUmjELjdXfGHi85_qmNDCCLcF1KoLpLP32r5MHVMhc86LSR_zWHO3ZBsJ_B4nNI/s640/ApiKey.PNG" width="640" /></a></div>
<br />
<br />
<h3>
Hit That API</h3>
<div>
<br /></div>
<div>
To get the data POST to http://sirenofshame.com/ApiV1/Snapshots. To pass your credentials you can use: <span style="font-family: "courier new" , "courier" , monospace;">Content-Type: application/json</span> with</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">{'UserName': '[YourUsername]','Password': '[YourApiKey]'}</span></div>
<div>
<br /></div>
<div>
or if you prefer you can use <span style="font-family: "courier new" , "courier" , monospace;">Content-Type: application/x-www-form-urlencoded</span> with</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">Username=[YourUsername]&Password=[YourApiKey]</span></div>
<div>
<br /></div>
<div>
In other words:</div>
<div>
<br /></div>
<div>
<span style="font-family: "courier new" , "courier" , monospace;">curl --url http://sirenofshame.com/ApiV1/Snapshots -H "Content-Type:application/x-www-form-urlencoded" -d "UserName=[Username]&Password=[ApiKey]"</span></div>
<div>
<br /></div>
<div>
The result is hopefully something like:</div>
<div>
<br /></div>
<div>
<div>
{</div>
<div>
"Success": true,</div>
<div>
"ErrorMessage": null,</div>
<div>
"Result": [</div>
<div>
{</div>
<div>
"StatSnapshotId": 174,</div>
<div>
"SnapshotDate": "/Date(1428091201543)/",</div>
<div>
"Users": [</div>
<div>
{</div>
<div>
"DisplayName": "Lee Richardson",</div>
<div>
"RawName": "leerichardson",</div>
<div>
"Fseb": 4,</div>
<div>
"TotalBuilds": 399,</div>
<div>
"Csb": 0,</div>
<div>
"FailPercent": 105,</div>
<div>
"Achievements": 12,</div>
<div>
"Reputation": 189,</div>
<div>
"UserId": 782,</div>
<div>
"UserStatSnapshotId": 2958</div>
<div>
},</div>
<div>
{ /* all of your other users should be listed here */ } </div>
<div>
]</div>
<div>
},</div>
<div>
/* up to 2 years worth of snapshots should be here */</div>
<div>
]</div>
<div>
}</div>
</div>
<div>
<br /></div>
<h2>
Summary</h2>
<div>
<br /></div>
<div>
Hope you enjoy. If you do something fun with the data please consider sharing by posting here or shooting us a note on <a href="http://twitter.com/sirenofshame">twitter</a> or <a href="http://facebook.com/sirenofshame">Facebook</a>.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-46145619565866730602015-10-07T18:44:00.001-07:002015-10-07T18:45:06.738-07:00Updated Android App V1.2<h2>
The Good News</h2>
<div>
We've fixed a bug in the Siren of Shame Android App that was turning on Android devices when users received push notifications. This issue was causing mass butt-dialing everywhere. For that we apologize to both senders and receivers alike. The issue is fixed now ... with the caveat that:<br />
<br /></div>
<h2>
The Bad News</h2>
<div>
<a href="https://lh3.googleusercontent.com/42gX0SlguqlpP9SwwNaeD4oGGNtyLDbIneLJUflUu8xVnCENJQf5K9MKxZzgEh7Q1Ec=h900-rw" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img alt=" Siren of Shame V2- screenshot " border="0" height="200" src="https://lh3.googleusercontent.com/42gX0SlguqlpP9SwwNaeD4oGGNtyLDbIneLJUflUu8xVnCENJQf5K9MKxZzgEh7Q1Ec=h900-rw" width="120" /></a>The idiot who build our last app (an intern, honestly, not the author of this post) lost the original Android signing key. That means the old version (1.1) won't auto-upgrade.</div>
<div>
<br /></div>
<div>
<div style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;">
</div>
To get the new Android app you'll need to search Google Play for "<a href="https://play.google.com/store/apps/details?id=com.automatedarchitecture.sirenofshame2">Siren of Shame 2</a>".</div>
<div>
<br /></div>
<div>
That also means we've lost all our excellent ratings. Any ratings, good or bad, you could give the new app would be greatly appreciated.</div>
<div>
<br /></div>
<div>
Fortunately, the individuals responsible (stupid interns) have been thoroughly chewed out, tar and feathered, and made to back up the new key by scratching it into a bar of depleted uranium, so nothing like this will ever happen again.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-83928131150849871742015-02-25T16:42:00.001-08:002015-02-25T17:02:12.196-08:00Introducing Team CI Pro - 8 New Feature's You'll LoveToday we are very proud to announce our biggest change in almost two years: it's a new service called Team CI Pro.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.youtube.com/embed/mM1nR13c51I?feature=player_embedded' frameborder='0'></iframe></div>
<br />
<h2>
The CI Problem</h2>
<br />
You're trying to improve software quality. You implement continuous integration. You're lucky, you have a motivated team that rarely breaks the build and religiously fixes breaks. If this is you, Siren of Shame probably adds a some fun around the office, but is mostly a toy. In this case you likely don't need most of what Team CI Pro offers (skip to Curl to Siren, below).<br />
<br />
If you're like the rest of us your team or program breaks the build with some regularity, fails to fix it quickly, requires nagging, and/or avoids fixing builds when someone else caused the break. If this is you, our new Team CI Pro service will provide the extra motivation your team needs to realize the full potential of continuous integration.<br />
<br />
<h2>
If it Ain't Broke?</h2>
<br />
But why a new service? Today, at little to no cost, you can increase build awareness by throwing builds up on a dedicated monitor with our free desktop app and full-screen feature. You can light up a siren when the build breaks. You can require that everyone download desktop clients to get the motivating stats and gamification information.<br />
<br />
You could even mandate that everyone sign up for My CI to get build information, stats, and gamification information pushed to their e-mail and phones for free.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpOBups028YvKG2pmRiyE2AaVTxE6_3SvvJkaBs-L6cRYAAuLYDhsUSRriGe2izuaFH0nIyS8aj2iz630sZYuYFq_WTfKm9I_KjoNx_mQ-pnLK7jsxSFXBQRuFK3VItU_xrC09v6w/s1600/MyCiDataFlow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpOBups028YvKG2pmRiyE2AaVTxE6_3SvvJkaBs-L6cRYAAuLYDhsUSRriGe2izuaFH0nIyS8aj2iz630sZYuYFq_WTfKm9I_KjoNx_mQ-pnLK7jsxSFXBQRuFK3VItU_xrC09v6w/s1600/MyCiDataFlow.png" height="640" width="640" /></a></div>
<br />
<br />
But what if you don't have the authority to require your team members do anything? How do you deal with team members less passionate about CI, and far less likely to install another app, than you? And what if you have a distributed team that can't all see the siren or the dedicated monitor?<br />
<br />
Even if you could mandate desktop clients and My CI for all, there's a bigger problem. If a desktop client instance is turned off it can get out of sync. For instance when developer #1 goes on vacation for a week, their client misses a week's worth of reputation changes and achievements from their team mates. <br />
<br />
It's hard to brag about your superior reputation or "Consecutive Successful Build (FSB)" score when everyone has different numbers.<br />
<br />
<h2>
Feature #1 - Consolidated Accounts</h2>
<br />
Team CI Pro inherently addresses these problems with an architecture designed around a single instance of the desktop client. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZQesA-MRYGdGDVIP2M3_jEEbo5rRwu1d6CbKK7zLZQ6feqFrvb6A5xdZT4E5a84x895sak5jmL_h5qU8q3HPymPllNHcrOMMAS2J-FGHG6E54ej8nCdHRzOtzR0OinUuUxdffek/s1600/TeamCiDataFlow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjqZQesA-MRYGdGDVIP2M3_jEEbo5rRwu1d6CbKK7zLZQ6feqFrvb6A5xdZT4E5a84x895sak5jmL_h5qU8q3HPymPllNHcrOMMAS2J-FGHG6E54ej8nCdHRzOtzR0OinUuUxdffek/s1600/TeamCiDataFlow.png" height="508" width="640" /></a></div>
<br />
<br />
Continuous integration data flows in from the CI server (bottom right) through a single desktop client (and maybe fewer, see A Shameful Future below for details) into Siren of Shame Online. The desktop client sync's its stats and achievements to SoS Online, where the information is distributed to team members through a variety of mediums.<br />
<br />
To facilitate distributing information to team members, teams maintain a single Team CI Pro master account on Siren of Shame Online. Desktop clients sync to the master account in the SoS Online menu as if they were doing My CI. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGMowlfa6Q5Hm3QHwjp0mCdLi7HWU1nLHWo4d0k4kLTlJVKI-llR2VUTj0id5OtBwqTJFAj-byRX4M4xDgMSDVelFkCNCFKERH8jAoAIwI6UmHtNiCsZEuplUTa_1HSlF5ukHCgV8/s1600/TeamCiDialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGMowlfa6Q5Hm3QHwjp0mCdLi7HWU1nLHWo4d0k4kLTlJVKI-llR2VUTj0id5OtBwqTJFAj-byRX4M4xDgMSDVelFkCNCFKERH8jAoAIwI6UmHtNiCsZEuplUTa_1HSlF5ukHCgV8/s1600/TeamCiDialog.png" height="580" width="640" /></a></div>
<br />
<br />
Once that master account has signed up for Team CI Pro (via the 'start free trial' button at of the <a href="http://sirenofshame.com/TeamCi">Team CI Page</a>) it can access a configuration page where it can add team member accounts that will receive the master account's data.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUoQlPdSf_5CXXQF1kqc2G1uNEHImq4byqTTkC9z-Wm_fOXRTDhVLQd5ZC_AtISImp3hSyPTbfY7nm5xjWCB5rBpaqLrQVLVglvpmRcQGI9PaKyb5L8JGfKBqbSVmGWawwfnLBQs/s1600/TeamCiConfigure.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXUoQlPdSf_5CXXQF1kqc2G1uNEHImq4byqTTkC9z-Wm_fOXRTDhVLQd5ZC_AtISImp3hSyPTbfY7nm5xjWCB5rBpaqLrQVLVglvpmRcQGI9PaKyb5L8JGfKBqbSVmGWawwfnLBQs/s1600/TeamCiConfigure.png" height="406" width="640" /></a></div>
<br />
Team members added to the configuration page gain access to a number of cool new features.<br />
<br />
#protip - Syncing to a team master account and adding yourself as a team member allows your team to continue with Team CI Pro in the event you ever leave the team.<br />
<br />
<h2>
Feature #2 - Reputation Over Time</h2>
<br />
While the web client isn't new, Team CI Pro adds some new features. Team members will get a new chart at the bottom of their Team CI page so they can see reputation over time.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiELSVyZgzG1m7HSr4ZYOTp16GUTR7vP1_NuqZgosshnjPG2MMdYT7xON17zJpiGCZIZClV9Bjm_sxq78Y-2pnYzvzTZ-mc1G7G54k6zfstevcaVQ40FlrnNGYxacjkSqjZNvlg1fw/s1600/ReputationGraph.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiELSVyZgzG1m7HSr4ZYOTp16GUTR7vP1_NuqZgosshnjPG2MMdYT7xON17zJpiGCZIZClV9Bjm_sxq78Y-2pnYzvzTZ-mc1G7G54k6zfstevcaVQ40FlrnNGYxacjkSqjZNvlg1fw/s1600/ReputationGraph.png" height="232" width="640" /></a></div>
<br />
<h2>
Feature #3 - Team Heckling</h2>
<br />
Team Members will also get the ability to chat (via the blue floating button in the bottom left). Chat messages are sent as news items to Shame Extruders (see below), mobile clients, and other web clients in realtime so team members can taunt, brag, heckle, or worst case discuss actual work.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgupCx48j4CCRCs4PVZS6_-SfLOopXmJ_vo8aJnMyfeZUT49FQttskB-lthneoxNgKhPR2mki0k7BU5oQbRl1vocLyqAsw-JLuPzDf8CiY74lsnruH0FUVZlL5qhC6VgtiT4yyDy74/s1600/TeamCiWebClient.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgupCx48j4CCRCs4PVZS6_-SfLOopXmJ_vo8aJnMyfeZUT49FQttskB-lthneoxNgKhPR2mki0k7BU5oQbRl1vocLyqAsw-JLuPzDf8CiY74lsnruH0FUVZlL5qhC6VgtiT4yyDy74/s1600/TeamCiWebClient.png" height="470" width="640" /></a></div>
<br />
<br />
<h2>
Feature #4 - Web Full Screen Mode</h2>
<br />
All web clients now get a new full screen view (via the leftmost red button in the screenshot above). The page is fully responsive and is designed to look good at tiny phone resolutions as well as large, high-dpi displays. <br />
<br />
The full screen page could easily replace the full screen view in the desktop client and teams could throw identical build data up on multiple information radiators around the office, or around multiple distributed offices. Just hit <kbd style="-webkit-box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; background: rgb(247, 247, 247); border-radius: 3px; border: 1px solid rgb(204, 204, 204); box-shadow: rgba(0, 0, 0, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; color: #333333; display: inline-block; font-family: Arial, Helvetica, sans-serif; font-size: 11px; line-height: 1.4; margin: 0px 0.1em; padding: 0.1em 0.6em; text-shadow: rgb(255, 255, 255) 0px 1px 0px; vertical-align: baseline; white-space: nowrap;">F11</kbd> (or Command+Control+F).<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLg87PHZMVtvnr500xzPB6AmL92wTuV_nbd4ST-vkStVVkImXenoN-f6v8SkE0Bc1vrkD_DdGZuES8vd_LS-zv0Sagz9M1IRghHbjezI1Riw5bNoojExw4gO9cE3dhllcb2v3oUBo/s1600/FullScreen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLg87PHZMVtvnr500xzPB6AmL92wTuV_nbd4ST-vkStVVkImXenoN-f6v8SkE0Bc1vrkD_DdGZuES8vd_LS-zv0Sagz9M1IRghHbjezI1Riw5bNoojExw4gO9cE3dhllcb2v3oUBo/s1600/FullScreen.png" height="254" width="640" /></a></div>
<br />
<h2>
Feature #5 - Personalized Mobile Clients</h2>
<div>
The Android, iOS, Win Phone, and Windows Store mobile clients today show your build information, your placement and stats among a large list of virtual strangers on the SoS Online Leaderboard, and a list of news items that mostly don't relate to you or your team. </div>
<div>
<br /></div>
<div>
Members of Team CI Pro will immediately have news items replaced with only news items relevant to your project (build events, achievements of fellow team members, and chat messages). </div>
<div>
<br /></div>
<div>
Team CI Pro members will also see their placement and stats among just their team members. The end result is the data displayed will be more meaningful and engaging.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs_sLxEKM4XK04aFWLiEAnKguMe1dh-aBNRWbd308xomCyb6wGJqHRArmmuSKC16HRq-JJq60jJzCQtcNwCx5d4Ev9czmFF3WhKDSrh9bIZCbTXzPVgUg6xtF0beFbD1qPM8wHP1I/s1600/3-3-Leaders.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgs_sLxEKM4XK04aFWLiEAnKguMe1dh-aBNRWbd308xomCyb6wGJqHRArmmuSKC16HRq-JJq60jJzCQtcNwCx5d4Ev9czmFF3WhKDSrh9bIZCbTXzPVgUg6xtF0beFbD1qPM8wHP1I/s1600/3-3-Leaders.png" height="320" width="222" /></a></div>
<div>
<br /></div>
<div>
And of course Team CI Pro members will continue to receive push notifications about build events and badge updates with the number of currently broken builds just like they did with My CI.</div>
<div>
<br /></div>
<h2>
Feature #6 - Shame Extruders</h2>
<div>
<br /></div>
<div>
A very exciting new feature for Team CI Pro members are Shame Extruders. Shame Extruders are lightweight desktop clients that give team members all the benefits of desktop clients without any of the polling (updates are sent via SignalR).<br />
<br />
Specifically team members can install the Shame Extruder from our <a href="http://sirenofshame.com/downloads">download page</a> to get<br />
<br />
<ul>
<li>Tray notifications</li>
<li>Build status, leaderboards, and news</li>
<li>The ability to connect USB Sirens (see the data flow diagram earlier)</li>
<li>Team chat</li>
</ul>
<br />
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXwepA0LfuKpPUnQPG1w8xoMstueHzQSJlluWB1rHqXLcjXLsuPoauUx1Kl_TVxTGVpuP7FxQo1wltiLpTHMP5KEMUBk9J7FIjik_E3b5vO7MFcOOTdXlM6p4ixdBQ9BO68sjtqx4/s1600/Extruder1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXwepA0LfuKpPUnQPG1w8xoMstueHzQSJlluWB1rHqXLcjXLsuPoauUx1Kl_TVxTGVpuP7FxQo1wltiLpTHMP5KEMUBk9J7FIjik_E3b5vO7MFcOOTdXlM6p4ixdBQ9BO68sjtqx4/s1600/Extruder1.png" height="320" width="301" /></a></div>
<br />
They can even configure rules<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGrB2Daebm-KHmEOB7dAZEi8fEK1f8wNTj83ZP1DQWTebR4fp2fSmjrEFgakGu9BI4-zstgfO8EfjhXWxd5z1TCHrLFgxU57YvrwIsudLqkRGlKGPwaCe-ywGaHSy8ZRomcDsI008/s1600/Extruder+Settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGrB2Daebm-KHmEOB7dAZEi8fEK1f8wNTj83ZP1DQWTebR4fp2fSmjrEFgakGu9BI4-zstgfO8EfjhXWxd5z1TCHrLFgxU57YvrwIsudLqkRGlKGPwaCe-ywGaHSy8ZRomcDsI008/s1600/Extruder+Settings.png" height="400" width="261" /></a></div>
<br />
While nice for individuals Shame Extruders make it even easier to install multiple sirens in different rooms or at different locations around an office with a large or distributed team.<br />
<br />
<h2>
Feature #7 - Weekly Recap E-mails</h2>
<br />
My CI sent team leads e-mails when achievements were unlocked or builds broken (including stats like highest CSB attained). Team CI extends these features by sending e-mails directly to appropriate team members. <br />
<br />
Better yet it provides a weekly recap e-mail with overall pass/fail ratio and a summary of team members standings and delta's to help maintain the team's continued focus on quality.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh66zFxePXYWXHlaq87meshdv4ACWfP2Cym6-WmT7bvam-WH709xcIeKyhqf5fPI40QM06EMJoP8efdcoAM1TRngs-cjMiAMT4MP0vN5udQcKZqzthP4N3AFzqjr_npM8v8UslYMls/s1600/RecapEmail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh66zFxePXYWXHlaq87meshdv4ACWfP2Cym6-WmT7bvam-WH709xcIeKyhqf5fPI40QM06EMJoP8efdcoAM1TRngs-cjMiAMT4MP0vN5udQcKZqzthP4N3AFzqjr_npM8v8UslYMls/s1600/RecapEmail.png" height="385" width="640" /></a></div>
<br />
<br />
<h2>
Feature #8 - Curl To Siren</h2>
<br />
We're extremely excited by the potential of this last feature. Curl to Siren allows the master account to light up any siren in their network that's connected via a shame extruder by hitting a REST based URL. <br />
<br />
To make it work fire up a Shame Extruder, log on as the team owner account or a team member, and connect a USB siren. Now navigate to the master account's My CI page. The red button furthest left should have a badge with the number of Extruder's connected.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVfUJX6rCewcT-y3ec58X636DcjkNzYFieQBRDVpaqV_t8nkxQdVaywXmR4Y2y8TI2ivfPlrZTczFniQI23bHCA82gieABd2k_6LWw0SBGm7QrpKA2ioo0WEJCQNT5wv_vX1u3LNM/s1600/MyCiExtruders.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVfUJX6rCewcT-y3ec58X636DcjkNzYFieQBRDVpaqV_t8nkxQdVaywXmR4Y2y8TI2ivfPlrZTczFniQI23bHCA82gieABd2k_6LWw0SBGm7QrpKA2ioo0WEJCQNT5wv_vX1u3LNM/s1600/MyCiExtruders.png" height="98" width="640" /></a></div>
<br />
When you click you can select "test" to fire a quick default audio and led pattern. Or if you click the "curl" button you'll be presented with a CURL builder that will allow you to build the exact command you can run from the command line on any computer in the world to light up that siren.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXHWQzRX9Nk7_xv-ZOI-yVUQ4A551kdZv4_SEkBT7ksEQ6fdv41PBbXH1FiunszLg7KoauC9qvOXDYopHTkmuz0BpYT4GX0lJnFHwZaleFXj04HAl2eQuxkvcIQtZLUJvZSPgyiYg/s1600/CurlBuilder.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiXHWQzRX9Nk7_xv-ZOI-yVUQ4A551kdZv4_SEkBT7ksEQ6fdv41PBbXH1FiunszLg7KoauC9qvOXDYopHTkmuz0BpYT4GX0lJnFHwZaleFXj04HAl2eQuxkvcIQtZLUJvZSPgyiYg/s1600/CurlBuilder.png" height="562" width="640" /></a></div>
<br />
You can extrapolate how you would light up the siren via JavaScript or your favorite language, but let us know if you have difficulty and we'll be glad to help. <br />
<br />
This feature should enable you to integrate sirens into all kinds of things. Stock ticker watchers, e-mail notifiers, room busy indicators, <a href="http://engineering.laterooms.com/raspberry-pi-siren-of-shame-network-rail-data-feeds-super-happy-fun-club/?utm_content=buffer3fd3e&utm_medium=social&utm_source=facebook.com&utm_campaign=buffer">train schedules</a>, or <a href="https://ifttt.com/">ifttt</a>. We can't wait to hear what you come up with.<br />
<br />
<h2>
Pricing</h2>
<br />
Pricing starts as low as $10 per month for small teams. Check out our <a href="http://sirenofshame.com/TeamCi/Pricing">pricing page</a> for more details. <br />
<br />
Or better yet <a href="http://sirenofshame.com/teamci/overview">try it out</a> at no cost for a month. It's one click to get started. No credit cards, or DNA samples required.<br />
<br />
<h2>
A Shameful Future </h2>
<br />
We've got some exciting things in the works, but limited resources. Please vote here to let us know what you'd like to see us work on next:<br />
<br />
<a href="https://www.surveymonkey.com/r/W73C6S2">https://www.surveymonkey.com/r/W73C6S2</a><br />
<br />
<b>Shame Extruder for Mac</b> - Right now the Shame Extruders are for Windows clients only. Vote for this option if you use a Mac and like Team CI Pro, but the web and mobile options aren't cutting it.<br />
<br />
<b>Team CI On Premise</b> - Behind a firewall but still want all that Team CI Pro goodness?<br />
<br />
<b>Bluetooth Controlled Power Plug</b> - For integrating lava lamps, model trains, or other on/off items into your CI pipeline. This is actually prototyped out and just about ready to go.<br />
<br />
<b>Shame Whisperer</b> - Wouldn't it be great to cut out polling and the Desktop Client all together? Shame Whisperers are Plugins to CI servers that send data up to Siren of Shame Online.<br />
<br />
<b>Productized Raspberry Pi</b> - You can <a href="http://blog.sirenofshame.com/2014/07/raspberry-pi-powered-siren-of-shame-via.html">hook your siren</a> up to a Raspberry Pi today with some fiddling. Wouldn't it be great if you could buy a pre-configured Raspberry Pi or download an image to turn your siren into an IoT device with virtually no effort? Even cooler with curl to siren.<br />
<br />
<b>Full Desktop Client for Mac</b> - This is expensive and time consuming, but if a Shame Extruder and/or a Shame Whisperer isn't right for you we're ready to start work on a native Mac client today.<br />
<br />
<b>Slack Integration</b> - If you use Slack and want your gamification data integrated vote for this.<br />
<br />
<b>What Else?</b> - There's a write in option. Please submit any other great ideas, we'd love to hear them all.<br />
<br />
<h2>
Summary</h2>
<div>
<br /></div>
<div>
We've put a lot into these features and hope you love them. We hope you'll check out the <a href="http://sirenofshame.com/teamci">free trial</a>. We've also got some exciting plans for what's next, and we hope you'll help us choose our next direction. As always please let us know what you think in the comments, on <a href="https://twitter.com/sirenofshame">twitter</a>, <a href="https://www.facebook.com/SirenOfShame">facebook</a>, or <a href="https://plus.google.com/+Sirenofshame/">google+</a>.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-22904941668701553602015-01-07T20:06:00.001-08:002015-01-07T20:10:19.793-08:00Released 2.3.10We just released <a href="http://sirenofshame.com/Downloads">version 2.3.10</a> to prod. If you were on 2.3.7 (our last non-beta version) you now get:<br />
<br />
<b>Support for Team City 9.X</b><br />
This was generously contributed by <a href="https://github.com/tupac21354" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 20px;">@tupac21354</a><br />
<br />
<b>A Slew of TFS Fixes</b><br />
<br />
<ul>
<li>TFS was showing "IndividualCI" instead of the author and comment while build definitions were building. This has been fixed and a large part of the TFS logic rewritten (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/53">Issue #53</a>) </li>
<li>Fixed an issue in TFS where you couldn't easily select all build definitions (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/44">Issue #44</a>) </li>
</ul>
<div>
<br />
<b>And Some Misc Fixes</b></div>
<div>
</div>
<br />
<ul>
<li>Fixed SOS was ignorning "Never check for updates (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/50">Issue #50</a>) </li>
<li>Fixed a bug where you can't set "Who I Am" in the settings page </li>
</ul>
<div>
<br />
<b>Summary</b></div>
<div>
<br /></div>
<div>
Short and sweet this time. Please shoot us a note at support at <a href="http://sirenofshame.com/">our domain name</a> if you need help or drop a bug on <a href="https://github.com/automatedarchitecture/sirenofshame">github</a> if you find any issues.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com1tag:blogger.com,1999:blog-3863702716094489.post-25988234316355247042014-10-30T21:40:00.000-07:002014-10-30T21:47:36.900-07:00Released 2.3.7We just released <a href="http://sirenofshame.com/Downloads">verison 2.3.7</a> and took the 2.3.x line out of beta. If you've been sticking with the more stable 2.2 line then you now have the following features and bug fixes to look forward to:<br />
<br />
<h3>
TFS 2013</h3>
<div>
<br />
We now support Team Foundation Server 2013 including the new Git based projects. You may also be happy to learn we fixed some issues we had with watching builds from multiple project collections. You can also search and add new builds more easily for those with large TFS repo's.<br />
<br />
<h3>
<b>Travis Pro and Enterprise</b></h3>
<br />
We now <a href="http://sirenofshame.blogspot.com/2014/09/released-234-with-travis-pro-enterprise.html">support Travis Pro and Travis Enterprise</a>.<br />
<br />
<h3>
Jenkins</h3>
<br />
If you have a large Jenkins repository you can now filter and select all nodes more easily.<br />
<br />
<h3>
CruiseControl.Net</h3>
<br />
CruiseControl.Net now returns comments and build names. Big thanks to Benoit Martin (<a href="https://github.com/benoit808">benoit808</a>) and Jonathan Ritchie for these contributions.<br />
<br />
<h3>
Bug Fixes</h3>
</div>
<br />
<br />
<ul>
<li>The chat box in news now only appears if you're a Team CI member - in which case it allows you to chat with your team only (What is Team CI? More on this later.)</li>
<li>Fixed the issue with adding and playing custom .mp3's when you had upgraded via wyGet</li>
<li>You can now type your username in "Who I Am" rather than having to wait until you perform a build (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/47">Issue #47</a>)</li>
<li>The full screen shortcut key ("F") is now Alt-F, fixing a problem with using that character while chatting :)</li>
<li>Fixes performance issues when watching many builds (see <a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/38">Issue #38</a> and <a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/16">Issue #16</a> on Github)</li>
<li>When a build definition is unavailable, Team City no longer breaks (thanks <a href="https://github.com/monovo">@monovo</a> for this contribution)</li>
<li>In TeamCity when one build fails to connect we now return unknown build status rather than mark the entire server an unavailable (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/24">Issue #24</a>)</li>
</ul>
<h2>
Summary</h2>
That's it for now. This update sets the stage for a big announcement we'll have shortly. In the meantime thanks for all your support!<br />
<br />Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com8tag:blogger.com,1999:blog-3863702716094489.post-30021290222406396262014-09-14T20:00:00.002-07:002014-09-14T20:00:29.377-07:00Released 2.3.4 with Travis Pro / Enterprise SupportWe just released <a href="http://sirenofshame.com/Downloads/View?downloadId=22">version 2.3.4</a> which adds support for Travis Pro and Travis Enterprise.<br />
<br />
Unfortunately setting up authentication isn't as straightforward as it could be. To set up a private repository:<br />
<br />
<b>Configure Server in Sos</b><br />
<br />
<ol>
<li>Add Server, Select Travis</li>
<li>Enter your Owner and Project</li>
<li>Select a type of Public, Private (Pro), or Enterprise</li>
<li>If you select Enterprise enter the full url to your domain (e.g. <strong style="background-color: #eaf2f6; color: #333333; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13px; line-height: 20.7999992370605px;">https://travis.example.com/api/</strong>)</li>
</ol>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR89FeCIXXm8wDKf_Mw1tA-WdvpYM1sbB_km_UNcaf3JFn3Fu3mmkWhXXjAUk2KUf-PPIC4keGQ2RtceMQ6c290WZI5EOF4zyDhZ1Ht7Z8oFTlFPVFHER6nxZNB-YXmzgWrC1iLCY/s1600/1-ConfigureServer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR89FeCIXXm8wDKf_Mw1tA-WdvpYM1sbB_km_UNcaf3JFn3Fu3mmkWhXXjAUk2KUf-PPIC4keGQ2RtceMQ6c290WZI5EOF4zyDhZ1Ht7Z8oFTlFPVFHER6nxZNB-YXmzgWrC1iLCY/s1600/1-ConfigureServer.png" height="237" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<b>Generate a Travis API Access Token</b></div>
<ol>
<li>Click "Generate New Auth Token"<br /><br /><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXmvDdnHi5J_gXASXezbv-Dps_JkD4M_RrdMSFpot0H5Er5irUgrcaTm0PZjyAfZELfWxV5OPh0ii28HTT2q6ezBEwqsnldKdXzWmS7kB_31QmxEMWsaUNMmg3jrRvDqoWdJjDFGk/s1600/2-AuthToken.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXmvDdnHi5J_gXASXezbv-Dps_JkD4M_RrdMSFpot0H5Er5irUgrcaTm0PZjyAfZELfWxV5OPh0ii28HTT2q6ezBEwqsnldKdXzWmS7kB_31QmxEMWsaUNMmg3jrRvDqoWdJjDFGk/s1600/2-AuthToken.png" height="371" width="640" /></a><br /></li>
<li>Follow the instructions on the page. Specifically:</li>
<li>Open <a href="https://github.com/settings/applications">GitHub's Application Settings</a></li>
<li>Generate New Personal Access Token</li>
<li>Give it a name and select the following scopes: repo, user:email, write:repo_hook, repo:status, read:org, repo_deployment</li>
<li>Click Generate Token</li>
<li>Copy the token's value and paste it into the textbox</li>
<li>Click "Generate Token" and we will initiate a request to Travis (using the URL you specified on the previous screen) to create a travis API access token.</li>
<li>Upon success the new travis api access token will be entered into the textbox on the configure server page and you can click "Add" and then "Add" again</li>
</ol>
<div>
<br /></div>
<div>
<b>Bug Fixes</b></div>
<div>
<b><br /></b></div>
<div>
<ul>
<li><span style="background-color: white; color: #2b292a; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13.63636302948px; line-height: 18.1818180084229px;">Can now open up the Sounds menu from a fresh install</span><span style="background-color: white; color: #2b292a; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13.63636302948px; line-height: 18.1818180084229px;"> </span></li>
<li><span style="background-color: white; color: #2b292a; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 13.63636302948px; line-height: 18.1818180084229px;">When a build definition is unavailable, Team City no longer breaks (thanks @monovo for this contribution)</span></li>
</ul>
<div>
<span style="color: #2b292a; font-family: Helvetica Neue, Helvetica, Arial, sans-serif; font-size: x-small;"><span style="line-height: 18.1818180084229px;"><br /></span></span></div>
</div>
<div>
<b>Summary</b></div>
<div>
<b><br /></b></div>
<div>
We hope you enjoy the new features. Shoot us a note at support at <a href="http://sirenofshame.com/">our domain name</a> if you need help or drop a bug on <a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues">github</a> if you find any issues.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-42066439287193790332014-07-15T18:32:00.001-07:002014-07-15T19:26:55.834-07:00Raspberry Pi Powered Siren of Shame via Node.jsIf you have a spare Raspberry Pi sitting around (and who doesn't) or are seeking an excuse to buy that newly released <a href="http://www.newark.com/raspberry-pi-accessories?rd=raspberry+pi&catalogId=15003&langId=-1&storeId=10194">Model B+</a> model with 4 USB ports, then have you considered combining it with a <a href="http://sirenofshame.com/">Siren of Shame</a> to hassle your build breaking office mates whether you're at the office or not? If that sounds good this article is for you.<br />
<br />
<h2>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBl0Q7z8zgq29wc0N6SkTbRh5Z4khN-cfST4_KKA5-MEQhBdHlD5_-vISy6u1EXY3gd7pQwmOdvzxtqquIglXeSbx8kX609eQe47WBdN2DTPi3kSn71hj2rdSa_zdZJOUlABKiPHc/s1600/PiSos.jpg" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><span style="color: black;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBl0Q7z8zgq29wc0N6SkTbRh5Z4khN-cfST4_KKA5-MEQhBdHlD5_-vISy6u1EXY3gd7pQwmOdvzxtqquIglXeSbx8kX609eQe47WBdN2DTPi3kSn71hj2rdSa_zdZJOUlABKiPHc/s1600/PiSos.jpg" height="320" width="180" /></span></a></div>
Getting Started</h2>
<br />
You'll need a Siren of Shame <a href="http://sirenofshame.com/products">device</a> and a Raspberry Pi that's running and connected to the Internet. Element14 has a great <a href="https://www.youtube.com/watch?v=QHkZwNoPdF0">getting started</a> set of videos if you're completely new to Raspberry Pi. This post used the Raspbian OS, but theoretically it shouldn't matter what OS you use.<br />
<br />
<h2>
libusb</h2>
<br />
Libusb provides an API for applications to interface with USB devices, including Human Interface Devices (HID) such as the Siren of Shame. To install libusb use apt-get (the universal Linux installer).<br />
<br />
If this is a new Raspberry Pi with a fresh install of Linux then you will need to update your list of available packages with<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get update</span><br />
<br />
Follow that up with:<br />
<br />
<span style="font-family: 'Courier New', Courier, monospace;">sudo apt-get install libusb-dev</span><br />
<span style="font-family: 'Courier New', Courier, monospace;"><br /></span>
<span style="font-family: inherit;">You should now be able to run lsusb from the command line to list devices. Plug in a Siren of Shame, run lsusb, and you should get a device with an id of 16d0:0646 called GrauTec. It should look like:</span><br />
<br />
<span style="font-family: Courier New, Courier, monospace;">lsusb</span><br />
<span style="font-family: Courier New, Courier, monospace;"><br /></span>
<span style="font-family: Courier New, Courier, monospace;">...</span><br />
<span style="font-family: Courier New, Courier, monospace;">Bus 001 Device 011: ID 16d0:0646 GrauTec</span><br />
<br />
If your device doesn't show up, it could be an issue with the cable. <a href="http://engineering.laterooms.com/raspberry-pi-siren-of-shame-network-rail-data-feeds-super-happy-fun-club/">Andy Lowry</a>, who has an excellent blog post where he lights up his siren of shame when freight trains are near, reports that he had to try several cables before finding one that worked.<br />
<br />
<h2>
Node.js</h2>
<br />
Thanks exclusively to <a href="http://twitter.com/joeferner">Joe Ferner</a> and his <a href="https://github.com/AutomatedArchitecture/node-sos-device">node-sos-device</a> project we have a solution for connecting Siren of Shame's to linux using Node.js. To install Node.js it should be as easy as:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get install nodejs</span><br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get install npm</span><br />
<br />
Incidentally, rather than using <a href="https://github.com/AutomatedArchitecture/node-sos-device">node-sos-device</a> directly, we will be using the higher-level <a href="https://github.com/AutomatedArchitecture/node-sos-client">node-sos-client</a>, which knows how to monitor Jenkins and Bamboo CI servers.<br />
<br />
<h2>
Node-sos-client</h2>
<br />
If you haven't configured your device to work with git you could do it the right way with SSH and <a href="https://help.github.com/articles/generating-ssh-keys">generate an ssh key</a> or you could just:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">git clone https://github.com/AutomatedArchitecture/node-sos-client.git</span><br />
<br />
and<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">cd node-sos-client</span><br />
<br />
Next you'll need to download all Node dependencies. If this is a fresh install you'll need to tell the node package manager (npm) where to retrieve dependencies from:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">npm config set registry http://registry.npmjs.org/</span><br />
<br />
Now you can install all dependencies for node-sos-client by running<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">npm install</span><br />
<br />
<h2>
Upgrading Node</h2>
<br />
For some fortunate users (<a href="http://engineering.laterooms.com/raspberry-pi-siren-of-shame-network-rail-data-feeds-super-happy-fun-club/">Andy Lowry</a> for one) installing node via apt-get works fine. If, however, you get an error about node being out of date you'll have to uninstall, download, and update your path.<br />
<br />
First, to uninstall the old version of node:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get remove npm</span><br />
<span style="font-family: Courier New, Courier, monospace;">sudo apt-get remove node</span><br />
<br />
No download and unpack:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">cd ~</span><br />
<span style="font-family: Courier New, Courier, monospace;">wget http://nodejs.org/dist/v0.10.2/node-v0.10.2-linux-arm-pi.tar.gz</span><br />
<span style="font-family: Courier New, Courier, monospace;">tar -xvzf node-v0.10.2-linux-arm-pi.tar.gz</span><br />
<br />
To add it to your path<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">nano .bashrc</span><br />
<br />
And add the following two lines at the bottom:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">NODE_JS_HOME=/home/pi/node-v0.10.2-linux-arm-pi</span><br />
<span style="font-family: Courier New, Courier, monospace;">PATH=$PATH:$NODE_JS_HOME/bin</span><br />
<br />
If you restart your command prompt and type node --version you should get v0.10.2.<br />
<br />
Now retry npm install.<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">cd node-sos-client</span><br />
<span style="font-family: Courier New, Courier, monospace;">npm install</span><br />
<br />
And you should be good to go.<br />
<br />
<h2>
Running node-sos-client</h2>
<br />
First make a copy of the default configuration file:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">cp config.json.example config.json</span><br />
<br />
We'll configure it correctly later. Next pick up the dependency on node-sos-device by running:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">npm install sos-device</span><br />
<br />
To run the app you should be able to run<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo node build/sos-client.js</span><br />
<br />
However, if you had to install node with the wget method, then you'll need to run<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">sudo $NODE_JS_HOME/bin/node build/sos-client.js</span><br />
<br />
If you're lucky you'll see the app print out the device stats as json and a configuration error, something like:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">deviceInfo: { version: 1,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> hardwareType: 1,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> hardwareVersion: 1,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> externalMemorySize: 0,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> audioMode: 0,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> audioPlayDuration: 0,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ledMode: 0,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ledPlayDuration: 0,</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ledPatterns:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ { id: 2, name: 'On/Off' },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> { id: 3, name: 'Fade' },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> { id: 4, name: 'Chase' },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> { id: 5, name: 'Fade Chase' } ],</span><br />
<span style="font-family: Courier New, Courier, monospace;"> audioPatterns:</span><br />
<span style="font-family: Courier New, Courier, monospace;"> [ { id: 1, name: 'Sad Trombone' },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> { id: 2, name: 'Ding!' },</span><br />
<span style="font-family: Courier New, Courier, monospace;"> { id: 3, name: 'Plunk' } ] }</span><br />
<span style="font-family: Courier New, Courier, monospace;">Failed to poll: bamboo0 { [Error: getaddrinfo ENOTFOUND] code: 'ENOTFOUND', errno: 'ENOTFOUND', syscall: 'getaddrinfo' }</span><br />
<br />
However, if you have a cable that doesn't work well, or are connecting through a non-powered USB hub you may see:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">Error: usb_detach_kernel_driver_np: -113 could not detach kernel driver from interface 0: No route to host</span><br />
<br />
In this case try experimenting with the way you connect the device to the Pi.<br />
<br />
<h2>
Configuring the Connection</h2>
Today node-sos-client can connect to two CI servers: Bamboo, and Jenkins. To connect to Jenkins update the config file to something like:<br />
<br />
<span style="font-family: Courier New, Courier, monospace;">{</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "builds": [</span><br />
<span style="font-family: Courier New, Courier, monospace;"> {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "type": "jenkins",</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "config": {</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "url": "http://127.0.0.1/jenkins/api/json/",</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "username": "[username]",</span><br />
<span style="font-family: Courier New, Courier, monospace;"> "password": "[password]"</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> }</span><br />
<span style="font-family: Courier New, Courier, monospace;"> ]</span><br />
<span style="font-family: Courier New, Courier, monospace;">}</span><br />
<div>
<br /></div>
And you're done. With any luck running sudo node build/sos-client.js will light the siren and sound the speaker on initial connection, and whenever the build breaks.<br />
<br />
<h2>
Summary</h2>
<br />
And now you too can terrorize your build breaking colleagues, even when you're not at the office. Enjoy!Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-83547728112532442722014-04-19T12:58:00.000-07:002014-04-19T13:06:09.416-07:00Released 2.2.0Today we <a href="http://sirenofshame.com/downloads">released</a> Siren of Shame 2.2.0, adding some good stuff including the #1 most requested feature:<br />
<br />
<h3>
Custom Audio Sounds </h3>
<div>
<br /></div>
<div>
"Sounds", it's a new option in the menu:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHIqL3hdg9K2HFdsPYS9WZr0XEqePcThY006ID2nv_CuDqrE_AwjpqnH1lWaT-r8fpVIX3qhBjHI_PIU7TPxI8G-ZJb6p52WENi7PjxfkhBwtp_qqksMh7Q4Yh_0Lglqx6c-cTTGs/s1600/Sounds.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHIqL3hdg9K2HFdsPYS9WZr0XEqePcThY006ID2nv_CuDqrE_AwjpqnH1lWaT-r8fpVIX3qhBjHI_PIU7TPxI8G-ZJb6p52WENi7PjxfkhBwtp_qqksMh7Q4Yh_0Lglqx6c-cTTGs/s1600/Sounds.png" height="230" width="640" /></a></div>
<div>
<br /></div>
<div>
Click it to add/delete/preview MP3's or WAV's:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMG9G18Tgmi8LejEd3-hKun3urFuXxGNCSY1hxEHA-tisNPULR8Ql-8RCe0HNt1zk2Y4vFG6-B2VI8FM5LMOgwfryYGm1DG6p1toIENvTaVnQpyokR25tqbWlx1I8zaaG9Jq3Pmg/s1600/ConfigureSounds.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNMG9G18Tgmi8LejEd3-hKun3urFuXxGNCSY1hxEHA-tisNPULR8Ql-8RCe0HNt1zk2Y4vFG6-B2VI8FM5LMOgwfryYGm1DG6p1toIENvTaVnQpyokR25tqbWlx1I8zaaG9Jq3Pmg/s1600/ConfigureSounds.png" height="211" width="320" /></a></div>
<div>
<br /></div>
<div>
Then configure rules to play them:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXrr_X-C3cJBtLHe7w-AFRniVuWXJ8IA_nucnl9PvGOTB5bFvKxJGXzXFFkgBn1mWcA_Ly1ktghSjPTyIBMuGuFifGkF94MYyxPRrKmc5SmK8vit8QTnRU2_2L_G_WD3XrOfs0s2Q/s1600/Rules.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXrr_X-C3cJBtLHe7w-AFRniVuWXJ8IA_nucnl9PvGOTB5bFvKxJGXzXFFkgBn1mWcA_Ly1ktghSjPTyIBMuGuFifGkF94MYyxPRrKmc5SmK8vit8QTnRU2_2L_G_WD3XrOfs0s2Q/s1600/Rules.png" height="338" width="640" /></a></div>
<div>
<br /></div>
<div>
With per-user rules and our fancy <a href="http://sirenofshame.blogspot.com/2011/12/how-to-configure-rules.html">rule engine</a> you can now taunt co-workers by name when they break the build. How cool is that?</div>
<div>
<br /></div>
<h3>
Visual Studio Online</h3>
<div>
<br /></div>
<div>
If you're into TFS (by choice or divine mandate) and using the Microsoft-hosted cloud version (previously called Team Foundation Services) we now have your back. See <a href="http://sirenofshame.blogspot.com/2014/04/visual-studio-online.html">Configuring Visual Studio Online</a> for details.</div>
<div>
<br /></div>
<h3>
Keyboard Shortcuts</h3>
<div>
<br /></div>
<div>
If you're a keyboard kind of person (and what self-respecting developer isn't?) you'll appreciate the following new keyboard shortcuts:</div>
<div>
<br /></div>
<div>
<ul>
<li>1-9 - Go to the build detail page for the appropriate build</li>
<li>Backspace - Go to the home page</li>
<li>Alt+1-9 - Go to the the user detail page for the appropriate user</li>
<li>F - Go full-screen</li>
</ul>
<div>
<br /></div>
</div>
<h3>
Bug Fixes</h3>
<div>
<div>
<ul>
<li>Can now treat unstable as passing for Jenkins (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/30">Issue #30</a>)</li>
<li>When new users are added, the leaders tab now immediately updates (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/26">Issue #26</a>) </li>
<li>Fixes an issue with Team City authentication </li>
<li>Fixes a bug with users that have comma's in their user names </li>
<li>Fixes a bug with hidden users </li>
<li>Fixes some issues with build dates (thank you <a href="https://twitter.com/mightymuke">@mightymuke</a>) </li>
<li>Fixed authentication issues in Travis </li>
<li>Fixed <a href="https://code.google.com/p/siren-of-shame/issues/detail?id=48">issue #48</a> typo </li>
<li>Fixed a bug with user mappings (thank you <a href="https://github.com/gregorycu">@gregorycu</a>) </li>
<li>Improved pretty date calculations </li>
</ul>
</div>
</div>
<div>
<br /></div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-83634378753789954402014-04-19T11:33:00.000-07:002014-04-19T12:41:58.053-07:00Configuring Visual Studio Online for Siren of ShameAs of Siren of Shame 2.2.0 we now support Visual Studio Online (previously Team Foundation Services).<br />
<br />
You will need to configure Visual Studio Online to enable authentication from Siren of Shame. To do this:<br />
<br />
1. Log in to Visual Studio Online<br />
2. Edit your Profile<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66ROXnk94CIBpVYVACFvDy5Vg9_2QStvQgm_aCUOggeCHkNSZ5qr4dAYGVUErzBmrI289B_OH1j_zonEQuIyCDtLYWcHytLNLoqlYg4bp9Jg7Bf_H68bT1pKr6AC-tRZr_YzPPd8/s1600/MyProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg66ROXnk94CIBpVYVACFvDy5Vg9_2QStvQgm_aCUOggeCHkNSZ5qr4dAYGVUErzBmrI289B_OH1j_zonEQuIyCDtLYWcHytLNLoqlYg4bp9Jg7Bf_H68bT1pKr6AC-tRZr_YzPPd8/s1600/MyProfile.png" height="270" width="640" /></a></div>
<br />
<br />
3. Click Credentials and select "Enable alternate credentials"<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi3OapzIJ1r0WzJzoZfw19zyuH4ZmqFKkbt1aNzOJ0PIjzyAs2jRx1aEslrFIwdkgSzwThOe_7Ej8uX5Hj7Ki-HF16n9bkOf7V185eYjYLsv5agc4KqUnmQkjG-fj-T9FMbVO4Qw/s1600/EnableAlternateAuthentication.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbi3OapzIJ1r0WzJzoZfw19zyuH4ZmqFKkbt1aNzOJ0PIjzyAs2jRx1aEslrFIwdkgSzwThOe_7Ej8uX5Hj7Ki-HF16n9bkOf7V185eYjYLsv5agc4KqUnmQkjG-fj-T9FMbVO4Qw/s1600/EnableAlternateAuthentication.png" height="467" width="640" /></a></div>
<br />
<br />
4. Enter a username and password<br />
5. When you add a server in Siren of Shame the URL should be https://[myproject]/visualstudio.com/, and the username/password should be what you entered in alternate authentication credentials<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheZyvB7hyphenhyphenngEfO7QCVIkUwsxabQexBNFWI_i3Vlhmiv4kkNS9LoQn9lhpU3GlEGvqczcrxxet8dMHNf0AZYZFtrwgfTl6tQZSJNi28-VlzSM5KNoackh5iqy4608304dOf2tjGPdI/s1600/ConfigureServer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheZyvB7hyphenhyphenngEfO7QCVIkUwsxabQexBNFWI_i3Vlhmiv4kkNS9LoQn9lhpU3GlEGvqczcrxxet8dMHNf0AZYZFtrwgfTl6tQZSJNi28-VlzSM5KNoackh5iqy4608304dOf2tjGPdI/s640/ConfigureServer.png" height="379" width="640" /></a></div>
<br />Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com4tag:blogger.com,1999:blog-3863702716094489.post-56826721113011716062014-01-05T17:37:00.005-08:002014-01-05T17:54:45.202-08:00My CI Gets LocalizedWe recently talked with a Siren of Shame user who proudly announced that Siren of Shame was the second app they installed on their new smartphone. Naturally we asked: "So what did you think?" to which they sheepishly responded "Um, it installed".<br />
<br />
The problem was that the Siren of Shame app (Android in this case, but all the apps work the same way) showed global leader boards and global news. The user could see the state of their builds, and the push notifications were nice, but they wanted localized gamification data. They wanted to know their reputation within their team and to see news relevant to their project rather than competing with a bunch of people they didn't know.<br />
<br />
Today we are proud to announce two new features for <a href="http://sirenofshame.blogspot.com/2013/05/introducing-my-ci-turn-your-smart-phone.html">My CI</a> customers that help make data more localized and relevant.<br />
<br />
<h2>
My CI News Feed</h2>
<br />
First, My CI customers now get news on their My CI page. In fact, the page should look nearly identical to the Siren of Shame desktop app itself. The My CI page used to look like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4TdNvFEMi11hWISltCTIN-qFLpa3eRzIjBz9WVmG4mg8Ra6TdGv7Ke94Uol7gWYkXjwynzJICo9jj4smSFR4QhTjiYqadn_WTd5uRmB0ATUnIfDVCRzimcC5k2R9EGa0ZUmSZQLs/s1600/Old.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4TdNvFEMi11hWISltCTIN-qFLpa3eRzIjBz9WVmG4mg8Ra6TdGv7Ke94Uol7gWYkXjwynzJICo9jj4smSFR4QhTjiYqadn_WTd5uRmB0ATUnIfDVCRzimcC5k2R9EGa0ZUmSZQLs/s1600/Old.PNG" height="240" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
And now the My CI page looks like this:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBh6zo8ocOcZA6mCzlcCokt9DcpWaXcrK8dz34-YR_lOBcLwoWKtdNdJX8A1mge-iVJRgOT5nDZgT1vmxfpEENkymeE-_QkTK2qxgtH7fSbOeP8LUNiAsY2Q6Df0WV4TezIvz1IoA/s1600/New.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhBh6zo8ocOcZA6mCzlcCokt9DcpWaXcrK8dz34-YR_lOBcLwoWKtdNdJX8A1mge-iVJRgOT5nDZgT1vmxfpEENkymeE-_QkTK2qxgtH7fSbOeP8LUNiAsY2Q6Df0WV4TezIvz1IoA/s1600/New.PNG" height="242" width="640" /></a></div>
<br />
Better? We think so, but feel free to respond in the comments.<br />
<br />
<h2>
Localized Mobile Apps</h2>
<br />
The second feature we want to announce is that effective immediately all mobile apps including Android, iPhone, Windows Phone, and Windows 8 now will show localized news and leader boards if you're signed up for My CI. For instance here is the iPhone news feed, complete with check-in comments aggregated across build definitions:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPqESp4m6AAUzW0zuBiwXafyL61RvavhhpqosKxJ-7E8zUC_ehyphenhyphenJUv2srOSmXYac63G5rRYUUlHLUl1G0l22a3qfObpevnRl3FpjiAF69luPfI2-HZ-hZgHjEr2Ydjf-18bUu1kd0/s1600/screenshot2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPqESp4m6AAUzW0zuBiwXafyL61RvavhhpqosKxJ-7E8zUC_ehyphenhyphenJUv2srOSmXYac63G5rRYUUlHLUl1G0l22a3qfObpevnRl3FpjiAF69luPfI2-HZ-hZgHjEr2Ydjf-18bUu1kd0/s1600/screenshot2.png" height="640" width="426" /></a></div>
<br />
The Leaders page looks similar in that only those individuals listed above will be shown.<br />
<br />
<h2>
Summary</h2>
<br />
We hope you enjoy the new localized data. Please post in the comments if you feel we're headed in the right direction (or not) because there is more great stuff to come along these lines in 2014 (hint: it's called Team CI and it's nearly ready).Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-5233609654338838842013-06-29T14:08:00.001-07:002013-07-03T08:17:59.614-07:00How to Add Support for a new CI Server to Siren of ShameSiren of Shame supports eight CI servers today, but adding additional ones is pretty easy. Read on if you you're interested in adding support for achievements, reputation, or push notifications to mobile devices to your favorite CI server.<br /><br />
<h2>Architecture Overview</h2>
We use a plugin model to interact with CI server's via the Managed Extensibility Framework (MEF). The main project (SirenOfShame.csproj) looks in the \plugins directory to find class libraries (.dll's) that export classes (via MEF's ExportAttribute) that inherit from ICiEntryPoint. Theoretically you could export multiple CiEntryPoints per assembly, but we only do one per C# project to separate concerns.<br />
<br />
If you'd like to start with a reference project for either reading through or copying, consider checking out HudsonServices.csproj as it is one of our more mature plugins.<br />
<br />
<h2>
ICiEntryPoint</h2>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none">
<div style="background-color: white;">
<span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">public</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">interface</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">ICiEntryPoint<br />
</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">{<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">ConfigureServerBase</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> CreateConfigurationWindow(<br />
</span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white"><span style="mso-spacerun:yes"> </span>SirenOfShameSettings</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> settings,
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">CiEntryPointSetting</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> ciEntryPointSetting<br />
<span style="mso-spacerun:yes"> </span>);<o:p><br />
<br />
</o:p></span>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none">
<span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"><span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">string</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> Name { </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">get</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">; }<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none">
<span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"><span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">string</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> DisplayName { </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">get</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">; }<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:0in;margin-bottom:.0001pt;line-height:
normal;mso-layout-grid-align:none;text-autospace:none">
<span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"><span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">WatcherBase</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> GetWatcher(</span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">SirenOfShameSettings</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> settings);<o:p></o:p></span></p>
<span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">}</span><br />
</div>
<p>
</p>
The ICiEntryPoint interface requires a Name and DisplayName. Name (e.g. "Hudson") is used extensively in a user's persisted settings as an ID. It is never displayed to a user, and should never be changed.<br />
<br />
DisplayName (e.g. "Hudson/Jenkins") is displayed in the dropdown of available CI servers in the Add CI Server dialog and may be changed over time if necessary.<br />
<br />
SirenOfShame calls ICiEntryPoint's CreateConfigurationWindow() when a user adds an instance of a new build definition to watch. It should return a class that inherits from ConfigureServerBase, which in turn inherits from UserControl. The control will be embedded in a windows forms page when a user selects the associated CI server on the add CI server dialog or goes to edit an existing CI server. This form should be used to allow a user to connect to a CI server, select the build definitions to watch, and optionally persist a username and password. For example:<br />
<br />
<div style="background-color: white;">
<div class="MsoNormal" style="margin-bottom: 0.0001pt;">
<p class="MsoNormal">
<span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">public</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">ConfigureServerBase</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> CreateConfigurationWindow(<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">SirenOfShameSettings</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> settings,
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">CiEntryPointSetting</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> ciEntryPointSetting) {<o:p></o:p></span></p>
<p class="MsoNormal">
<span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">return</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">new</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">ConfigureHudson</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">(settings, </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">this</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">,
ciEntryPointSetting);<o:p></o:p></span></p>
<span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">}</span></div>
</div>
<br />
Finally, GetWatcher() is called when the system starts watching CI servers (e.g. after adding a CI server, or on startup). Its job is to instantiate and return a class that inherits from WatcherBase whose job is to handle polling for build status changes. For example:<br />
<br />
<div style="background-color: white;">
<p class="MsoNormal">
<span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">public</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">WatcherBase</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> GetWatcher(</span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">SirenOfShameSettings</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> settings) {<o:p></o:p></span></p>
<p class="MsoNormal">
<span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"><span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">return</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">new</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white"> </span><span style="font-size: 9.5pt; font-family: Consolas; color: #2B91AF; background: white; mso-highlight: white">HudsonWatcher</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">(settings, </span>
<span style="font-size: 9.5pt; font-family: Consolas; color: blue; background: white; mso-highlight: white">this</span><span style="font-size: 9.5pt; font-family: Consolas; color: black; background: white; mso-highlight: white">);<o:p></o:p></span></p>
<span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">}</span></div>
<br />
<h2>
WatcherBase </h2>
Pretty must the only responsibility of WatcherBase that's important is overriding:<br />
<br />
<div style="background-color: white;">
<span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">protected</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> </span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">override</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: #2B91AF; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">IList</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: #2B91AF; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">BuildStatus</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">>
GetBuildStatus()</span><span style="font-size:
9.5pt;line-height:115%;font-family:Consolas;mso-fareast-font-family:Calibri;
mso-fareast-theme-font:minor-latin;color:black;mso-ansi-language:EN-US;
mso-fareast-language:EN-US;mso-bidi-language:AR-SA">;</span></div>
<br />
This method is called very frequently by the rules engine (RulesEngine.cs) to check for build status changes. It is is expected to retrieve the build definitions that the user is watching and return a BuildStatus for each one. It could utilize a separate class, such as one that inherits from ServiceBase, like HudsonService.cs does, but this isn't strictly necessary.<br />
<br />
The build engine is run on a background thread, to free up the UI thread, but it does call GetBuildStatus synchronously. Consequently any long delays inside GetBuildStatus decrease the frequency that users get build statuses. For example if the user has set the polling interval as 10 seconds and GetBuildStatus takes 10 seconds to run then the user actually gets build statuses every 20 seconds. For this reason it might be a good idea to request build statuses for each build definition in parallel like HudsonService.cs does:<br />
<br />
<div style="background-color: white;">
<span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">public</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> </span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: #2B91AF; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">IList</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"><</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: #2B91AF; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">HudsonBuildStatus</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">>
GetBuildsStatuses(<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">string</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> rootUrl,
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">string</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> userName,
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">string</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> password,
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: #2B91AF; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">BuildDefinitionSetting</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">[] watchedBuildDefinitions) {<br />
<br />
<span style="mso-spacerun:yes"> </span>rootUrl = GetRootUrl(rootUrl);<br />
<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">var</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> parallelResult = </span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">from</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">
buildDefinitionSetting </span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">in</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> watchedBuildDefinitions<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">select</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> GetBuildStatus(rootUrl, buildDefinitionSetting, userName, password);<br />
<span style="mso-spacerun:yes"> </span></span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: blue; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA">return</span><span style="font-size: 9.5pt; line-height: 115%; font-family: Consolas; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; color: black; background: white; mso-highlight: white; mso-ansi-language: EN-US; mso-fareast-language: EN-US; mso-bidi-language: AR-SA"> parallelResult.AsParallel().ToList();<br />
}</span></div>
<br />
At any time GetBuildStatus() can throw ServerUnavailableException to indicate that something is temporarily wrong (e.g. the web connection is down or the server is down for maintenance). In response the main engine will notify the user and continue polling the server periodically until the situation has resolved itself. If you choose the overload with an exception, the user will be given the opportunity to click on the error message and send the result back to us for diagnosis.<br />
<h2>
Next Steps</h2>
If you have any questions feel free to e-mail us at support at our domain name. And once you get it working we hope you'll consider initiating a pull request from <a href="http://github.com/AutomatedArchitecture/SirenOfShame">our GitHub project</a>.
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-22885189959547876292013-06-01T18:10:00.000-07:002013-06-01T18:15:50.122-07:00Released 2.1.1In the excitement of announcing <a href="http://sirenofshame.com/myci">My CI</a> we forgot to announce what else is new with versions 2.1 and 2.1.1.<br />
<br />
<h2>
Merge Duplicate Users</h2>
<div>
This oft-requested feature allows you to merge two users that are actually the same person. Frequently this occurs for those monitoring multiple CI servers. To perform a merge right-click on the user:<br />
<br /></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinS7Av-xehj92bZn0DkGYdd-rSFyS0pbry-qAL9I5EiFenq8sJvzWwNZb8yTVmAkSY5oWfh9UdLvd9Z4X5C-yCc8OYJCjOrj11SlDporuyrdbe9_4BJmUQqe0jxYXDyvKDJIBRGKE/s1600/Duplicate.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinS7Av-xehj92bZn0DkGYdd-rSFyS0pbry-qAL9I5EiFenq8sJvzWwNZb8yTVmAkSY5oWfh9UdLvd9Z4X5C-yCc8OYJCjOrj11SlDporuyrdbe9_4BJmUQqe0jxYXDyvKDJIBRGKE/s640/Duplicate.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Then select who to merge that user with:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy3Er0erdfqB1CRgaytg1PorUEGQn_dH-2ieX0vEtmtvEFPXVtvnTVy1ylpAgf8k-SjYunwdivSnv4F2u4qYQ0nTSUjBREbNCoxzWJprmHhxQvkGNsABx10Hye7MBstojaaD0LNGE/s1600/AddMapping.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="612" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy3Er0erdfqB1CRgaytg1PorUEGQn_dH-2ieX0vEtmtvEFPXVtvnTVy1ylpAgf8k-SjYunwdivSnv4F2u4qYQ0nTSUjBREbNCoxzWJprmHhxQvkGNsABx10Hye7MBstojaaD0LNGE/s640/AddMapping.png" width="640" /></a></div>
<div>
<br /></div>
<div>
Notice the caveats above. Specifically the system will not attempt to merge any previous check-ins, reputation, achievements, or stats. However, the system will merge these going forward.<br />
<br /></div>
<h2>
My CI</h2>
<div>
Again, as mentioned in <a href="http://sirenofshame.blogspot.com/2013/05/introducing-my-ci-turn-your-smart-phone.html">our previous post</a> 2.1 enables My CI, where you can get push notifications to mobile phones, a dedicated page on our site with your build information, and e-mails about build status changes and new achievements. </div>
<div>
<br /></div>
<div>
If you were a beta user of 2.1, then 2.1.1:</div>
<div>
<ul>
<li>Sync's users and their reputation, achievements and stats up to My CI</li>
<li>Sync's in-progress builds</li>
</ul>
<div>
<br /></div>
</div>
<h2>
Other Features</h2>
<div>
<ul>
<li>Full Screen mode now displays dates as pretty dates (e.g. 5 minutes ago).</li>
<li>Improved
pretty date calculations</li>
</ul>
<div>
<br /></div>
<h2>
Bugs Fixed</h2>
</div>
<div>
<div style="font-family: Calibri; font-size: 11.0pt; margin: 0in;">
</div>
<ul>
<li><span style="font-size: 11pt;">The system was
excessively updating the tray icon (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/16">Issue #16</a>)</span></li>
<li><span style="font-size: 11pt;">Full screen mode
was displaying dates with incorrect time zone (<a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/9">Issue</a></span><span style="font-size: 11pt;"><a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/9"> </a></span><span style="font-size: 11pt;"><a href="https://github.com/AutomatedArchitecture/SirenOfShame/issues/9">#9</a>)</span></li>
<li><span style="font-size: 11pt;">Fixed a bug where
the Jon Skeet achievement was too easy to get (<a href="https://code.google.com/p/siren-of-shame/issues/detail?id=42">Issue #42</a>)</span></li>
<li><span style="font-size: 11pt;">Fixed various
smaller anonymously submitted bugs including null reference exceptions</span></li>
</ul>
<br /></div>
<h2>
</h2>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com4tag:blogger.com,1999:blog-3863702716094489.post-84489132957123204432013-05-30T22:32:00.000-07:002013-06-01T18:28:44.953-07:00Introducing My CI: Turn a Smart Phone Into a Siren of ShameToday we're proud to release a new, free, service called My CI and in conjunction <a href="https://code.google.com/p/siren-of-shame/downloads/detail?name=SirenOfShame-2-1-1.msi&can=2">Siren of Shame 2.1.1</a> (see also our <a href="http://sirenofshame.blogspot.com/2013/06/released-211.html">official 2.1.1 release nodes</a>).<br />
<br />
<h2>
Why?</h2>
Continuous integration can be awesome. It can significantly improve quality on projects. But incorporating it into daily life for the entire team can be hard. It ultimately only works if everyone on a team is both aware of the state of the build, and is actively engaged in fixing it when it breaks.<br />
<br />
We built My CI to help team leads achieve both ends: generate awareness, while encouraging everyone to fix broken builds; hopefully while making things a little more fun along the way.
<br />
<br />
<h2>
What Is It?</h2>
My CI is a service that you turn on from our desktop software (2.1.1 or later) to enable some new features. First, it allows anyone to turn a smart phone or tablet into a mini Siren of Shame. Second, it enables e-mail build notifications with fun user stats and updates about new teammates' achievements. Finally, it turns on a customized web page we host on our website that displays your team's real time build status, build history, and team member stats like reputation, <a href="http://sirenofshame.com/Achievements">achievements</a>, CSB, and FSB.
<br />
<br />
We have a pretty new webpage on our site to describe My CI at a high level <a href="http://sirenofshame.com/MyCi/Overview">here</a>, but read on if you're interested in details.
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<img border="0" height="260" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhsEdSqnPxnd7GeKumsl7A7fE-M2LsXMlxHSByl3GqDxC-6lW32GtVTscXExsAQvAhgXhD4dP1KC-WofeNIPIa6GULaa7kNv6itMei9yBq2jyLfjLmPGSZxvgdBk9JzM5nSKl5dxxs/s640/PrettyPicture.PNG" width="640" /></div>
<div>
<br /></div>
<h2>
Turn On My CI</h2>
<div>
Enabling My CI is easy. After you pick up the <a href="https://code.google.com/p/siren-of-shame/downloads/detail?name=SirenOfShame-2-1-1.msi&can=2">Siren of Shame 2.1.1</a> desktop software, create an account, open up the SoS Online settings page and turn on My CI like this:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="http://sirenofshame.com/Images/configure_sos_screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="276" src="http://sirenofshame.com/Images/configure_sos_screenshot.png" width="640" /></a></div>
<div>
<br /></div>
<div>
Or, if you use Travis to monitor a Github project you can add the account directly from the My CI page and we'll monitor it for you. The only downside is we do not yet support achievements and reputation for projects monitored from our server.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvpDGArgz3RAWfGj8MuUex1wo8Y9noIBPNOAebCc1b34wSvggnAa_FOB4b58AouK-FcMvOVVoi8ExP7bMvhHqv-RUuv_gC5Fcm3QdZBuqm_CjTAAYl6LGEJdpeWclegyHEXtXJCdo/s1600/Travis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvpDGArgz3RAWfGj8MuUex1wo8Y9noIBPNOAebCc1b34wSvggnAa_FOB4b58AouK-FcMvOVVoi8ExP7bMvhHqv-RUuv_gC5Fcm3QdZBuqm_CjTAAYl6LGEJdpeWclegyHEXtXJCdo/s640/Travis.png" width="640" /></a></div>
<div>
<br /></div>
<h2>
Your My CI Page</h2>
Once you've enabled My CI you can log onto <a href="http://sirenofshame.com/myci">http://sirenofshame.com/myci</a> and you should see something like the following:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimXyOz3AvHoDVC5sx8uEk20VL8FHYoOvaWDN3DM-fVhThtu-b2r6rAJJDqdMFyU6sA4twovHiMzkhbzmSdvAg361ljMzI2EvJ4qP2rJoAHdFMyAZKXedHmZnfG_8WuRbD1uQkn9wg/s1600/MyCi.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="318" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimXyOz3AvHoDVC5sx8uEk20VL8FHYoOvaWDN3DM-fVhThtu-b2r6rAJJDqdMFyU6sA4twovHiMzkhbzmSdvAg361ljMzI2EvJ4qP2rJoAHdFMyAZKXedHmZnfG_8WuRbD1uQkn9wg/s640/MyCi.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
Your builds are on the left with most recent check-in comments, author, and build status.<br />
<br />
Notice the team members listed on the right with their baseball card stats including Consecutive Successful Builds (CSB), Fail %, # of Times Fixed Someone else's Build (FSB), Total Builds (T), Reputation, and achievement counts. <br />
<br />
We designed this view to be something you could throw up on a projector or put on a dedicated monitor from a machine that isn't running the desktop software. We hope your team will find the baseball card stats to be motivating and add an element of friendly competition.<br />
<br />
If you click on a user you can view individual achievements earned:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsAfooHp6xUvtkW5j-QuArbdGYA3lade7tbM1SOfcHMIIxxlEF8jLOW5_JuAC-q09ULHSLNZdlVvORfHCq6hZv0gAGeOIp6uwiKteqmkbblntSnvVamhIb1gaG_oPlFK8jZo4OxI/s1600/UserDetail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="284" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfsAfooHp6xUvtkW5j-QuArbdGYA3lade7tbM1SOfcHMIIxxlEF8jLOW5_JuAC-q09ULHSLNZdlVvORfHCq6hZv0gAGeOIp6uwiKteqmkbblntSnvVamhIb1gaG_oPlFK8jZo4OxI/s640/UserDetail.png" width="640" /></a></div>
<br />
If you click on a build from the My CI page you can view build history:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGyE0oQi4wNfeYS8IKh1zfSCaU6eOxkZF-kEiZvITnpvB-4WTyLI2D1qn2APPHKZ9XBO_6GBlvtQqxXRP-W_fDoUY0Kin4AFIJ63-BbB28chJRrCgD-bjbeWw6h-4b2G8erf691vc/s1600/Rails.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGyE0oQi4wNfeYS8IKh1zfSCaU6eOxkZF-kEiZvITnpvB-4WTyLI2D1qn2APPHKZ9XBO_6GBlvtQqxXRP-W_fDoUY0Kin4AFIJ63-BbB28chJRrCgD-bjbeWw6h-4b2G8erf691vc/s640/Rails.png" width="640" /></a></div>
<br />
<h2>
Email Notifications</h2>
<div>
Typically an e-mail from a build server is bad news. Wouldn't it be nice if your build failed e-mails contained a silver lining?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjELDROQs1hTP54uA7eZabmmkEJoBBdUAGoPgTYKKYepRSKKe6xqhV5EkT0r3hQZ3Rfu9r4hiTrDzSk2QowKb6bXjR7ZBlcRZqOvF4afcdVRvZUtYGTb4qDvkt_HNGMyiUDkQI-JAk/s1600/SilverLining.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="636" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjELDROQs1hTP54uA7eZabmmkEJoBBdUAGoPgTYKKYepRSKKe6xqhV5EkT0r3hQZ3Rfu9r4hiTrDzSk2QowKb6bXjR7ZBlcRZqOvF4afcdVRvZUtYGTb4qDvkt_HNGMyiUDkQI-JAk/s640/SilverLining.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
Or wouldn't it be nice to occasionally pass on good news to your teammates?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCM-Xs2qrRV0jfuAQbbXMvJuKky0_Jl4uaWFZyCjtV1uVSBJ3QgJfhyphenhyphenQrCRnq-R3LSEA9xO21yhV9ym4hX68-G0BY-dvTTNsWfhj0Ba0koHMbLc69sJrGeIgF0oCnLsebSx5-3Y9I/s1600/AchievementEmail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCM-Xs2qrRV0jfuAQbbXMvJuKky0_Jl4uaWFZyCjtV1uVSBJ3QgJfhyphenhyphenQrCRnq-R3LSEA9xO21yhV9ym4hX68-G0BY-dvTTNsWfhj0Ba0koHMbLc69sJrGeIgF0oCnLsebSx5-3Y9I/s640/AchievementEmail.png" width="640" /></a></div>
<br />
<br /></div>
<div>
<h2>
Mobile Sirens of Shame</h2>
</div>
<div>
We saved the best for last. We now have apps for just about every smartphone and tablet. We have apps for<br />
<br />
<ul>
<li><a href="https://play.google.com/store/apps/details?id=com.automatedarchitecture.sirenofshame&feature=nav_result#?t=W251bGwsMSwyLDNd">Android</a></li>
<li><a href="https://itunes.apple.com/us/app/siren-of-shame/id637677118?ls=1&mt=8">iPhone and iPad</a></li>
<li><a href="http://apps.microsoft.com/windows/en-US/app/siren-of-shame/1af0feaf-0801-4ad3-8a95-3f1226e313b9">Windows 8 tablets</a></li>
<li><a href="http://www.windowsphone.com/en-us/store/app/siren-of-shame/bd501294-b9a1-4c0f-b9cf-e6ec4596cdb1">Windows Phone 7 and 8</a></li>
</ul>
<br />
<h4>
Push Notifications</h4>
Now when the build breaks we send push notifications to your device(s). You'll get a modal dialog that pops up with who broke the build and their check-in comments. In Android you'll get build updates to your notification area. In Windows 8 and Windows Phone you'll get live tile updates with recent check-in details.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8LC51OCDhCnJEEdWvfq3DlObaPxw29CEcREFd2lL56hzqxiLM4CCuBgeGhb2nDwMFK-6UobfuGUH9wMuaYWGlruSNJsDH1sIJqrnfFPBra94_Wqu3h29PH2jm4pQz2NrVrytFdjw/s1600/win81.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8LC51OCDhCnJEEdWvfq3DlObaPxw29CEcREFd2lL56hzqxiLM4CCuBgeGhb2nDwMFK-6UobfuGUH9wMuaYWGlruSNJsDH1sIJqrnfFPBra94_Wqu3h29PH2jm4pQz2NrVrytFdjw/s320/win81.png" width="320" /></a></div>
<br />
<h4>
Badges</h4>
In iPhone, Windows Phone and Win8 if any of the builds your monitor are broken we'll throw a badge on the Siren of Shame icon to show a count of broken builds without even needing to open the app.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs1Zzo_6IWlF19aC6V374LEOs6g_2WeLkRJgx8-p2xBGuurWPRemu_DRNEP3ZZx3xP6cdaUbUSoNYDSoHE6V_eVujxglpuDISmMOZ120fx9ymQ-N4RZLsmvUK6PWCOqoOMJhcryCg/s1600/iPhoneBadge.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhs1Zzo_6IWlF19aC6V374LEOs6g_2WeLkRJgx8-p2xBGuurWPRemu_DRNEP3ZZx3xP6cdaUbUSoNYDSoHE6V_eVujxglpuDISmMOZ120fx9ymQ-N4RZLsmvUK6PWCOqoOMJhcryCg/s320/iPhoneBadge.PNG" width="212" /></a></div>
<br />
<h4>
Build Status, Leaders, News</h4>
When you open the app you can see all of your builds. In Android it looks like this.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://2.bp.blogspot.com/GQ-wkG_Mh-RVOURQbulEUHKefHzPJlMlrJmuPkHl8HCTXh6qqg6v5xHRRyif-OfnfA" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://2.bp.blogspot.com/GQ-wkG_Mh-RVOURQbulEUHKefHzPJlMlrJmuPkHl8HCTXh6qqg6v5xHRRyif-OfnfA" width="191" /></a></div>
<br />
You can drill down to view recent check-ins. <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://4.bp.blogspot.com/2XaTMrPzl5LKwbFx7kUifXaDf2SQ8bKz50HagTdvAwQTdnOkXpRbxzDXRY_UxpE3EfI" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://4.bp.blogspot.com/2XaTMrPzl5LKwbFx7kUifXaDf2SQ8bKz50HagTdvAwQTdnOkXpRbxzDXRY_UxpE3EfI" width="191" /></a></div>
<br />
<br />
We also show news from the Siren of Shame leader board like this in iOS:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://a1239.phobos.apple.com/us/r1000/107/Purple/v4/c0/91/0e/c0910efe-c1f1-47c6-98f8-2af136cfee0c/mzl.lguuvnnw.320x480-75.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://a1239.phobos.apple.com/us/r1000/107/Purple/v4/c0/91/0e/c0910efe-c1f1-47c6-98f8-2af136cfee0c/mzl.lguuvnnw.320x480-75.jpg" width="186" /></a></div>
<br />
<br />
Or the leaders from the Siren of Shame leaderboard like this in Windows Phone.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://cdn.marketplaceimages.windowsphone.com/v8/images/d3d922b0-bc4c-402a-9337-472b31877d38?imageType=ws_screenshot_large&rotation=0" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://cdn.marketplaceimages.windowsphone.com/v8/images/d3d922b0-bc4c-402a-9337-472b31877d38?imageType=ws_screenshot_large&rotation=0" width="192" /></a></div>
<br />
<br />
<b>Summary</b><br />
We hope you enjoy this new service. We've got some big plans for it in the works, so stay tuned in here, on <a href="http://facebook.com/sirenofshame">Facebook</a>, or on <a href="http://www.twitter.com/sirenofshame">twitter</a>. And as always please feel free to add comments we'd love to hear your feedback.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-15779962552585695362012-12-31T13:10:00.002-08:002012-12-31T13:43:32.994-08:00Reputation Algorithm Change<h2>
Happy New Year!</h2>
To celebrate we just changed the way we calculate reputation. This will result in a reputation increase for 41 users immediately and will be much nicer going forward.<br />
<br />
You used to gain one point for a successful build and lose four points for a failed build.<br />
<br />
Sadly there were quite a few users in the negative. The negative numbers appeared to occur due to high concentrations of failed builds occurring infrequently. In other words because someone was configuring the CI server.<br />
<br />
So rather than adjust number of points for failure we opted to disallow going negative. Thus if you're doing configuration you can at least have a lower bound.<br />
<br />
We recalculated everyone's reputation from the beginning of time. For example if your reputation was -3 because:<br />
<br />
1. You failed a build and lost 4 points = Reputation -4<br />
2. Then you passed a build and gained 1 = Reputation -3<br />
<br />
Then effective immediately your reputation will change to 1. In other words the with the new algorithm it should have been:<br />
<br />
1. You failed a build and stayed at zero because you can't go negative = Reputation 0<br />
2. Then you passed a build and gained 1 = Reputaiton 1<br />
<br />
Hopefully this will produce a slightly less shameful 2013. Happy New Year!Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-68984044516842909492012-11-08T19:56:00.001-08:002012-11-08T19:57:40.702-08:00Released 2.0.3<h2>
<b>Features</b></h2>
<ul>
<li>Can now sort columns in full screen mode by clicking on the column names (Issue #26)</li>
<li>Full screen mode displays on the monitor the app was last in (Issue #19)</li>
<li>Can hide users by right-clicking on them (and 'show all' from the menu to unhide)</li>
</ul>
<div>
<br /></div>
<h2>
Bug Fixes</h2>
<div>
<ul>
<li>Travis wasn't detecting server unavailable correctly</li>
<li>An error with one build in Hudson/Jenkins was shutting everything down, errors are now isolated</li>
<li>There is now more logging for when build statuses change to help diagnose issues some users are experiencing (Issue #40)</li>
<li>Attempted to fix the anonymously submitted "Cannot access a disposed object" bug (again)</li>
<li>Hudson/Jenkins wasn't always finding the author of a commit correctly</li>
</ul>
<div>
<br /></div>
<h2>
Acknowledgements</h2>
</div>
<div>
Big shout out to <a href="https://twitter.com/mightymuke">@mightymuke</a> who contributed almost all of the features and bug fixes in this release.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com3tag:blogger.com,1999:blog-3863702716094489.post-9918219351086157772012-10-04T23:52:00.002-07:002012-10-04T23:59:25.070-07:00Released 2.0.2A very boring <a href="http://code.google.com/p/siren-of-shame/downloads/detail?name=SirenOfShame-2-0-2.msi">release</a>.<br />
<br />
<h2>
<b>Bugs fixed</b></h2>
<br />
<ul>
<li>SoS now qualifies any build definitions that share a name</li>
</ul>
<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEKK6PlP8T-1BpzSW6bzdF4QaOLmYZeqJHTcP1fbtyZWcdxjkyQ1NVqtwKSSjVoFjHxf_JCP32CXMOByAeTNeu-2m-7OKvrYfo9nJjfM-Qn_l8nDGcvkJf_NHsEekEcTg7VGBGEOk/s1600/DuplicateNames.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhEKK6PlP8T-1BpzSW6bzdF4QaOLmYZeqJHTcP1fbtyZWcdxjkyQ1NVqtwKSSjVoFjHxf_JCP32CXMOByAeTNeu-2m-7OKvrYfo9nJjfM-Qn_l8nDGcvkJf_NHsEekEcTg7VGBGEOk/s400/DuplicateNames.png" width="400" /></a></div>
<ul>
<li>Added tool tips to the funnel icon in view user and view build pages</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<br style="text-align: left;" /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijeJkCnwCSDKDSfaSpSuvJCWrNjulbgh7mdF-xOoN4U6hUWS6Cgr_yGefaref5AWsg5Nv-a0m8kfqhmPGHDpg_AxpEK9CBxmFITkjX_XcwKqhsTYd-54cszJAjllZ6TvcdG4BbRuQ/s1600/filter.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEijeJkCnwCSDKDSfaSpSuvJCWrNjulbgh7mdF-xOoN4U6hUWS6Cgr_yGefaref5AWsg5Nv-a0m8kfqhmPGHDpg_AxpEK9CBxmFITkjX_XcwKqhsTYd-54cszJAjllZ6TvcdG4BbRuQ/s1600/filter.png" /></a></div>
<ul>
<li>Renaming a user now immediately renames them on build and user tiles</li>
<li>The user display name edit text box is no longer too "sticky"</li>
<li>The user image picker is no longer too "sticky"</li>
<li>Screensaver is now disabled in full-screen mode</li>
<li>Main page elements now line up correctly</li>
</ul>
<br />
<h2>
<b>Misc</b></h2>
Big thanks to everyone that reported bugs in 2.0, particularly <a href="http://twitter.com/mightymuke">@MightyMuke</a>, <a href="https://twitter.com/EricHoch">@EricHoch</a>, and <a href="https://twitter.com/DamianEdwards">@DamianEdwards</a>Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-54934133318220013682012-09-27T23:16:00.001-07:002012-09-27T23:42:44.195-07:00Siren of Shame 2.0For our <a href="http://code.google.com/p/siren-of-shame/downloads/detail?name=SirenOfShame-2-0-1.msi">first major release</a> we've got some great new stuff:<br />
<b><br /></b>
<b>New Features</b><br />
<br />
<ul>
<li>Complete UI overhaul </li>
<li>News feeds</li>
<li>User stats</li>
<li>Getting started wizard</li>
<li>View build page</li>
<li>View user page</li>
<li>SoS Online integration
</li>
<li>Moved to GitHub</li>
</ul>
<div>
<h3>
<b><br /></b></h3>
<h3>
<b>Complete UI Overhaul</b></h3>
<br />
We're banking on attractiveness bias. Hopefully the app is now so pretty that you won't care that it barely works.</div>
<div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZPL-TRGomewQRCtG2wyJ5lmiQ4r2N2UAZGPyexCsIKku84Z9KAOE0DukQ1AXvk0JqYW2QPmV20bYdnJYLrnZBhwHsFAk3sQzIvRWxH61_G2Y73CqhDJgvoYlgFC6kSaQC0kFC0Y/s1600/MainScreen.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="166" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8ZPL-TRGomewQRCtG2wyJ5lmiQ4r2N2UAZGPyexCsIKku84Z9KAOE0DukQ1AXvk0JqYW2QPmV20bYdnJYLrnZBhwHsFAk3sQzIvRWxH61_G2Y73CqhDJgvoYlgFC6kSaQC0kFC0Y/s400/MainScreen.png" width="400" /></a></div>
<br />
<br />
"Content first" was our primary objective. You should also notice:<br />
<br />
<ul>
<li>Pretty animations draw your attention to new content</li>
<li>Advanced options don't take up prime real estate</li>
<li>Users have custom pictures so you can more quickly identify who's done what (they will be customizable in a future release) </li>
<li>The app has more consistency in icons and fonts</li>
</ul>
For instance we hid the action bar at the top and redid all the icons (and no, it is not nor was it ever a ribbon):<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZcb9uRxLuatY1SYmRbbIUfKsDZHmq7SSBnVSkfE3LBPavGJP2rEAnDxoYjZHXLAjdIrgOOck7iZK9EgttFVm5rxkPUasGuRMStIhZLjZ5VYf7wCvPa2C-TL9ndqVB8u-L5kYfEF8/s1600/Ribbon.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="85" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZcb9uRxLuatY1SYmRbbIUfKsDZHmq7SSBnVSkfE3LBPavGJP2rEAnDxoYjZHXLAjdIrgOOck7iZK9EgttFVm5rxkPUasGuRMStIhZLjZ5VYf7wCvPa2C-TL9ndqVB8u-L5kYfEF8/s400/Ribbon.png" width="400" /></a></div>
<br />
In short we did like 5 minutes of research on design best practices and pretended we knew what we were doing.<br />
<br /></div>
<div>
<h3>
<b>News Feed</b></h3>
With the old app you could go out to lunch and your teammates could break the build like 15 times while adding insulting check-in comments, then make a legit check-in seconds before you get back and you'd never know. No more:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgSyF2-AsXycNy2woNXBXh1Cwly2seRmb6mdkcGr8RyD-2lyd0MRis6_d91MlceuKraffcnqzxc0XW38SF91ROIYVpwemg4Imp27Mx1iKual1t5HHQH1kNY9ksRUcUZlmFLqdO3sg/s1600/NewsFeed.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgSyF2-AsXycNy2woNXBXh1Cwly2seRmb6mdkcGr8RyD-2lyd0MRis6_d91MlceuKraffcnqzxc0XW38SF91ROIYVpwemg4Imp27Mx1iKual1t5HHQH1kNY9ksRUcUZlmFLqdO3sg/s400/NewsFeed.PNG" width="252" /></a></div>
<br />
<br />
<h3>
<b>User stats</b></h3>
<br />
This may be the coolest feature even if you aren't a baseball fan or an accountant:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYZx6gPI1StXqIgn37k6J9B_IK33eJ8kBVwwZUox8L8AwASzrCeok6ENcBXE7lPJLUdpVwWN7vPcUuE4HpWGwvl_HkEzBSvVahm8-uv3Lp-P7XKLC941uag2vCtB6CNJHRt1FfXGM/s1600/Leaders.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiYZx6gPI1StXqIgn37k6J9B_IK33eJ8kBVwwZUox8L8AwASzrCeok6ENcBXE7lPJLUdpVwWN7vPcUuE4HpWGwvl_HkEzBSvVahm8-uv3Lp-P7XKLC941uag2vCtB6CNJHRt1FfXGM/s400/Leaders.png" width="186" /></a></div>
<br />
Clockwise from top:<br />
<ul>
<li>[big number]: Reputation</li>
<li>[yellow disk]: Achievements</li>
<li>F: Fail percentage</li>
<li>CSB: Consecutive Successful Builds</li>
<li>T: Total Builds</li>
<li>FSB: # of times Fixed Someone else's Build</li>
</ul>
<br />
<b>Getting started wizard</b><br />
You're probably an existing user who could care less, but getting started is now far more obvious:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1BMkTj9f45J4oXzBVprfQ8q7YK6HAQ3VpXf9etPFbiHNeWpOfLlWkljWBTrzLfdJGWnfPvDqbSsiEoyWEFOU6IyMs-MhNVqepv3_vjQvRIwSywilhp0Ul9vIA5DynRkRl8H-6IIc/s1600/Wizard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="145" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1BMkTj9f45J4oXzBVprfQ8q7YK6HAQ3VpXf9etPFbiHNeWpOfLlWkljWBTrzLfdJGWnfPvDqbSsiEoyWEFOU6IyMs-MhNVqepv3_vjQvRIwSywilhp0Ul9vIA5DynRkRl8H-6IIc/s400/Wizard.png" width="400" /></a></div>
<br />
<br />
<b>View build page</b><br />
If you find yourself caring 99% about one build -- yet somewhat wanting to watch others in order to humiliate build breakers from other projects -- then you'll love this feature. Click the title of a build to get:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7jw-YYBK_PMU0gOA4NaB3uX8M-Pl7u_SkLVtz0UGdEqQMD99PABA37AA9CROMVx-8_AMrX4jcvtN_ExVC-FFGWMdwTgGPqW68sXtGqnZMhA2zlmrD8Po0Pshs3Y5_gXPp7OvESo/s1600/ProjectPage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC7jw-YYBK_PMU0gOA4NaB3uX8M-Pl7u_SkLVtz0UGdEqQMD99PABA37AA9CROMVx-8_AMrX4jcvtN_ExVC-FFGWMdwTgGPqW68sXtGqnZMhA2zlmrD8Po0Pshs3Y5_gXPp7OvESo/s400/ProjectPage.png" width="400" /></a></div>
<br />
<ul>
<li>The selected build always stays on top</li>
<li>News gets filtered to just the current build</li>
<li>Other projects are still visible, but few details</li>
<li>You get a pretty chart of the last 8 build times (numbers in minutes, newest on right)</li>
</ul>
<br />
<h3>
<b>View User Page</b></h3>
</div>
<div>
Click a user to get:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDXWviALQQs6o1xzmpltYHXGli6j9sFkB_8NSwwpMmTO1UUsc-d9mWVAO6T1MeglZ64Qci9WIInuQwlUutqwGEjP44abUNeSV4mbZlteTeJRp85-ZfL4CbPmILJBCJj6xihqf6eyQ/s1600/PersonPage.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="157" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDXWviALQQs6o1xzmpltYHXGli6j9sFkB_8NSwwpMmTO1UUsc-d9mWVAO6T1MeglZ64Qci9WIInuQwlUutqwGEjP44abUNeSV4mbZlteTeJRp85-ZfL4CbPmILJBCJj6xihqf6eyQ/s400/PersonPage.png" width="400" /></a></div>
<br />
From here you can<br />
<ul>
<li>View news, filtered to just the current user</li>
<li>View achievements</li>
<li>Change a photo</li>
<li>Edit a display name</li>
</ul>
<div>
<br /></div>
<h3>
<b>SoS Online Integration</b></h3>
Who isn't into public humiliation, right? Or at least some heckling. We now show all SoS Online content right there in the news feed. If you want to shame someone just type in the textbox and hit enter. And thanks to SignalR everything is instantaneous.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2zN40iJzAwT7-BlrMXZru4pi3p46Y1hq-Ycd6l7mjWORGL1lCQiEvAk-bOb1uu3lTvV9BttQiNxGpBMW1KFoUv0aOGQmJriV_2vGsYpCZjIxWOJU3uj512ogyPCB24VLnPWbVF4/s1600/SosOnline.PNG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg2zN40iJzAwT7-BlrMXZru4pi3p46Y1hq-Ycd6l7mjWORGL1lCQiEvAk-bOb1uu3lTvV9BttQiNxGpBMW1KFoUv0aOGQmJriV_2vGsYpCZjIxWOJU3uj512ogyPCB24VLnPWbVF4/s1600/SosOnline.PNG" /></a></div>
<br />
<h3>
<b>Moved to GitHub</b></h3>
We finally did it. We'll keep task requests and releases on Google for now, but the code will love in GitHub at the following location:<br />
<br />
<a href="https://github.com/AutomatedArchitecture/SirenOfShame">https://github.com/AutomatedArchitecture/SirenOfShame</a><br />
<br />
<h3>
<b>Bugs</b></h3>
We fixed some. We introduced a ton. When you find them please see <a href="http://sirenofshame.blogspot.com/2012/01/how-to-report-errors.html">How to Report Errors</a>.<br />
<br />
<h3>
<b>Major Refactoring</b></h3>
If you care to open the hood we're now slightly less embarrassed by what you'll find (particularly with the rules engine).<br />
<br />
<h3>
<b>Summary</b></h3>
We've added lots of great new functionality which we hope will help you increase code quality while having a bit of fun. Please post your feedback below in the comments, on <a href="https://twitter.com/sirenofshame">twitter</a>, on our <a href="http://code.google.com/p/siren-of-shame/issues/list">issues list</a>, on <a href="http://www.facebook.com/SirenOfShame">facebook</a>, or heck on <a href="http://sirenofshame.com/leaders">SoS Online</a>.</div>
Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com4tag:blogger.com,1999:blog-3863702716094489.post-38796555128908171362012-08-01T06:57:00.001-07:002012-08-01T08:25:05.988-07:00A Year of ShameA year ago we figured we'd maybe sell a couple of these things. But since September of 2011 we have averaged a sale of one and a half units per week. That's 71 units to 61 Locations Worldwide. We've shipped Siren of Shame units to thirteen countries. We've had generous open source advocates buy us 44 beers! <br />
<br />
Not too bad for a couple of guys working out of a basement in their spare time. Thank you to everyone who has helped including friends, patient customers, and especially family.<br />
<br />
And here's a cool map of locations we've shipped to:<br />
<br />
<iframe frameborder="0" height="550" src="http://batchgeo.com/map/f62d40df02ae4e04d207c9770e37372b" style="border-radius: 10px; border: 1px solid #aaa;" width="100%"></iframe><br />
<small>View <a href="http://batchgeo.com/map/f62d40df02ae4e04d207c9770e37372b">Siren of Shame Units Worldwide</a> in a full screen map</small>Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com3tag:blogger.com,1999:blog-3863702716094489.post-30273441323628247732012-07-19T21:43:00.003-07:002012-07-19T22:07:35.400-07:00How To Reset ReputationIf you've got a negative reputation in SoS Online and were considering just creating a new account, but didn't want to lose your achievements, we now have a solution.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrhf-mnHAmVOVhNE0amJUVTXC_rg9_CrsXQDA1aF41KeWtah2TwU1g0GA4iv5Iz2LQzTv-oG9PSlL6Fdr2hUeZptFnsNj419eI4JJWR5PI3llBQtTF6VnmfvXyv9RAQqoWQhfDE-M/s1600/ResetReputation.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrhf-mnHAmVOVhNE0amJUVTXC_rg9_CrsXQDA1aF41KeWtah2TwU1g0GA4iv5Iz2LQzTv-oG9PSlL6Fdr2hUeZptFnsNj419eI4JJWR5PI3llBQtTF6VnmfvXyv9RAQqoWQhfDE-M/s400/ResetReputation.png" width="400" /></a></div>
<br />
Go to your profile page. Click Activity. Click the new "Reset Reputation" link. Your reputation will reset to zero and your achievements will remain. <br />
<br />
The only down side is that the reputation reset will be visible in the leader board activity feed.Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com3tag:blogger.com,1999:blog-3863702716094489.post-85989382560632611432012-07-19T16:52:00.002-07:002012-07-19T16:56:39.324-07:00Travis CI Support in Siren of Shame 1.6One of the new features in <a href="http://sirenofshame.blogspot.com/2012/07/released-16.html">Siren of Shame 1.6</a> is support for <a href="http://travis-ci.org/">Travis</a>. If you aren't familiar with Travis it's an awesome continuous integration server that works with GitHub projects. No dedicated server required.<br />
<br />
The beauty of this new feature is you can now gain reputation and earn achievements on your side projects in addition to your professional work. Even if you have two instances of Siren of Shame, one at work and one at home, if they're both syncing to SoS online your reputation and achievements will be merged for purposes of <a href="http://sirenofshame.com/leaders">the leader boards</a>.<br />
<br />
Adding Travis to Siren of Shame is slightly different than other CI servers because there is no authentication and projects are based on owner name and project name rather than url.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_aqInKoqTAYuZ0B7ASY5x9btmAwbPqA73qVd1VtDthog2jFa1F9YxYMOr6ooxphPx2DexPSUHXBCvYbStDN1tFOD_mu7gLbaFX0Nr5mRn-uQz5Xaa0osh-F3U7aPCZS6rTRzSaGE/s1600/travis.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="189" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj_aqInKoqTAYuZ0B7ASY5x9btmAwbPqA73qVd1VtDthog2jFa1F9YxYMOr6ooxphPx2DexPSUHXBCvYbStDN1tFOD_mu7gLbaFX0Nr5mRn-uQz5Xaa0osh-F3U7aPCZS6rTRzSaGE/s320/travis.png" width="320" /></a></div>
<br />
Other than that once you've added the project it will look just like a Jenkins, Team City or any other supported CI server.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglIL1FyBndIRy2i-0wZwBXyLv4TO-qsm6hvKbXlvwhgPrHcP6kItAVp8oXhV_DW0qGyWSGWYrGCM5FypgR9i-pPIS6O_tHtx4GhkAnHHO-2MipldaszK-KRqwuAKsZ5vwou02okKY/s1600/travis2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="117" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEglIL1FyBndIRy2i-0wZwBXyLv4TO-qsm6hvKbXlvwhgPrHcP6kItAVp8oXhV_DW0qGyWSGWYrGCM5FypgR9i-pPIS6O_tHtx4GhkAnHHO-2MipldaszK-KRqwuAKsZ5vwou02okKY/s400/travis2.png" width="400" /></a></div>Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-89321737418276632272012-07-06T15:13:00.000-07:002012-08-23T23:46:00.694-07:00Released 1.6<span>We've got some awesome new features. Here's what's new:</span><br />
<b><br /></b>
<span><b>Achievements</b> </span><br />
Because why not gamify continuous integration?<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju84vg7rvfo-y1pibQlCZ3zsng6qKhSNgn4Z0NoucEoiufFSZG5PYzgxKBImxVMMZz3djv2Tf8EzyGoWnCBp3QSSHlHqgWMIVm6ebq9T6JCO9tyAD304_3LTX-2Jwlmq_ARzyXIMg/s1600/AndGotAwayWithIt.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="135" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju84vg7rvfo-y1pibQlCZ3zsng6qKhSNgn4Z0NoucEoiufFSZG5PYzgxKBImxVMMZz3djv2Tf8EzyGoWnCBp3QSSHlHqgWMIVm6ebq9T6JCO9tyAD304_3LTX-2Jwlmq_ARzyXIMg/s400/AndGotAwayWithIt.png" width="400" /></a></div>
<br />
Some of our favorites are "CI Ninja" which you get when you fix someone else's build. Or "Macgyver" which you get when you reduce build times by 15%.<br />
<br />
View the <a href="http://sirenofshame.com/Achievements">full list of 23 achievements</a> on our website. As an existing user we'll even retroactively find achievements from the time you started using the app. You can also now view an individual's achievements by clicking on their name:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6b-iTI9CjU3dOLVes2g4sEXQ7hv7Qx6r5IFyVZqSYlKRnuQFd61M0VpTylJrjaYeVLY2qj7CMLIeAzzSgyv3wfh4iAWMz2NWhWTEt5P-YUk5TyYMcjZZpXNncYTExCQJVq-UP16Q/s1600/ViewPerson.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6b-iTI9CjU3dOLVes2g4sEXQ7hv7Qx6r5IFyVZqSYlKRnuQFd61M0VpTylJrjaYeVLY2qj7CMLIeAzzSgyv3wfh4iAWMz2NWhWTEt5P-YUk5TyYMcjZZpXNncYTExCQJVq-UP16Q/s400/ViewPerson.png" width="400" /></a></div>
<br />
<br />
<b>SoS Online</b><br />
What good are achievements and reputation if you can't do a little smack talk? You can do that with the SoS Online button:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyoEWN7GiGBylvlWHFpCXJB2Xki4sxjUWQXgDNJuSNzVCTb517urZu9SIzKAEA9ElOabEPBcD9f6pFcqO8K4nqwg8RNquA0bv5qEjpR_y95Pgsee0qj8Z1ZY3DZLzG9roRgtraQgM/s1600/ConfigureSosOnline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyoEWN7GiGBylvlWHFpCXJB2Xki4sxjUWQXgDNJuSNzVCTb517urZu9SIzKAEA9ElOabEPBcD9f6pFcqO8K4nqwg8RNquA0bv5qEjpR_y95Pgsee0qj8Z1ZY3DZLzG9roRgtraQgM/s320/ConfigureSosOnline.png" width="320" /></a></div>
<br />
If you create a free account and click "Sync whenever I trigger a build" we'll put you on the <a href="http://sirenofshame.com/Leaders">leader boards</a> and keep your personal page up to date:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lfM4yyTxYkzYp0zlfKC26mBz4nkZZz-9SbGs2QmFh6CEv30A5aK9NyRtn6mJmodUDxJ5Cq9i1XMu0_Ldf-uU94tAJ1QKvQ2RE_k-URZC-Uglt058qR5SBctgL9zAIZ1jZHljQ_A/s1600/SosOnlineUser.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="283" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj8lfM4yyTxYkzYp0zlfKC26mBz4nkZZz-9SbGs2QmFh6CEv30A5aK9NyRtn6mJmodUDxJ5Cq9i1XMu0_Ldf-uU94tAJ1QKvQ2RE_k-URZC-Uglt058qR5SBctgL9zAIZ1jZHljQ_A/s400/SosOnlineUser.png" width="400" /></a></div>
We even have the capability to manually sync if you've got crazy firewall rules or work disconnected.<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjijMzL4rFJ3McJHa8viO8p91Lvy0JEI6P9Za8Y0aRQmgonVUSjyLQ1tiVaAS_oxrl3184xht-Q8YV_Hn3RhPlf_Ey6kmyT0Q38AVnQUPblu7SwpjeQ6gRtOTvouFiky6EbytBSQKE/s1600/Offline.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="265" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjijMzL4rFJ3McJHa8viO8p91Lvy0JEI6P9Za8Y0aRQmgonVUSjyLQ1tiVaAS_oxrl3184xht-Q8YV_Hn3RhPlf_Ey6kmyT0Q38AVnQUPblu7SwpjeQ6gRtOTvouFiky6EbytBSQKE/s320/Offline.png" width="320" /></a></div>
<br />
We'll provide more details on achievements and SoS online in a future post. We hope you enjoy and would love to hear your thoughts in the comments section.<br />
<br />
<b>Setup</b><br />
You shouldn't even notice, but switching to Wix toolset should make the setup experience as smooth as butter.<br />
<br />
<span><b>New CI Server: Travis </b></span><br />
<span>That's the one that runs against GitHub projects. We'll provide more <a href="http://sirenofshame.blogspot.com/2012/07/travis-ci.html">Travis details</a> in a future post. </span><br />
<br />
<b>New CI Server: Buildbot</b><br />
Thanks to <a href="https://twitter.com/bubbafatass">@BubbaFatAss</a> for this contribution.<br />
<br />
<b>Minor Features</b><br />
<br />
<ul>
<li><span>When people's reputation changes you can see the delta and a pretty fade animation</span></li>
<li><span>The error dialog now allows you to specify contact information</span></li>
<li><span>The firmware upgrade process is simpler there should be no more HidD_SetOutputReport bugs</span></li>
<li><span>You can now connect to TFS with a named account rather than your windows account</span></li>
<li><span>The SoS splash screen now displays the product version</span></li>
<li><span>If SoS gets an error while retrieving build status it now assumes the server is unavailable and won't send an error report unless you click a new button in the lower left of the status bar</span></li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNFdj6sjvUGAAAxZhnHGg5OIxwoEz97ZiDu3GMdYvOEOAhlh23QyXbbw2CIiofFQNIADYNhDDxYASpUum6eYmksMGtjftZlGlfihxXWVZVDNbqqF9Hfz8FxI3EVHd_l_cGFDWgbL0/s1600/ServerUnavailable.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="171" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjNFdj6sjvUGAAAxZhnHGg5OIxwoEz97ZiDu3GMdYvOEOAhlh23QyXbbw2CIiofFQNIADYNhDDxYASpUum6eYmksMGtjftZlGlfihxXWVZVDNbqqF9Hfz8FxI3EVHd_l_cGFDWgbL0/s400/ServerUnavailable.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<br />
<b>Bugs Fixed</b><br />
<br />
<ul>
<li><span>Issue #25: If you double click a build for TFS it now goes to the build status page rather than the artifact's page</span></li>
<li><span>Issue #22: Dates displayed on the main page are now culture-aware (e.g. d/M in europe, M/d in the US)</span></li>
<li><span>Issue #21: If you use Hudson or Jenkins with and set it's "Internal URL" incorrectly SoS no longer dies a terrible death</span></li>
<li><span>Issue #20: If two builds occur simultaneously in TFS SoS no longer bugs out</span></li>
<li><span>Issue #18: If you connect to TFS using someone else's credentials they are passed correctly in all API calls</span></li>
<li><span>Issue #16: SoS now runs under non-admin accounts</span></li>
<li><span>Issue #15: When you go back and edit the list of builds you're watching SoS defaults old watched builds to being checked</span></li>
<li><span>Issue #14: If you use Hudson or Jenkins with and set it's "Internal URL" incorrectly SoS no longer dies a terrible death</span></li>
<li><span>Issue #13: When you have multiple SoS instances open in different windows accounts SoS now gives a nice error message</span></li>
<li><span>If Team City runs a scheduled clean up jobs it no longer confuses SoS</span></li>
<li><span>If you haven't associated .log with a default app in Windows and you view the log you no longer get an error</span></li>
<li><span>If you have rules to make the LED lights on the device stop sometimes they would never stop</span></li>
</ul>
<br />Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0tag:blogger.com,1999:blog-3863702716094489.post-5686543484902744142012-06-04T06:21:00.002-07:002012-06-04T06:22:45.546-07:00Bug Prioritization<b>Bug Prioritization</b><br />
<br />
Ever seen something like this while running the siren of shame software?<br />
<br />
<div class="separator" style="clear: both; text-align: left;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzhBDzIRqDlNWR8Zf7owIWbW_KwTvs0EXgF8-qPyejq15lI-EaROjJ2sQ5h6Je6I1kjt0PSAwvcZ2WTJCgPlIXR1X01Pp0ps08z9g238EpABxfwfD8OFqWf7uCYyAoc4dvDsGpu1o/s1600/ErrorScreenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="245" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzhBDzIRqDlNWR8Zf7owIWbW_KwTvs0EXgF8-qPyejq15lI-EaROjJ2sQ5h6Je6I1kjt0PSAwvcZ2WTJCgPlIXR1X01Pp0ps08z9g238EpABxfwfD8OFqWf7uCYyAoc4dvDsGpu1o/s400/ErrorScreenshot.png" width="400" /></a></div>
<br />
<br />
When you click the <i>send</i> button it shoots us an e-mail with the stack trace, and (as of version 1.6) some optional contact information.<br />
<b><br /></b><br />
<b>Ways to Submit Bugs</b><br />
This dialog represents one of three ways to submit bugs. In addition to in-app bug reports we additionally welcome your patches and pull requests, and as described in <a href="http://sirenofshame.blogspot.com/2012/01/how-to-report-errors.html">how to report bugs</a> we accept bug reports through Google Code.<br />
<b><br /></b><br />
<b>Priority</b><br />
Unless we see a large number of similar errors we typically prioritize anything submitted via the in-app dialog as low. In other words we probably won’t get to it any time soon. For the fastest response we love patches and a pull requests. But we’ll also get right on that if you submit the bug via Google Code over here:<br />
<br />
<a href="http://code.google.com/p/siren-of-shame/issues/list">http://code.google.com/p/siren-of-shame/issues/list</a><br />
<br />
That will allow us to start a dialog with you, gain context into your error, request relevant parts of your log files (see <a href="http://sirenofshame.blogspot.com/2012/01/how-to-report-errors.html">how to report bugs</a>), try very hard to reproduce your error, and allow others with the same error to diagnose their problem and sign up for status notifications. <br />
<b><br /></b><br />
<b>tl;dr</b><br />
We welcome in-app bug reports, we prefer Google code issues, we really love patches pull and requests. Regardless we appreciate all your help in making Siren of Shame the best build monitor software around.Lee Richardsonhttp://www.blogger.com/profile/01314803491511307042noreply@blogger.com0