Wednesday, April 3, 2013

Using MongoDb and Sleepy Mongoose and jQuery to save data for a D3 js dataviz

It took me a while to put all these pieces together, so in case anyone else is in the same position, here is what I did.  The code is a bit rough with very little validation...


I wanted to be able to save save different datasets for a d3 dataviz I was working on.  I could have done this in MySQL but as the data was in json already, I thought it a good opportunity to experiment with MongoDB and an HTTP interface.

Having installed from instructions here: http://www.kchodorow.com/blog/2010/02/22/sleepy-mongoose-a-mongodb-rest-interface/

Saving Data

I first tried saving data I already had in javascript:



var request = $.ajax({
url: DB + "_insert",
type: "POST",
data: 'docs=[{"dataset" : "' + dataset + '", "links": '+JSON.stringify(dataitems)+'}]',
dataType: "json"
});

request.done(function(msg) {
alert("success");
});

request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});


I had a couple of issues here.  The first was trying to use jsonp to avoid cross domain problems.  I was getting this error:

            jQuery191001886391662992537_1364976848482({"ok" : 0, "errmsg" : "_insert must be a POST request"})

Jsonp converts the post to a get and Mongoose does not support jsonp, so you have to use dataType json.  There are a number of ways to avoid the problem and the comments on the installation page are helpful.  I chose  to start Mongoose using --xorigin parameter:

                         python httpd.py --xorigin 

The second problem was formatting the data.  There needs to be a docs= or you get

            {"ok" : 0, "errmsg" : "missing docs"}

And it needs to be stringified or encodeURI to avoid a parse error.  In the above example, dataset is a string variable and links is an array.


So now my data was saving and I could check by doing:

         http://test.com:27080/sanky/dataset/_find



Listing Data


So now I wanted to pull back a list of the datasets I had saved so the user could choose which dataset to use.  Ideally I want to only pull back the list of dataset fields, it's currently pulling back all the data for each record.

The html has:

<div id="datasets"></div> <button id="load">Load</button><



The javascript to populate:


var request = $.ajax({
url: DB + "_find",
type: "GET",
dataType: "json"
});

request.done(function(data) {
var results = data.results;
// build a select list from the data
var list = d3.select("#datasets").append("select")
.attr("id", "dataset");
list.selectAll("option")
.data(results)
.enter()
.append("option")
.attr("value", function(d) {return d.dataset;})
.text(function(d) {
return d.dataset; });
});

request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});

Getting a specific Dataset

And finally, when the user has selected a dataset, retrieving the values:



$("#load").click(function() {

// load selected dataset

var request = $.ajax({
url: DB + "_find",
type: "GET",
data: encodeURI('criteria={"dataset" : "' + $("#dataset").val() + '"}'),
dataType: "json"
});

request.done(function(data) {
// needs some error checking here
links = data.results[0].links;
// redraw diagram here

});

request.fail(function(jqXHR, textStatus) {
alert( "Request failed: " + textStatus );
});

});



The page where this was used: http://beautifuldata.eu/sankey/experiment.html






Friday, October 5, 2012

A Cheesy Adventure

I made my first cheese.  It was creamy and tasty and so easy, so now I'm trying Mozzarella!  This was all thanks to the really excellent marketing of Lakeland.  If you don't already get their catalogues full or useful and thought provoking products (who has room for a special plastic dish just for soaking oven racks, and a special brush for cleaning your electric grill and panini maker! ) you can browse their shop here http://www.lakeland.co.uk.  So the catalogue with the picture of cheese on the front cover and the cheese kit on the first page caught my eye and I duly purchased the moulds and book.

I tried to find some non-homogenized goats milk but in the end used Glenisk goat's milk which worked just fine.  Here are the instructions:

1 litre Glenisk goat's milk - heat gently to 24 degrees (watch out, that doesn't take long) the remove from the heat and add 2 tubs of Glenisk goat's plain yoghurt (100ml total) the mix in 1/8tsp (a few drops) of rennet.

