Category: Coding

funcjure

funcjureI’ll soon be starting a new permanent job, and in preparation I’m making it clear what is my prior intellectual property. In this case, it’s not so I can make “oodles of money” in the future, but it’s actually so I can release it as Open Source.

So what I’ll be explaining here is not something I’ve finished, but an idea which I’ve actually been playing around with for a year or so, but never gotten around to fully implementing. This will also help bring together my thinking on this and hopefully inspire me to really get going on this project :-)

 

What is funcjure?

funcjure is a “functional syntax wrapper” around Clojure. What do I mean by that? Well, Clojure is a great language, especially if you’re either used to or prepared to adapt to prefix notation. ie instead of typing 1+1, you type (+ 1 1) which although relatively easy to understand, can get a bit harder as things get more complex, like 9+5*7/4+62/6 which would translate as (+ 9 (*5 7) (/ 62 6) etc…

The logical question is Why? (do I have to type prefix notation) The Clojure and Lisp people will say “well, that’s the way it is, so just get used to it”, which I’m fine with as I wrote my first Lisp program over 3 decades go. Even still, I would prefer to use infix notation (which is what we’re taught for maths) and see no reason why we shouldn’t as computers are great at doing the sort of rote translation required to convert infix to prefix notations.

Clojure is a great language, which also has a fantastic ecosystem and community, and is written in Java which has a HUGE ecosystem. Furthermore, Clojure can call Java code, which has helped tremendously by giving Clojure “out of the box” access to so many libraries and products. Finally, because Clojure is a Lisp, its strong point is Symbolic Manipulation which is exactly what is required for translating infix to prefix structures in order to implement funcjure!

What would this look like? Let’s take some typical Clojure and then show what it would look like in funcjure:

"Hello World!"            ; Minimal "Hello World!"
; "Hello World!"

(println "Hello World!" ) ; Standard "Hello World!"
; println("Hello World!)
; Clojure((println "Hello World")) ; Execute some Clojure code
(def a "test")            ; Define a variable
; a="test"

(def mylist '(1 2 4 5 6)) ; Define a variable list
; mylist='(1 2 3 4 5 6)

(println a mylist)        ; Print our variables
; println(a mylist)

(first (rest '(1 2 3 )))  ; Get the 2nd element of the list
; first(rest('(1 2 3)))

(.println System/out "Hello World from Java!")
; System.out.println("Hello World from Java!")
; or Java(System.out.println("Hello World from Java!"))

(defn factorial           ; Now let's do the classic Factorial function
  ([n]                    ; when only one argument is passed in
    (factorial n 1))
  ([n acc]                ; when two arguments are passed in, with recursion
    (if  (= n 0)  acc
    (recur (dec n) (* acc n)))))
(factorial 6)             ; And test it
; factorial(n) = factorial(n 1)
; factorial(n, acc) = if((n==0), acc, recur(dec(n), n*acc))
; factorial(6)

The overall purpose is to make code much more accessible and ‘natural’ to write as we’re essentially taught infix notation as our “second language” when we study even the most basic mathematics. None of this is really new – in the beginning, things look like our old friend BASIC, with direct assignment and loose typing, which easily map to Clojure. You’ll also notice that access to Clojure and Java is provided by the respective functions. Speaking of functions, these are written similar to Prolog and other languages (eg Erlang) which allow for “pattern matching” in function definitions. In the beginning, the capabilities would be mapped directly to Clojure (as shown above), but eventually it would be nice to go to a full Prolog style, so the factorial function could be written like

factorial(0) = 1                ; The base termination case
factorial(n) = n*factorial(n-1) ; Iteration by recursion

which I think is way more elegant.

That’s about it for this post, as this really contains the base concepts for what I’d like to do. There’s obviously a lot more scope and subtlety to this, some of which I’m aware of and probably a lot more which I’m not, but I personally would much prefer to use a language like this and have access to Clojure and Java when needed for efficiency or easy code porting.

What do you think? All comments / suggestions / critiques would be gratefully accepted as I haven’t really done much more work than this, other than having a 1/2 working translator for this syntax which I’m going to (hopefully) get to work on in the next few weeks before I start my job.

Back in Australia

MoranReserve

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…

YachClub

Swift to Objective C to C

ObjC swift COne of the things Swift promised was interoperability with Objective-C and C/C++. Well, it’s now here – relatively easily…

asciitrek asciiIf 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:
SwiftHarness

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:

OCC

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:

chop

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…

The End of the Apple Honeymoon?

Note: If you think I’m some kind of “Apple Hater”, read My History with Apple at the bottom

Apple seems to be suffering an all-round lack of quality in their software and some would say hardware – what to do? Before we get in to this, let me tell you my tale of woe…

FlamingHoneymoonThis post has been 6 months or more in the making, but has culminated with the problems I’ve been having with my iPad Air 2 over the past months. It all started so innocently – I was happily using iOS 7 and I’d installed a new App which said “In order to use this, you must use iOS8”. Fine, I thought – it’s been out for a while and there have been a few incremental updates (something like 8.0.3) so I upgraded. From memory, this one was OK, so when 8.1.2 or 3 came out I didn’t really think much and just upgraded, and that’s when my problems started.

Apple Horror MovieIt was a bit like a horror movie – you know, everything is fine, the sun is shining – living the good life (on iOS 8.0.3 :). Then, one day (some time in 8.1), something a bit out of place happened – I was finding it hard to close browser tabs – didn’t really think much of it. Unfortunately over the next few days, things got worse! Typing started either not getting the characters or doing multiple characters and it just got worse and Worse and WORSE! Basically, my iPad was bricked. “Luckily”, 8.2.2 had been out for a while so I upgraded, after checking the forums as some people reported it solving the problem.

Groundhog DayThen, like a groundhog day, all started coming back with the same pathology – first, an error here or there and after a few days – bricked again. 8.2.3 came out so I went to this – same thing – worked for a while, then bricked. I was at the end of my tether and was at the stage of buying a cheap Android tablet to use at work until Apple fixed things on the iPad. Again, as luck would have it, 8.3 is out and I’ve just upgraded today. I’m not holding my breath though as I know that this bug can surface after days or weeks…

 What’s the Problem?

My experience is not unique. In fact, I’m one of the “Lucky Ones” who didn’t have problems with iOS 7. Just Google “iOS problem” and you’ll find there are 194M pages!!! I know there are even more hits for Android (564M) and Windows Mobile problems (264M), but is that really something to compare to? Especially when both those platforms are on a wide range of uncontrolled hardware, whereas Apple is a “closed ecosystem” where they’ve designed every Apple Phone ever made. As a long-time (over 30 years – I started with an Apple II) Apple user I’ve seen an increase in the quality of their software, until the last few years. A bit like my touch problem, they surfaced occasionally, but were not of significance, but now we’re talking about many, releases with the same or worse problems – where will it end? Don’t think iOS 9 will necessarily fix everything as as iOS 8 was supposed to fix the problems of iOS 7!

What’s even worse, the “Crappy Quality Virus” seems to of infected the Mighty OS X. Touch wood and 3 Hail Mary’s I’m actually OK – running Yosemite 10.10.3 and no problems. Again, Googling “OS X problem” gives 264M hits – more than iOS! For both OS’s, there’s now a huge industry around documenting and fixing the various problems – all on platforms that Apple has total control over – THERE IS NO EXCUSE!

What’s the Solution?

As I mentioned at the beginning, I’m not an Apple Hater. In fact, I’m an Apple Lover – I used to have the attitude of buying Apple for anything personal. Unfortunately, I’m now in the situation where if this doesn’t improve I’ll be replacing my iMac with one of the many all-in-one PC’s, and my Tablet with an Android or Windows one. I already have an Android phone as I was about to get a 5, but the company I was working for got pre-release devices and they kept (physically) breaking.

Apple JobsTo the solution: I believe this malaise set in with the passing of Steve Jobs. For all his faults, the amazing thing about Jobs was that he got understood the Business, Design, Hardware and Software of making “Insanely Great Products”.

What have we now? We have Tim Cook who’s background is in Sales and Manufacturing and Jony Ive, the reclusive yet internally influential and widely acknowledged design genius (although I do question the “new blue folders” on Yosemite and the Apple Watch). What’s missing?

        Hardware & Software

Name the people associated with those… There’s a hardware guy who we see in their videos, but I can’t find him on Google. For software, there’s Craig Federighi and I must admit I thought Phil Schiller was until I looked up Google and found he’s VP of Marketing! Therein lies the problem – there’s no outstanding person across Hardware and Software. Although the ideal would of been to find another Jobs to replace them all, I don’t think that would ever happen. What is needed is someone responsible for “Integrated Design” who can work with Ive, ensure the highest standard of hardware and software is produced to go in to the Objects of Desire that Apple makes and has the same visibility as Cook and Ive.

Why did I write this?

Probably mostly to get all this off my chest and also as a warning of what may happen to Apple if they don’t get back on track. We’ve seen so many companies like IBM and Microsoft fall so far when they lost their way, it would be a pity to see the same happen with Apple…

Finally, I have the tiny hope that someone at Apple sees and relates to it – I’d love to continue the conversation…


original-apple-logoMy History with Apple

As mentioned at the beginning, before anyone thinks of criticising this piece (which you’re free to do after you’ve read this :) here’s a brief history of my (hopefully ongoing) time with Apple products:

  • Started with an Apple II
  • Used a Lisa – a rich friend had one when I was in my senior school years
  • Got caught up in the “PC Revolution”
  • Shipped some of the early NeXTs* to Australia, did the Australian product launch, taught NeXT programming, created software for NeXT, attended most NeXTworlds and met Steve Jobs
  • Got caught up in the “Java Revolution”
  • Employed by a company in the 90’s who used Apple gear, got my own and went to a few WWDCs (before they were hip)
  • Have continuously bought Apple products again since the 90’s
  • Currently have an iMac, Mac Mini, iPad 2, iPad Air, two Apple iPods and an Apple TV

* For you young’ns, NeXT was what Jobs created after Apple fired him and NeXTstep was the operating system which became Cocoa – all those NS prefixed classes stand for NextStep

Apple, where for art thou?

Apple where for art thou?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”

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…

safari - getting Memory

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!

safari - Memory Pressure

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)safari - kill

and of course everything went back to normal. To be fair, when I restarted it, Sarari, it was consuming less than Mozilla

safari - Normal

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???

apple Calculator

what if I had a light background behind it? That’s just crazy… Again, broken windows

Welcome 2015!

London Fireworks 2015M25 Carpark

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…

Javelin TrainOh, how I long for those lovely trains, and will never complain about a 30 or even 60 minute delay – the worst I’ve had in a car is a 1h trip taking 4h!!!

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…

theme : ecologyWhat are the themes though? Here’s a list of where I’d like to go:

  • Lifestyle & Reviews
  • Process & People & ScramJet
  • Clojure
  • 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.

teaserHere’s a few teasers though based on posts I know I’ll write or have in draft form:

  • 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!

Changearc – the thinking person’s RiczWest ;-)

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…

Free “Mathematica”* in the Wolfram Cloud

Wolfram CloudMy history with Mathematica goes back about 20 years, when I was doing Masters research and using Mathematica for both programming and visualisation.

One problem was that it was expensive unless you could justify it. Also, there were no free or “community” editions available…

Well, THAT’S ALL CHANGED NOW!

Almost a week ago, Stephen Wolfram announced the Wolfram Programming Cloud, which as you can see from the image below is extremely powerful – try doing that in a programming language…

MySurface3DMy SurfaceYep, Mathematica just integrated for two variables and then just assigned that to MySurface which represents that expression and plotted it in 3D

“Ah…”, I hear you say, “that’s just some fancy trickery with a good library, but it’s not real programming”. Well, that’s kind of right, except for the fact that Mathematica has a huge range of such libraries, spanning across most disciplines: Applied Mathematics, Arts and Humanities, Business and Economics, Education, Engineering, Information Science and Technology, Mathematica Technology, Mathematics, Science and Social Science.

Also, those two lines above are written in the language for Mathematica which is now called Wolfram that is a “symbolic, functional, and rule-based multi-paradigm programming language“. Pure language wise, it’s pretty hard to match.

It’s fully functional, being able to pass around functions to functions in whatever way you want, like above. But it doesn’t stop there as you can do conventional procedural programming:

For[i=0,i<4,i++,Print[i]]
0
1
2
3

or, rule and pattern- based programming:

rule = {a_, b_} :> {b, a}
{1, 3} /. rule
{3, 1}

and purely functional programming like this classic fibbonaci example:

f[1]=1;  f[2]=1;
f[n_] := f[n-1]+f[n-2] // Define Fibbonaci Function
f /@ Range[10]       // Now get the first 10
{1,1,2,3,5,8,13,21,34,55}

So that’s pretty much all of the major programming paradigms covered! Also, with all the talk about REPL’s these days, Mathematica has had one since it’s inception, except it’s not the REPL you’re used to. Apart from the normal ASCII behaviour, it can typeset and edit equations along with displaying graphics and widgets making it more of a SupeREPL.

Mathematica REPLI’ve not even scratched the surface here in order to keep the examples short and understandable, but you can easily find more by searching for “Mathematica programming example” or “Wolfram programming example“. Or, if you just want to see what it’s capable of doing or just get some inspiration, check out the Wolfram Language Code Gallery.

Interested? Then just head on over to the Wolfram Programming Cloud https://programming.wolframcloud.com/app/ and get started with the free version which is more than adequate to work out if you should upgrade to add extra options like an offline desktop version or even the mighty Mathematica itself.

Oh, and one last thing…

The Wolfram Cloud works on an iPad!

Yes, our (some very geeky people & me :) dream of being able to do complex computation and programming on the iPad is here – as long as you’re connected… Hopefully it won’t be that long before an offline “iPad Desktop” version comes out :-)


* Technically, the whole of Mathematica is not all in this product yet, but it seems quite a bit is and hopefully it will only be a matter of time before the whole thing is

Simplify

https://i1.wp.com/www.spectrumphotographytips.com/images/simplify2.jpg

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:

  1. Reserve an item in store at Curry’s
  2. 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???

complex flower pattern

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…

brazil computerSTOP Complexifying!

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

The Justifications

After too many years working for such organisations, I can take a pretty good guess at why both “enhancements” were done:

  1. 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.
  2. 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 :-(

solutionSome Solutions

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 ?

  1. 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).
  2. 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”.

Deep Human Solution

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?

kayakerOnRiverFurthermore, 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?”

FuseDay – Installation

JBoss FUSE cloud
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.

Installation

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:

admin=admin,admin

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

JBoss FUSE login

which should give you the welcome screen!

JBoss FUSE welcome

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:

JBoss DevStud first

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

JBoss-DevStud-JVM

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:

JBoss DevStud updates

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.