Grassroots and weeds

It takes all sorts, or so I’m told. I was never great for joining clubs or organizations. Disparate people coming together under a common cause, a mobilization of bias with a singular goal sends chills down my spine and pits my socialism against my neurosis. For a friend of mine his involvement in one such club was having people to go to football matches with and guaranteed access to tickets. That was the singular motivation for him to set up and grow the club, if he was being totally honest it also scratched his organizing and ordering his world itch. That is another post in of itself.

For some it was less about the football and more about the membership of something. Watching a vital away qualifier in the pub one night I marveled at how many of the members paid such little attention to the match, huddled outside smoking when it wasn’t even half-time. For others it was about power and control which manifested itself in internal political machinations, bullying and a jaw dropping lack of self awareness.

This is an issue for any movement especially a grassroots political movement. The initial swell of support is required for the movement to gain traction, if your protest numbers are not being misrepresented by the main stream media then you’re doing it wrong. These movements can be prone to attempted hijacking or dilution by less than honest brokers.

Lurking within your number may be a few weeds, those comfortable retweeting anti-Semitic tropes, anti-immigrant sentiments or anti-fluoride propaganda. These will of course be seized upon by the establishment to discredit your efforts and dismiss you as a lunatic fringe so it is important for movements to respond appropriately.

Sinn Féin have grown massively in the most recent election in Ireland and it is interesting to see just how worried the establishment parties are. Right wing online news organization Gript have been digging deep into old tweets of new politicians in an effort to discredit. The accusation that Sinn Féin are not a normal party has been leveled by the outgoing Taoiseach Leo Varadkar. Given his own party’s record in government this may not be the zinger he thought it would be. Fine Gael stood a by-election candidate after emergence of offensive comments about asylum seekers and immigrantsin general while Sinn Féin acted promptly to drop former MMA fighter Paddy Holohan in light of worrying comments made in a podcast.

Apologize for the offence, reiterate how it is inconsistent with your movement and if necessary, do some weeding. Growing pains are to expected and decisive leadership is required to ensure your grassroots aren’t strangled before they get bedded in.

You might not find kindred spirits amongst all the fans on the bus but they’re easily jettisoned as the floodlights emerge on the horizon.

Echoes

Ireland’s politicial establishment should have seen this coming, but they didn’t. They were warned that focus on the economy and Brexit and ignoring the issues around housing, health and the cost of living would leave an open goal for any party that offered an alternative. 2020’s general election is like no other before it and the political establishment are reeling trying to wrap their heads around it. Ireland’s fourth estate whose socioeconomic, educational and familial ties to our political class, and in particular the most recent Fine Gael government engine room, gave them unrivaled access to whatever the government saw fit for public consumption.

It is of course the fault of the “echo chamber” that comfortable, familiar unchallenging environment you build for yourself, most typically online, so as to confirm your world view.

Echo chambers are a useful tool for the establishment, an in a nutshell soundbite to dismiss your point view as unreflective of the ordinary people. As if it is only progressive activists that operate and organise online, who fall into the trap of having their outlook reinforced by a small network of sympathetic comrades. It is this culture of haughty privileged hubris reinforced by a complicit mainstream media that set Fine Gael up for such a fall.

Within their core traditional support Fine Gael were doing a great job. The economy was growing, we have excellent healthcare for those that can afford it and the housing crisis was an opportunity for landlords to make incredible profits. Fine Gael had been strong on Brexit and had at their helm an modern urbane Taoiseach that was gay and the son of an immigrant. He had young dynamic foot soldiers in charge on Finance, Housing and Health. Fine Gael’s echo chamber reinforced this. It seemed obvious to the onlooker that at least two of these men were clearly out of their depth and the other showed no backbone when it was revealed that the bankers were committing large scale fraud. They create their own actors to justify and rationalise their policies but also to chastise you as idealistic and detached from reality. ‘Middle Ireland’, ‘the squeezed middle’, ‘people who get up early in the morning’ and ‘mythical money trees’ all used to squash alternatives to neo liberal orthodoxy and divide the population into doers and takers. It was as if mass non hierarchical grass roots movements hadn’t twice in the last 5 years coalesced to change the Irish constitution in areas so dear to the conservative base of our traditional parties and as if the way we consume and critique news had not moved on.

So entrenched within this echo chamber are it’s inhabitants that they are still bewildered as to where it all went wrong. Prominent radio host Pat Kenny called the electorate childish and stupid. Former government advisors are having full on melt downs on twitter. Incredulous doesn’t even come close to how the establishment are taking this election result. There honestly are not enough comfy blankets and cups of cocoa to go around.

Corbynism may have stumbled out of the traps and it remains to be seen if the Democratic party will tear itself apart trying to stop Sanders but the electorate of Ireland have said enough in enough. The 40 years of neo liberal orthodoxy has left too many behind for the benefit of too few and 100 years of the Fianna Fáil/Fine Gael duopoly has had it’s day. This did not emerge out of echo chamber. Sinn Féin are the most popular party with the electorate under the age of 65. A die has been cast reshaping the Irish political spectrum and one way or another FF/FG will be forced together and Sinn Féin will gain more ground. The Irish electorate has tilted the political axis and the formation and life time of the next government will determine where the battle lines are drawn creating a more ideologically balanced political class.

Brittle

Things came to a head shortly before Christmas when an effort to rekindle a spark nearly razed all before it. A nice meal in a stylish restaurant followed by a night away in a hotel, no toddler, no commitments and a chance to reconnect. The night peaked with the meal. In the end two of the worst cocktails ever committed to glass was followed by an all too familiar displaced rage, one in the chamber ready to be unloaded, in reaction to gentle teasing.  A pressure cooker of frustration, self loathing and insecurities that had held a relationship prisoner for more than 2 years and whispered in the ear of your writer for what has felt like an eternity.