Leave to stand overnight and in the morning cut into 2cm blocks with a knife and pour into the foot of a pair of tights.  You won't find the tights in the usual recipe but I'd lost the muslin I'd bought and the tights worked just fine.  Save the liquid Whey that comes off.  The cats loved it or you can use it in the bread machine.  After a couple of hours mix the curds gently with a large teaspoon of sea salt and pour into the cheese moulds and put in the fridge to drain further.  By the evening the cheese was ready, about a quarter of a litre.  I scoffed it all within 24 hours!  It's quite bland so I'm going to try adding crushed garlic and chives to the next batch.

Now must go see how the Mozzarella is getting on!

Monday, July 30, 2012

Handy trick for using django runserver/testmaker on remote server

Thanks Bart for showing me how to have a local version of django running on my VPS.

On the VPS start django as required, eg

python manage.py runserver
python manage.py testmaker -a web

Now do this from a command line where 1.2.3.4 is your vps ip:

ssh root@1.2.3.4 -L 5984:localhost:8000 -N

enter the password and it should not come back with anything.

Now go to this URL and your website should start

http://localhost:5984/

Wednesday, July 25, 2012

What to do with a 17lb turnkey when there are only three of you for Christmas?

Due to unforeseen circumstances, we had less people and a bigger turnkey than planned. And we are not big eaters. So father butchered the monster into breasts, legs and carcass and we cut a small piece of one of the breasts and roasted that. Very tasty is was too and we split the leftovers between us to make at least a further mean each. So what was I going to do with the huge bowl of left over bits? After a bit of googling I came up with this recipe and am very pleased with it.

Turkey Burgers for the Freezer

Amounts approximate!

Cut up the raw turkey into chunks and whizz in the food processor to turn it into turkey mince.
20% (5 biggish onions) of turnkey mass in onions. Chop in food processor and fry gently and leave to cool.
10% (10 pieces) smoke streaky bacon add to onions and cook quickly. Didn't brown.
10% (1 large) cooking apple chopped.
1 clove of garlic, chopped finely.
1 inch cubed of ginger chopped finely.

Let the cooked ingrediants cool down and then mix all together.
Using polenta meal to coat the burgers, (Was going to use semolina, as recommended by Nigella for roast potatoes, but none in the shop. Polenta worked very well as an alternative.) I used a burger making device to form the burger and put on a baking tray coated with polenta. Freeze then take off the baking tray and put into plastic bags, ready for that need for a quick wholesome meal.

D3 Nest function - converting csv data to nested data for treemaps etc.

Just finished 8 examples of how to use the javascript visualisation library D3 nest function - notes to self really, but shared in case they are useful for others.

 http://bl.ocks.org/3176159 to see the code
 http://bl.ocks.org/d/3176159/ to see all the examples run.

Thursday, July 12, 2012

Simple D3 examples to try

I learn by looking at examples and then trying to modify them to do what I want. I've started creating little gists to record how use different features of d3. In case they help others, here is a start. They can all be run in bl.ocks

Processing CSV strings and files and grouping with nest:

  • https://gist.github.com/3053667 - processing csv string 
  • https://gist.github.com/3053705 - processing csv file 
  • https://gist.github.com/3096857 - nesting/grouping to two levels



Drawing Axes:

  • https://gist.github.com/3053419 - simplest possible
  • https://gist.github.com/3059392 - date axis
  • https://gist.github.com/3061203 - prettified, angled date labels and uses extent
  • https://gist.github.com/3098488 - rescale an axis using a transition


Monday, February 20, 2012

Getting to grips with D3 Visualisations


D3 is a great library for creating all kinds of data visualisations written by Mike Bostock, but until recently I just couldn't get to grips with it. But then I discovered Scott Murray's great series of tutorials that start with the basics and build up and Luke Francl's appropriately named D3 for Mere Mortals. I've done some basic charts and am now rewriting the Protembla project management visualisations in D3. A big thank you to Mike, Scott and Luke.

