After a bit over a year, it’s time to get the band together again, and start doing some blogging. What have I been doing in the interim? Stuff… and I’ll probably go through some of that later, but my main journey recently (for most of this year) has been around Design Thinking.
Yeah, I know, everyone was raving about Design Thinking years ago, but as an Architect I thought “Oh, I get that, it’s thinking like a designer…” I did that when I did Architectural Design roles, but I didn’t really get it. Now I do though and the best place to start is with the UK Design Council “Double Diamond”
The first diamond is The Problem and we’ll get back to that, but the second diamond is The Solution. Unfortunately, in Architecture and much of IT we’ve made a nice cozy home in the second diamond of The Solution which is probably why things are in such a deluded and confused state in IT – we’re coming up with Solutions when WE DON’T EVEN KNOW THE PROBLEM!
Feel free to post comments down below and I’ll respond and maybe even change what I’m writing based on any feedback.
WOW! I just realised that it’s been a year since I did a blog post. I knew it had been a while, but I figured around 6 months max… Well, I suppose I needed it, and the good news is that I’M BACK!
I’m not going to go in to what has transpired over the past year since an agile adoption, as it’s quite involved and will come out in some successive posts, but will focus on where I am now and what my Posting Plans are.
Near the end of last year we started planning a return to Australia after almost a decade in the UK – what a BLAST! So many lovely experiences, people, places and new friends :-) Eventually though, it was time to return to Australia as it really is my home and although I may have a few gripes about it, Australia really is an amazing place and as the old cliche goes: I now really appreciate how lucky I am to live in this country after being away so long. That shot above is from my local beach which is 3 mins drive, and I can get in to the city (in the distance) in around 1/2h with a walk and public transport – that’s a pretty good lifestyle.
So what’s in the pipe? A much more varied mix than when I started out doing just “software stuff”:
- Reflections on life in the UK and Europe
- Observations on life in Australia now I’m back
- Reviews of gadgets
- Travelogues as I explore my own country – now I’ve probably seen more of Europe than I have of Australia, so it’s time to correct that
- Process – yes, I’m still on the agile path
- Architecture – looks like that will be my primary area of work still
- Software – which I’m gradually getting back in to, with the current focus being Clojure
- Probably the odd bit of music or photography to round things out
- Anything else anyone would like me to write about…
If you follow me on Twitter (@RiczWest) then you’ll know I was working on an iOS game called ASCIItrek which is derived from Super Star Trek that was written in C. I’ll eventually do a complete rewrite in Swift, but before that I’m taking the existing code and integrating it in to an iOS interface. In order to do this I’ll need to call C code from Swift. The Architect in me however wants to cleanly separate things and use Objective-C as a “bridge”, which as you’ll see later is probably a pretty good idea.
It’s always been “theoretically possible” to do this in earlier releases of Xcode prior to 6.3, but the whole process seems fraught with potential errors and I could never get it fully working. With the recent release of Xcode 6.3 I thought I’d give it a go and am glad I did as it seems to work relatively easily as I’ll describe.
Note: In this post I’ll assume that you’re relatively familiar with coding in Xcode
Firstly, you’ll need to create a project, which is no-brainer – just create a Swift one which we’ll adjust as we go… At the highest level we’ll have some code which acts as a test harness which I just added:
where chopper (tribute to American Chopper :) is an Objective-C method and c_chop is a c one which is invoked from Objective-C. First, the Objective-C one which is relatively simple:
if you just look at the chopper method where I’m basically doing a string concatenation – we’ll get on to the c_chop method after we’ve examined the C code:
which has one basic method/function called chop that like the Objective-C one just prepends the parameter which is obviously more complex in C. The one thing that worries me slightly is the fact that I’m mallocing memory which is passed to Objective-C which I’m kind of assuming will be deallocated – I’ll probably revisit this later…
If you go back to the Objective-C code above for c_chop you’ll see there is a bit of complexity, which is why I think it’s better to wrap a C call in Objective-C. The stringWithFormat: method is just a concatenation, but notice that you have to convert the Objective-C/Swift string to UTF8Sting before passing and then convert the result back with stringWithUTF8String. To me, this is enough reason to have an Objective-C layer interposed between your Swift and C layers.
Hopefully this post has made it easier for anyone else who is on the same path – the code is on GitHub at https://github.com/RiczWest/swocc – feel free to mail me if you have any questions. Later, I’ll be doing another post on C to Objective-C to Swift (which I also need)
PS Having HUGE problems with syncing GIT, which I have just checked and they are a BUG – I will attempt to fix later…
I was “doing stuff” on my iMac and got a Notification saying “Why not try the new Memory efficient and Fast Safari?”. Fine – I thought – I’ve just upgraded to Yosemite, so why not give it a go?
Boy, was that a mistake..! The first hint was Safari “Not Responding”
Well that’s probably OK as it’s the first time Safari is staring up in my account, so it’s probably doing a few things…
That’s a bit of a worry – a browser, which should be 2-300M in memory is not only consuming 3G Virtual Memory (I only have 4G real), but it’s now causing other programs like DropBox to “Not Respond”. That’s a serious load on the system!
and it peaked at 5G memory consumption – that’s for a browser!!! The Yosemite image comes on less than that! There is a serious memory allocation bug here, however it’s leveled out, so I decided to just let it run… No difference though, it just stayed at 5G so I had to kill it (after about 10 mins)
and of course everything went back to normal. To be fair, when I restarted it, Sarari, it was consuming less than Mozilla
but there’s only 69M difference… Hmm… What to choose? A stable browser I’ve used for many years, or a “psycho browser” that chewed up 5G of memory on a whim? The choice is obvious!
Anyone who knows about the Broken Windows Theory of Software Development will realise that this is not a good sign. I’m not talking about some obscure utility that I had a problem with, this is the System Browser!
If I was Apple, I’d be worried about it… and I’d posit to say that if Steve Jobs was at the helm, this would of never happened. Unfortunately, the two people that seem to be “running” the company are Tim Cook (who is a classic Delivery Manager) and Jonathan Ives (Absolute Design Legend) don’t seem to understand one critical component to the whole “i-experience” – Software!
Yes, Jobs was a tyrant (I’ve met him and seen him meter justice to others for no good reason) but he did have an understanding of Software Quality, which is something that is sadly lacking with the current management…
This is just a small example of Apple “losing the plot” and anyone who has “upgraded” to the various bad versions of iOS or OS X will know what I’m talking about…
Why did I write this? Because I love Apple products! I’ve been using and programming them since before they were “cool” (2002 – actually 1993 if you count NeXT) and don’t think it’s too late! Apple are starting to go down a slippery slope… If they pick up their game they can still produce “Insanely Excellent” products, but that’s to be determined. If they don’t, then people like me will switch to Windows (which is becoming “not that bad”) or Linux (which I can handle) and everyone else will switch to something else about 5y after…
PS For those who don’t know me, this was written on an iMac and I have an iPad 2 Air, so I’m not an “Apple Basher” ;-)
PPS Another “broken windows” tip – who wants a calculator that has a translucent background on the display???
what if I had a light background behind it? That’s just crazy… Again, broken windows
It’s been quite a while since I’ve posted much, mainly due to a contract which requires me to drive on the M20 and M25 (aka “the carpark” for those outside the UK) and as a result, I just don’t seem to of had the time and energy…
I look forward to getting on something where someone else is doing the driving so I can use my time effectively
Amazingly, it seems like only 7% (4.5 Million) people in the UK use public transport. Given that nearly 1/3 (22 Million) live in the South-East, where transport is generally pretty good, that seems pretty low. No surprise given the number of people on the motorways – I’ll be happy to take one more off them next contract.
So what’s up for 2015 for me and this blog?
For one, I plan to start getting back in to a bit more of a rhythm, both with my posts and the associated (play) work (generally outside “real work”), and I will continue to post based on my experiences – recent and past…
- Lifestyle & Reviews
- Process & People & ScramJet
- Architecture, including Enterprise & SOA aspects
in no particular order. I won’t get in to specifics as much of it is not yet planned, or I’m working on it but don’t want to reveal it until I have enough meat on the the bones so I can be sure it will fly.
- Review of Bob Marshall’s “Thinking Different” happening last year
- Review of the: BMW i3 electric car; Samsung Galaxy Alpha
- Corporate Subversion – in a positive manner of course :-)
and that’s really just the “boring stuff” – there should be some very interesting posts coming as I hit my stride.
I hope you’ve all had a great XMas & New Year break and look forward to some great interactions in 2015!
Today I’m (@RiczWest) starting a new twitter account. It’s called ChangeArc. For those who follow me, you’ll recognise this as my “Blog Name” – so what’s the purpose?
Simple – when I started using Twitter, it was primarily as a bookmarking tool. To some extent I still use it as such, but also for so much more…
There’s one problem though – as I look at a lot of content, that means a lot of tweets, and not everyone likes that, including me! There are a number of great people I’d like to follow, but I can’t because they tweet too much.
To that end, I’m going to start a much lower volume (only a few tweets per day) account which is ChangeArc. So what can you expect apart from less tweets? Extremely high quality tweets that will include any posts I do.
I don’t know how this will evolve, but it will be interesting to see…
Firstly, this post is not really mine, it’s more an “ad” for a workshop coming up in the UK during the Software Architect Conference in London in October presented by the legendary @RuthMalan who was behind the Visual Architecting Process
I’ll be going to the conference and Ruth’s workshop – if you’re in to Architecture , you may want to check out the conference and workshops. Now, over to Ruth:
Abstract: We will spend time with the usual suspects — (re)factoring, dependencies, naming, forces, trade-offs, mechanism design, system and component boundaries and interaction surfaces… And some sketchy ones — making the system design visual and drawing people in. We will take some silver bullets* — relationships of goodwill and commitment to objectivity — to heart, and be playful, exploring (the interaction between) the various facets of architectural design:
- strategic and structural significance: identifying strategic outcomes and defining challenges; design of system capabilities and system structure; system qualities and mechanism design;
- decision scope: decisions at broader scopes (system, mechanism, service) and decisions at narrow or local scopes (units) considering intentionality and emergence;
- timing of decisions: clearing the fog of uncertainty/putting ground under the feet and the “last responsible moment”, iteration and evolution
And we will take our fallibilities, biases, foibles into account. How? That is indeed it. Our focus will be on how. We will use creating a draft (set of views of the) software architecture to situate our discussions and practice system thinking and modeling, strategic thinking (understanding what is shapingly important in the user context and business and technology space), and design improvement strategies. Our orientation is to co-creation of systems that have desired structural integrity properties, including resilience, but also design integrity and dynamic unity.
Our goal is to surface key matters of architectural judgment, drawing out myths and misconceptions, and sharing, positioning and connecting useful conceptions, strategies and techniques, and laws, principles, heuristics and other guidance.
Pre-requisites: The main prerequisite is to be open, playful and engaged. I facilitate moving through really vital shifts in perception and put useful tools in the architect’s toolbelt, but we have to throw our lots in together, co-create together, playing when it is time to play — to explore and get options on the table — and, when it is time, getting serious and making strategically significant decisions the group coheres around.
About: Having worked in the software architecture field since the mid-90’s, Ruth Malan has arguably played a pioneering role, helping to define architectures and the process by which they are created and evolved, and helping to shape the role of the software, systems and enterprise architect. She and Dana Bredemeyer created the Visual Architecting Process which is recognised by the Open Group and emphasizes: architecting for business agility, system integrity and economic, technical, organizational and environmental sustainability. Creating architectures that are good, right and successful, where:
- good: technically sound;
- right: meets stakeholders goals and fits context and purpose; and
- successful: actually delivers strategic outcomes.
Translating business strategy into technical strategy and leading the implementation of that strategy. Applying guiding principles like:
- extraordinary moment
- minimalist architecture
So we can Be Agile and Create Options…
A scramjet (supersonic combusting ramjet) is a variant of a ramjet airbreathing jet engine in which combustion takes place in supersonic airflow.
A Skramjet (ScRuM, KAnban, lEan, Just in Time) is a process in which work takes place in a SuperPersonic flow state environment.
A personal exploration of the use of Kanban, Scrum and Lean Principles to create a Service Oriented Architecture within a large organisation.
About a month ago when I returned from a month in Aus, I had a few things to do in a day which combined to get me thinking about simplification as it seems that despite all our wonderful “web technology” (what are we on – 3.0?) we seem to reaching the stage where we are making things that worked about a year ago complex and harder to use for no reason! For illustration, here are the two web based tasks I had that day:
- Reserve an item in store at Curry’s
- Reset a password for a Google account
Sounds simple enough? As mentioned, a year ago each of these would have taken max 5 mins each. Instead, each took 1/2h! What’s going on???
1. Reserve an item in store at Curry’s
Sounds so simple, doesn’t it? Last time I did it, it was – you clicked reserve & collect, entered your postcode, selected a store, input your name, email and that was it! You’d get a confirmation email with reservation number and the item was held for 24 hours for you. Just go and pick it up :-)
What went wrong this time? You click Reserve & Collect and are given a message that it’s available for Reserve & Collect! Really? I’d hope so, but my money says there are some items where you click on this link and are told it’s not available for R&C…
Anyway, I persisted and was now asked also for my phone number (which I input a false one for – it’s wasn’t relevant) – why? After declining the privilege of being contact by Currys and various 3rd Party organisations I then tried to reserve the item – nothing, nada, nicht!
OK, I’ll try phoning the number on the web site. After being led down 2 IVR blind paths I gave up and drove to my local store. I noticed that there was a B&Q (hardware store) nearby and went there first, so I took some “consumer action” – they had the item and I was happy, but after a long and tortuous route I would have preferred not to take.
2. Reset your Google Password
In the afternoon, I was doing some “IT Support” for my 80 year old neighbour and he forgot his password for Google. “No problemo” said I (naively). I then went to the appropriate link where you’re asked for the email address and put it in. Last time I did this, you got a “check your email” message and off you go. Now, I got a security question (his cars numberplate) – ok, they’re beefing up security a bit – that’s good…
NO IT WASN’T! They’d beefed up security so much that we were asked another 5 or so questions about which Google products he used, when he started using them and even how much he used them! Although we were told that the system would allow for some mistakes, we were both sweating as we attempted to prove that Ken was indeed Ken!
Unlike the store, we couldn’t just go somewhere else, so after (what seemed like) 10-15 minutes looking up various bits and nervously waiting for Google’s assessment of his “Ken-ness” we finally PASSED – WOOHOO! I now have a backup record of his password, as neither of us want to go through that again…
What just happened? My two consumer type actions on the web in one day were a disaster! They wouldn’t have been a year ago…
Both systems seemed fine, but have now been bureaucratically engineered beyond their intent and optimal usability. If this keeps going on, we really will have computers like in Brazil
After too many years working for such organisations, I can take a pretty good guess at why both “enhancements” were done:
- The original R&C was probably a side project which worked great. But either the great Hammer of IT or EA came down and demanded compliance with their CRM strategy. This would have demanded more information be collected so they could “engage” aka annoy their customers. The system was obviously not fully working and the IVR, well that was probably a disaster (as are most) from the get-go.
- Due to increased identity fraud etc, there is clearly a need for increased security, especially around password resets. Unfortunately, some CRM / Security people got involved and thought of a whole bunch of questions which only they could answer. Us mere mortals never stood a chance :-(
With quite a bit of Solution Architecture experience, I’m going to put my SA hat on and suggest some potential low impact solutions to both these ?
- If it ain’t broke, don’t fix it! This system should have been left as is as it was the minimum usable implementation. “But we need to populate our CRM system” you may say. Well, in that case do it, but progressively. Give people the option and motivation to give you information and respect their choice if they choose not to (which is a subject of a whole other post).
- Stop being so damn “smart”, because it’s not really! Google have a history of only hiring the “best and brightest” and this is one of their products, so no real surprise here. There are so many dimensions of information that Google have on people. Create questions that people (and not machines or people who are like machines ;) can relate to. Use information such as IP’s, location to reduce the need for the “20 genius questions”.
There’s a common theme here
– both solutions were supposedly “improving” a system. Both had a common problem of an over and mechanistic engineering of the solution. Maybe part of the problem is the implicit “continual growth” in capitalism. Why can’t we sometimes just leave parts of a system as they are because everyone is happy with them?
Furthermore, if we do have to change something, how about we do it in a humane way? As the Antimatter Principle from @flowchainsensei would say, being sensitive to the needs of the real user rather than some abstract entity cooked up for the convenience of analysts, technologists or even worse, the business or their CRM system!
If you are ever in the position of dealing with a system which interfaces with people, then assuming you want it to be “nice” ask some questions like this: “Would I personally want to use a system like this?”, “Would my partner and children want to use this system?”, “If the CEO of the company used this system” (which they rarely do, but that’s another problem ;) “what would they think?”
If you’re in the position of allocating funds / priorities for systems, you may want to ask questions like “What is this doing for our customers?”, “Is it making their lives better / easier?”, “Politics aside, is this really the best way to spend the companies money?”, “What would happen if we didn’t do this change?”, “Is there something else in the organisation which could make better use of the money if we didn’t do this project?”
I’ve decided to do a bit of a “deep dive” in to the Fuse ESB, which is now owned by Red Hat, to upgrade my technical skills in this area. I’ve actually ended up using a product called Fuse Service Workbench instead of this and will eventually do a post similar to this on how to install it. The directions given here will work though if you want to set up “Basic Fuse” along with the Developer Studio.
One thing I have discovered (by getting FSW up and running) is that due to various bugs in Oracle’s JDK 1.7 on Apple – you should use it, at least for this. Instead, you need to use Apple’s JDK 1.6, making sure that you set JAVA_HOME to the real path, not a symbolically linked one (of which there are many). I’m assuming 1.7 is OK on Windows (as the doc says it should be) – feel free to let me know your experiences in the comments section.
For simplicity, I’m using the RedHad FUSE ESB which includes: Installers, Testing, Performance, Third party verification, Centralized management of uniquely configured brokers with Fuse Fabric and Incremental patching. It’s a 30 day trial, but I’m just using it for the quick and easy installation.
1. Install JBoss FUSE Beta (6.1)
Get it from http://www.jboss.org/products/fuse, unzip the file, uncomment the (last) admin user line from etc/users.properties:
and start the ESB, so you should get something like this:
JBoss-FUSE rwest$ bin/fuse Please wait while Fabric8 is loading... 100% [=============================================================] _ ____ ______ | | _ \ | ____| | | |_) | ___ ___ ___ | |__ _ _ ___ ___ _ | | _ < / _ \/ __/ __| | __| | | / __|/ _ \ | |__| | |_) | (_) \__ \__ \ | | | |_| \__ \ __/ \____/|____/ \___/|___/___/ |_| \__,_|___/\___| JBoss Fuse (6.1.0.redhat-328) http://www.redhat.com/products/jbossenterprisemiddleware/fuse/ Hit '<tab>' for a list of available commands and '[cmd] --help' for help on a specific command. Open a browser to http://localhost:8181 to access the management console Hit '<ctrl-d>' or 'osgi:shutdown' to shutdown JBoss Fuse.
As mentioned above, you can then go to http://localhost:8181 and login
which should give you the welcome screen!
Congratulations – you’ve almost got FUSE running as what you have at the moment is a Fabric, which is kind of like a ‘mini cloud’
Now you should shut FUSE down using
JBossFuse:karaf@root> osgi:shutdown Confirm: shutdown instance root (yes/no): yes JBossFuse:karaf@root> JBoss-FUSE rwest$
so you can …
2. Install JBoss Developer Studio 7.1
Get it from https://www.jboss.org/products/devstudio.html and just open it – as it’s a jar file, on a Mac (which I use) it will just run the installer:
If you’re on a Mac, then the JVM/JDK will probably be set to your browser’s JVM, which is not correct – it should be set to your JDK. In the case of Apple, it should be 1.6:
>> TODO: Update Diagram Below
Contrary to the screen above, you can use the “Visual Page Editor” on a Mac if you do a 32-bit installation. At the end you can then start the IDE and at a minimum you should install all of the “Integration Stack” items as some of these work with FUSE:
and there’s some pretty cool stuff such as support for Rules systems like Drools and Guvnor. You’ll probably get a warning about “unsigned content”, but that’s just someone (in Red Hat) being lazy.
After the installation, JBoss DevStudio will want to reboot and then you’ll be right for development with FUSE which we’ll cover in the next installment…
NOTE: Still a bit more updating to do, but most of the above should be correct.