The suite had been booked but somehow the room we received had an extra single bed. A ham-fisted attempt to coerce the hotel to upgrade the room fell flat on its face. The staff seem to see through the gambit for what it was a hollow attempt to inject some shenanigans into the experience. It wasn’t even the least bit convincing. The polite insistence from the front desk that no change could be made nor that a complimentary breakfast was forthcoming, unless the manager signed off, was all it took for the veneer to crack. The gentle heat of the blush came first from behind the ears deepening on the cheeks as the bluster gave way to embarrassment and shame as I sulked back to the room awaiting the knock back call from the front desk. My wife had a patient generous smile on her face that hinted at a weary sadness. The past couple of years had seen her faith and confidence in our relationship chipped away with sullen uncommunicative moodiness, outbursts of alcohol fired resentments and petty jealousies. She had become to make her peace with the ending of our lives together and was waiting to see if I the conviction to pull the trigger myself or was taking the cowardly route of forcing her to do the deed.

It was on this single superfluous bed that I woke in the horrors the following morning. I say woke in the horrors but there was a few moments of beautiful obliviousness, like regaining consciousness mid free fall and taking seconds to comprehend the seriousness, before the fear struck and my fragmented mind pieced together a highlight reel.

My mind scrambled and fished around for the policies and procedures for dealing with this very scenario. It wasn’t the first time I’d been here. It wasn’t the first night that I had allowed this to happen. There would be excuses. There would be tears. I would blame the drink. I would search for reasons and triggers but in truth it was get-outs I sorely needed, to stretch back and reapply the bandage. Frayed, worn, curling up and gathering dirt on it’s underside, an accumulation that was slowly inching it’s way to the wound so precariously hid. A wound I wouldn’t treat let alone acknowledge.

It took just that. Acknowledgment. The patience required to draw it out came from an unidentified well which must have been sunk to depths beyond the realm of the mole people. Slowly at first it came with an admittance of unhappiness. In this superheated environment things had been forced. Wild blossoms flowering in a traditionally hibernative time of year, migratory birds returning to find their nests occupied by short term tenants.

“I’m afraid”

“I feel like a fraud”

“I’m angry at my failings and I’ve projected that onto you”

“I don’t know how to fix this”

“I’m depressed”

Vulnerablitiy. A word I had always stumbled over in speech which now seems so on the nose it’s laughable.

Loving Both.

Another day, another foetus saved! Well, sort of. I mean, it did die in the end. The poor wee thing was always going to. Its heart was developing partially outside its body and there were other complications that meant it couldn’t possibly survive outside the womb. But, that’s not really the point is it? The great nation state of Ireland has enshrined in its constitution the right to life of the unborn child. It’s the obligation of us on the front lines, us legal-folk, to ensure that that right is protected, at all costs.

Of course, the costs were pretty high today. The mother didn’t fare too well either. She’d come into the hospital a few days before, complaining of abdominal pains. After an ultra-sound it was determined that the baby wasn’t likely to make it but that it had a heartbeat. Bingo! I received a call once the carrier and her husband requested an abortion. Imagine, thinking you could decide to have an abortion just like that! Not on my watch! By the time I’d arrived on the ward with my documents to explain why there was no way there would be an abortion while the child had a heartbeat, it turned out that there were some further complications. The carrier had a severe case of pre-eclampsia. She was at risk of organ damage and even a stroke. The medical staff were beside themselves. They wanted to help the carrier but knew they’d be breaking the law if they did. Still, the foetus was fighting on, and so would I.

Her husband just didn’t seem to get it. I mean, it was his baby we were protecting after-all. He kept pleading and saying things like ‘My wife is here now. She already has a life, an effect on the world. She’s part of a family!’. He was clearly hysterical or something. But, it did give me a moment for pause. What if he had a point? In our noble efforts to protect the unborn child, what if we were putting the foetus’ carrier in harms way? Maybe the carrier could be seen as more, like maybe a person? A person who lives a life. Who has an effect on the lives of others. Who is a part of this
world, a community, and maybe should have more rights than a hypothetical life, that admittedly wasn’t so hypothetical since the foetus was on borrowed time. Maybe the husband had a point when he screamed until he was red in the face that his wife should be able to do as she pleases with her body, especially to protect herself from harm.

All those thoughts flittered through my head in a matter of seconds. But then I remembered the infallible truth of the constitution. We are, I am, the soldier on the front line protecting the unborn from the deeds of the living. I had a job and I would do it. Mind you, the carrier’s children didn’t seem to understand that position either. All they seemed to do was cry. I had to leave the ward for a while and take a long coffee break in my office.

I ended up having three cups of coffee. I found myself imagining what it would be like if it was my wife in that hospital bed. Would I enforce the constitution without hesitation? I tried to imagine her getting sicker and sicker and waiting for the foetus’ heart to stop before allowing her proper treatment. I had to shake myself out of it. It wasn’t my wife, and I had a job to do. Still though…

Anyway, a long story short, it turned out the carrier had a stroke and her liver and kidneys were severely damaged. She’s in a coma at the moment. The doctors think she’ll probably have life changing brain damage, if she makes it. The foetus died shortly after her stroke, and labour was induced. It’s a sad outcome, but I did the right thing. Didn’t I? I followed the letter of the law. I protected and respected the life of the unborn. Sure, it says that we have to have equal regard for the right of the mother to life, but we both know that it’s virtually impossible to juggle both. I hope it’s a long while before I have to fight the good fight again. It doesn’t really make you feel great about yourself. Who’d want to be working with constitutional law like us legal-folk in this country, am I right!?

EggHatch – a function for easy pattern addition in ggplot2 bar plots.

When I had a little time a few months ago I started coding a wrapper function for ggplot2 in R, with the aim of making it a straight forward process when adding 3 basic patterns (hatching) to ggplot2 bar graphs.

Here’s the original answer I provided to the question posed on StackOverflow.

As you can see it’s a little cumbersome.

Anyway, below is the function ‘EggHatch’ (Easy ggplot2 Hatch) that I wrote to make the process a lot easier.

EDIT (09/02/2020): Due to recurring issues with how the code copies from this site I recommend not using the original code listing below. Instead I’ll link to the Github version where myself and others are working on improving the function with the view of making a package. I’ll leave the code below for posterity etc. Here’s the link to the Githubscript.

NOTE 1: All patterns work with a regular single plot of bar/s, however, I haven’t found the time to make the diagonal patterns work with facet_grid in ggplot2. The horizontal and vertical patterns do work with facet_grid.

NOTE 2: The following libraries should be installed in order to use this function:


install.packages('Epi')
install.packages('stringi')
install.packages('plyr')
install.packages('gtools')
install.packages('stringr')

NOTE 3: I’ve added example data and some instructions on how to use EggHatch further down the page.

# Written as part of an answer for a question posed here:
# https://stackoverflow.com/questions/2895319/how-to-add-texture-to-fill-colors-in-ggplot2/20426482#20426482
# Please add a vote to the original answer linked above if you find this
# function useful.
EggHatch <- function(ggplot2_plot, cond.list, width_Man = NULL){

    # use this for Relevel
    library(Epi)
    # default relevel to avoid index issue
    ggplot2_plot$data$Variable = Relevel(ggplot2_plot$data$Variable, ref = c(ggplot2_plot$data$Variable))

    print("When choosing patterns ensure that scaling does not obscure horizontal lines. Should horizontal lines be obscured consider a different pattern (A, C, D, or any combination of them.)")
    # if statement for when no value input in 'fill'
      library(stringi)
      library(plyr)
      library(gtools)
      library(stringr)

      input_position_dodge<-ggplot2_plot$layers[[1]]$position$width
      input_colour<-ggplot2_plot$layers[[1]]$aes_params$colour
      fill_value<-ggplot2_plot$layers[[1]]$aes_params$fill
      input_size<-ggplot2_plot$theme$rect$size
      input_width<-ggplot2_plot$layers[[1]]$geom_params$width

      # remove any spaces, tabs etc. from input string
      cond.list<-stri_replace_all_charclass(cond.list, "\\p{WHITE_SPACE}", "")

      # list of conditions input by users
      string_split1<-strsplit(cond.list, ",")[[1]]

      # Dataframe shaped to match number of patterns and conditions entries
      df <- data.frame(matrix(ncol = 2, nrow = length(string_split1)))
      colnames(df) <- c("Pattern", "Condition")

      pattern_options <- c("A", "B", "C", "D") 

      BAR_OUTPUT1<-ggplot2_plot
      BAR_OUTPUT<-BAR_OUTPUT1

      for (pos in 1:length(string_split1)){

        # seperate pattern from input condition into list, dropping '='
        cond_patterns <- as.list(strsplit(string_split1[pos], "=")[[1]])

        # write values to relevant colomns on current row
        df$Pattern[pos]<-cond_patterns[1]
        df$Condition[pos]<-cond_patterns[2]

      }

      # find largest mean value and pass 2% of it
      two_percent_of_largest_mean<-((max(unlist(lapply(ggplot2_plot$data$Value,FUN=max)))/100)*2)

      # loop around for number of conditions
      for (pos in 1:length(df$Condition)){

          Condition_Pos=0

        # split pattern into individual characters
        pattern_split_loop_var<-as.character(df$Pattern[pos])
        pattern_split_loop_var<- strsplit(pattern_split_loop_var, "")[[1]]

        if(grep("A|B|C|D", df$Pattern[pos], ignore.case=TRUE)){

          if ((grepl('A', df$Pattern[pos], ignore.case=TRUE))){

            # get 25% of original width
            vert_bar_count = (((ggplot2_plot$layers[[1]]$geom_params$width)/100)*10)
            Condition_Pos<-as.numeric(df$Condition[pos])

            for (i in 1){

              if (is.null(fill_value)){

                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width=(ggplot2_plot$layers[[1]]$geom_params$width))

              }

              if (!is.null(fill_value)){

              BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width=(ggplot2_plot$layers[[1]]$geom_params$width),fill=fill_value)

              }

              # loop 4 times
              for (i in 1:((ggplot2_plot$layers[[1]]$geom_params$width)/vert_bar_count)){

                # when calculating the number of times to loop and draw consider making value = bar width
                # additionally consider add a verticle line '0' by default. Should get around any
                # stepping outside range
                # alternative just draw a line on each unit on the x-axis inside bounds of bar: number at given
                # point (x-axis label) then either side of number, for example:
                # geom_vline(xintercept=c(1.5,2.5, 10.5), linetype="dotted", size=.8)
                #
                # ensure the Condition_Position value is correct here
                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width=(ggplot2_plot$layers[[1]]$geom_params$width)-vert_bar_count, fill='transparent')
                vert_bar_count = vert_bar_count + (((ggplot2_plot$layers[[1]]$geom_params$width)/100)*10)#((ggplot2_plot$layers[[1]]$geom_params$width)/4)

              }
            }

            if ((grepl('B', df$Pattern[pos], ignore.case=TRUE))){  

              point_1_percent_of_current_mean =two_percent_of_largest_mean){ 

                # this breaks while loop to prevent going below x-axis 0
                if(((as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-(ggplot2_plot$data$Value[Condition_Pos]/100))<0){

                  break

                }

                BAR_OUTPUT$data$Value[Condition_Pos]<-(as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-two_percent_of_largest_mean

                # This stops line very close to 0 on y-axis
                if(((BAR_OUTPUT$data$Value[Condition_Pos])<((two_percent_of_largest_mean/100)*15))){

                  break

                }

                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width, fill='transparent')

              }

            } # end of sub grepl 'B'

            if ((grepl('C', df$Pattern[pos], ignore.case=TRUE))){

              # Code for diagonal C
              position_input_x<-as.numeric(df$Condition[pos])
              position_input_y<-as.numeric(df$Condition[pos])
              # half of input width
              # when minused from centre of bar point on x-axis
              # it gives value at start of bar on x-axis
              # inverse true for end of bar width
              half_input_width<-input_width/2
              ten_perc_input_width<-((input_width/100)*10)

              x_axis_min <- position_input_x-half_input_width
              x_axis_start_top<-x_axis_min
              x_axis_start_bottom<-x_axis_min
              x_axis_max <- position_input_x+half_input_width

              y_axis_max<- ggplot2_plot$data$Value[position_input_y]
              # need to pull the max value from the example_plot the max boundries...
              # or caluclate the
              z_percent_of_current_mean<-(y_axis_max/100)*10

              df_diag <- data.frame(

                # start on x-axis-end on x-axis
                x = c(x_axis_start_bottom,x_axis_start_top),

                # start on y-axis-end on y-axis
                y = c(y_axis_max,y_axis_max), Fill='Hope you\'re having a nice day.')

              for(i in 1:19){

                # run if 2nd x-position is less or equal to rightmost edge of bar
                # minus 10% of total input width
                if (df_diag$x[2]<(as.character(x_axis_max))){

                  # 1/10 of unit value in width field
                  df_diag$x[2]<-df_diag$x[2]+(ten_perc_input_width)

                  # subtract z percent from 1st y height
                  df_diag$y[1]<-df_diag$y[1]-(z_percent_of_current_mean)

                  # draw using current df_diag values
                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when less than x_axis_max

                # run this code to limit 2nd x-point from moving past rightmost edge of bar
                if (df_diag$x[2]==as.character(x_axis_max)){

                  # drop height of 2nd y-position by z percentage
                  df_diag$y[2]<-df_diag$y[2]-(z_percent_of_current_mean)

                  if(df_diag$y[1]<=z_percent_of_current_mean){

                    df_diag$x[1]<-df_diag$x[1]+ten_perc_input_width
                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when x_axis_max reached

              } # end of for loop 1:19

            } # end of sub grepl 'C'

            if ((grepl('D', df$Pattern[pos], ignore.case=TRUE))){

              # Code for left leaning diagonal 'D'
              position_input_x<-as.numeric(df$Condition[pos])
              position_input_y<-as.numeric(df$Condition[pos])
              # half of input width
              # when minused from centre of bar point on x-axis
              # it gives value at start of bar on x-axis
              # inverse true for end of bar width
              half_input_width<-input_width/2
              ten_perc_input_width<-((input_width/100)*10)

              x_axis_min <- position_input_x-half_input_width
              x_axis_max <- position_input_x+half_input_width
              y_axis_max<- ggplot2_plot$data$Value[position_input_y]
              # need to pull the max value from the example_plot the max boundries...
              # or caluclate the
              z_percent_of_current_mean<-(y_axis_max/100)*10

              df_diag (as.character(x_axis_min))){

                  # 1/10 of unit value in width field
                  df_diag$x[2]<-df_diag$x[2]-(ten_perc_input_width)

                  # subtract z percent from 1st y height
                  df_diag$y[1]<-df_diag$y[1]-(z_percent_of_current_mean)

                  # draw using current df_diag values
                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when less than x_axis_max

                # run this code to limit 2nd x-point from moving past rightmost edge of bar
                if (df_diag$x[2]==as.character(x_axis_min)){

                  # drop height of 2nd y-position by z percentage
                  df_diag$y[2]<-df_diag$y[2]-(z_percent_of_current_mean)

                  if(df_diag$y[1]<=z_percent_of_current_mean){

                    df_diag$x[1]<-df_diag$x[1]-ten_perc_input_width
                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when x_axis_max reached

              } # end of for loop 1:19

            }

          } # end of if grepl 'A'

          # This runs code when *only* 'B' in string
          if ((!grepl("[^B]", df$Pattern[pos], ignore.case=TRUE))==TRUE){

            Condition_Pos<-as.numeric(df$Condition[pos])
            one_percent_horiz<-(BAR_OUTPUT$data$Value[Condition_Pos])/100
            Twenty_percent_horiz<-(one_percent_horiz*20)

            point_1_percent_of_current_mean  avoids any issue with 'fill' and drawing incorrect height
            BAR_OUTPUT=two_percent_of_largest_mean){ 

              # this breaks while loop to prevent going below x-axis 0
              if(((as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-(ggplot2_plot$data$Value[Condition_Pos]/100))<0){

                break

              }

              # check null value
              if (is.null(fill_value)){

                BAR_OUTPUT$data$Value[Condition_Pos]<-(as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-two_percent_of_largest_mean

                if(((BAR_OUTPUT$data$Value[Condition_Pos])<((two_percent_of_largest_mean/100)*15))){

                  break

                }

                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width)

              }

              if (!is.null(fill_value)){

                BAR_OUTPUT$data$Value[Condition_Pos]<-(as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-two_percent_of_largest_mean

                if(((BAR_OUTPUT$data$Value[Condition_Pos])<((two_percent_of_largest_mean/100)*15))){

                  break

                }

                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width, fill=fill_value)

              }

            }

          } # end of if grepl 'B'

          if ((!grepl('A', df$Pattern[pos], ignore.case=TRUE))==TRUE){
          # Only run this code if 'A' is NOT in string - issue lies in BAR_OUTPUT value
            if ((grepl('C', df$Pattern[pos], ignore.case=TRUE))){

              Condition_Pos avoids any issue with 'fill' and drawing incorrect height
                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width)

                point_1_percent_of_current_mean =two_percent_of_largest_mean){

                  # this breaks while loop to prevent going below x-axis 0
                  if(((as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-(ggplot2_plot$data$Value[Condition_Pos]/100))<0){

                    break

                  }

                  BAR_OUTPUT$data$Value[Condition_Pos]<-(as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-two_percent_of_largest_mean

                  # This stops line very close to 0 on y-axis
                  if(((BAR_OUTPUT$data$Value[Condition_Pos])<((two_percent_of_largest_mean/100)*15))){

                    break

                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width, fill='transparent')

                }

              } # end of sub grepl 'B'

              # Code for right leaning diagonal 'C'
              position_input_x<-as.numeric(df$Condition[pos])
              position_input_y<-as.numeric(df$Condition[pos])
              # half of input width
              # when minused from centre of bar point on x-axis
              # it gives value at start of bar on x-axis
              # inverse true for end of bar width
              half_input_width<-input_width/2
              ten_perc_input_width<-((input_width/100)*10)

              x_axis_min <- position_input_x-half_input_width
              x_axis_max <- position_input_x+half_input_width

              y_axis_max<- ggplot2_plot$data$Value[position_input_y]
              # need to pull the max value from the example_plot the max boundries...
              # or caluclate the
              z_percent_of_current_mean<-(y_axis_max/100)*10

              df_diag <- data.frame(

                                  # start on x-axis-end on x-axis
                                  x = c(x_axis_min,x_axis_min),

                                  # start on y-axis-end on y-axis
                                  y = c(y_axis_max,y_axis_max), Fill='Hope you\'re having a nice day.')

             for(i in 1:19){

                # run if 2nd x-position is less or equal to rightmost edge of bar
                # minus 10% of total input width
                if (df_diag$x[2]<(as.character(x_axis_max))){

                  # 1/10 of unit value in width field
                  df_diag$x[2]<-df_diag$x[2]+(ten_perc_input_width)

                  # subtract z percent from 1st y height
                  df_diag$y[1]<-df_diag$y[1]-(z_percent_of_current_mean)

                  # draw using current df_diag values
                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when less than x_axis_max

                # run this code to limit 2nd x-point from moving past rightmost edge of bar
                if (df_diag$x[2]==as.character(x_axis_max)){

                  # drop height of 2nd y-position by z percentage
                  df_diag$y[2]<-df_diag$y[2]-(z_percent_of_current_mean)

                  if(df_diag$y[1]<=z_percent_of_current_mean){

                    df_diag$x[1]<-df_diag$x[1]+ten_perc_input_width
                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when x_axis_max reached

              } # end of for loop 1:19

            } # end of grepl 'C'

            if ((grepl('D', df$Pattern[pos], ignore.case=TRUE))){

              Condition_Pos avoids any issue with 'fill' and drawing incorrect height
                BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width)

                point_1_percent_of_current_mean =two_percent_of_largest_mean){

                  # this breaks while loop to prevent going below x-axis 0
                  if(((as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-(ggplot2_plot$data$Value[Condition_Pos]/100))<0){

                    break

                  }

                  BAR_OUTPUT$data$Value[Condition_Pos]<-(as.numeric(BAR_OUTPUT$data$Value[Condition_Pos]))-two_percent_of_largest_mean

                  # This stops line very close to 0 on y-axis
                  if(((BAR_OUTPUT$data$Value[Condition_Pos])<((two_percent_of_largest_mean/100)*15))){

                    break

                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_bar(data=BAR_OUTPUT$data[Condition_Pos,], position=position_dodge(input_position_dodge), stat="identity", colour=input_colour, size=input_size, width = ggplot2_plot$layers[[1]]$geom_params$width, fill='transparent')

                }

              } # end of sub grepl 'B'

              # Code for left leaning diagonal 'D'
              position_input_x<-as.numeric(df$Condition[pos])
              position_input_y<-as.numeric(df$Condition[pos])
              # half of input width
              # when minused from centre of bar point on x-axis
              # it gives value at start of bar on x-axis
              # inverse true for end of bar width
              half_input_width<-input_width/2
              ten_perc_input_width<-((input_width/100)*10)

              x_axis_min <- position_input_x-half_input_width
              x_axis_max <- position_input_x+half_input_width

              y_axis_max<- ggplot2_plot$data$Value[position_input_y]
              # need to pull the max value from the example_plot the max boundries...
              # or caluclate the
              z_percent_of_current_mean<-(y_axis_max/100)*10

              df_diag (as.character(x_axis_min))){

                  # 1/10 of unit value in width field
                  df_diag$x[2]<-df_diag$x[2]-(ten_perc_input_width)

                  # subtract z percent from 1st y height
                  df_diag$y[1]<-df_diag$y[1]-(z_percent_of_current_mean)

                  # draw using current df_diag values
                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when less than x_axis_max

                # run this code to limit 2nd x-point from moving past rightmost edge of bar
                if (df_diag$x[2]==as.character(x_axis_min)){

                  # drop height of 2nd y-position by z percentage
                  df_diag$y[2]<-df_diag$y[2]-(z_percent_of_current_mean)

                  if(df_diag$y[1]<=z_percent_of_current_mean){

                    df_diag$x[1]<-df_diag$x[1]-ten_perc_input_width
                  }

                  BAR_OUTPUT<-BAR_OUTPUT+geom_path(data=df_diag, aes(x=x, y=y),colour = "black")

                } # end of if statement when x_axis_max reached

              } # end of for loop 1:19

            } # end of grepl 'D'

        } # end of no 'A' if statment

        }  

        } # second loop

      BAR_OUTPUT

  }

Below is some example data and a brief explanation of how to use the function.

library(ggplot2)

Example.Data<- data.frame(matrix(vector(), 0, 3, dimnames=list(c(), c("Value", "Variable", "Fill"))), stringsAsFactors=F)

Example.Data[1, ] <- c(80.9, 'Horizontal Pattern','Horizontal Pattern' )
Example.Data[2, ] <- c(67.677777, 'Vertical Pattern','Vertical Pattern' )
Example.Data[3, ] <- c(10.678, 'Mesh HorizVert Pattern','Mesh HorizVert Pattern' )
Example.Data[4,] <- c(95.8, 'Diagonal Pattern 1','Diagonal Pattern 1' )
Example.Data[5,] <- c(67.67, 'Diagonal Pattern 2','Diagonal Pattern 2' )
Example.Data[6,] <- c(58.9, 'Mesh Diagonal Pattern','Mesh Diagonal Pattern' )
Example.Data[7,] <- c(75, 'Mesh HorizVertDiag Pattern','Mesh HorizVertDiag Pattern' )

HighlightDataVert<-Example.Data[2, ]
HighlightHorizontal<-Example.Data[1, ]
HighlightMesh<-Example.Data[3, ]
HighlightHorizontal$Value<-as.numeric(HighlightHorizontal$Value)
Example.Data$Value<-as.numeric(Example.Data$Value)

example_plot<-ggplot(Example.Data, aes(x=Variable, y=Value, fill=factor(Fill))) +
theme_bw() +
theme(legend.position = "none")+
scale_fill_grey(start=.4)+
geom_bar(position='identity', stat="identity", colour="black", width=.86565656)

example_plot

# Understanding the EggHatch function:

# Patterns are represented by letters and assigned by row numbers.
# You can combine patterns by combining letters, for example: AB, ABC etc.
#
# Letters for each pattern:
# A=vertical lines
# B=horizontal lines
# C=diagonal lines bottom-top
# D=diagonal lines top-bottom

# Simply drop the already created ggplot2 bar plot into the function, as shown
# below, and make the desired pattern/s = the desired row number
# NOTE: the numbers correspond to the row in the dataframe NOT the default plot output order of bars
# You can simplify by using the Relevel function in library(Epi) if you want to reorder
# the rows in the dataframe to match the desired order of bars in the plot.
EggHatch_output<-EggHatch(example_plot, ('b=1, A=2, Ba=3, C=4, d=5, Dc=6, ABcD=7'))

EggHatch_output

And here's the output:

EggHatch

There is plenty of repetition of code in this function that can be elimated relatively easily by dropping some of the separate patterns code into functions. However, I’ll leave it as it is for now so that it is (in my opinion) clear what the inner workings of each pattern is.

When/if I find time I’ll adapt the code here to allow for diagonal patterns in facet_grid. Until then I hope someone finds this useful. If you have found this function useful feel free to add a vote to the answer I gave to the original question posed on StackOverflow.

FINAL NOTE: you are free to use this code but I’d appreciate credit (even if you adapt my original code) where possible, and please don’t try to pass this work off as your own.

The Price of Knowledge.

There is a debate raging at the moment surrounding the practice of hiding research behind paywalls. The controversy lies not least in that many argue scientific research should be free and accessible to all, and that monetising it is counterproductive/unethical. But the fact that the scientists that conduct the research are not paid once their work has been accepted and published, highlights a strange model that favours the journals alone. I’m not going to get into debates about impact factors and that journals also have running costs. There are plenty of points on both sides of these arguments and the debate is easily found on the web. Instead I’m going to point you, the reader, to approaches used in accessing paywalled papers. This is simply an academic collection/cataloguing of approaches that people are currently using to bypass paywalls.

Disclaimer: The sci-hub site is currently being challenged in courts in America and I don’t necessarily advocate using this approach. I’m merely demonstrating how people get around paywalls when their university cannot afford the licence fees etc. Here is a piece on the origins of the sci-hub site etc. : http://bigthink.com/neurobonkers/a-pirate-bay-for-science

The following is a list of approaches I’ve discovered online that people use to bypass scientific journal paywalls:

1) Search on Google using this format: “paper name” filetype:pdf site:edu