Wednesday, February 15, 2012

What is the US of A?


Watching the BBC's Panorama program on poverty in the USA lately I was shocked at the levels of homelessness, hunger and lack of healthcare in the US, still the richest country in world and still pushing their way of life on the rest of us. Even more shocking to me was the attitudes of the Republican politicians, it's your life, it's your responsibility and if you can't afford to go to the doctor, well that's your problem.

To me that is not civilized. I think one of the measures of a civilization is how it treats its weak and how it treats its animals. Even the more sophisticated animals look after their sick, their younge and their old.

But then I realised America is not a civilisation, it's not a culture, it's an economy. As an economy the measure of their success is how strong their economy is and weeding out the weak is a necessary part of maintaining that success. But has that always been so?

I don't think so. American is given us much to experiment with, some of it we love, so we don't and much we absorb without question and I think the love of money and this concept that the economy is our lord and master that cares only for sort term profit, falls in that latter category. Where that came from I don't know, but I don't think it was part of the plan of any of the cultures that found themselves there over the centuries.

Personally I am happy to live in less affluent Ireland, despite it's many problems, where we care for each other, are embarrassed to hear of people falling through the net and ashamed of our greed getting the better of us in the last years. I'd much rather be poor and part of caring community than rich and living behind locked gates.

Saturday, February 4, 2012

Panic! - Beef stew without onions


I don't think I have ever made beef stew without an onion but I'd defrosted the beef and wasn't going to drive all the way into town for an onion so it was time to improvise.

I'm going through a ginger and, separately, an apple phase at the moment and also watching How to Cook like Heston - cheese programme was the latest. So having just finished a rich and satisfying beef stew, here is a rough and ready recipe:

Brown the beef chunks in hot oil then added glass (or two) of red wine to deglaze.
Add tins of chopped tomatoes in roughly equal quantity to the beef - in my case two tins, plus a bit of extra water to wash the tins out.
Add roughly copped garlic - three big cloves
Add roughly chopped ginger - two tables spoons
Oyster Sauce - two tablespoons
Rind or a large piece of hard goats cheese (thanks Heston)

Brought to the boil and then simmered for an hour with the lid on as didn't want to reduce.

Added one large cooking apple chopped in large chunks without skins and simmered for another 10 mins. You want the apple to be cooked but not disintegrated.

Was planning to add some cous cous but the larder was bare of cous cous so had wholemeal fusili cooked in the juice of the stew instead.

Really rich an filling and the chunks of apple were a nice surprise. The cheese rind really worked and easy to identify and pull out before eating. Mmmmmm.

Tuesday, January 31, 2012

Customising django registration - no activation email or just a username

A client had a need for removing the email activation from the standard django registration process and a prototype system I am working on needed the ability to create a user from just a username, so I was delighted to find that the current django-registration development version makes this kind of customisation easy.

Here's how:

In the registration folder, there is a new folder called backends. Create a new folder, for example myreg, and put two files in it.

The __init__.py does the main work:

In this example there are two changes from the default, there is no email activation required and the registration form also asks for the users first and last names.

__init__.py


from django.conf import settings
from django.contrib.auth import authenticate
from django.contrib.auth import login
from django.contrib.auth.models import User
from django import forms

from registration import signals
from registration.forms import RegistrationForm


class MyRegBackend(object):
"""
A registration backend which implements the simplest possible
workflow: a user supplies a username, email address and password
(the bare minimum for a useful account), and is immediately signed
up and logged in.

"""
def register(self, request, **kwargs):
"""
Create and immediately log in a new user.

"""
username, email, password, first_name, last_name = kwargs['username'], kwargs['email'], kwargs['password1'], kwargs['first_name'], kwargs['last_name']

u = User.objects.create_user(username, email, password)
u.first_name = first_name
u.last_name = last_name
u.save()

new_user = authenticate(username=username, password=password)

login(request, new_user)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user

def activate(self, **kwargs):
raise NotImplementedError

