tag:blogger.com,1999:blog-76052807598721879622024-03-05T08:41:52.949+01:00Karel Herink's software development blogTomas Zemanhttp://www.blogger.com/profile/12508935408263536584noreply@blogger.comBlogger72125tag:blogger.com,1999:blog-7605280759872187962.post-45447236259004796612012-05-17T05:36:00.001+02:002012-05-17T05:36:34.790+02:00Configuring ProGuard for an Android projectI've done a few Android projects and I find that when I start pushing out obfuscated binaries often I have to spend quite a bit of time debugging my <i>proguard.conf</i> file to get rid of all the new crashes :)<br />
For this reason I've created this Android <i>proguard.conf</i> generic starting point template. If you've know any other common config lines let's have them and I'll update this post accordingly.<br />
<blockquote class="tr_bq">
-dontpreverify<br />
-optimizations !code/simplification/arithmetic<br />
-keepattributes *Annotation*<br />
-printmapping AppClassMap.map<br />
<br />
-keep public class * extends android.app.Activity<br />
-keep public class * extends android.app.Application<br />
-keep public class * extends android.app.Service<br />
-keep public class * extends android.content.BroadcastReceiver<br />
-keep public class * extends android.content.ContentProvider<br />
<br />
-keep class android.support.v4.** { *; }<br />
<br />
-keep public class * extends android.app.Fragment<br />
-keep public class * extends android.support.v4.app.Fragment<br />
-keep public class * implements de.akquinet.android.androlog.reporter.Reporter<br />
-keep class com.google.android.apps.analytics.PipelinedRequester$Callbacks<br />
<br />
-keep public class * extends android.view.View {<br />
public <init>(android.content.Context);<br /> public <init>(android.content.Context, android.util.AttributeSet);<br /> public <init>(android.content.Context, android.util.AttributeSet, int);<br /> public void set*(...);<br />}<br /><br /># Keep serializable classes and necessary members for serializable classes<br /># Copied from the ProGuard manual at http://proguard.sourceforge.net.<br />-keepnames class * implements java.io.Serializable<br />-keepclassmembers class * implements java.io.Serializable {<br /> static final long serialVersionUID;<br /> private static final java.io.ObjectStreamField[] serialPersistentFields;<br /> !static !transient <fields>;<br /> private void writeObject(java.io.ObjectOutputStream);<br /> private void readObject(java.io.ObjectInputStream);<br /> java.lang.Object writeReplace();<br /> java.lang.Object readResolve();<br />}<br /><br />-keepclasseswithmembers class * {<br /> public <init>(android.content.Context, android.util.AttributeSet);<br />}<br /><br />-keepclasseswithmembers class * {<br /> public <init>(android.content.Context, android.util.AttributeSet, int);<br />}<br /><br />-keepclassmembers class * implements android.os.Parcelable {<br /> static android.os.Parcelable$Creator CREATOR;<br />}<br /><br />-keepclassmembers class **.R$* {<br /> public static <fields>;<br />}<br /><br />-keep public interface com.android.vending.licensing.ILicensingService<br /><br />-keepclasseswithmembernames class * {<br /> native <methods>;<br />}<br /><br />-keepclassmembers class * extends java.lang.Enum {<br /> public static **[] values();<br /> public static ** valueOf(java.lang.String);<br />}<br /><br /># Removes all calls to Log. Delete the methods you want to keep.<br />-assumenosideeffects class android.util.Log {<br /> public static int v(...);<br /> public static int d(...);<br /> public static int i(...);<br /> public static int w(...);<br /> public static int e(...);<br /> public static int wtf(...);<br />}<br /><br /># Removes all calls to Log. Delete the methods you want to keep.<br />-assumenosideeffects class de.akquinet.android.androlog.Log {<br /> public static int v(...);<br /> public static int d(...);<br /> public static int i(...);<br /> public static int w(...);<br /> public static int e(...);<br /> public static int wtf(...);<br />}<br /><br /><br />-dontwarn **CompatHoneycomb<br />-dontwarn android.support.v4.**<br />-dontskipnonpubliclibraryclasses<br />-dontusemixedcaseclassnames</methods></fields></init></init></fields></init></init></init></blockquote>
<br />Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-57396512024134021752012-04-02T04:37:00.000+02:002012-04-02T04:37:18.686+02:00Setting it freeAfter making my first million :) I've decided that my Slashdot Reader Widget should be free. There are no annoying adds or anything else to lessen your experience - just the fully functional version for you to enjoy at no cost.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-31404070586224873262012-01-21T12:13:00.003+01:002012-01-21T12:17:24.189+01:00Slashdot Reader Widget for Android - MaintenanceAs soon as I released the original version of the Slashdot widget, I realized that Android 3.0+ (honeycomb and ice cream sandwich) allows natively scrollable widgets (at least in the vertical direction) and this is much nicer on bigger screens, no such luck for Android 2.3 (Gingerbread) or prior versions of course.<br />
<br />
The nice thing about Android and the Market Place is that it's relatively easy to work around this using the <b>android:minsdkversion</b> and <b>android:maxSdkVersion</b> elements of AndroidManifest.xml.<br />
<br />
At this point I've developed 2 versions of the widget.<br />
<br />
<b>Version A:</b><br />
- Targets Android 2.2 & 2.3 AndroidManifest.xml contains:<br />
<i><uses-sdk android:minsdkversion="8" android:maxsdkversion="10"/></i><br />
- Uses custom arrow buttons for scrolling and switching between stories<br />
<br />
<b>Version B:</b><br />
- Targets Android 3.0+ AndroidManifest.xml contains:<br />
<i><uses-sdk android:minsdkversion="11"/></i><br />
- Uses ListView backed by a Collection<br />
<br />
I did a build of both and publish them both concurrently in the Market Place - no problem :)Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-1660620340289709622011-12-14T00:57:00.002+01:002011-12-14T02:55:44.049+01:00Slashdot Reader Widget for Android now available<style>
<!--
/* Font Definitions */
@font-face
{font-family:Cambria;
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:SimSun;
mso-font-alt:宋体;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 680460288 22 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Cambria;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style> <span style="font-family: Cambria; font-size: 12pt;">I was shocked! </span><br />
<br />
<span style="font-family: Cambria; font-size: 12pt;">Imagine there used to be no Android widget for Slashdot, simply unthinkable! I learned this when full of confidence I looked for one on the Android Market place and came up with nothing. I’ve been a Slashdot reader for years, I’d even go as far as to say that ./ is then only source of news I check regularly, and now this. </span><br />
<br />
<span style="font-family: Cambria; font-size: 12pt;">There were plenty of Slashdot branded RSS reader apps but no home screen widgets. This horrible oversight has now been remedied, I’ve worked relentlessly over the past few weeks and last night (at around 2PM Sydney time) I’ve published my masterpiece. It’s only 99c so <a href="https://market.android.com/details?id=com.karelherink.android.slashdotwidget">go get it</a>. And if you have an iPhone then throw it away, get your self the latest Google phone and then get the widget :)</span> <br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://market.android.com/details?id=com.karelherink.android.slashdotwidget"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZG0aBj-fyTwTBrJwKNFUtgQqguop50ulUW2D-65oeftkF9lQTXJMa9shvGyBqVXaWPKu61UD_mQjn9H1l1NQ9NtYLs08KLjLGWMjABYyF1Lur7ls6O_14mx1gRZxHT9EO41gl34xvfDk/s320/droidAtScreen-2.png" width="192" /></a></div><div class="separator" style="clear: both; text-align: center;"><a href="https://market.android.com/details?id=com.karelherink.android.slashdotwidget">Slashdot Widget for Android</a> </div>Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-10094358465711645382011-12-14T00:45:00.000+01:002011-12-14T00:45:10.001+01:00Long time no posts…<style>
<!--
/* Font Definitions */
@font-face
{font-family:Cambria;
panose-1:2 4 5 3 5 4 6 3 2 4;
mso-font-charset:0;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:SimSun;
mso-font-alt:宋体;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 680460288 22 0 262145 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-ascii-font-family:Cambria;
mso-ascii-theme-font:minor-latin;
mso-fareast-font-family:Cambria;
mso-fareast-theme-font:minor-latin;
mso-hansi-font-family:Cambria;
mso-hansi-theme-font:minor-latin;
mso-bidi-font-family:"Times New Roman";
mso-bidi-theme-font:minor-bidi;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style> <br />
It has been quite a while since I’ve last put up a post. Much has happened since then. <ol><li>We’ve sold Cotopia so this blog is under my own name a no longer under the “Cotopia” name. All the posts are still here, just under a different heading</li>
<li>I’ve made my peace with Maven (still hate Maven / Eclipse RPC integration) and use it on all my projects by default :)</li>
<li>I’ve moved from JavaME to mostly Android and iPhone development and this will inevitably be reflected in the content of this blog</li>
</ol>Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-35822668076879785852010-02-17T02:35:00.001+01:002010-02-17T02:36:37.546+01:00Maven and Eclipse RCP aka taking a trip to hellTrying to get Maven and Eclipse RCP to work together to produce a build has been a complete nightmare. A member of my team spent a week trying to accomplish this feat and the end result has been hindering development ever since. Every time the plugin dependencies change, which in a young project is quite often, we're forced to update number of files by hand to accommodate the build process, which is fairly complex so that only one person on the team really knows what the hell is going on. I wouldn't believe how difficult something like building an RCP app with Maven can be, if I didn't live through it. Very frustrating stuff. Especially given that we're all quite happy with the way the actual RCP application has turned out.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-472759790935919242010-01-07T03:18:00.000+01:002010-01-07T03:18:29.947+01:00Maven ...It seems one cannot get away from Maven now a days. In my current job as well as in my new job (which I start in a few days) we'll be using Maven to build and manage projects.<br />
While Maven is quite nice in theory the plug-ins for it leave much to be desired in many cases. So without further delay here is a quote of the day by a colleague of mine:<br />
<br />
"I hate Maven and the open source community!"<br />
<br />
This made me laugh out since we use (pretty much exclusively) open source tools and software (NetBeans, Eclipse, GlassFish etc.) to build and run the business. But nevertheless, after a few days of hell trying to implement release management using a combination of Maven and Hudson plug-ins, universal hatred is what we have :)Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-77661317725669101302009-12-23T22:57:00.003+01:002009-12-23T23:46:50.565+01:00A brush with Eclipse RCPIn my current job I seem to do quite a bit of UI work. The nice thing is that since my company is a start-up, the possibilities (in terms of technology at least) are unlimited. In the last year I've written GUIs using C# & WPF, Swing, and JavaFX. This time we were looking to create a 'system monitoring application' which should be able to present different types of information:<br /><ul><li>Tables</li><li>Graphs</li><li>Charts</li><li>Trees</li><li>etc...<br /></li></ul>The application also had to be easily extensible. While I personally have a fair amount of experience in GUI development, my two junior colleagues have done much less UI work. So it was just as important that the technology we choose has a gentle learning curve. Given a 4 week sprint we don't have much time to 'waste'. I have evaluated our options:<br /><ul><li>JavaFx: low level, lack of tools and out of box components</li><li>Swing: low level, good tools</li><li>SWT: low level</li><li>NetBeans platform: have personal experience</li><li>Eclipse RCP: unknown<br /></li></ul>It was clear that given the extensibility requirement we needed a platform. It came down to a choice between NetBeans Platform and Eclipse RCP. In the end I chose Eclipse RCP because I was able to step through <a href="http://www.vogella.de/articles/RichClientPlatform/article.html">this tutorial</a> with complete ease and I felt that even though I have experience with the NetBeans platform my team mates would be faster in picking up the Eclipse RCP way of doing things.<br /><br />Now, a month later, I have to say that I believe that my decision was the right one. After 3 days of tutorials and reading we were ready to go. Ultimately we have created a UI which is modular (with multiple self contained plugins), looks and feels the way our client expects, and will be easy to extend. In addition, majority of the actual UI work (using JFace, SWT, databinding, Eclipse RCP APIs) was done by my colleagues while I focused on the data models.<br /><br />While I would take the NetBeans IDE over the Eclipse IDE for most things I am quite happy with the way our RCP based project turned out given the requirements.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com3tag:blogger.com,1999:blog-7605280759872187962.post-85530264337618286482009-10-01T08:19:00.002+02:002009-10-01T09:34:19.899+02:00Sending GlassFish java.util log records to Chainsaw - no problemoTo send Java log records to from GlassFish to chainsaw we need to first translate the LogRecords (from java.util.logging) to LoggingEvents (used byt the log4j framework and accepted by chainsaw). Then also need to publish the resulting LoggingEvents to Chainsaw over a socket.<br /><br />Here is how I do it:<br /><br />* Copy <a href="https://jdwpanalyzer.dev.java.net/files/documents/9508/143607/ChainsawHandler.jar">ChainsawHandler.jar</a> and <a href="http://logging.apache.org/">log4j.jar</a> into GLASSFISH_HOME/domains/domain1/lib/ext<br /><br />* In Glassfish admin web console under: Application Server/Logging/General/Log Handler enter:<br /><br /><span style="font-style: italic;">au.com.horseshoelane.logging.HSLChainsawLogHandler</span><br /><br />* In Glassfish admin web console under: Application Server/JVM Settings/JVM Options/ add a new JVM Option:<br /><br /><span style="font-style: italic;">-DchainsawPort=4447</span><br /><br />this is the port to which Chainsaw clients can connect<br /><br />* Restart GlassFish<br /><br />* Configure a new SocketHubReceiver in Chainsaw that will connect to the chainsawPort<br /><br />In case you are curious how it works or want to add functionality or fix a bug here is the <a href="https://jdwpanalyzer.dev.java.net/files/documents/9508/143606/HSLChainsawLogHandler.java">source</a>.<br /><br />I would like to thank my current employer <a href="http://www.horseshoelane.com.au/">HSL</a> for allowing me to publish this work - which they have sponsored in the form of my paycheck :)Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-8223860557486449802009-09-16T01:29:00.003+02:002009-09-16T02:14:04.856+02:00JavaFX + WebStart + Web Services + GlassFish = One cool client appIn this post I will give an overview of the architecture that I've used to supply a connected thick (JavaFX) client application to a customer.<br /><br />Here is the scenario: our company has an important customer who wishes to access and view some real-time data related to their business.<br /><br />After some thought we've decided that the ideal platform for the client app is JavaFX (eye candy), the client deployment method is WebStart and we'll provide the data to the client via a SOAP Web Service. Easier said than done it turns out :)<br /><br />There are a few issues with this set-up.<br /><br />CLIENT:<br />The JavaFX client app can be written without major problems (see my previous posts about my beef with JavaFX tools) but I've found it best to create separate Java module to handle the WS communication. This is also useful since Maven doesn't seem to be able to build mixed source trees. Therefor the client app is composed of two separate JARs:<br />- Java library to handle WS client code generation and some utilities that are easier written in Java<br />- JavaFX GUI client that depends on the Java library<br /><br />SERVER:<br />Simple enough Web Service deployed on GlassFish v2.1 JavaEE 5. Nothing special to note here.<br /><br />DEPLOYMENT:<br />This was one of the trickiest parts. Since we have a number of servers (dev, test, stage, production, etc.) and we want a client which is downloaded from a specific server to connect to the WebService running on that same server. This we achieved by using a servlet to dynamically generate the JNLP file for the WebStart deployment. The servlet plugs the correct values into the JNLP for two things:<br />- where the client jars are located (i.e. <span style="font-style: italic;">codebase</span>)<br />- a run-time property for the client specifying the WS location<br />The client (once launched) uses the WS location property to connect to the correct web service.<br />The servlet gets this information from system properties which can be easily set using the GlassFish web admin console. This means that we compile the code once and deploy it to any GlassFish server and all works well as long as we don't forget to add the two properties to the server.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-87369448613264648982009-08-31T12:28:00.002+02:002009-08-31T12:37:30.927+02:00More JavaFX impressionsSo I have been using JavaFX for about 2 weeks now. I am working on commercial application for a client and now that I am more familiar with both tools and language I think it's a good time to post an update.<br /><br />Tools still suck - no surprise here :) but they suck even worse in Eclipse than in NetBeans so even though my workplace is an Eclipse shop we're using NetBeans for our JavaFX development. I've had a quick chat with David Kaspar, a friend of mine and one of the developers who are currently working on JavaFx tools at NetBeans and he told me that Sun is aware of the situation and it is about to improve, so FX support NetBeans 6.8 should be much better.<br /><br />I really hope so because the language is awesome and despite everything I do enjoy working in it.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-83480546979490566302009-08-04T05:42:00.002+02:002009-08-04T06:34:52.679+02:00First JavaFX impressionsIn my job I've been playing around with some pretty cool and new technologies lately. This gave me the opportunity to write a a WPF based video player (with some very client specific functionality) in C# in just about a month. Coming from Java background with no prior .NET experience at all, it was quite an accomplishment. But it is not simply a credit to my genius but mostly to the tools that were available to me: Visual Studio with ReSharper. As occasional IntelliJ user I was soon very comfortable and pumping out code like nobodies business. As a SWING developer used to working with NetBeans forms editor I found the XAML editor fairly intuitive.<br /><br />This brings me to my JavaFX experience. I've been assigned the task of evaluating technologies for a new UI project. I am currently down to either SWING or JavaFX, and while I would really love to use JavaFX there is a single major reason that is making me very hesitant:<br /><br />Lack of Good Development Tools<br /><br />While I love the demos that I downloaded for JavaFX I am sorely disappointed with the available tools. It's kind of sad really, since most of my old colleagues at Sun who used to work with me on Mobility support are working on JavaFX support now. I know many people on that team and they are some of the smartest most capable developers. Something must have gone very wrong along the way because at the time of writing this I personally find the JavaFX support in NetBeans to be an embarasement. The most basic features are missing from the editor which makes it a major pain to work with (source formatting, cut/paste imports, automatic imports while typing, auto-completion is of mark at times, etc. etc.). This makes it very difficult for me to be productive with the language from the start. Sun has been pushing JavaFX hard because it does enable some very cool UI magic but I wish they put as many resources into making it usable to developers thus speeding up adoption.<br /><br />I will continue to play around with JavaFX and I hope that in the end I'll find that I can live with (and remain productive with) it's current tool set.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-15133212381544713712009-04-18T13:04:00.005+02:002009-04-18T13:17:18.167+02:00Cotopia: Over 1 Million games playedThat's right folks - we've had over 1 million games played!! Isn't that awesome? It makes me very happy that we've been able to bring our community that much fun. I mean seriously, more than 1 million games, I can hardly believe it. It's been a good ride for us on the development team and I hope that we'll soon celebrate by releasing the long awaited mobile game of Go.<br />I'd like to send a big 'Thank you' to our community for making this happen.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-5398184904491759392009-04-12T02:35:00.003+02:002009-04-12T02:59:36.617+02:00Economy and IT jobs in Sydney<p>I thought that I'd quickly comment on the state of affairs regarding <strong>IT / jobs / economy here in Sydney</strong>. I was affected by the economic downturn just like many others, as companies shed contractors to tighten their budgets. This was around 2 months ago. I has taken me 8 weeks to find work - half of that time spent looking while I was finishing off my previous contract at a great Sydney IT firm Object Consulting. 8 weeks is the longest it has taken me to find work since 2002. Usually I have a job withing 2-4 weeks. </p><p>I normally look for senior developer positions related to <span class="blsp-spelling-error" id="SPELLING_ERROR_0">JavaME</span> or Core Java / Swing, which is not where most of hiring happens - any Java developer will know that majority of advertised jobs resolve around web, databases, finances, or insurance (i.e. gather financial/insurance data on the web and stuff it into a DB - not my cup of tea). This definitely doesn't the job search any easier but it ensures that usually I find something at least somewhat interesting.</p><p>In addition to taking a few extra weeks to find a job I also have to say that the compensation packages on offer are not exactly what they used to be a year ago, but they aren't completely unacceptable either.</p><p>To sum up - I believe there is work to be found even for those of us that are a little more picky, even though it may take longer to find it and one may have to do with less money.</p>Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-66958742799901880802009-02-28T05:20:00.002+01:002009-02-28T09:02:30.508+01:00Doing my bit for atheism :)OK, so here is an idea for like-minded people.<br /><br />At our local bookshop they have a "<span style="font-style: italic;">Religion</span>" section with all sorts of books. Unsurprisingly, propaganda and early indoctrination literature (i.e. Children's bibles, Good News bibles, and other bibles) is on the eye-level top shelf. While some of my preferred reading such as "<span style="font-weight: bold;">The God Delusion</span>" or "<span style="font-weight: bold;">God is not Great: How Religion Poisons Everything</span>" sits on the very bottom shelf where it doesn't receive proper attention.<br /><br />The thing that I like to do, when I browse in the store, is to rearrange the books to correct the unfortunate placement of my favorites. I do this about once every 2 weeks or so.<br /><br />That's the whole idea. I am not sure how much it accomplishes but since there is no church of atheism where I could make donations it's one fun way I like to try and forward the cause.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com2tag:blogger.com,1999:blog-7605280759872187962.post-34702452372196643732009-02-11T10:48:00.002+01:002009-02-11T11:05:51.296+01:00Starship SofaAgain with the Podcasts :)<br /><br />I've recently discovered another excellent SciFi podcast at http://www.starshipsofa.com<br />I was completely blown away by it's first short story (by Michael Moorcock no less) called <span style="font-weight: bold;">London Bone</span> which in it's quality (writing and production) rivals to that of Variant Frequencies.<br /><br />The thing about Starship Sofa is that they tend to put out stories by established authors rather than by new and upcoming ones. There have been a couple of stories I've skipped, I guess every 5th or so, whereas on Variant Frequencies I have yet to skip one. This, I guess, is because the Sofa tends to cover a broader range of stuff and some things are just not my cup of tea, however the stories that stick do so in a big way!<br /><br />Give the Sofa a listen - I can pretty much quarantee you'll like it.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-10165022050859971162009-02-01T08:13:00.003+01:002009-02-01T08:52:58.243+01:00SF & christian indie music - wtf??Off-topic rant warning.<br /><br />I love sci-fi and sci-fi story podcasts - hence I love Escape Pod (I've donated about $200 to them so far) and I love Variant Frequencies - they don't ask for money so I didn't give them any yet.<br /><br />My rant today is about Variant Frequencies, VF is a monthly podcast and in my opinion it's simply the best in terms of quality (both writing & production). The guys behind VF are simply amazing. Except... Except in the last episode called "Creature of God" (which admittedly has some religious themes as the name would imply) the featured an advertisement for indie christian rock music or some such non-sense.<br /><br />To me the reasons for doing this may be that:<br />1. the guys at VF are religious and are actively trying to help spread the virus<br />2. or it may be that they are short of cash and thus in need advertisement dollars<br /><br />If case 1. is true I am very disappointed, and I feel a bit tricked. It kind of reminds me of one beautiful day in my teens when 2 VERY pretty girls we smiling at me from across the food court in the mall. They then approached me (giggling), made small talk and were being extremely friendly, and then they asked me to come and meet them again in their church :) Wow, what a recruitment strategy, even the Army won't go that far.<br />Perhaps VF isn't doing exactly the same thing but I do feel baited in with some pretty awesome SF and then hit with a completely bullshit religious advertisement.<br /><br />If case 2. is true (and I hope to .. err.. I mean I really hope so) I would suggest to VF to put up a paypal donations button on the front page, ask for money at the end of the show, ask for money at the start of the show, put some non-offensive adverts for headphones in, do whatever else but please stay away from pushing religion. I've bough Scott Sigler's books, I've given a fair amount of money to EscapePod (and the guy from there once mentioned he is religious - to my great surprise) so I will definitely support my favourite sci-fi podcast EVER by donating, and once "The last fix" comes out in Australia I buy the book.<br /><br />If I missed case 3. I hope it's a good one that doesn't involve propagating the evil of religion on purpose.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com2tag:blogger.com,1999:blog-7605280759872187962.post-43973772322577964812009-01-31T11:07:00.003+01:002009-01-31T11:29:26.378+01:00spring - hibernate - ejb3I am looking for work since my contract at Object Consulting in Sydney is up in two weeks. There are some interesting jobs out there but very few. Australia, it seems, has been hit by the global crisis pretty hard. Given the current situation I am slowly giving up on finding myself something in the Mobile area and there are very few jobs for Swing/GUI developers as well.<br />So, as usual, we're left with crappy jobs for insurance companies and banks, chasing around and persisting the oh-so-important transactional business data. How exciting. But man's gotta do what man's gotta do. Looking at the market, EJB3 (with which I have some experience) is losing to Spring (in employer demand at least) and/or Hibernate. Pressed by reality I've decided to start with Spring and I've gone through a few tutorials. So far I am not too happy with the fact that Spring functionality seems to be configured by XML - I love XML for passing data around but pretty much hate it for everything else. Hopefully as I dig in deeper I'll find that EVERYTHING can be done through annotations :)Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-26282077000421893082009-01-20T12:03:00.003+01:002009-01-20T13:53:54.279+01:00TalibanistanIt is not everyday that a country is born, but here is a new one that I have discovered only recently.<br />So it is with great pleasure that I welcome all the players from the new country of <a href="http://timesofindia.indiatimes.com/India/The_advance_of_Talibanistan/rssarticleshow/3943942.cms">Talibanistan</a> who play Cotopia games into our community. It is with hope that we can bring relaxation into their otherwise strictly disciplined lives.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1tag:blogger.com,1999:blog-7605280759872187962.post-7208572500163370152009-01-18T01:53:00.003+01:002009-01-18T02:19:36.102+01:00Project Darkstar 0.9.8 incompatible changes a pain in the buttSome time ago I've created a <span style="font-weight: bold;">Netbeans</span> <span style="font-weight: bold;">plugin</span> for project <span style="font-weight: bold;">Darkstar</span>. I've had good fun writing it and for the most part even maintaining it. The trouble with writing a pluging that depends on a piece of software with version number like 0.x.x is that it's external interface (the way it is started/stopped etc.) is bound to change often and sometimes quite drastically :)<br />There have been some minor changes in the past but mostly I was able to deal with them inside a few hours, this time however, I got blown away. Darkstar version 0.9.8 completely changes the way the server is started and stopped as well as the way applications are deployed. It has changed the internal directory structure so that version 0.9.8 is no longer even recognized by my plugin (just as well since none of the other functionality would work anyway).<br />Despite the fact that I will have to rethink the whole plugin UI and internal workings I am very excited about this development because it is definitely for the better. It is now easier for anyone to work with Darkstar even from command line, and the fact that <span style="font-style: italic;">application.properties</span> file is now included inside the application JAR, rather then a separate file, means everything makes more sense and will fit better with the NetBeans way of doing things. It is good to see that Project Darkstar is moving forward in the right direction. It makes me feel that my decision to support it and invest my time was the right one.<br />I already have some ideas as to how I will approach the new UI which should make the NetBeans plugin more useful and powerful.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com3tag:blogger.com,1999:blog-7605280759872187962.post-75108853647896386962009-01-07T13:01:00.002+01:002009-01-07T13:41:47.548+01:00Good work Scott SiglerI love books, but I find it easier to have someone read to me than to read myself :)<br />I have been following the work of Scott <span class="blsp-spelling-error" id="SPELLING_ERROR_0">Sigler</span> for a while now, his <span class="blsp-spelling-error" id="SPELLING_ERROR_1">Earthcore</span> novel was the first <span style="font-style: italic;"><span class="blsp-spelling-error" id="SPELLING_ERROR_2">podio</span></span> book I've listened to and it turned me onto some pretty good stuff, but I've blogged about this a bit in the past.<br />The reason I am mentioning Scott <span class="blsp-spelling-error" id="SPELLING_ERROR_3">Sigler</span> is that, to me at least, he is quite an inspiration. He's been an aspiring <span class="blsp-spelling-corrected" id="SPELLING_ERROR_4">writer</span> for many years but had bad luck getting published. After being reduced to (and I quote here) "giving ****jobs for food stamps" he's figured out how the <span class="blsp-spelling-corrected" id="SPELLING_ERROR_5">Internet</span> can help in promoting his work. Some years later now Scott has given out a number of very entertaining books in the audio format for free and is aiming for the <span class="blsp-spelling-error" id="SPELLING_ERROR_6">NYT</span> best seller list with his latest published book <span style="font-weight: bold;">Contagious</span>.<br />If you like a fun light book that will entertain give Scott a listen/read.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com3tag:blogger.com,1999:blog-7605280759872187962.post-43658139679737746652009-01-07T03:33:00.002+01:002009-01-07T03:52:52.222+01:00iPhone developmentTom has been saying that we should have iPhone versions of our games to attract more crowd. I have been reluctant to take this on board since I have no clue about iPhone development. Today I got curious however, and so I downloaded the iPhone SDK (1.6GB btw, wtf??). The sheer size of the SDK was one shock and Objective-C was another shock. Are they serious? I would have to learn not just an API but a whole obscure language to throw an app together. If it was a language or a framework that I could reuse elsewhere (eg. Flash) I may give it a shot, but not this.<br /><br />I am sorry to say but at this point it seems like too much of an investment. So as far as I can tell, there will be no iPhone support for some time to come. The Google phone on the other hand is a different story.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-10597119641629868782009-01-05T12:43:00.002+01:002009-01-05T12:44:06.577+01:00Can you smell it?Cotopia Go is so close that I can :)Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-19222410383219992352008-12-17T23:46:00.003+01:002008-12-18T00:08:58.758+01:00Book review - Anathem by Neal StephensonUnlike the book it self - I'll make this short.<br /><br /><span style="font-weight: bold;">The book basically sucks and I was very disappointed. </span><br /><br />I think that most people who read 'Snow Crash' and loved it will agree with me. I got through about 80% of the book and I just couldn't be bothered to read it any more. It seems that Mr. Stephenson has gone to extreme lengths trying to convince the reader of his own cleverness. The book is full of never ending "scholarly" dialogs about nothing, most of which are not nearly as engaging as I imagine they were meant to be.<br /><br />While the book is not all bad I found most of it to be dry, boring, pretentious, and lacking humor (except for one "fire/counter-fire" scene which made me laugh). I am sorry to say this as I was hoping for much and got very little.<br /><br />For a longer and less blunt review check <a href="http://books.slashdot.org/article.pl?sid=08/11/24/1147202&from=rss">slashdot</a>.Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com0tag:blogger.com,1999:blog-7605280759872187962.post-28436642014564665052008-11-25T13:30:00.002+01:002008-11-25T13:55:46.802+01:00My Apple tech support experienceSince I've posted the rant about not buying apple products because there was no Java 1.6, Java 1.6 became available and so I bought 2 Apple notebooks this year. Unfortunately my 2008 early model MacBook got some hairline cracks in the casing so I called up Apple tech support, got a case number, and showed up at the Apple store to drop of the machine for under warranty repair. The somewhat lengthy post below describes my experience:<br /><br /><span style="font-weight: bold;">1. Encounter with a tool</span><br /><br />When I made it to the genius bar (3rd floor of the Sydney George st. Apple Store) I was approached by John a concierge. He asked me re-enter all the information I already submitted over the phone (this I had to do in order to get the case number).<br /><br />I did that.<br /><br />Then he asked me to sign a paper stating in a nutshell that:<br /><br />- I have a backup of all the data <span style="font-style: italic;">(I do)</span><br />- I have removed all the private information from the computer <span style="font-style: italic;">(I most certainly did NOT)</span><br /><br />I refused to sign.<br /><br />My notebook, like most notebooks I imagine, is full of private data. I told him that if the technicians remove the hard drive and give it to me I'll sign the form and let them work on the repair without having any privacy concerns.<br /><br />Now, John refused.<br /><br />John informed me that they will not remove the hard-drive nor lend me the tools to do so myself. Instead he advised me to go home, remove the hard drive myself and then come back. The other option he gracefully offered was for me to go out, buy a screw driver then come back and remove the hard drive myself right there at the Apple store. But there is no way they would do it for me or lend me the tool.<br /><br />I went down to the second floor to ask at the hardware sales desk if they, by any chance, sell the tiny screw drivers needed to take out the hard drive from a MacBook. The sales guy there told me that they don't sell those since removing the hard drive voids the warranty.<br /><br /><span style="font-style: italic; font-weight: bold;">Interesting. </span><br /><br />He told me however that the "guys upstairs" would surely help me with taking out my hard drive. Given my recent experience I was in doubt so I asked him if he could help me sort that out with the "guys upstairs" to which he agreed. Back upstairs I went, and we ran into non-other than my old friend John. I explained to John that he has effectively advised me to void my warranty by telling me to remove the hard drive myself, at which point he finally caved in and hooked me up with a "Genius" called Alex.<br /><br /><br /><span style="font-weight: bold;">2. Encounter with a Genius</span><br /><br />Alex didn't need to be an actual genius to see my point. He took the notebook of my hands promised that in 15 minutes he'll be back either with the whole thing fixed up or the hard drive for me to take home. I signed the papers, on good faith that within those 15 minutes he won't break or copy my hard drive (but hey I can be reasonable), I sat down at the Genius Bar and used my MacBook Pro to write this blog. In about 45 minutes Alex came around with my MacBook fixed and good to go. Though it took him a bit longer than he estimated I would like to thank Alex for being a human with a brain and common sense (at Apple this apparently is called a "Genius") he saved me from going home buying a tool I don't need and voiding my warranty. Thank you Alex.<br /><br /><span style="font-weight: bold;">3. Conclusion</span><br /><br />How would I quantify my experience tonight.<br /><br /><span style="font-style: italic;">Firstly</span>, it's obvious that it takes much more effort to encounter a tool (John) than it does t0 encounter a Genius (Alex).<br /><br /><span style="font-style: italic;">Secondly</span>, even a otherwise capable organization like Apple with it's very cool stores has it's weak links (John) and it's strong ones (Alex).<br /><br /><span style="font-style: italic;">Thirdly</span>, the paper Apple made me sign before any work was done is completely silly. I had to agree that my notebook contains no private data (which it does like any other notebook) and the 2 ways I know of to ensure no private data are:<br />- remove hard drive (but also void the warranty)<br />- reformat hard drive before submitting to apple and restore data from backup upon return (not very convenient and lenghty)<br /><br /><span style="font-style: italic;">So perhaps offering to remove the hard drive and then fix the computer may be an option that is more acceptable to a customer concerned about time and privacy such as myself.</span>Zero Efforthttp://www.blogger.com/profile/07992473786973706669noreply@blogger.com1