The InterruptedException is thrown when a Thread is waiting, sleeping or occupied and can be interrupted at any moment in its execution cycle. Since September last year it seems that my writing thread has constantly been interrupted by life, and I feel like I need to do some serious refactoring, maybe build in some new exception handlers and rework the concurrency model. The Writing Thread waited on the inspiration Thread to complete, which as can be seen has been deadlocked and in retrospect was a terrible design choice, so I have decided some time ago to kill the Writing process until the refactoring is done, hopefully I will delete more code from the program then add.....So here is to version 2.0, official release date 12 August 2019 and weekly releases thereafter.
Saturday, August 03, 2019
Thursday, September 27, 2018
Stephen Colebourne's blog: Do not fall into Oracle's Java 11 trap
Stephen Colebourne's blog: Do not fall into Oracle's Java 11 trap: Java 11 has been released . It is a major release because it has long-term support (LTS). But Oracle have also set it up to be a trap (eit...
Monday, December 11, 2017
Thursday, June 08, 2017
Zen and Software Architecture
Zen is a Japanese School of Mahayana Buddhism emphasising the value of meditation and intuition. Zen is not a theory, an idea or piece of knowledge, it is not a belief, a dogma, or a religion, it is a practical experience. It rejects metaphysical theories and rituals and focuses on letting go of your ego and merging with the universe. What has this all got to do with software architecture you are wondering?
Well, I am going to answer that with a Zen koan, which refers to a story or parable which zen novices meditate on. The effort to understand or solve a koan is intended to exhaust the intellect and open the intuition so that we can understand and experience more of ourselves.
So I leave you with this koan and look forward to hearing about your experiences with it.
The Taste of Banzo’s Sword
Matajuro Yagyu was the son of a famous swordsman. His father, believing that his son's work was too mediocre to anticipate mastership, disowned him.
So Matajuro went to Mount Futara and there found the famous swordsman Banzo. But Banzo confirmed the father's judgment. "You wish to learn swordsmanship under my guidance?" asked Banzo. "You cannot fulfill the requirements."
"But if I work hard, how many years will it take me to become a master?" persisted the youth.
"The rest of your life," replied Banzo.
"I cannot wait that long," explained Matajuro. "I am willing to pass through any hardship if only you will teach me. If I become your devoted servant, how long might it be?"
"Oh, maybe ten years," Banzo relented.
"My father is getting old, and soon I must take care of him," continued Matajuro. "If I work far more intensively, how long would it take me?"
"Oh, maybe thirty years," said Banzo.
"Why is that?" asked Matajuro. "First you say ten and now thirty years. I will undergo any hardship to master this art in the shortest time!"
"Well," said Banzo, "in that case you will have to remain with me for seventy years. A man in such a hurry as you are to get results seldom learns quickly."
"Very well," declared the youth, understanding at last that he was being rebuked for impatience, "I agree."
Matajuro was told never to speak of fencing and never to touch a sword. He cooked for his master, washed the dishes, made his bed, cleaned the yard, cared for the garden, all without a word of swordsmanship.
Three years passed. Still Matajuro labored on. Thinking of his future, he was sad. He had not even begun to learn the art to which he had devoted his life.
But one day Banzo crept up behind him and gave him a terrific blow with a wooden sword.
The following day, when Matajuro was cooking rice, Banzo again sprang upon him unexpectedly.
After that, day and night, Matajuro had to defend himself from unexpected thrusts. Not a moment passed in any day that he did not have to think of the taste of Banzo's sword.
He learned so rapidly he brought smiles to the face of his master. Matajuro became the greatest swordsman in the land.
Tuesday, November 08, 2016
I Am A Failed Consultant
I get great joy and personal satisfaction from assisting someone or a paying client with the IT challenges they face, specifically in software development. Some 20 years ago, I discovered this about myself, and realised that consulting and coaching was my calling in life and have dedicated myself to it. I have spent years, honing the skills to help mentor, coach and consult with my clients. The mantra of my service and the measure of my success is that I become replaceable. If I cannot be replaced then I have failed.
So why do I think I have failed? Over the years as I look back at my clients requirements, I notice that most of them were looking for a technology that would solve their problems, but instead I sold them problem solving techniques to better understand their problem spaces. Oftentimes, upon analyzing the issues that a client is struggling with and trying to solve with technology, I find that the real issue is a lack of understanding of the problem space. Badly designed systems irrespective of the technology is usually the result of not understanding the problem space sufficiently. Changing the technology is not going to fix this, only resolving the problem space will. So what ensues is a new, badly designed system, with new technology. Yes, while the new technology may or may not ease the problem somewhat, it does not remove the underlying cause.
I could easily sell my clients the latest fad like micro architectures, agile processes etc. and they will possibly eat it up, love me and I would feel really successful, and in a few months time I could sell them the next new fad again and so and so on. But for most IT departments the latest technologies is the least of their problems in my opinion, so instead I provide them with pragmatism and a reality check, which no one seems to want to hear….So I have failed, and end up trying to rescue these new technology projects.
Wednesday, January 13, 2016
Book Review: Domain Driven Design

My rating: 5 of 5 stars
The author has distilled what most experienced object oriented designers typically do implicitly. The ideas are not new, but the author has created a ubiquitous language for describing the process more explicitly. It is well worth a read especially for aspiring architects.
View all my reviews
Wednesday, August 19, 2015
Deliverers vs Loyalists
How many times have you heard "We do agile" or "We do SOA" or something similar? There is nothing wrong in doing agile or SOA or whatever is in fashion at a particular time, it is just that we so often lose sight of the purpose of what we do as software developers.
The purpose of any software development project is working software and the technologies and processes are but just enablers and are secondary. They are useful in building and delivering software but are not ends in themselves.
Those focused on delivering quality software usually deliver successful software projects. They are the deliverers rather than the loyalists.
The purpose of any software development project is working software and the technologies and processes are but just enablers and are secondary. They are useful in building and delivering software but are not ends in themselves.
Those focused on delivering quality software usually deliver successful software projects. They are the deliverers rather than the loyalists.
Thursday, July 23, 2015
3 Things You Must Do for Successful Software Delivery
- Accept that there is never just 3 things!
- There is no recipe for successful delivery
- There is no silver bullet!
- Repeat the first 3 things to yourself perpetually
Sunday, September 28, 2014
My 2014 JavaOne
It has been fifteen years since I last attended JavaOne in San Francisco and I am quite excited. I spent 26 hours in an aeroplane to get to San francisco, I certainly have forgotten how torturous that is. Since fifteen years ago, Java has grown tremendously and the schedule shows it, there are 537 sessions with 572 speakers. Putting my schedule together was excruciatingly difficult, choosing what to miss out on. But with the help of many coin tosses I got to the following schedule:
Sunday 28 September
8:00 - 8:45 : Avatar.js
9:00 - 16:00 : Develop Java Embedded Applications Using a Raspberry Pi
Monday 29 September
:30 - 10:30 : Designing a Beautiful REST + JSON API
11:00 - 12:00 : Developing On-Device iOS and Android Apps with Java
12:30 - 13:30 : Introduction to Hotspot Internals
14:30 - 15:30 : Modular Architectures Using Microservices
16:00 - 17:00 : The Anatomy of a Secure Web Application Using Java
17:30 - 18:30 : Java Performance: Hardware, Structures, and Algorithms
19:00 - 19:45 : Real-World RESTful Service Development Problems and Solutions
20:00 - 20:45 : JAX-RS REST Services and Angular.js: Tools for an Even Better Experience
21:00 - 21:45 : Learning Scala: A Practical Approach
Tuesday 30 September
8:30 - 10:30 : Building Secure Applications with Java EE
11:00 - 12:00 : Creating elegant builds at scale with Gradle
12:30 - 13:30 : API Design Checklist
14:30 - 15:30 : Writing recommender system with Java
16:00 - 17:00 : Getting Started with MongoDB and Java
17:30 - 18:30 : Javascript across tiers with Nashorn And Avatar.js
19:00 - 19:45 : Making all client-side java secure
20:00 - 20:45 : Sumatra: The open JDK project
21:00 - 21:45 : Agent based cross platform middleware
Wednesday 01 October
8:30 - 9:30 : Java EE 7 Batch Processing in the Real World
10:00 - 11:00 : Unorthodox Enteprise practices
11:30 - 12:30 : Microservices on the JVM: A Practical Overview
13:00 - 14:00 : JPA Gotchas and Best Practices: Lessons from Overstock.com
15:00 - 16:00 : Building Custom JavaFX Controls
16:30 - 15:30 : Applying Java's Cryptography
Thursday 02 October
9:00 - 10:45 : Java Community Keynote
11:30 - 12:30 : With GC solved what else makes a JVM pause
13:00 - 14:00 : IntelliJ IDEA
14:30 - 15:30 : Transforming code to Java 8
16:00 - 17:00 : Do-It-Yourself Usability Design for Developers
I am exhausted, am off to bed now in preparation for my busy Sunday!!!!
Sunday 28 September
8:00 - 8:45 : Avatar.js
9:00 - 16:00 : Develop Java Embedded Applications Using a Raspberry Pi
Monday 29 September
:30 - 10:30 : Designing a Beautiful REST + JSON API
11:00 - 12:00 : Developing On-Device iOS and Android Apps with Java
12:30 - 13:30 : Introduction to Hotspot Internals
14:30 - 15:30 : Modular Architectures Using Microservices
16:00 - 17:00 : The Anatomy of a Secure Web Application Using Java
17:30 - 18:30 : Java Performance: Hardware, Structures, and Algorithms
19:00 - 19:45 : Real-World RESTful Service Development Problems and Solutions
20:00 - 20:45 : JAX-RS REST Services and Angular.js: Tools for an Even Better Experience
21:00 - 21:45 : Learning Scala: A Practical Approach
Tuesday 30 September
8:30 - 10:30 : Building Secure Applications with Java EE
11:00 - 12:00 : Creating elegant builds at scale with Gradle
12:30 - 13:30 : API Design Checklist
14:30 - 15:30 : Writing recommender system with Java
16:00 - 17:00 : Getting Started with MongoDB and Java
17:30 - 18:30 : Javascript across tiers with Nashorn And Avatar.js
19:00 - 19:45 : Making all client-side java secure
20:00 - 20:45 : Sumatra: The open JDK project
21:00 - 21:45 : Agent based cross platform middleware
Wednesday 01 October
8:30 - 9:30 : Java EE 7 Batch Processing in the Real World
10:00 - 11:00 : Unorthodox Enteprise practices
11:30 - 12:30 : Microservices on the JVM: A Practical Overview
13:00 - 14:00 : JPA Gotchas and Best Practices: Lessons from Overstock.com
15:00 - 16:00 : Building Custom JavaFX Controls
16:30 - 15:30 : Applying Java's Cryptography
Thursday 02 October
9:00 - 10:45 : Java Community Keynote
11:30 - 12:30 : With GC solved what else makes a JVM pause
13:00 - 14:00 : IntelliJ IDEA
14:30 - 15:30 : Transforming code to Java 8
16:00 - 17:00 : Do-It-Yourself Usability Design for Developers
I am exhausted, am off to bed now in preparation for my busy Sunday!!!!
Tuesday, January 14, 2014
JavaScript: Splicing an Array
This JavaScript blog series will be posted more regularly in 2014. To kick off, lets look at how to dynamically add and remove items anywhere in an array. Arrays in JavaScript have a splice function to do just that.
It has the following syntax
array.splice(index, quantity, item1, ..., itemX) returning an array
where the parameters are defined as:
index : it is required and specifies the position at which to add or remove items. If it is negative it will calculate from the end of the array.
quantity : it is optional and specifies the number of items to be removed from the index onwards. To not remove any items, set it to 0. If it is not specified it will remove all elements after the index.
itemX : it is optional and is the items to be added to the array at the specified index.
Lets define an array
Now lets remove all elements from index 4 onwards
This results in the following array
Now let us add some elements to our array starting at index 4,
This results in the following array
Now lets replace elements with values 4 and 5 with 11 and 12
This results in the following array
Now lets remove elements with values 11 and 12 from the back of the array
This results in the following array
Pretty cool hey, that's enough on splicing, its time for you to experiment with it. Till next time enjoy!!!
It has the following syntax
array.splice(index, quantity, item1, ..., itemX) returning an array
where the parameters are defined as:
index : it is required and specifies the position at which to add or remove items. If it is negative it will calculate from the end of the array.
quantity : it is optional and specifies the number of items to be removed from the index onwards. To not remove any items, set it to 0. If it is not specified it will remove all elements after the index.
itemX : it is optional and is the items to be added to the array at the specified index.
Lets define an array
var myArray = [1,2,3,4,5]
Now lets remove all elements from index 4 onwards
myArray.splice(4)
This results in the following array
[ 1, 2, 3, 4 ]
Now let us add some elements to our array starting at index 4,
myArray.splice(4,0,5,6,7,8,9,10)
This results in the following array
[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
Now lets replace elements with values 4 and 5 with 11 and 12
myArray.splice(3,2,11,12) //remove 2 elements at index 3 and add 11 and 12 at index 3
This results in the following array
[ 1, 2, 3, 11, 12, 6, 7, 8, 9, 10 ]
Now lets remove elements with values 11 and 12 from the back of the array
myArray.splice(-7,2)
This results in the following array
[ 1, 2, 3, 6, 7, 8, 9, 10 ]
Pretty cool hey, that's enough on splicing, its time for you to experiment with it. Till next time enjoy!!!
Sunday, January 05, 2014
2013; break; 2014;
Year 2013 delivered Edward Snowden to the world, who single handedly confirmed that we live in an Orwellian world. All technology corporations, both hardware and software corporations cannot be trusted protecting simple basic human rights. More terrifyingly, most people could not be bothered and choose willingly to live in the matrix.
Year 2014 will be spent focused on looking for ways to protect my right to privacy. I have also resolved to blog at least once a week.
Happy New Year, may 2014 bring you safer technology and the restoration of basic freedoms......
Monday, September 09, 2013
JavaScript: Slicing an Array
Have you ever wanted just a sub section of an array? Well, with slicing an array you can do just that.
Suppose I have an array
and I want the first 3 elements, I can do the following
which return an array with the first 3 elements
[ 1, 2, 3 ]
This does not modify the original array in any way, it just returns a new array
The function slice has the following signature,
slice ( beginIndex, endIndex ) where the index is zero based i.e. the first element in a an array starts at index 0.
You could also access the array from the end using negatives indices for example,
returns
[ 3, 4 ]
Next we will look at splice......until next time!
Suppose I have an array
var myArray = [1,2,3,4,5];
and I want the first 3 elements, I can do the following
myArray.slice(0,3);
which return an array with the first 3 elements
[ 1, 2, 3 ]
This does not modify the original array in any way, it just returns a new array
The function slice has the following signature,
slice ( beginIndex, endIndex ) where the index is zero based i.e. the first element in a an array starts at index 0.
You could also access the array from the end using negatives indices for example,
myArray.slice(-3, -1);
returns
[ 3, 4 ]
Next we will look at splice......until next time!
Tuesday, July 23, 2013
Software Patents
I have always hated the patent system and think that it is abused and inhibits innovation. One of my favourite writers, Joel Spolsky has written a great blog on killing patents.
Subscribe to:
Posts (Atom)