def registration_allowed(self, request):
"""
Indicate whether account registration is currently permitted,
based on the value of the setting ``REGISTRATION_OPEN``. This
is determined as follows:

* If ``REGISTRATION_OPEN`` is not specified in settings, or is
set to ``True``, registration is permitted.

* If ``REGISTRATION_OPEN`` is both specified and set to
``False``, registration is not permitted.

"""
return getattr(settings, 'REGISTRATION_OPEN', True)

def get_form_class(self, request):

class MyRegForm(RegistrationForm):

"""
add first and last names to the form
"""
first_name = forms.CharField(
label='First name',
max_length=30,
required=True)
last_name = forms.CharField(
label='Last name',
max_length=30,
required=True)


return MyRegForm

def post_registration_redirect(self, request, user):
"""
After registration, redirect to the home page

"""

return ("/", (), {})

def post_activation_redirect(self, request, user):
raise NotImplementedError


The second file is urls.py where you need to point to your new backend

urls.py


from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from registration.views import activate
from registration.views import register


urlpatterns = patterns('',
url(r'^register/$',
register,
{'backend': 'registration.backends.myreg.MyRegBackend'},
name='registration_register'),
url(r'^register/closed/$',
direct_to_template,
{'template': 'registration/registration_closed.html'},
name='registration_disallowed'),
(r'', include('registration.auth_urls')),
)



Now an even simpler version. Just enter a username and the user is created and you are logged in. Note that I wanted a default password so I made password1 a hidden field on the form with the value I wanted so that is how it is able to create the user. I could also have hard coded it into the register method below.


__init__.py


from django.conf import settings
from django.contrib.auth import authenticate
from django.contrib.auth import login
from django.contrib.auth.models import User

from registration import signals
from registration.forms import RegistrationForm


class MyReg2Backend(object):
"""
A registration backend which implements the simplest possible
workflow: a user supplies a username, email address and password
(the bare minimum for a useful account), and is immediately signed
up and logged in.

"""
def register(self, request, **kwargs):
"""
Create and immediately log in a new user.

"""
username, email, password = kwargs['username'], kwargs['email'], kwargs['password1']
User.objects.create_user(username, email, password)

# authenticate() always has to be called before login(), and
# will return the user we just created.
new_user = authenticate(username=username, password=password)
login(request, new_user)
signals.user_registered.send(sender=self.__class__,
user=new_user,
request=request)
return new_user

def activate(self, **kwargs):
raise NotImplementedError

def registration_allowed(self, request):
"""
Indicate whether account registration is currently permitted,
based on the value of the setting ``REGISTRATION_OPEN``. This
is determined as follows:

* If ``REGISTRATION_OPEN`` is not specified in settings, or is
set to ``True``, registration is permitted.

* If ``REGISTRATION_OPEN`` is both specified and set to
``False``, registration is not permitted.

"""
return getattr(settings, 'REGISTRATION_OPEN', True)

def get_form_class(self, request):
return RegistrationForm

def post_registration_redirect(self, request, user):
"""
After registration, redirect to the user's account page.

"""
return (user.get_absolute_url(), (), {})

def post_activation_redirect(self, request, user):
raise NotImplementedError



Now in urls.py you just need to call your new backend

urls.py


from django.conf.urls.defaults import *
from django.views.generic.simple import direct_to_template

from registration.views import activate
from registration.views import register


urlpatterns = patterns('',
url(r'^register/$',
register,
{'backend': 'registration.backends.myreg2.MyReg2Backend', 'template_name': 'registration/registration_form_quick.html'},
name='registration_register'),
url(r'^register/closed/$',
direct_to_template,
{'template': 'registration/registration_closed.html'},
name='registration_disallowed'),
(r'', include('registration.auth_urls')),
)

Sunday, December 4, 2011

Is cat food addictive (for cats!)


