tag:blogger.com,1999:blog-105595222024-03-05T16:19:39.513+00:00CurlyIT Geek.
Gadget Freak.
Java Chic.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.comBlogger55125tag:blogger.com,1999:blog-10559522.post-65575094017982831942013-04-20T14:34:00.000+01:002014-01-05T09:53:35.999+00:00Connecting to the Polar Personal Trainer Site<h3>
Connecting to the Polar Personal Trainer Site</h3>
<div>
A number of people have requested access to the comms code that I use in the <a href="http://rikara.blogspot.co.uk/2009/04/uploading-old-polar-hrm-data-to-polar.html">Polar HRM Uploader tool</a> I created. Because of this, I've decided to write about the software here and offer it free for non-commercial use. It's not a complete implementation, you will still need to write your own HRM readers and convert that to the Polar format, but the attached code should give you a good starting point.</div>
<div>
<br /></div>
<div>
The communications protocol has been reversed engineered by intercepting the communications between <a href="http://www.polar.com/en/support/Polar_WebLink_Software?product_id=487&category=downloads">Polar's WebLink</a> and the <a href="https://www.polarpersonaltrainer.com/">Polar Personal Trainer Site</a>. I used an intercepting proxy, called <a href="http://portswigger.net/burp/proxy.html">BurpProxy</a>, that does a great job of displaying the content of HTTP traffic. Luckily, the Polar protocol is in plain text so it makes it relatively straightforward to determine what is required.<br />
<br />
Click here to <a href="http://www.softwyer.com/softwyer-hrm.zip">download all the source files</a> in one archive. The code is also on <a href="https://github.com/1ka/HRMUploader">GitHub</a></div>
<h3>
The Communications Protocol</h3>
<div>
Uploading to the Polar Site is a three stage process:</div>
<div>
<ol>
<li>Login. This stage requires that you authenticate with the Polar site using a <a href="http://en.wikipedia.org/wiki/Basic_access_authentication">basic-auth</a> method. You can see an example of the <a href="http://www.softwyer.com/PPT1.txt">login handshake here</a>.</li>
<li>Upload the timestamps of HRM files. The Polar site will then validate the files and return a response which indicates which files have already been uploaded. You can see an example of the <a href="http://www.softwyer.com/PPT2.txt">timestamp handshake here</a>.</li>
<li>Upload the files. The files are uploaded using a simple XML format. You can see an example of <a href="http://www.softwyer.com/PPT3.txt">uploading files here</a>.</li>
</ol>
<h3>
XML Marshalling</h3>
</div>
<div>
Since we need to convert from Java to XML, we use an XML data binding library called <a href="http://castor.codehaus.org/index.html">Castor</a>. Java has come along way since I originally wrote this code and you can now use Java's JAXB reference implementation to do something similar.</div>
<div>
<br /></div>
<div>
There's a number of <a href="http://castor.codehaus.org/xml-framework.html">good examples</a> on the Castor site that shows how to use the libraries.</div>
<div>
<br /></div>
<div>
Click the link to get the <a href="http://www.softwyer.com/mapping.xml">Castor mapping file</a> that I've used.<br />
<br />
The code below shows a snippet of the XML format used by Polar.</div>
<div>
<br /></div>
<div>
<pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: auto; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> <wristunit-data>
<prop name="subModel">166</prop>
<prop name="version">2</prop>
<object name="userSettings">
<prop name="maxhr">186</prop>
<prop name="resthr">50</prop>
</object>
<collection name="Exercises">
<item type="Exercise">
<prop name="origin">1</prop>
<prop name="time">2011-08-22 17:39:52.000</prop>
<prop name="save">True</prop>
<object name="mode">
<prop name="speed">True</prop>
<prop name="cadence">True</prop>
</object>
...
</code></pre>
<br />
We represent each element with a Java object:</div>
<div>
<ul>
<li><a href="http://www.softwyer.com/Property.java">Property</a>. These are the core elements on the Polar message that describe a name and value. They have an optional type.</li>
<li><a href="http://www.softwyer.com/Item.java">Item</a>. An Item is a collection of Polar objects and it has a Type and an optional Index.</li>
<li><a href="http://www.softwyer.com/Collection.java">Collection</a>. A named list of Items, e.g. exercises.</li>
<li><a href="http://www.softwyer.com/PolarObject.java">Polar Object</a>. A named collection of Properties.</li>
<li><a href="http://www.softwyer.com/WristUnitData.java">Wrist Unit Data</a>. A wrapper object for the message.</li>
<li><a href="http://www.softwyer.com/Webservice.java">Webservice</a>. A wrapper object for the Polar response.</li>
</ul>
<div>
You can download these files by clicking on the links or view them on <a href="https://github.com/1ka/HRMUploader">GitHub</a>.</div>
</div>
<h3>
Communications Code</h3>
<div>
The communications code is based upon standard Java <a href="http://docs.oracle.com/javase/6/docs/api/java/net/HttpURLConnection.html">HTTPUrlConnection</a> and is contained in the class PolarSiteConnection. This contains simple methods for connecting to the Polar site, sending data and parsing the response.</div>
<div>
<br /></div>
<div>
It encapsulates the Castor data binding too, which is adequate for my project but not generic enough as there's no easy means of implementing an alternative library without some refactoring of the code.</div>
<div>
<br /></div>
<div>
Here's a simple example of how to use the code to login:<br />
<br /></div>
<pre style="background: #f0f0f0; border: 1px dashed #CCCCCC; color: black; font-family: arial; font-size: 12px; height: 400px; line-height: 20px; overflow: auto; padding: 0px; text-align: left; width: 99%;"><code style="color: black; word-wrap: normal;"> private void processLogin() {
// Update the status on the main dialog.
controlledFrame.setStatusMessage("Logging into Polar website...");
// Get the dialog credentials and try to connect.
String username = loginDialog.getUsername();
String password = loginDialog.getPassword();
System.out.println("Site connection is: " + siteConn);
// Pass these to the connection class.
****
Webservice ws = siteConn.intiateConnection(username, password);
****
if (ws == null) {
controlledFrame.setStatusMessage("Cannot connect to Polar site");
} else {
Status s = ws.getStatus();
if (s.isOK()) {
userPreferences = ws.getUserPreferences();
controlledFrame
.setStatusMessage("Logged into Polar website as user "
+ userPreferences.getFirstName() + " "
+ userPreferences.getLastName());
setAppState(AppState.LOGGED_IN);
} else {
controlledFrame
.setStatusMessage("Cannot log into the Polar website.");
}
}
}
</code></pre>
<div>
<br /></div>
<div>
Note that the variable <b>siteConn </b>is an instance of PolarSiteConnection. The lines wrapped in **** are the interesting bits that send data to Polar.<br />
<br />
PolarSiteConnection also uses a library to convert the password to Base64 as part of the Basic-Auth authentication. You'll need to source your own copy of this as the licensing around the one I use prevents me from distributing it.</div>
<div>
<br />
<br /></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<br /></div>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com13tag:blogger.com,1999:blog-10559522.post-16716774341067766712011-11-03T21:31:00.002+00:002014-04-22T21:21:42.864+01:00Uploading Old Polar HRM Data to the Polar Personal Trainer Website<div>
(<b>Update 22nd April 2014</b>: Newer version of the <a href="http://www.softwyer.com/HRMUploader.jar">HRMUploader</a> jar fixes an issue with HRZones if there are more than five defined in the HRM file) </div>
<div>
<br /></div>
I'm a keen cyclist and have used a Heart Rate Monitor of various descriptions for a number of years. I've religiously downloaded this data onto the PC and stored it in the various applications that come with the monitor. Not that I do anything with it, though I did get part way through writing an application to store the data in a relational database and then display multiple rides overlaid on one another for visual comparison. Anyway, I digress.<br />
<br />
More recently I've bought Polar HRMs, they are great products with useful features for cycling. Years ago I wrote a Java application that converted the 'other' HRM files to the Polar format, so that all rides and associated HRM data could be shown in the latest Polar application on the PC.<br />
<br />
Polar have caught onto the web, and have <a href="https://www.polarpersonaltrainer.com/">launched a site</a> that allows you to transfer your data from the HRM to the web. Great for current stuff, but what about all those old files I have? In their wisdom, Polar have not released a tool that allows me to upload the data I've got on my PC.<br />
<br />
There are a <a href="http://forum.polar.fi/showthread.php?t=586">few people around</a> who would, like me, prefer to have all their data on the web, and want to upload their old data. Being a professional Java developer, I thought it would be a doddle to create a Java Application that interfaced with the Polar web site and allowed me to transfer my data. And, in general, it was. <a href="http://www.softwyer.com/HRMUploader.jar">So here is a Java application that does this</a>. It's a little crude, but does the job.<br />
<br />
<blockquote style="font-family: verdana;">
Just run it with:<br />
<br />
java -jar HRMUploader.jar<br />
<br />
<br />
Enter your Polar Personal Trainer userid and password. If you log in successfully, then you will see your name in the lower status pane.<br />
<br />
Browse to your polar .hrm files and select one or more (try it with one first :) ) The application will check the site to see if it's already uploaded a file for this date. If it has, it will put a check mark against the file, if it hasn't then use the upload button to upload the file. It won't upload a file that is already on the site, you will have to delete it from the site if you want to resend it.<br />
<br />
There are no guarantees that this will work for you. Might be worth opening another 'test' account on the Polar site and trying it out there first. Whilst you can select many files to upload at once, it might be worth limiting it to 10 or so at a time - the Polar site might choke on too many. I just tried it with about 70 and it took a while, but seemed to work.</blockquote>
<br />
<b>Regarding calories expended</b>. <br />
<br />
This value is read from the associated PDD file and needs to be in the same directory as your HRM file. There's one PDD file for each day, so you could have many HRM files that reference the same PDD if you do multiple exercises per day. In these cases, you are unlikely to be able to read the PDD as it will not have the same name as the HRM file. Unfortunately, when I originally wrote the HRMUploader, I didn't realise I needed to read the PDD too. Ideally I need to change the application to read the PDD first, since this contains all the HRM file names. However, I'm not planning to do this any time soon, sorry.<br />
<br />
<b>Altitude data</b><br />
<br />
Altitude data is sent to the Polar site in 'feet'. This means that if you are using meters in your HRM file, then the conversion to and from feet could result in a rounding error.<br />
<br />
Furthermore, I seem to recall a bug in the HRM files that stores altitude as feet, even though the file is supposed to be metric. Send me a HRM file example if you suspect the altitude is being uploaded incorrectly.<br />
<br />
Here's the code to <a href="http://rikara.blogspot.co.uk/2013/04/connecting-to-polar-personal-trainer.html">interface with the Polar site</a>
<br />
<br />
At some point I'd like to host this on the Google Java App Server, but they've done some funny stuff with Java and restricted various classes in the default 'JRE'. It means that some stuff which should work under <a href="http://en.wikipedia.org/wiki/Write_once,_run_anywhere">Java's WORA mantra</a> doesn't.<br />
<br />
The application uses various libraries from <a href="http://jakarta.apache.org/">Apache</a>, <a href="http://code.google.com/appengine/docs/java/overview.html">Google</a> and <a href="http://castor.codehaus.org/">Castor</a>. All their respective rights are recognised. The software is supplied 'as-is' and you use it at your own risk. You did back that data up, right?Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com152tag:blogger.com,1999:blog-10559522.post-6389002657807448882011-02-12T09:38:00.001+00:002011-02-12T09:39:44.220+00:00Tune Announcer - Scrobble LinksNoticed with the latest <a href="https://market.android.com/details?id=com.songbirdnest.mediaplayer">Songbird release for Android</a> they support multiple Scrobble clients but broadcast them ALL!<br />
<br />
Whilst it's probably a bug, as no other player does this, I've modified Tune Announcer to let the user select which ones to receive. Mainly because I want to use Songbird.<br />
<br />
However, it took me a while to find which scrobble broadcasts did what (note to self: Code comments are useful), so here is a list of the scrobble sites:<br />
<br />
<ul><li><a href="http://code.google.com/p/a-simple-lastfm-scrobbler/">Simple Last-FM Scrobbler</a></li>
<li><a href="http://code.google.com/p/scrobbledroid/">Scrobble Droid</a></li>
<li><a href="https://github.com/c99koder/lastfm-android/wiki/scrobbler-interface">Last-FM Scrobble Interface</a></li>
</ul><div>There's also the default clients (Android and HTC),no info on these other than they broadcast the following:</div><div><br />
</div><div><div class="p1" style="color: #423cfc; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="s1" style="color: black;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span class="s2" style="color: #0a9192;"><</span><span class="s3" style="color: #519191;">action</span><span class="s1" style="color: black;"> </span><span class="s4" style="color: #922590;">android:name</span><span class="s1" style="color: black;">=</span>"com.android.music.playstatechanged"<span class="s1" style="color: black;"> </span><span class="s2" style="color: #0a9192;">/></span></div><div class="p1" style="color: #423cfc; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="s1" style="color: black;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span class="s2" style="color: #0a9192;"><</span><span class="s3" style="color: #519191;">action</span><span class="s1" style="color: black;"> </span><span class="s4" style="color: #922590;">android:name</span><span class="s1" style="color: black;">=</span>"com.android.music.metachanged"<span class="s1" style="color: black;"> </span><span class="s2" style="color: #0a9192;">/></span></div><div class="p1" style="color: #423cfc; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="s1" style="color: black;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span class="s2" style="color: #0a9192;"><</span><span class="s3" style="color: #519191;">action</span><span class="s1" style="color: black;"> </span><span class="s4" style="color: #922590;">android:name</span><span class="s1" style="color: black;">=</span>"com.htc.music.metachanged"<span class="s1" style="color: black;"> </span><span class="s2" style="color: #0a9192;">/></span></div><div class="p1" style="color: #423cfc; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="s1" style="color: black;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span class="s2" style="color: #0a9192;"><</span><span class="s3" style="color: #519191;">action</span><span class="s1" style="color: black;"> </span><span class="s4" style="color: #922590;">android:name</span><span class="s1" style="color: black;">=</span>"com.htc.music.playbackcomplete"<span class="s1" style="color: black;"> </span><span class="s2" style="color: #0a9192;">/></span></div><div class="p1" style="color: #423cfc; font: normal normal normal 11px/normal Monaco; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span class="s1" style="color: black;"><span class="Apple-tab-span" style="white-space: pre;"> </span></span><span class="s2" style="color: #0a9192;"><</span><span class="s3" style="color: #519191;">action</span><span class="s1" style="color: black;"> </span><span class="s4" style="color: #922590;">android:name</span><span class="s1" style="color: black;">=</span>"com.htc.music.playstatechanged"<span class="s1" style="color: black;"> </span><span class="s2" style="color: #0a9192;">/></span></div></div><div><span class="s2" style="color: #0a9192;"><br />
</span></div><div>They are very similar to the others in content.</div><div><br />
</div><div><br />
</div><div><br />
</div><div><br />
</div>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-8745987690788238372011-01-30T19:20:00.000+00:002011-01-30T19:20:17.641+00:00Gestures Download FileUsers of Contact Lookup can create their own gestures file. See <a href="http://softwyer.wordpress.com/2011/01/30/roll-your-own-gestures/">this blog post</a> for more details.<br />
<br />
<span class="Apple-style-span" style="font-size: large;">To get the pre-built file, then <a href="https://sites.google.com/a/softwyer.com/www/gestures">click this link</a>.</span><br />
<span class="Apple-style-span" style="font-size: large;"><br />
</span><br />
<span class="Apple-style-span" style="font-size: x-small;">(Apologies for bouncing you from one blog to another, but this blog has analytics so I can track how much interest there is in gestures).</span>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-86765186851872867722010-12-28T12:23:00.001+00:002010-12-28T12:31:11.616+00:00Customising Google Search<b>Spam Sites in Search</b><br />
<br />
How many times have you clicked on a Google search result only to be presented with a spam site that just wraps other site content with ads? I find technical searches on Google are littered with this dross. It's pissed me off enough to look at using Bing and Bing is far better at hiding this crap from the search list.<br />
<br />
I tried <a href="https://chrome.google.com/extensions/detail/hbodbmhopadphbloiimamkjmihekaejd?hl=en-gb">this chrome extension</a>, and whilst the idea is sound, it doesn't work particularly well with instant search.<br />
<br />
However, there is another option. Use a customised Google Search Site. You can <a href="http://www.ehow.com/how_6752589_create-blacklist-google-search-results_.html">read more here</a> on how to set this up. Whilst the screen looks very basic, it does work at removing dross sites, although you do need to manually blacklist each one 'as you find it'. <br />
<br />
You can even link this into chrome to be the default search engine. You'll need to tweak a few things in the URL to get it to work, specifically adding %s to indicate where the search terms need to go. Want dated searches? Add &tbs=qdr:y to get results in the last year and add the date select to your searches.<br />
<br />
So finally, I have a Google search that can filter out those spastic sites.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-43289984296311001832010-12-15T17:47:00.000+00:002010-12-15T17:47:12.115+00:00Moving to WordPressThe Android posts have moved over to <a href="http://softwyer.wordpress.com/">WordPress</a>, mainly to keep the development off the personal blog, but also because WordPress is so much better at editing complicated pages with images. Blogger seems to have been dumbed down :-(<br />
<br />
I might see how the Google Sites stuff works, as I need some better control over the CSS - oh, wait, they don't allow that either :-(Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-38702668097787091532010-12-15T16:32:00.000+00:002010-12-15T16:32:07.064+00:00Contact Search Updated<b>Works with OS 1.6 devices</b><br>
<br>
The latest changes to Contact Search have been around the Database access classes to allow 1.6 devices to work.<br>
<br>
For OS2.0, Google improved the framework around data access for Contacts and these are not compatible with 1.6. It was a large piece of work to write the 1.6 data access code and refactor the contact searching to be able to run both.<br>
<br>
Coming to the Market near you soon ;-)<br>
<br>
<a href="https://rikara.blogspot.com/2010/12/contact-search-updated_15.html#more">Read more »</a>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-88525829477733018812010-12-14T15:37:00.000+00:002010-12-14T15:37:22.202+00:00Contact Search Updated<b>Contact Search has been updated to v1.1.0</b><br />
<br />
This version<br />
<br />
<ul><li>has options to select a simple search, or a multi-word search.</li>
<li>can configure the categories you want to search, such as name and address only. </li>
<li>now prompts you the first time you install to set the search settings.</li>
</ul><div><a href="http://rikara.blogspot.com/2010/11/contact-search-v10.html">More details here</a> </div>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-56653521650509546132010-11-30T12:15:00.030+00:002010-12-16T09:47:37.681+00:00Contact Search v1.1.0<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnZwBW17r7ZRRtD7coC4r4DWYkwkLv_z7tql82uvBhyphenhyphenYRj2nCWhHIXt3XcKhN2E_cbspTnAGWU1E5Nsf6-v5LYruWq6AUoxe36PUKi7JKJhahifX8rfE8Ns_JczY69Ln8dEQ1yQQ/s1600/FullSearchx512.png" imageanchor="1" style="clear: right; float: right; margin-bottom: 1em; margin-left: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnZwBW17r7ZRRtD7coC4r4DWYkwkLv_z7tql82uvBhyphenhyphenYRj2nCWhHIXt3XcKhN2E_cbspTnAGWU1E5Nsf6-v5LYruWq6AUoxe36PUKi7JKJhahifX8rfE8Ns_JczY69Ln8dEQ1yQQ/s200/FullSearchx512.png" width="200" /></a></div><br />
THIS POST IS NO LONGER BEING UPDATED<br />
<br />
CLICK <a href="http://softwyer.wordpress.com/2010/11/30/contact-search/">HERE</a> TO SEE THE REPLACEMENT BLOG<br />
<br />
<div><b>Contact Search</b><br />
<br />
Contact search works with the standard Google search facility on your Android handset to do a complete search of your contacts.<br />
<br />
Whilst the Android OS includes a native contacts search it is, surprisingly for a search company, very limited. If you try search for part of a phone number or address it will not find it.<br />
<br />
Contact search, however, will find it. It will search through all the contact fields to find a match for the entry you input. <br />
<br />
Be sure to read the following, as there is useful information on getting the best out of the search process.<br />
<br />
</div><br />
<b>Installation</b><br />
<br />
Install Contact Search as you would any other application from the Android market.<br />
<br />
As of v1.1.0 it will prompt you to configure the global search settings, and direct you straight to step 3), below. If you decide not to set the settings at installation, then you can still follow these instructions to add contact search as a global search provider.<br />
<br />
<br />
To use contact search, you need to enable it from the search menu. Follow these steps:<br />
<br />
<div><img border="0" height="200" margin="10" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh88cGmbLfkMFx6LSuLDq4EuWLuz4RNyDTH-0xzbJ_7TH5bWph3Ji8GQKM426rtmG1SETp8UbVyeh_jwzcOYaWA7cq-lW5eEOwyFzatkcBiw_RVXY8C-zp_gOd21jvH6MCAc12zjw/s200/SearchButton.jpg" width="161" /> </div><div><br />
1. From the home screen, press the <b>'search'</b> button.</div><br />
<br />
<div><img border="10" height="320" margin="10pt" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDfM0IlcKjqH9X480xpOvND-tZfMNkQFZ5kI0ufMwwDK4SgBZ0Qn4gsk7bhsCwvQWAon2sQtIlv2ChPQyLxP2B5ZZtwFSU_UyIXU4FaLVcNEuUhI_KsdQuWU2deOLDD5Mnm7SFjQ/s320/Search-Menu.png" width="213" /></div><div><br />
2. From the search screen, press the <b>'menu'</b> button and select the '<b>Search Settings</b>' menu.</div><br />
<div><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjosyZtWOz_GUZ2mgapx8A4PfUmzifJxL9jgbnJ3sxvdQbNUhnibAly1VIw66mrmPXIQb5jMBgwkmhgloYTIooIeYnYQb8UMm0_JJtbnpIvRDwayFS8QwrVGU62iEHkgRKL2owsyg/s320/Search-Settings.png" width="317" /></div><div><br />
3. From the search settings, select the <b>'Searchable Items'</b> option.</div><br />
<div><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgVhhtvzu9KJTFuGpLzI9hjGPSv_6pq-tSti00CPEgu_oL8E_ZgwQdf9Qfqa0_DXwPtnZyXIRCCbMt3bzeWVR8WMbvS-ja3wu5L3346UYczWF0P_e8f0d0p8Ks9GMMYQNmZrpG_Dg/s320/Search-Selection.png" width="226" /><br />
<br />
</div><div><br />
4. From the searchable items, ensure that 'Contact Search' is selected.</div><div><br />
5. You can now enter contact search information, and find it!</div><br />
<br />
<b>Search modes</b><br />
<br />
There are two search modes:<br />
<br />
<i>Simple search</i><br />
<br />
The phrase entered is searched for in each of the contacts field exactly as written. For example, if you search for 'Curly Wurly' then it will only find contacts that have 'Curly Wurly' in them. (Probably not many, unless you work at Cadburys.)<br />
<br />
<i>Multi-word search (OR)</i><br />
<br />
This search mode will look for contacts that have any of the phrases in them. For eample, if you search for 'Curly Wurly' if will find all contacts that have 'Curly' OR 'Wurly' in them. (Now you'll find Cadburys and hairdressers.)<br />
<br />
<br />
<b>Search tips</b><br />
<br />
The search ranking that Google uses on the Android handset means that Contact Searches may not show up in a basic search. See the <a href="http://developer.android.com/guide/topics/search/adding-custom-suggestions.html">end of this page</a> for details on the ranking process .<br />
<br />
To ensure that contact details are searched for follow the tips below:<br />
<br />
<ul><li>Search only on contact details by clicking the search icon and selecting the Contact Search icon. <br />
<img border="0" height="292" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghJF8IClhKatTggFBEUXugcnN5_53Durh4PVHyRRGNBDSgdJJEuARMGWSl5GqgUrukcebw7f-7REZbDpJCfHz79GnE0wdvyvx2EEQEqRlSl_udWwiJpGqMQwlgAOfYsh5gSz-cIQ/s320/Search-ContactSearch.png" width="320" /></li>
<li>Reduce the number of contacts found by searching on full names or numbers</li>
<li>(v1.1.0) Simple search is slightly quicker than the multi-word search.</li>
<li>(v1.1.0) Reduce the number of search categories. If you have not notes, then exclude this from the search. you can always add it back again later.</li>
</ul><br />
<br />
<b>Improvements</b><br />
<br />
Here are some things I intend to implement to improve the search process:<br />
<ul><li>Ability to have multiple search items, such as name and postcode. Sort of done in v1.1.0 in that you can enter multiple search terms (currently OR based, but will be AND based too, later).</li>
<li>Use the pictures from contacts as icons in the search list, where applicable</li>
<li>Regular expression searching</li>
<li>Multi-word AND search, so it will find contacts with all phrases in a particular contact field</li>
<li>Multi-word searches that work across contact fields. For example, a contact name and part of a number. These are in different fields and could help narrow the search even more.</li>
<li>Searching for specific words across fields. Might be implemented as an advanced search form.</li>
<li>Search within results to narrow down a search.</li>
</ul><br />
<b>Search Performance</b><br />
<br />
On an HTC Desire with Android OS2.2 I can search 250+ contacts in around <s>1.5</s> 0.6 seconds. The application now writes a small log file to the system log, so you can see and report this if you think it takes too long.<br />
<br />
There is a free application called 'aLogCat' by Jefrey Blattman that can read the log files. To check the log file, run a search, open aLogCat, press Menu->More->Bottom and look for a FullSearch log message like:<br />
<br />
<span class="Apple-style-span" style="font-family: 'Courier New', Courier, monospace;">Found 34 records out of 2799 raw entries in 665ms</span><br />
<br />
(Yikes, my 250 contacts are stored as 3K records!)<br />
<br />
<b>Changelog</b><br />
<br />
<ul><li>20101214 v1.1.0 New menu options to control the search more. Can be used as a stand alone application.</li>
<li>20101206 v1.0.3 Performance improvements to reduce number of records searched.</li>
<li>20101205 v1.0.2 Added stats to logging.</li>
<li>20101130 v1.0.1 Case insensitive search, thanks to Gint for the suggestion</li>
<li>20101130 v1.0 Initial version</li>
</ul>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-81461440445050356962010-11-19T21:12:00.001+00:002010-11-19T21:13:23.467+00:00Tune Announcer Reviewed on Modoca SiteWell, sort of. <a href="http://android.modaco.com/content/software-pauls-app-of-the-day/323218/tune-announcer/">It gets a mention</a> ;-)Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-16648403678735117162010-11-11T14:04:00.000+00:002010-11-11T14:04:47.375+00:00Tune Announcer Pro ReleasedA 'pro' version of Tune Announcer is released. See <a href="http://rikara.blogspot.com/2010/09/android-tune-announcer.html">here</a> for further details.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-73867043500685480282010-09-18T00:59:00.002+01:002010-09-18T01:05:44.642+01:00Parallels 6 -> Parallels 5Uninstalled this pile of shite and gone back to version 5.<br />
<br />
In all my years of software upgrading I think this is the first time I've ever regressed a version. I can put up with some dodgy functionality, but when it's <a href="http://en.wikipedia.org/wiki/FUBAR">FUBAR</a>, no, I'll regress.<br />
<br />
<br />
<a href="http://forum.parallels.com/showthread.php?t=104413">Bug Report 1</a><br />
<br />
<a href="http://forum.parallels.com/showthread.php?t=104185">Bug Report 2</a><br />
<br />
<a href="http://www.google.co.uk/search?sourceid=chrome&ie=UTF-8&q=parallels+6+BSOD#q=parallels+6+BSOD&hl=en&tbo=1&prmd=iv&source=lnt&tbs=qdr:m&sa=X&ei=BgKUTIPII4_p4AaOn4XPBA&ved=0CBMQpwU&fp=240726c37e38924">Google Search</a>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-62655918938728219992010-09-17T21:10:00.001+01:002010-09-18T01:03:38.197+01:00Parallels 6The <a href="http://forum.parallels.com/forumdisplay.php?f=60&order=desc">parallels forums</a> are just full of people complaining about BSOD with Windows under Parallels.<br />
<br />
Whilst I'm glad that it's not just me, it's shows the shoddy software that the company has release yet again.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-88837127695287538702010-09-11T20:20:00.004+01:002010-09-17T07:32:36.009+01:00Parallels 6Don't bother, usual story, new release, buggy as hell, windows crash, BSOD.<br />
<br />
Sorely disappointed.<br />
<br />
Er, <a href="http://blogs.parallels.com/consumertech/2010/09/parallels-desktop-6-for-mac-receives-positive-praise-across-the-net.html">no it doesn't</a>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-36914757856716886672010-09-03T11:00:00.058+01:002010-12-16T09:47:17.660+00:00Android Tune Announcer v1.0<div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
THIS POST IS NO LONGER BEING UPDATED</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">CLICK <a href="http://softwyer.wordpress.com/2010/09/03/android-tune-announcer/">HERE</a> TO SEE THE REPLACEMENT BLOG</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="http://www.blogger.com/post-edit.g?blogID=10559522&postID=3691475785671688667" imageanchor="1" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzy7TGleTpMRTc-MCDBpSnd6kA_NaGIKeee4jTnHW8Fx1AXyPVsZAo-GTsSjWMcFQHmQ5ARQAD9x-JjX-dGEnA4zU2N7YsvqyzQAvz3ml4eLgLdmm89M2Kyfq7Yfw6Qoj7GlMBxA/s320/Screen+shot+2010-09-09+at+15.26.09.png" style="margin-left: auto; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzy7TGleTpMRTc-MCDBpSnd6kA_NaGIKeee4jTnHW8Fx1AXyPVsZAo-GTsSjWMcFQHmQ5ARQAD9x-JjX-dGEnA4zU2N7YsvqyzQAvz3ml4eLgLdmm89M2Kyfq7Yfw6Qoj7GlMBxA/s320/Screen+shot+2010-09-09+at+15.26.09.png" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Tune Announcer</td></tr>
</tbody></table><br />
<b>Description</b><br />
<br />
This is a simple Android application that announces the name and artist of the song currently being played. It's useful if you have a large music collection and cannot see the screen to check the names, e.g whilst exercising. <br />
<br />
It uses the native Text-to-Speech capabilities of the device to speak.<br />
Example: The application will speak "Now playing 'Firestarter' by 'The Prodigy'"<br />
<br />
<b>Pro Version</b><br />
<br />
The 'pro' version is a paid for version that offers the same speaking functionality, but adds the following:<br />
<ul><li>Notification icon. When enabled and music is playing, Tune Announcer will show an Icon in the notification section of the phone. If you select this, it will put you directly into the configuration screen.</li>
<li>Toggle widget. This is an on-screen widget that allows you to toggle the enabled status of Tune Announcer with a single touch. The widget indicates the status by showing the icon's note as green for enabled and red for disabled. This is useful if you want a quick way of enabling or disabling Tune Announcer.</li>
<li>No adverts on the configuration screen</li>
<li>A new 'pro' icon, woot!</li>
</ul><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkpsncpB3VTMzkFCNASVcJ8bXCH3_QEDIEXq1Xy0isSZa1cNl7JFgnVPDTOEX-lNtZAhWrzD1zpkhZF6a_HGXlS9RKE6ZBm7IQNClglcitQ7CBS80rvsJoZlf5lRhnVHm7F8dvgw/s1600/Screen+shot+2010-11-11+at+13.05.07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkpsncpB3VTMzkFCNASVcJ8bXCH3_QEDIEXq1Xy0isSZa1cNl7JFgnVPDTOEX-lNtZAhWrzD1zpkhZF6a_HGXlS9RKE6ZBm7IQNClglcitQ7CBS80rvsJoZlf5lRhnVHm7F8dvgw/s320/Screen+shot+2010-11-11+at+13.05.07.png" width="320" /></a></div><br />
Since the speaking functionality is the same in both versions, <b>try the lite version first to ensure that it works with your preferred music player</b>. If it does, and you like it, then feel free to buy the 'pro' version.<br />
<br />
<b>Volumes - Updated for v1.1</b><br />
<br />
The application speaks the text using the <b>system volume</b> and optionally mutes the music whilst speaking. <br />
<br />
The speech volume is now set relative to the current music volume. This can be adjusted using the slider from -50% (quieter than the music) to +50% (louder than the music).<br />
<br />
Also, the music volume can be muted whilst speaking, again using a slider. The muted volume can go from -100% (no music) to 0% (no change in the music volume).<br />
<br />
Hopefully these options now cover all the niggles that people were having and my pet bug-bear of forgetting to change the speech volume when wearing headphones and having Tune Announcer shout at me ;-) <br />
<br />
<b>Non-standard Media Players and Scrobbler Support</b><br />
<br />
If you are using a non-standard media player i.e. not the Android or HTC players, then adding support is difficult. However, there is a simple workaround if *your* media player supports last.fm scrobbling as these must broadcast Intents to the main scrobblers. As of v0.5, Tune Announcer supports the Android Simple Last.fm Scrobbler and ScrobbleDroid. If you enable one of these in your media player, then Tune Announcer will work :)<br />
<br />
<b>Speech Pitch and Speed</b><br />
<br />
v0.6 adds the ability to change the pitch and speed of speech using a couple of sliders on the configuration screen. The intent was to make the speech less, well, android like. Whilst this works well programatically, the results are less than impressive. Changing the pitch alters the voice from heavy smoker to hysterical. The speed changes from v.e.r.y.s.l.o.w to clipped. There doesn't appear to be any way to change the apparent sex of the speaker, it's female or nothing.<br />
<br />
If the speed slider isn't working for you, then make sure you have not overridden the settings in the main Text-To-Speech configuration screen in your Android settings.<br />
<br />
<b>Things to do:</b><br />
<ul><li>Shake to speak. This would only be really useful if it works with the device sleeping</li>
<li>User selectable MP3 tag elements to speak, such as album, track length, etc</li>
<li>Announce the song just played when a new one starts</li>
<li>Announce the song details after a specified % of the song has been played</li>
<li><strike>Specify the speech volume as a percentage of the current media volume. This is useful if you change the media volume for different environments and don't want to keep changing the speech volume in Tune Announcer too.</strike> (Done in v1.1)</li>
<li><strike>A widget to toggle the enabled status of this app. Useful if you don't want it announcing all the time (I only need it when cycling)</strike> (Done in the 'pro' version)</li>
<li><strike>See if I can link in with last.fm scrobble data, so that this works with any music app that supports last.fm</strike> (Done in v0.5)</li>
<li><strike>Pause the track (or adjust the volume) when speaking</strike> (Done in v0.3)</li>
<li><strike>Allow the user to change the text for "Now playing" and "by". Simple localisation :)</strike> (Done in v0.3)</li>
<li><strike>Allow the user to select the pitch and speed of speech</strike> (Done in v0.6)</li>
<li><strike>Option to change the system volume from the configuration screen</strike> (Done in v0.7)</li>
</ul><b>Download</b><br />
<br />
Pick it up <a href="http://www.appbrain.com/app/com.softwyer.tuneannouncer">here from appbrain</a> or use the QR barcode below.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAu0rG40RVDVTpm1gEHIbg5xRFgSo_sp3e0SuChwJKlnQaq5Gmoll-BW8p0yEj7s8rVAzEydCW0Lr2RYIV9X5ysBfCxRBpqPuBodoL934DRUz2KA_QgYaJhLfBhbhPch-qjClyBQ/s1600/TuneAnnouncerQR.png" imageanchor="1" style="margin-left: 1em; margin-right: auto;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAu0rG40RVDVTpm1gEHIbg5xRFgSo_sp3e0SuChwJKlnQaq5Gmoll-BW8p0yEj7s8rVAzEydCW0Lr2RYIV9X5ysBfCxRBpqPuBodoL934DRUz2KA_QgYaJhLfBhbhPch-qjClyBQ/s320/TuneAnnouncerQR.png" style="display: block; margin-bottom: 10px; margin-right: auto; margin-top: 0px; text-align: left;" /></a></div><br />
The pro-version can be found <a href="http://www.appbrain.com/app/com.softwyer.tuneannouncerpro">here from appbrain</a> or use the QR barcode below.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=http://www.appbrain.com/app/com.softwyer.tuneannouncerpro?install=web" imageanchor="1" style="margin-left: 1em; margin-right: auto;"><img border="0" src="http://chart.apis.google.com/chart?cht=qr&chs=150x150&chl=http://www.appbrain.com/app/com.softwyer.tuneannouncerpro?install=web
" style="display: block; margin-bottom: 10px; margin-right: auto; margin-top: 0px; text-align: left;" /></a></div><br />
<br />
<b>FAQs</b><br />
<br />
Q. Why does it sound so bad?<br />
A. Sounds OK to me, but the Text-to-Speech library is provided by Google and not me. I can't change how it sounds :-) Try it in French, that language always sounds good.<br />
<br />
Q. It seems a little slow to speak, why is that?<br />
A1. On my HTC Desire, it can take a second or two to initialise the Text-to-Speech library. On a device with little free memory, or a slower processor, then it may take longer. The next time it speaks it should be quicker, unless the OS has swapped out the Text-to-Speech libraries again :(<br />
A2. When using scrobble support to initiate the speech, Tune Announcer has to wait for the event to be sent from the music player. Some players, such as MixZing, send a delayed scrobble event. If you suspect that this is the problem, then perhaps you can kindly request the developer to initiate scrobble events earlier. (You can test this theory by pressing pause/play after speaking, if the speech is delayed then it's most likely due to a slow scrobble event).<br />
<br />
<b>Contact</b><br />
<br />
If you have any questions about Tune Announcer, or suggestions for additional functionality, then please contact me, either by this blog or via email to Tune.Announcer at softwyer.com<br />
<br />
<b>Donating</b><br />
<br />
PayPal doesn't really support solicited donations for products, so if you like it, then buy the 'pro' version.<br />
<br />
<b>Changelog</b><br />
<ul><li>v1.1 2010-11-12 Changes to the way volumes are set, see above</li>
<li>v1.0 2010-11-11 Release of pro-version. Some bug fixes and code realignment to support this.</li>
<li>v0.7.2 2010-11-03 Bug fix: Speaks unknown when the artist or title not defined.</li>
<li>v0.7 2010-09-13 Enable user to configure the spoken volume.</li>
<li>v0.6 2010-09-09 Enable user to configure the speed and pitch of speech</li>
<li>v0.5 2010-09-08 Add support for ScrobbleDroid</li>
<li>v0.4.6 2010-09-08</li>
<ul><li>Fixed regression with enable/disable in preferences</li>
<li>The service now exits after speaking rather than running all the time</li>
<li>Fixed problem when speaking for the first time when the Text-To-Speech engine had not initialised</li>
</ul><li>v0.4 2010-09-07 Added support for the Android Simple Last.fm Scrobbler.</li>
<li>v0.3.1 2010-09-06 Fix some issues around saving preferences. The soft keys don't generate key-down events like they do in the emulator *#?#. Use the view onPause method to save all preferences to avoid this.</li>
<li>v0.3 2010-09-06</li>
<ul><li>Mute the audio sound when speaking - note that this doesn't stop playback.</li>
<li>Can now change the spoken prefix.</li>
<li>Can selectively disable speaking the artist and track.</li>
</ul><li>v0.2 Changed icons and added ads (sorry ;-)</li>
<li>v0.1 Initial version</li>
</ul>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-53424653459247506822010-05-06T20:12:00.005+01:002010-11-11T17:25:35.846+00:00Prague TripHere's a map of the Prague trip we went on. <strike>I intend to write up the day's events later on, but this is a good taster.</strike> 11/11/2010 Since I haven't done it by now, then it isn't going to happen!<br />
<br />
<iframe width="900" height="450" frameborder="0" scrolling="no" marginheight="0" marginwidth="0" src="http://maps.google.co.uk/maps/ms?source=s_q&hl=en&geocode=&ie=UTF8&hq=&hnear=Wank+Nesselwang,+Ostallg%C3%A4u,+Bavaria,+Germany&t=h&msa=0&msid=117723106832903721910.000485d597743f66f36b9&ll=49.453843,6.262207&spn=6.428825,19.775391&z=6&output=embed"></iframe><br />
<small>View <a href="http://maps.google.co.uk/maps/ms?source=embed&hl=en&geocode=&ie=UTF8&hq=&hnear=Wank+Nesselwang,+Ostallg%C3%A4u,+Bavaria,+Germany&t=h&msa=0&msid=117723106832903721910.000485d597743f66f36b9&ll=49.453843,6.262207&spn=6.428825,19.775391&z=6" style="color:#0000FF;text-align:left">Prague Trip</a> in a larger map</small>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-35290764510572517802010-02-10T22:40:00.002+00:002010-02-10T22:44:04.167+00:00Time Widget for Windows<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihIxdw3Y5sfaQ2Jyvv_kBpJEf3WitfSKthETIjGaYf3tzlOqdFgu3a_7WOZR0NpIPP2Ue2_upppTIi85jMw6v1MxqeU6g52-2YMd_EHnUGZ4nZ5e7Nd8AbMLkIIZaf3_dAZRNubA/s1600-h/Screen+shot+2009-09-15+at+23.07.01.png"><img style="cursor:pointer; cursor:hand;width: 238px; height: 82px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihIxdw3Y5sfaQ2Jyvv_kBpJEf3WitfSKthETIjGaYf3tzlOqdFgu3a_7WOZR0NpIPP2Ue2_upppTIi85jMw6v1MxqeU6g52-2YMd_EHnUGZ4nZ5e7Nd8AbMLkIIZaf3_dAZRNubA/s400/Screen+shot+2009-09-15+at+23.07.01.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5436749203502352226" /></a><br />Annoyed that the Windows task bar time widget is pretty useless, unless you expand it to show multiple rows? The try Ryan's <a href="http://ryanmartinsen.com/blog/2004/09/23/time-thingy/">Time Thingy</a>, a useful time widget that can be configured how you like it.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-23280957701352935552009-10-14T20:29:00.003+01:002009-10-14T20:34:41.664+01:00Wavey Davey<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjctvl3qgADgkvFjGQnWJE3gQ-JhBv5wI-ZUG4CPklFC_F7nINhtMEPG34Wp7iSX1lqOXpMAAtlbvLmOhr-MD3HixZZMGXJkGq2edcWyRgMda0wOlC3UI8G1SOUSWxpvbYRZQM7g/s1600-h/Screen+shot+2009-10-14+at+20.29.11.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 229px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjctvl3qgADgkvFjGQnWJE3gQ-JhBv5wI-ZUG4CPklFC_F7nINhtMEPG34Wp7iSX1lqOXpMAAtlbvLmOhr-MD3HixZZMGXJkGq2edcWyRgMda0wOlC3UI8G1SOUSWxpvbYRZQM7g/s400/Screen+shot+2009-10-14+at+20.29.11.png" alt="" id="BLOGGER_PHOTO_ID_5392540668962196386" border="0" /></a><br />Cool, just got accepted into the <a href="https://wave.google.com/">Google Wave beta</a>. As with Gmail, they give users the ability to invite other users. I have a few invites left, if you'd like one then leave a comment. The invites will be distributed on a first-come first-served basis. Good luck.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com2tag:blogger.com,1999:blog-10559522.post-85509455253693160002009-09-06T09:28:00.002+01:002009-09-06T09:29:38.010+01:00GAE RevistedSince I'm not gaming at the moment, see previous post, had another go getting the Polar Uploader to work, but still suffering with the same SimpleDateFormat problem that I described <a href="http://rikara.blogspot.com/2009/04/field-initialisation-in-google-app.html">here</a>.<br /><br /><sigh>Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-23071050610447574352009-09-06T09:20:00.004+01:002009-09-06T09:27:24.012+01:00ShaiyaBeen playing <a href="http://shaiya.aeriagames.com/">Shaiya</a> from Aeria games over the past few months. It's quite a good Fantasy <a href="http://en.wikipedia.org/wiki/Massively_multiplayer_online_game">MMO</a> and I can spend a few hours over the weekend playing it.<br /><br />However, this weekend the servers are suffering massive lag and disconnect problems. Aeria are blaming it interest generated by the <a href="http://www.paxsite.com/">PAX</a> event that they are involved with. Doesn't quite ring true to me, as how does an event with a few thousand people cause issues for an MMO game that can host hundreds of thousands? But what do I know ;)Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-40447191892135248362009-08-31T11:16:00.003+01:002009-08-31T11:21:58.877+01:00Snow Leopard UpgradeUpgraded to the latest Mac OSX release, Snow Leopard. In the main all went OK, can't say that there's anything in there that's useful, or killer. Certainly not noticed the speed improvements that were being touted, my Mac still takes 3 minutes to boot :(<br /><br />The only remedial action I needed to take was to reinstall <a href="http://boinc.berkeley.edu/">Boinc</a> and install some Python libraries that went awol.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-58712775371283060082009-05-27T22:38:00.003+01:002009-05-27T22:44:48.142+01:00Metatrader Connection Problems.<a href="http://www.metaquotes.net/">Metatrader</a> is one of the platforms that allows you to trade on the Foreign Currency Exchange. It's a great tool, especially as you can automate the trading process.<br /><br />I leave Metatrader running in the background most of the time, and have occasionally lost the connection to the broker. It's usually not a problem, unless you happen to have some open trades! I wrote a simple Expert Advisor that would periodically check the connection and email you if there was something wrong. You can read more about it, and download the EA, <a href="http://www.pipcop.com/forums/site-bugs-feedback-suggestions/183-notice-all-alpari-accounts-periodically-stalled.html#post3684">from this thread</a> in the PipCop forum.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-40634379681128958342009-05-21T21:21:00.002+01:002009-05-21T21:26:45.165+01:00Old Projects Never DieJust had an email from someone enquiring about the changes I made to <a href="http://statcvs.sourceforge.net/">StatCVS</a>. Wow, that was back in 2005. <br /><br />StatCVS gives you various statistics about your code in the CVS repository. It's a great tool and provides some real insights into who's doing what. But it always amazed me that it only worked off the head branch. Since the project I was working on did most of the development in a branch, I couldn't run StatCVS on it.<br /><br />No real problem though, as this is an Open Source project meaning that I could get the code and change it to work with branches. Try doing that with commercial products ;)Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-19901104249083321992009-05-17T12:00:00.003+01:002009-08-22T23:59:50.628+01:00Chrome on the MacFollowing on from my earlier post, then you can download builds directly from the <a href="http://code.google.com/chromium/">Chromium</a> project <a href="http://www.google.com/chrome/intl/en/eula_dev.html?dl=mac">here</a>.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0tag:blogger.com,1999:blog-10559522.post-64613937364326024112009-05-17T11:48:00.002+01:002009-05-17T11:50:49.034+01:00Java Google App Engine Updated.A new version of the Java GAE<a href="http://googleappengine.blogspot.com/2009/05/java-sdk-version-121-now-available.html"> is out.</a> Whilst there is nothing specific that hints and fixing the problems with JSF, it might.Curlyhttp://www.blogger.com/profile/05880308824239415301noreply@blogger.com0