2) Check out r/scholar

3) Use the hastag: #canihazpdf on twitter along with a link to the paper (or its title) and your email address.

4) Here’s another approach to try and gain access to articles behind pay-walls: https://t.co/ZigAgimxW7

5a) You can also go straight here: http://sci-hub.io/  http://sci-hub.cc/ https://sci-hub.tw/ and search for your paper of choice.

5b) This is an extension of the above and allows access from the url that hosts the paper of interest:

I’ll use an example. Say you want to access this article that is pay-walled:

http://www.nature.com/neuro/journal/v18/n10/full/nn.4105.html

By adding this:

.sci-hub.io

.sci-hub.cc

.sci-hub.tw

straight after the .com you will be able to access the article for free via the sci-hub website.

Here’s the amended URL:

http://www.nature.com.sci-hub.io/neuro/journal/v18/n10/full/nn.4105.html

http://www.nature.com.sci-hub.cc/neuro/journal/v18/n10/full/nn.4105.html

http://www.nature.com.sci-hub.tw/neuro/journal/v18/n10/full/nn.4105.html

6) Of course many academics also contact one of the authors of a paper via email who often are more than happy to forward a copy of their research for free. Professional and polite is the order of the day in this approach.

Again, sci-hub is currently being challenged in American courts so I am not advocating or recommending the use of the sci-hub website. The above paper is used merely as an example of how people use this approach and this blog is purely an academic exercise in cataloguing approaches currently being used by people to bypass paywalls in scientific journals.