A friend brought some fancy Felix cat food in sachets when I asked her to pick up a bit of cat food on her way here. My cats are outside cats. Their normal diet is dried cat food once a day with small beasties as they catch them. Just occasionally they get a tin of cat food for a treat. They do well on this diet always looking sleek and shiney.

Anyway they wolfed down the Felix that night and I thought no more about it. Next morning I was mobbed at the door as though they hadn't been fed for days. They spent the whole day at this and finally got their fix in the evening. Next day the same. Thankfully the Felix sachets are finished and their behaviour is returning to normal. What was that about?

Friday, April 15, 2011

Green shoots and old scaffolding boards


Long, long ago I was a great fan of Geoff Hamilton's Gardener's World on the BBC. Geoff was a great man for showing us how to knock up useful garden items from a few old boards and some nails. With the untimely loss of Geoff we moved on to a new generation of presenters who reviewed the range of products we could purchase from our local garden centre and I rather lost interest in the program. Two bits of great news. Monty Don is back presenting Gardener's World, a real gardener and not a bit of garden centre tat in sight. Then, fired with a renewed enthusiasm for gardening programs, I tried RTE's How to Create a Garden and there were the good old scaffolding boards and how to make your own cold frame. Isn't it great to seem some attention given to build your own instead of buy your own!

Monday, February 21, 2011

How I'm going to vote in General Election 2011

I've been struggling with how to vote as I don't feel any of the main parties are looking much beyond the end of their noses in their plans to fix things - or return to a sustainable economy as Fianne Fail puts it!

I want to see fundamental change in how we view the economy, in our use of non-renewable resources and a more imaginative and long term approach to planning for the future. I want to see more power at the local level along with people getting more involved in our own government. I want to a split in the political system between politicians how look after local and individual issues and those that are minding the country. I could go on....

No fundamental change is going to come with the current, well established people and systems of government so I will vote for whichever party will make the most fundamental changes in the way we govern ourselves that give a chance for change to happen AND for the party which makes the most effort to involve women.

I don't believe women make better decisions than men, or that men make better decisions than women, but I do believe that men and women together make better decisions. But for this to happen women must be allowed to be women and not feel we have to play the men's games better than them. Apparently men tend to make decisions that take advantage of the current situation whereas women are more likely to look at the long terms consequences of a decision and judge according. This make perfect sense to me and shows how men and women working together make better balanced decisions. This TED talk makes a similar point:


Now to the research. Any comments on who you think is doing best in this area very welcome!

Monday, December 13, 2010

Including Jpeg support in PIL on centos box

There are a lot of posts out that say to install the libraries jpeg and jpeg-devel prior to installing PIL, but this did not work for me on Cento. For example this site http://www.jroller.com/RickHigh/entry/installing_pil_python_image_library suggests using the command:

$ sudo yum install freetype freetype-devel jpeg jpeg-devel libpng libpng-devel
Setting up Install Process
Setting up repositories
Reading repository metadata in from local files
Parsing package install arguments
No Match for argument: jpeg <<----- note the error here
No Match for argument: jpeg-devel <<----- and here
Resolving Dependencies
--> Populating transaction set with selected packages. Please wait.
---> Downloading header for libpng to pack into transaction set.
......



Instead use:

$ sudo yum install freetype freetype-devel libpng libpng-devel libjpeg libjpeg-devel


If you have already got as far as installing PIL, delete it from the site-packages directory and reinstall, I use easy_install PIL, and this will rebuild PIL, this time with jpeg support.

--------------------------------------------------------------------
*** TKINTER support not available
--- JPEG support available
--- ZLIB (PNG/ZIP) support available
--- FREETYPE2 support available
*** LITTLECMS support not available
--------------------------------------------------------------------

Sunday, October 3, 2010

Training Horses like learning a Language?


I've been trying to articulate how my methods of training horses have changed over the last couple of years, thanks to a number of books and in particular Clinton Anderson. It's about teach that when a give a certain aid, this is what I want the horse to do. But isn't that what I've always done? Take for example teach a rein back. I would apply some pressure on the reins and a bit of leg and keep increasing the pressure until the horse would step back, then I would reward him. Over time I would hope to reduce the amount of pressure I'd require to get the rein back.

