November 15th, 2008
Well, this post belongs in the rant/vent category, on the troubles trying to get out of the “Best City in the World”.
After spending Friday assisting with an internal Architecture conference at The Swiss-Grand on Bondi Beach.
Things where going well, until the end of the day that is. Here is a long history of events:
- 1730 - sms notification our 7pm Flight Cancelled
- 1815 - next flight is 9pm
- 1945 - Electrical Storm Hits, buckets down
- Hail taxi, didn’t take too long, except for treading water to get bags in the back
- 2030 - board our doomed flight
- 2115 - our plane is broken and we get kicked out
- 2215 - at the other end of the airport we get shuffled on to a shiny new plane, when does that takeoff curfew end???
- 2300 - crap the curfew is till 11pm, we are still on the runway, and my socks are really wet
- phew, there is some other runway we can use that goes over the bay
- boo, now it’s windy
- boo, now planes need to land
- boo, now it’s still windy
- 23:?? - everyone gives up, we’re screwed
- 00:25 - we are back at the terminal and were stuck in the entry walkway, the doors are locked shut somehow and they can’t open it up…
- 00:40 - ok, we’re inside. hmm, what is going on now, will virgin be finding us a hotel, now, since we are out of towners and they are partly responsible - No apparently not, they recommend we all line up and stay in the airport unless you have some friends you don’t mind waking up and as long as you don’t mind paying for a cab. 300 people, 1 staff member to reschedule everyone, that’s going to be quick
- hmm - we weren’t the only plane, there are a few others around and about 3 qantas planes as well
- 00:50 - we grab a cab, the first 3 hotels near by are chock full, apparently ppl have been grabbing accommodation for hours, BOO
- We start ringing ahead for known hotels, hmm, still full
- yay, finally we have a bed
- 01:48 - yay sleep time
- 07:30 - I ring virgin and arrange for another flight, bit of a problem, as far as they know I boarded
- First flight I can get out is 1300, boo
- 10:45 - Surely Virgin will give us complementary Lounge visit for our troubles
- BOOO!!! - Virgin says No
- Thumbs down to virgin
For me, besides missing my fam, I can just laugh it off, I feel really sorry for the unaccompanied minor who was also staying in Sydney for the night, poor little guy must have only been about 10.
What’s going on with Sydney airport, how much slack is in the system for schedule slippage?
What were the real Cascading Failures (see Release It Post) , that led to the late night chaos, will I ever find out?
Tags: travel
Posted in Uncategorized | No Comments »
February 8th, 2008
REST and ROA in a nutshell
Posted in Web | No Comments »
December 15th, 2007
I read “Release It” recently, not a bad book, some good stories, I wish more people would pay attention to things like Stability and Capacity.
Anyway I liked the Circuit Breaker pattern, as I’ve seen a number of apps with highly coupled systems that barf once latency increases in the back ends then you get “Cascading Failures” and the webapp’s request handler thread pool is exhausted and they all wait their mandatory 30 seconds for a response. Eventually the app either dies, or gets taken out of a load balance farm causing a “Chain Reaction”.
Here is an Experimental Circuit Breaker Implementation (circuit_breaker.tgz) , NOT built or tested FOR PRODUCTION use in anyway. There is explicity no thread safety no the actual CircuitBreakerSimple class.
download, extract and run ant.
Play around with the parameters to see the affect. Generally it seems to thrash more with increased concurrent threads and interestingly in jdk1.6 sometimes reverts to the default timeout instead of the instance value.
Based roughly on the following logic:
When Circuit is Closed:
on call = pass through
call succeeds = reset count
call fails = count failure
threshold reached = trip breaker. Open State
when Circuit is Half-Open
on call = pass through
call succeeds = reset go. Close State
call fails = trip breaker. Open State
when Circuit is Open
on call = return/fail
on timeout = attempt reset. Half-Open State
Posted in Patterns, Stability | No Comments »
December 5th, 2007
Most discussions about Operation Aborted only mention when javascript is attempting to manipulate the DOM prior to it being ready.
I’ve seen it fail prior to any of your own js executing.
Try this for an experiment have an onload event log something but also return:
You have an large list of table results that are fed back to the browser with a slight delay per row (ie. an unfortunate logging statement per row)
What comes first?
Posted in Programming, Web | No Comments »
December 4th, 2007
Highlights
- John Allsop - openning comments
- Sebastian Chan - Government are into mashups
- Scott Berkun on the Myths of Innovation
- Chris Willson - MS architect co-chair on HTML5 working group
- Scott Buchanan & Ben Macguire - Harnessing the law to protect IP
- Stephen Cox - Ethnography in the design process
- Rashimi Sinha - Slideshare founder
What wasn’t mentioned:
Google maps by Raul Vera
Bert Bos - CSS level 3, vertical text layout, like for japanese; new grid positions; advanced grid layout; rounded cornersScott Berkun
Great talk on the myths of innovation
Other worthy talks
tidbits:
http://www.sharedspace.org
http://www.slideshare.net/search/shiftlearning
http://www.earthfromabove.whereis.com
australian stock photos
Recommended books:
the double helix
vitruvius - tn books on architecture
Diffusions of innovation
Wisdom of crowds
emergence
ethnography for marketers
Posted in Web | No Comments »
August 17th, 2007
Wow, it’s been a while, the import from MT doesn’t seem to have gone too badly.
Posted in Uncategorized | 1 Comment »
August 14th, 2006
Recently I was involved in investigating integration of a client site with an affiliate site.
Both parties were interested in avoiding iframes and it’s baggage.
Ideally we were looking for a solution that involved:
- minimal (html,css,js) code on affiliates pages. After all who would want deployment dependencies across organisations?
- dynamic json data served from our site
- long lived highly compressed components
- efficient use of connections to our server
We evaluated dojo and google web toolkit
Dojo won out, among it’s many features it has:
Widget Issues
Unfortunately widgets are not completely self-contained. CSS is a bit of a problem. Typical custom widget will result in your css being inlined into your html widget, but this isn’t required or always the bestway to go.
CSS relative image references are resolved relative to the host the base page was served from not our site.
We decided to keep our relative image references and have our stylesheet added to our affiliate pages dynamically.
Give namespaces are changing in new version we didn’t create our own and just used dojo.widget…
Should Dojo be called Sumo? (says teagles)
Most ajax libraries are fairly heavy, you are looking at atleast 100K with the average closer to 200K to get simple io, events, effects and dom manipulation functionality. Disclaimer, it was a pretty quick scan a couple of weeks ago, of mochikit, dojo and scriptaculous.
After various packaging experimentation the Animation.js heavyweight seemed pretty core if you want to use custom widgets.
Why GWT wasn’t for us
- binary format
- can’t use 5.0 features
- not all features supported, ie new ArrayList(size)
- active monitoring
- components served off google
- …
GWT does have some upsides though:
- testability
- small footprint
- cross browser compatibility verified by google
Posted in Web | 2 Comments »
August 14th, 2006
The standard of online articles is slack. Most authors don’t have a background in online copywriting, just like most webmasters don’t have design experience.
Top Tips applicable to me
from Hot Text: Writing for the Web
- People don’t read they scan, so chunk your data and emphasize
- Cut your content, repeatedly, cut your content, you can write it in less.
- Put your conclusion at the top
- Write in active voice
- Keep paragraphs short and single themed
- Put links at the start or end of sentences
- Don’t make people think: don’t use large words and use ambiguouswords carefully
Review
Overall I’ve found this book quite useful. I didn’t like the Object-Oriented analogies or the outdated and incorrect SEO advice.
The information was not always new, but it provided different perspectives with recommendations that were valuable. As a web user I scan text constantly everyday, yet somehow I ignored this when writing.
Read the rest of this entry »
Posted in General | 1 Comment »
July 26th, 2006
Having problem with runaway processes on a shared box?
Save some cycles, by using strace -p <pid>.
Leave these till after you have done your stracing:
- Checking what releases have gone out recently
- Kernel upgrades/dmesg errors
- if you have filled a a filesystem, ok df -h is pretty quick as well
- kill -3 <javapid>
Posted in Performance and Monitoring | No Comments »
July 25th, 2006
Why aren’t my release notes to sysadmins and testers:
sudo yum install mypkgname
Which downloads mypkgname from <sys|int|uat|prod> yum repository with all of it’s dependencies.
That obviously wouldn’t always be possible, but it is achievable with only a little pain ;-).
Use RPM for managing components of your System
RPM is not ideally suited to deploying java applications and all of it’s dependencies, but it can work.
I’ve used it to package up an installation of activemq, with my application config and start/stop scripts.
This was then extended to have ant build it so we could eventually have cruise create rpm artifacts for a project which could eventually get automatically sent to a yum repository.
RPM is not that great but when you have to wrestle with RedHat AS atleast it gives us
- Dependency Management. Requires that mysql >= 5.0 must be installed.
- Hooks for pre/post install/uninstall Scripts. %postin let me create a os user if required, set appropriate permissions, create a database, db user, add tables and insert data.
- Ability to relocate the package on installation
Creating yum repositories sounds easy, but I haven’t gotten to this yet.
What to do
- Create your ~/.rpmmacros file
- Create a specification file, don’t forget it will has access to some of it’s own types of variables that are defined in .rpmmacros file.
- package up your application of choice in a mypkgname-version.tar.gz. This is your main input into rpm, Source0: in your spec file must exactly match this file
- rpm -bb mypkgname.spec
- check your pkg info with: rpm -qpi mypkgname-version-noarch.rpm and your list of files with rpm -qpl mypkgname-version-noarch.rpm.
- sudo rpm -i mypkgname-version-noarch.rpm
Tips
- Understand %files .I found it easier to build my own file.list, by using %files -f file.list. Defaulting attributes with %defattr(-,name,group) and %config to specify your config files are good to know about.
- You don’t have to use the root owned default database, you can specify your own with the –dbpath option
- How can you tell if a package is being installed or updated?
$1 of the scriplets (%pre, %postin…) contain the number of pkg’s affected, so during an update you affect 2 pkgs, as it is an uninstall, followed by an install operation.
- Scriptlets share the same environment, but that environment is special. We had issues running pre-packaged scripts that depended on env variables setup in .bashrc becaused it exited if it wasn’t an interactive shell. ie. [ -z $PS1 ]
- Keep multiple copies of ~/.rpmmacros files and replace the one you are interested in
- If you are packaging ruby, python or java applications, then specify it as non architecture specific
- Make it Relocatable if possible
- Someone had a problem with BuildArch: noarch on FC4 x86-64, that noarch was not recognised as a valid architecture. We needed to add a line to some file in /var/lib??. Moral of the story is to try not to use debian based distro instead.
If you know almost nothing about RPM
- RPM can be used to manage src (c) or binary rpms.
- It works by unextracting a tar of the source/binary then building and executing scriptlets at the right moments.
- configuration files, identified by %config, like /etc/mypkgname are renamed when you erase a package to mypkgname.conf.rpmsave.
- Relocatable pkgs require all your packaged files to have the same prefix.
Thanks to co-conspirators Ajit George, Sam Jordan, Peter Klein, Robert Watkins.
Posted in General | 2 Comments »