The Scheming Clown

The London Mayor had funny hair,
And pretended to be the fool.

He helped his friends build corporate dens,
At the expense of objective rule.

With rising rent he didn’t repent,
Over growing numbers on the streets.

Instead he schemed against the PM esteemed,
“Exit the EU!”, is what he bleats.

1225 Challenge: ‘The Struggle’

W.P. Boyce recently posted about the 1225 Story Challenge here and I decided to give it a go.

Simon P. Clark challenges us to:
Write a story either (a) in 1225 words or less or (b) featuring ‘1225’ as its theme

Publish / share it before December 25th, 2014.

The Struggle

The smell of the cold drifted in through the gap in the narrow window, piercing its way through the staleness inside. It was dark, but the sun was beginning to stir and only the whistle of a gentle wind could be heard.

“A new day,” said the man quietly to himself as he surveyed the scene.

He took a deep breath, allowing the cool morning air to cleanse his being, and returned to the sunken mattress in the corner of the room, ritually lighting a clumsily rolled cigarette. A half-eaten takeaway sat on the floor beside the bed, flanked by two empty bottles of beer.

There was a pile of old newspapers and magazines stacked high against the wall opposite him, discoloured and torn. Nestled among them was a blue bible, a gift given to him after he began attending local prayer group. He had become somewhat of a hoarder and his cramped box room was slowly closing in around him.