The new method is only subtly different. First I will teach the reinback from the ground, light pressure on the chest means go back, then when I'm on board apply gentle pressure with the reins at the same time a pulling a rope around the horses neck. The instant the horse makes any attempt to go back, I drop the reins to indicate that was the right thing to do. After a bit I'll stop using the rope and include moving my weight back and finally add use of the legs. This way I've broken down the problem into steps and never had to apply a lot of pressure to show what I want. This second approach has meant my horses have become much lighter and stop and reinback with much less resistance because they have learnt the language of the aids.

So I would say my old method was like arriving in a new country where nobody speaks my language and beyond speaking a bit slower and louder, I don't get any help in learning this language. It is a slow and painful process! The second method is like having a teacher coming with you a helping gain fluency step by step at a pace that suits you. So as a horse trainer, I am focusing more on my skills as a teacher than my skills as a rider.

Tuesday, May 4, 2010

Mad Dog the Superstar


Travelled up to Kilkenny yesterday (3.5 hours each way) for the excellent Amateur show that is held there on May Bank Holiday each year. It's been lucky for me in the past, but with no show since last October and straight into one of the toughest competitions of the year, I was stomach churningly nervous as I wait for the class to get under way. I needn't have worried, Mad Dog shook off the winter blues and returned to form to win the class in fine style, loving all the excitement and attention. Supercub finished fourth in the later speed class so very tired but happy horses and rider arrived home late last night.

http://stabletostable.com/en/2010/05/kilkenny-sji-amateurs-warrington-ec-03052010/

Saturday, May 1, 2010

Dolores has healthy French Buffet Foal - the waiting is over



Phew, the waiting is over! Dolores broke her pelvis when she was 1 year old and nobody except me and the vet thought she had a chance. But after waiting for 6 month, minding her day and night, neighbours all being called on more than once to help me get her on her feet again in the middle of the night, waiting for the scan at 3 years old to see if I could put in her in foal, waiting to see if she would go in foal, waiting to see if she would carry the foal full term, waiting for her to foal, the waiting is over and the horse count has gone up once more.

In the early hours of the 1st of May, out in the field because I thought I had more waiting to do, Dolores gave birth to a health filly foal. She is proving a calm and competent mother and is delighted with her foal. More photos to follow!

Saturday, April 24, 2010

SPCs Talk at Labour Party Environment Forum

Here is what I plan to say - but there is an hours journey to get there - it could all change!

Hello, my name is Phoebe Bright and I'm a member of Cork Environmental Forum, on the executive of Feasta (an Economics think tank), a Long Term Thinker, a Techie and a horse addict. I'm going to speak very briefly, only the role of SPCs, my experience of sitting on one of the Cork County SPCs and a couple of suggestions for how we can make them more effective.


Each County and City Council has a number Strategic Policy Committees made up roughly equal numbers of councillors and external representatives from organisations representing the environment, economic and social pillars. The expectation for SPCs was that they could provide a different perspective during policy development. For example, the policy planning unit might feel they don't more input into the farmer's market's. Should there be provisions in the upcoming Development Plans and if so what? A good question for an SPC. Or, are there enough provisions for dogs in the City? If not, what changes to policy should we consider?

That, as far as I can see from the documentation, was the expectation. The reality for me, and many of my fellow external representatives, was that the SPC had become another tick box on the road to policy implementation. Typically, we would receive documents for the next meeting a few days before the meeting, or at the meeting and we would spend 20 mins reviewing the Retail Policy for the City. As the councillors had already participated in discussion on this policy during it's development, they had nothing more to say other than to repeat their position on this policy and the external representatives were desperately looking to find something intelligent to contribute from a hasty reading of the document. As we saw these documents near the end of their progress from idea to publication, there was little chance of our input having any impact, even when we were able to make useful contributions. There was an understandable air of frustration from many of those involved.

