Oct 222010

Wow, the libpd guys make it possible to put Pure Data patches in your iPhone app. I’m definitely going to make an app based on this, if nothing more then just for the heck of it. Time to brush up on my PD skills, I’ve been using Max/MSP for too long ;-) See the article

 Posted by at 12:11 am
Oct 162010

I don’t know if you’ve noticed yet, but I’m a big fan of both Roo and the guys behind Roo. Big thanks to Alan & James from the forum post, ROO-1537 and ROO-1538, as of git version a474dc7b95613fae564f0e0fa50d89a6818bd753, and tested today one day later, my scripts run flawlessly through the tests! :-) Which means, we can continue with Tiles. Stay tuned!

 Posted by at 9:00 pm
Oct 152010
Ever seen this before? Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’ I had that after a MySQL server in my replication loop went down. When it came up, the next server in line gave this replication state ‘Relay log read failure: Could not parse relay log event entry. The possible reasons are: the master’s binary log is corrupted (you can check this by running ‘mysqlbinlog’ on the binary log), the slave’s relay log is corrupted (you can check this by running ‘mysqlbinlog’ on the relay log), a network problem, or a bug in the master’s or slave’s MySQL code. If you want to check the master’s binary log or slave’s relay log, you will be able to know their names by issuing ‘SHOW SLAVE STATUS’ on this slave’, which was quite logical since the end of the bin-log had been corrupted due to external circumstances.
This should be a simple
on the node that had stopped replicating, but this is when the 1236 error kicked in. As very often with 1236, the node that had gone down hadn’t updated it’s binary log index file (servername-bin.index in this case, yours might have a different prefix) so I had to manually add that in the index file. One more thing to remember, restart the MySQL server after updating the index file. Then replication should happily resume again once you hit </i>START SLAVE;</i> on the next mysql server in the replication ring.
PS, take care, the CHANGE MASTER seems to flush the tables or something, it doesn’t simply set some variables, so depending on the load on your server this might take several minutes
Oct 102010

While resolving the test problems in the last code, let’s look at what we get by doing a

mvn jetty:run

The application has a header on top, a footer in the bottom, and a menu on the left hand side. This is in line with the Composite View pattern described in the Tiles tutorial:Composite View. To recompose this layout, see src/main/webapp/WEB-INF/layouts/layouts.jspx. In there you find that what we want to work with is <tiles:insertAttribute name=”body”/>, but working with this file will let you get the basic layout you want. The different attributes are found in layouts.xml, and they reference their respective files in /WEB-INF/views, so that should get you started making a nice template

 Posted by at 11:41 pm
Oct 102010

I love Roo! Ben Alex and his team have made a great job making starting a Spring project a breeze. However, I’ve shied away from using Java for XHTML/JS/CSS since 2003, so while I know the underlying technologies with Roo (JPA, the databases, Spring, JUnit, Tomcat, etc etc) I don’t know Apache Tiles at all. So I figured I’d like to learn it, at least until Roo 1.1 hits in a few weeks, when I’ll probably want to learn GWT. ;-) Stay tuned…

So, for learning this I’m going to make a project I’ve been planning ever since I released my awesome tuner for early music musicians: Well Tempered for the iPhone:  Open Temperament. It’s going to be an open database for tuning temperaments. So, first step, register the domain (let’s hope this isn’t going to be one of those many great ideas that are parked on a domain due to lack of time ;-) ), done, and let’s get the basic Roo script up:

project –topLevelPackage net.opentemperament
persistence setup –provider OPENJPA –database HYPERSONIC_PERSISTENT

entity –class ~.entities.Family –testAutomatically
field string –fieldName name

entity –class ~.entities.Temperament –testAutomatically
field string –fieldName title
field string –fieldName description
field string –fieldName originalAuthor
field reference –type ~entities.Family –fieldName family

entity –class ~.entities.OnlineUser
field string –fieldName fullname
field string –fieldName email
field reference –class ~.entities.Temperament –fieldName onlineAuthor –type ~.entities.OnlineUser

entity –class ~.entities.Note –testAutomatically
field string –fieldName name
field reference –type ~.entities.Note –fieldName enharmonicTwin
field number –fieldName indexFromA –type java.lang.Integer

field reference –fieldName startingNote –type ~.entities.Note –class ~.entities.Temperament

entity –class ~.entities.Comma –testAutomatically
field string –fieldName name –notNull
field number –fieldName ratio –type java.lang.Double
field number –fieldName ratioInCents –type java.lang.Double
field reference –type ~.entities.Comma –fieldName alias

enum type –class ~.enums.IntervalType
enum constant –name MinorSecond
enum constant –name MajorSecond
enum constant –name MinorThird
enum constant –name MajorThird
enum constant –name PureFourth
enum constant –name PureFifth

entity –class ~.entities.Deviation –testAutomatically
field reference –type ~.entities.Note –fieldName lowestNote –notNull
field enum –type ~.enums.IntervalType –fieldName intervalType –notNull
field reference –type ~.entities.Comma –fieldName deviationType –notNull
field number –fieldName deviationValue –type java.lang.Double

field set –class ~.entities.Temperament –element ~.entities.Deviation –fieldName deviations

controller all –package ~.web
logging setup –level DEBUG
security setup

json add –class ~.entities.Family
json add –class ~.entities.Temperament
json add –class ~.entities.OnlineUser
json add –class ~.entities.Note
json add –class ~.entities.Comma
json add –class ~.entities.Deviation

perform eclipse
perform test

 Posted by at 10:23 pm
Oct 022010

The new AppleTV with iOS inside has me very excited as a developer and a media consumer. But, unfortunately, after the new AppleTV was announced, the old Apple TV is still on sale here in Denmark, Norway and Sweden. What gives, Apple? You neglect the most technophile part of Europe, both with the iPad and now with the AppleTV, without an obvious reason. I emailed support a few weeks ago, and they asked me to check back when the AppleTV started shipping. So now I guess we’ll have to drive to Germany to pick one up, just like with the iPad. Lucky for me that’s easier than for the Norwegians.

 Posted by at 11:05 am