The man picked up a picture from the bed-side table and examined it deliberately as he smoked. The frame was cheap but decorative. After staring at the image for nearly a minute, a tragic, fleeting smile flashed across his face and he replaced it, carefully. In contrast to the surrounding squalor, the bed-side table stood empty and neat; the picture frame its only tenant. The man would look searchingly at the photo each morning upon waking and sometimes in the evenings too.

There was no room for a closet in the hovel and his few clothes formed a desperate mound on top of the chair next to the front door. He had one good suit, however, which he kept for special occasions, but he rarely had cause to wear it. Not anymore. It hung hopefully in the tiny toilet adjoining the flat gathering dust.

When he was finished his cigarette, the man rummaged through the heap on the chair and got dressed. His clothes were damp and dirty and clung horribly to his swollen physique. He walked gingerly over to the counter and filled the kettle with water. Slivers of the morning light quietly crept in through the window, lighting up his face as he turned it on.

“A new day, with new possibilities,” the man thought, repeating what his guide had told him at the prayer group.

As the kettle boiled he cast his mind back to the last meeting. The group met each week at a youth club in a council estate nearby. They were a diverse group and would have refreshments before engaging in discussion, prayer and meditation. The man’s sponsor, a guy named Joe, had reassuringly told him that every day brought with it a plethora of opportunities.

“We have a shot at redemption every single day,” Joe would beam. “That’s a beautiful thing.”