The SPCs have lately been disbanded and reformed and we hope for better things going forward. I certainly feel the idea of the SPC is valid and could of great benefit in widening the discussion on policy and helping the external representatives and their organisations to better understand the thinking behind policy development and to challenge the mindset of the of the elected councillors.

I would ask you to consider two thoughts going forward, first the questions we ask and second the language we use.

Beth Novak did a talk on for the Long Now Foundation on what Obama's administration has done on Open Government in the last year, what they have learned and their plans for the future. On President Obama's first day in office he signed a memorandum on Open Government, committing all the departments and agencies to "transparency, participation, and collaboration. One of the lessons they have learnt to successfully encourage participation and collaboration is to ask good questions. In this case, good questions are SMART questions (Specific, Measurable, Achievable, Relavent and Time bound) http://en.wikipedia.org/wiki/SMART_criteria. So if you are an elected member and an issue arises during the development of policy, why not suggest that this be brought before an SPC? If you are on an SPC, try to get these types of questions on the agenda.

Beth Novak's talk on Open Government: http://www.longnow.org/seminars/02010/mar/04/transparent-government/



The second suggestion comes from a gem in the book The Intelligence Advantage . The book talks about how culture is about language, the way we talk about our problems, the way we listen and the way we discuss. If we want to test whether change is happening, then all we have to do is listen to the way that language is used. If that has not changed, the culture is not changing either.

So if we want a different discussion in our SPCs, a different perspective and viewpoint, then we need to change the balance so that the councillors are drawn into a different conversation. At present the Chair of each SPC is part of the council, so my suggestion is to have the meetings chaired or facilitated by an external representative.

I could am happy to share further experiences and ideas for SPCs and open government, so please feel free to catch me in the next break or contact me later.

Thursday, April 22, 2010

The Language of Change


Dipping into The Intelligence Advantage - Organizing for Complexity by Michael D McMaster a gem of a book, I came across this section, which seems particularly pertinent to our situation in Ireland.

Organisations first appear in Language

Language is at the center of society, cooperation and the coordination of action. All social organization occurs in language. Community is a function of language. How we distinguish those who "belong" from those who do not is by the way they speak. Even when the distinction is based on common practices, these practices emerge from a society where language was the fundamental organizing medium.

A corporation, like a community, is held together by it's language, given meaning by its language, and is distinguished from other corporations by its language. IBM, Apple and NEC (that dates it!) all have unique language, unique stories and unique ways of speaking. Equally important, their unique ways of understanding things and listening. These ways of speaking, listening and understanding not only constitute the culture of a company, but they also constitute a company's unique way of organizing, managing and relating to the marketplace....

and further on...

If there is no change in the way that problems are described, the way challenges are spoken about, or the way values are stated, then it is very unlikely that any major change is occurring in that corporation.


I think there is a groundswell of opinion in Ireland that significant change is required in the culture of our public organisations. We will know that our decision makers and politicians also want change when we here a change in the language they use to describe our problems and how they talk about the future.

Friday, March 26, 2010

Installing GIT on Centos 5.4

Following directions from this site:http://www.how-to-linux.com/2009/01/install-git-161-on-centos-52/

I got the error:

[root@tricostar-nwlc git-1.7.0.3]# make prefix=/usr/local all
/bin/sh: curl-config: command not found
GIT_VERSION = 1.7.0.3
/bin/sh: curl-config: command not found
* new build flags or prefix
CC fast-import.o
....


When trying to make GIT. After a bit of googling, found that I needed to include curl-devel as a dependancy so the following instructions worked for me:

yum install zlib-devel openssl-devel perl cpio expat-devel gettext-devel
yum install libcurl3-openssl-dev
wget http://kernel.org/pub/software/scm/git/git-1.7.0.3.tar.gz
tar xvfz git-1.7.0.3.tar.gz
cd git-1.7.0.3
make prefix=/usr/local all
make prefix=/usr/local install