Even if he didn’t fully believe Joe, such platitudes comforted him and he genuinely enjoyed the social aspect of the group, for he had grown increasingly isolated in recent years. It was by no means glamorous, but it was warm and welcoming there.

A loud click of the kettle snapped him back into the icy filth of his own home. He poured the tea and sat back down on the bed, cautiously slurping from his mug. His eyes were drawn once more to the photo on the bed-side table and a trembling fear suddenly gripped his throat. He started to sob silently but stopped himself and stood up. He gazed out the window.

“A new day,” repeated the man as tears welled up in his eyes. He picked up the photo again, clutching it tightly. It showed the man delightfully hugging a young child.

“Happy Christmas, son.”

By Ryan Kelly

Constitutional Convention Fallout

Constitutional change in Ireland is imminent (Image: http://www.constitution.ie)

On April 14th, 2013, the Irish Constitutional Convention concluded their deliberations on the issue of changing the Irish Constitution so as to recognise the rights of all citizens to have their relationships enshrined in marriage with all the rights and benefits that go with it. This, of course, is only the first step of the process and the constitutional change will now be put to the people in a referendum, so this is where the real fight starts. The convention is made up of 100 delegates, 66 randomly chosen citizens and 33 parliamentarians with an independent chairperson. Possible changes to the Irish constitution were discussed and recommendations were made to the Government (more information is available at www.constitution.ie).  As a firm believer in the democratic process, yesterday was a real shot in the arm, although where you have winners you have losers and yesterday we had some real sore losers. This post is not about gloating, rather it is to serve as a warning as to the tactics of the ‘No’ camp in the coming months.

It is pretty clear how the No campaign will frame their argument in the coming months and they were quick out of the blocks yesterday. The No campaign will try to present Catholics as a bullied and persecuted section of society who are having their religious freedoms stomped all over by insidious creeping secularism, while comparisons with Soviet Russia will be made with a straight face. Let’s have  a quick look at some of the objections that emerged in the aftermath of the constitutional convention.

One of the leading lights for the No campaign will be David Quinn. Mr Quinn is the founder and head of the Iona Institute, a conservative Catholic lobby group, and a regular columnist on religious affairs for the Irish Independent.

David Quinn@DavQuinn 20h

BTW, if the delegates were randomly chosen, how did a husband and wife end up on it? #ccven

Now if David Quinn had a problem with the make-up of delegates perhaps the beginning of the process would have been the time to raise his objection, not when his motion has been defeated. Perhaps he smells a conspiracy?

David Quinn@DavQuinn 14h

In social debates the dice are always loaded in favour of the ‘liberal’ point of view. They were even more heavily loaded at #ccven

So the convention favoured ‘liberal’ points of view; surely Quinn’s participation in the process can be construed as tacit approval of said process. Here we see the No campaign laying the ground-work for the portrayal of those who are against equality of marriage for all as being a persecuted body in Ireland, fighting against an unjust conspiracy which is systemically enshrined. One reason why the process may have appeared loaded in favour of the Yes campaign is because people of a ‘Liberal’ persuasion have been traditionally more open to progress and development of society. Those who are arguing from a Catholic (I am not suggesting that the No side is 100 per cent Catholic, merely that this is David Quinn and Iona Institute’s default position) position are arguing from a comprehensive doctrine, that is to say that they have a version of the truth and of how things should be done that is enshrined in doctrine and not open to debate.

David Quinn@DavQuinn 14h

One delegate at the #ccven spoke to me about the bullying attitude displayed towards her for not favouring marriage redefinition.

Now, I cannot speak as to this delegate’s experience but the time to bring this issue to light is during the process itself. These conventions serve to enrich our democratic process and nobody should feel bullied expressing a view in this forum. People are chosen randomly to best represent the country we live in at this moment. This is not an exercise in propaganda; rather it is an attempt to create a more inclusive and participatory democracy. Any attempt at bullying is the very antithesis of the convention’s intention:

‘The Convention operates in an inclusive and open manner with its documents and deliberations available on-line and formal plenary sessions streamed live on the web.’ (www.constitution.ie)

The previous sentence was taken directly from the convention’s website. Any accusations of bullying or intimidation should be easily cleared up by the very structures of the convention. Offence can be very easily taken with such an emotive issue but that is not necessarily to say offence was intended to be given. The failure to raise this issue during the process once again smacks of the No campaign setting up a narrative to paint themselves as victims in this process.

David Quinn@DavQuinn 20h

Press release from The Iona Institute: Refusal of Convention to protect religious freedom of deep concern http://bit.ly/130ko82  #ccven

Here we have it folks: the failure to protect religious freedoms. How anybody can claim religious freedom, in particular Catholic religious freedom, is not protected by the Irish state with a straight face is beyond me. The Irish constitution goes out of its way to protect religious freedom, especially those of the Catholic faith. I would be interested to know where David Quinn and Iona draw the line with religious freedoms. Would he be in favour of say, a Muslim who adheres to Sharia Law and wishes to perform female genital mutilation (FGM) on his daughter therefore exercising his religious freedom within the boundaries of this state? I would hate to put words in his mouth but I can imagine Mr Quinn would not be in favour of that. People should be and are free to practice their religion in Ireland so long as it does not impinge on the rights of Irish citizens regardless of their race, colour, sexual orientation or creed. FGM is horrific as it impinges on the physical integrity of our most helpless of citizens: children. Equality of marriage for homosexuals may be an affront to Catholic sensibilities but it does not stop Catholics from living a full life and despite some of the lies Iona are happy too spread it has no detrimental affect on children of these unions either.

This is sure to be an emotive campaign and what the Yes camp needs to concentrate on is the mobilisation of those sympathetic to their cause. If you are not registered to vote, get registered and encourage as many people as possible to do the same. This is merely the first blow in the fight for equality for marriage.


Who is paying the penalty?

Ireland: where the public and officials only reap short term rewards and ignore long term consequences.

Ireland: where the public and officials only reap short term rewards and ignore long term consequences.

Humility is not a quality that Irish political culture seems to be over burdened with. It could well be argued that humility is one of the first qualities to be jettisoned in the pursuit of a successful political career. One would hope that those pursuing a career in politics do so with their heart full of an altruistic sense of public duty and a desire to fight for the greatest good for the greatest number of people; you would hope that people look beyond the local and the immediate to think nationally and in the long term. Many may well launch themselves steeled by this zeal only to have it stripped away by the reality of our political culture. The truth of the political arena in Ireland is that it has been overpopulated by an incestuous ruling-class and quasi-hereditary seats in the Dail. So as this bloated edifice became beyond parody in the final throes of the Celtic Tiger, we hoped, given Ireland’s fall from grace and the punishment doled out to Fianna Fáil at the ballot box, that the surviving politicians of Ireland would notice the sea change and act accordingly.

This of course has not happened, due mainly to the reason that Ireland had its sovereignty signed away by the last shower, who gave the new Government ready made excuses for their policies. The harshness of our government’s policies is not the focus of my ire on this occasion, rather it is the continued absence of any humility on behalf of our politicians and complacency among the Irish electorate in expecting more from their representatives. There are plenty of bogey men to point the finger at in Government, not least ‘Big’ Phil Hogan, a man blessed with an ego and sense of righteousness which would not seem out of place amongst the cartoonish villains of the WWE. Rather it is the political culture and the lack of its evolution which has brought me to the keyboard today.

On the front page of the Irish Examiner 8/04/2013, former Ceann Comhairle and current Fianna Fáil TD Seamus Kirk said it was as easy as picking up the phone to get rid of penalty points. There is a constitutional clause which exempts TD’s from road offences if they are on their way to take part in a Dáil vote. This was a clause left over from the Civil War and by right should be exorcised from the constitution. However, more telling about the political culture in Ireland is the revelation of the willingness of constituents to ask their TDs to get penalty points squashed for them, this kind of localism and clientalism is one of the objectionable practices we would have hoped would have been left behind after the last election. The Gardaí have since had an internal investigation, where it was found that, while penalty points have been squashed, nothing corrupt has occurred. This is a staggering example of a worrying culture within the Gardaí, our politicians and ourselves. An offence has been committed and there is nothing corrupt about asking the Gardaí to get rid of the punishment. What has set alarm bells ringing is how this seems to have infected some of the newest members of the Dáil.

The last election, lest we forget, is when the Irish people put down the ‘Bolly’, stepped away from artichoke canapé and voted to punish the political culture which we had allowed to flourish by allowing them to dope us up to the gills with cheap money. “Down with that sort of thing!” was what we bellowed from the ballot box. Fine Gael stomped away with a record number of seats but what was more interesting was the emergence of independents who represented, they claimed, the ordinary person on the street and promised to ask the difficult questions.

Archaic parliamentary processes make it difficult for a lone voice to have any affect and so this motley crew banded together despite having ideologies that ranged from Claire Daly on the left and Shane Ross on the right. Included in this group we have Luke ‘Ming’ Flanagan, a man who has undergone an interesting evolution; from outsider-agitator sending joints to TDs in an effort to legalise marijuana, to the Mayor of Roscommon and now an independent TD promising to protect turf-cutters in his locality. He is one individual who has recently found himself in trouble for having penalty points squashed. This is an issue that he campaigned against – Gardaí corruption – so I hope the irony hasn’t been lost on him (although judging by the beard he has been sporting, perhaps Ming and irony are not familiar bedfellows).

The issue of the penalty point squashing may appear to be a small fish compared to the problems facing Ireland on a day-to-day basis. The public service is on the verge of a mass walk out over pay and conditions so why do I concern myself with issues that pale in significance in comparison? The reason is that this is a systemic problem, one which permeates through every level of decision making. It is the culture which will force homeowners in unfinished estates across the country to pay the property tax despite the fact they are living in estates that are continuing to degenerate. It is a culture that has, two years on from the general election and five years on from the beginning of the economic collapse, endorsed a government which seems to be incapable of standing up to the banking system in Ireland. We are still no closer to sorting out a deal which takes the proposition of evictions off the table for families across the country. I’m not talking about debt forgiveness here but there are many other options such as equity for debt which are viable.

It seems that the cosy relationship between our political class and the banking sector continues despite the pain and suffering which it has caused in the last five years. Perhaps the margin of their election win has meant that Fine Gael have become complacent in their position as Ireland’s biggest party but it is the very lack of political cultural evolution which they should be wary of. They may well suffer a double whammy of being in charge when there is no money with difficult and unpopular policies to be made (see Cameron’s Conservatives in Britain who are on their way out after one term but are determined to dismantle as much of the state as possible before they leave) and the willingness of the Irish electorate to forgive and forget about Fianna Fail’s ineptitude when they last had their hands on the wheel. One should always be suspicious of mid-term popularity polls but there is the very real prospect of Fianna Fáil making a significant recovery before the next election.

So, are we, in fact, responsible for the lack of development in our political culture? Have politicians, bankers and developers driven us into this quagmire because we have allowed them to? A former History professor of mine, who is of some note, told us that we were ‘face down in the trough for too long’ and that we are all culpable for letting this culture to develop. We were bought off with tax cuts, cheap credit and second homes and we allowed this attitude of arrogance and ‘cuteness’ to fester.

There is an intriguing email exchange between two heavyweights in the theory of Power, Stephen Lukes and Clarrisa Hayward, debating the role of responsibility and agency in power. To try and sum it up would be a fool’s errand but here we go anyway. Lukes’ case is that full responsibility must lie with the actors, whereas Hayward puts forward the case that the social constructs of society influence greatly the actions of actors – essentially that society creates the parameters under which abuses of power are exercised.

What have we done to change this? We elect on local issues and we tolerate abuses of position and power and we solicit abuses to have our own penalty points squashed. Look across the water, to Britain where Chris Hune MP is facing prison time for asking his wife to take his penalty points. I’m not being unrealistic here, I’m not asking for whiter than white politicians who never put a foot out of step and I am aware by continuing to use words such as ‘evolution’ that time is required.

What we should, at a bare minimum, be asking for is transparency and accountability from our politicians, those at least would be steps in the right direction in arresting the decline in the relationships between the people and the officials we put into power. Then when faced with honest and open assessment of their work perhaps we can reassess our own actions and motivations at the ballot box beyond our own selfish desires.