Skip to content

Feed aggregator

Agile and Scrum Trello Extensions

Scrum Expert - Tue, 06/23/2015 - 14:38
Trello is a free on-line project management tool that provides a flexible and visual way to organize anything. This approach is naturally close to the visual boards used in the Scrum or Kanban approaches. As the tool as an open architecture, some extensions have been developed for a better implementation of Agile project management in Trello and provides additional features like Scrum burndown charts. Updates June 23 2015: added micro-burn and Plus for Trello March 17 2015: added Screenful for Trello extension The visual representation and the card system used by Trello already make ...
Categories: Communities

Agile Contract, Munich, Germany, June 30 – July 2 2015

Scrum Expert - Tue, 06/23/2015 - 14:36
Agile Contract is a three-day conference that takes place in Munich, Germany. It is focused on the contractual customer – developer relationships in Agile software development projects. All the workshops and the talks are in German. In the agenda of Agile Contract you can find topics like “Experience with Agile fixed-price projects”, “Service Level Agreements (SLA) in the context of Agile software development”, “Agile contracts in practice”, “It doesn’t work without trust”, “Agile Contracts – Three alternative billing models”, “Agile estimating and planning”. Web site: http://www.agilecontracts.de/ Location for the Agile Contract conference: NH ...
Categories: Communities

3 Keys to Mastering Responsibility

Agile Management Blog - VersionOne - Tue, 06/23/2015 - 14:30

Far too many good, motivated, hard-working people get stuck in jobs they don’t want, projects gone bad, work problems and careers they don’t enjoy. It happens to individual contributors and it happens to leaders.

We recently spoke with Christopher Avery, the CEO of Partnerwerks, Inc., at Agile Day Atlanta, who shared the three keys to mastering responsibility and achieving much greater happiness, freedom and choice for yourself and for your team.

Christopher-Avery---Partnerwerks

 

 

 

 

 

VersionOne: Why is mastering responsibility so important?

Christopher: I think the main reason we should be talking about mastering responsibility is because we know that leadership is innate in all of us. It has to do with the mental process we call The Responsibility Process® by which we can take 100% ownership for our lives, situations and challenges.

The reason that we should be talking about mastering responsibility is to simply help people who may have an inkling that their lives could be better and they could do something about it.

The other reason we should be talking about mastering responsibility is that people who practice this process, start enjoying greater fulfillment, lower stress, and higher engagement. They start applying this to self-leadership in their own lives, as well as use the tools to create better teams, better organizations, better cultures, and respond much more successfully to change.

The third reason is that the research on The Responsibility Process is only three decades old and not widely known.

VersionOne: Is the outcome of The Responsibility Process that people discover their passion and end up with a renewed focus on what they’re currently doing?

Christopher: Part of the process of taking responsibility has to do with understanding your own inspirations, desires, dreams, and your own definition of who you are when you’re most fulfilled. The other is true also. You may simply find profound acceptance in the life that you have.

One is an acceptance that what you’re trying to do or be isn’t who you are. The other is an acceptance that it is exactly who you are

The Responsibility Process is a framework for how we process thoughts about stuff going wrong in our lives. If we get good at the framework, then we can use it as a GPS to steer us towards greater fulfillment. If we’re not good at this framework, then we end up getting stuck.

VersionOne: What problems are typically driving people to contact you to find out about the responsibility process?

Christopher: The majority of the people who contact us are in a leadership positions who are feeling somewhat trapped and they don’t know how to get un-trapped.

The have the responsibility process in them. My process is to simply recondition them on how to think when they’re experiencing a problem, so they will get stuck in those mental states less often and for shorter times. They’re able to think more clearly about what they want and what the next steps should be.

Click here for learn more about The Responsibility Process.

 

Categories: Companies

Converging on Javascript is a Bad Idea

For many developers despite some of the node.js hype, Javascript is a language we’ve been stuck with by an unfortunate decision by Netscape to bundle a language tossed together in 10 days. It wasn’t even called Javascript at the time, it emerged originally as LiveScript. They even tried to market a server side version bundled with Netscape Enterprise Server in the days when you could sell web servers for real money.

Dave Winer’s recent blog post on Why aren’t the BigCo’s Converging on Javascript? argues that Javascript has arrived and is dominating even while the big Companies like Apple and Google try to push newer languages. I agree that these companies have some of their own agendas in building out new languages, but if Javascript were truly so great and dominant why does everyone build a transpiler from ClojureScript to Opal to avoid having to write in plain old Javascript. My answer is because Javascript is a terrible language if you have a choice.

Look at any newer modern language and you’re going to find a nicer language with many fewer warts than Javascript take your pick of many:

  • Ruby
  • Scala
  • Clojure
  • C#
  • Go
  • Rust
  • Elixir
  • Python
  • Swift

Javascript would have died off very quickly without its’ continued support as the only way to script browser clients. Even now many are turning to transpiling to take the pain out of supporting large javascript code bases. It may eventually turn out that Javascript becomes just a readable intermediate language that your favorite language compiles down to much like byte code on the JVM. Or maybe the browser vendors start supporting a new VM on the browser and languages can target that.

Categories: Blogs

Design Debt & UX Debt is Technical Debt

Learn more about our Scrum and Agile training sessions on WorldMindware.com

Hey! Let’s all work together, please.

Technical Debt is a term which captures sloppy code, unmaintainable architecture, clumsy user experience, cluttered visual layout, bloated feature-sets, etc.  My stance is that the term, Technical Debt, includes all the problems which occur when people defer professional discipline — regarding any/every technical practice such as product management, visual and UX design, or code.

I assert that the change we need to catalyze in the business community is larger than any one discipline and I am worried that I have seen an increase in blog articles in recent years about concepts like “Design Debt”, “UX Debt”, “Experience Debt” — these articles unfortunately are not helping and have served only to divide the community. They are divisive, not because we shouldn’t be discussing the discreet facets in which Technical Debt can manifest, but because authors often take a decidedly combative approach in their writing.  Take these phrases for example:

  • “Product Design Debt Versus Technical Debt” written by Andrew Chen
  • “User Experience Debt: Technical debt is only half the battle” written by Clinton Christian
  • “Design debt is more dangerous because…” written by James Engwall.

I agree with Andrew Chen that Product Design Debt is a problem — I just don’t like that he chose to impose a dichotomy where there is none.  Why must he argue one “versus” another?  Clinton Christian has implied that we’re in a “battle”.  James Engwall has compared the “danger” of Design Debt relative to Technical Debt.  These words are damaging, I argue, because they divert attention to symptoms and away from root causes.

The root cause of Technical Debt is that people forget this simple principle of the Agile Manifesto: “Continuous attention to technical excellence and good design enhances agility.”

The root solution to Technical Debt — all of its forms — is to help business leaders realize there is a difference between “incremental” development and “iterative” development so they may understand the ROI of refactoring.  No technical expert should ever have to justify the business case for feature-pruning, refreshing a user interface, refactoring code, prioritizing defects.  Every business leader should trust that their technical staff are disciplined and excellent.

Yes, please blog about UX Debt and Product Development Debt, etc.  But please do so in a way that encourages cohesion and unity within the Product Development community.

Try out our Virtual Scrum Coach with the Scrum Team Assessment tool - just $500 for a team to get targeted advice and great how-to informationPlease share!
facebooktwittergoogle_plusredditpinterestlinkedinmail

The post Design Debt & UX Debt is Technical Debt appeared first on Agile Advice.

Categories: Blogs

Announcement: BERTEIG partners with Version One and Scaled Agile Inc.

Learn more about our Scrum and Agile training sessions on WorldMindware.com

The past month has been busy!  BERTEIG has officially partnered with both Version One and Scaled Agile Inc.  As BERTEIG grows, our partnerships provide great new resources for our clients.

These partnerships are an outgrowth of our re-branding strategy which saw the launch of our new logo and website early last month.  In the near future we will be announcing more partnerships and relationships to further support our customers and clients.

About VersionOne

VersionOne is a recognized leader and visionary in agile lifecycle management software and services. Our mission is to help companies envision and deliver great software. Since 2002, companies such as Adobe, Capital One, and Oracle have turned to VersionOne. Today, more than 50,000 teams at 1,000 companies, including 37 of the Fortune 100, use our solutions to help them scale their agile initiatives faster, easier and smarter. Whether a small team just starting out with agile or a global enterprise scaling agile, VersionOne customers get the best solutions in the industry backed by the pioneers in agile lifecycle management.

About Scaled Agile Inc and SAFe

Scaled Agile, Inc.’s mission is to help enterprises achieve the capabilities, culture and business benefits that successful implementation of scaled Lean and Agile practices can provide. To achieve this, Scaled Agile provides consulting, training, certification and process tooling based on the Scaled Agile Framework, a proven, publicly-facing knowledge base of effective practices for Lean | Agile adoption at enterprise scale. Visit www.ScaledAgile.com for more details.

The Scaled Agile Framework is a proven, publicly-accessible knowledge base for implementing agile practices at enterprise scale, consisting of approximately 300 pages of guidance. Its primary interface is the “Big Picture” graphic which highlights the individual roles, teams, activities and artefacts necessary to scale agile from the team, to teams of teams, to the enterprise level. It has been successfully applied in programs ranging from only 50-100 people, to enterprises employing thousands of software developers. For more information on the Scaled Agile Framework, visit: www.scaledagileframework.com.

About BERTEIG

BERTEIG is the leading provider of Agile training, coaching and consulting services in the Toronto area.  Agile Advice, World Mindware, The Real Agility Program, The Scrum Team Assessment and OpenAgile are all BERTEIG initiatives and services.  BERTEIG has helped organizations achieve dramatic improvements in time-to-market, near-perfect quality, and 400% boost in overall productivity while at the same time helping people learn to love their work again.  BERTEIG is transforming people, process and culture through the power of Real Agility. (™)

Try out our Virtual Scrum Coach with the Scrum Team Assessment tool - just $500 for a team to get targeted advice and great how-to informationPlease share!
facebooktwittergoogle_plusredditpinterestlinkedinmail

The post Announcement: BERTEIG partners with Version One and Scaled Agile Inc. appeared first on Agile Advice.

Categories: Blogs

Management, Humanity and Expectations

Johanna Rothman - Mon, 06/22/2015 - 15:11

There’s a twitter discussion of what people “should” do in certain situations. One of the participants believes that people “should” want to learn on their own time and work more than 40 hours per week. I believe in learning. I don’t believe in expecting people to work more than 40 hours/week. My experience is that when you ask people to work more than 40 hours, they get stupid. See  Management Myth 15: I Need People to Work Overtime. If you want people to learn, read Management Myth #9: We Have No Time for Training.

One participant also said that people should leave their emotional baggage (my word) at home. Work supposedly isn’t for emotions. Well, I don’t understand how we can have people who work without their emotions. Emotions are how we explain how we feel about things. I want people to advocate for what they feel is useful and good. I want to know when they feel something is bad and damaging. I want that, as a manager. See Management Myth #4: I Don’t Need One-on-Ones.

People are emotional. Let’s assume they are adults and can harness their emotions. If not, we can provide feedback about the situation. But, ignoring their emotions? That never works. It’s incongruent and can make the situation worse.

I have a problem with “shoulds” for other people. I cannot know what is going on in other people’s lives. Nor, do I want to know all the details as a manager. I need to know enough to use my judgement as a manager to help the people and teams proceed.

When managers build trust with people, those people can share what is relevant about the way they can perform at work with their manager, and maybe with their team. If they have a personal situation that requires time off, depending on the team, the person might have to talk to the team before the manager. (I know some agile teams like this.) The team might manage the situation without management help or interference.

If you are in a leadership position, don’t impose your “shoulds” on other people. You cannot know what is happening in other people’s lives. You can ask for

You can ask for the results you want. You want people to learn more? Provide time during the week for everyone to learn together. You want people to work through a personal crisis? Provide support.

Don’t expect automatons at work. Expect humans and you’ll get way more than you could imagine.

Categories: Blogs

The most important skill for software developers is…

Indefinite Articles - John Brothers - Mon, 06/22/2015 - 14:29

It’s a trick question. There isn’t one. At different times, different skills are the most important. But amongst the most important are such diverse skills as:

  • Listening & Seeking to understand (highly related)
  • Admitting what you don’t know
  • Treating complexity like a hand grenade
  • Thinking about the long term purpose/destiny of your code
  • Knowing where the future changes are likely to be

 

I’ll try to flesh each of these out in separate posts.

Categories: Blogs

wholesale oakleys fake cheap oakley sunglasses 0586

TargetProcess - Edge of Chaos Blog - Mon, 06/22/2015 - 08:57

A record 222 million people will fly on US airlines this summer

A record number of travellers are expected to take to the skies this summer thanks to a rebounding economy. airlines will carry 222 million passengers between June 1 and Aug. 31, topping the summer of 2007 when 217.6 million people flew, Airlines for America, the industry’s trade and lobbying group, predicted Monday. That figure includes 31 million travellers on international flights, also a record. airlines are now quickly adding more seats, including 4.6 per
wholesale oakleys cent more this summer. Those added seats are mostly the result of airlines flying larger planes and packing
cheap oakley sunglasses in extra rows to
fake cheap oakleys existing jets.

Those extra seats have given pause to some Wall Street analysts who worry that airlines might have to discount fares to fill them. That hasn’t happened yet, but after years of steadily rising airfares, there is a tiny bit of relief for fliers this summer $2.01 in savings to be exact.

The average roundtrip domestic ticket this summer, including taxes, now stands at $454, down less than a per
cheap oakleys cent from last summer. Vacationers to Europe will fare better, with the average ticket down 3 per cent to $1,619, about $50 less than last summer, according to the Airlines
cheap oakleys Reporting Corp., which processes ticket transactions for airlines and travel agencies.

Summer can be one of the most difficult times to fly. While airlines can plan days in advance for blizzards, it is hard to know exactly when a thunderstorm will roll through an airport, shutting down all
cheap wholesale oakleys baggage handling and flights. Add into that extremely crowded airports: 13 of the 15 busiest days to travel fall in the summer, according to the airline trade group.Articles Connexes:

Articles Connexes:

Categories: Companies

wholesale oakleys replica oakleys 1593

TargetProcess - Edge of Chaos Blog - Mon, 06/22/2015 - 08:55

Johor
fake cheap oakleys Sultan’s coronation put off

JOHOR BARU: Johor Ruler Sultan Ibrahim Ibni Almarhum Sultan Iskandar coronation, which was initially slated for this month, has been postponed.

It is learnt that Sultan Ibrahim has been notified about the delays as the restoration, renovation and refurbishment work
fake oakley sunglasses at the Istana Besar and Istana Bukit Serene are still underway.

Sources said Istana Besar played an important role as the coronation would be held there while the Istana Bukit Serene has traditionally been the Ruler residence.

A check showed that construction work at several of the palaces including the Istana Besar, Istana Bukit Serene and
cheap oakleys Polo Club are still ongoing.

State Public Works
fake oakleys cheap executive councillor Datuk Hasni Mohammad downplayed the delays but confirmed that the event had been postponed.

Hasni explained that all the restored venues could be utilised during Sultan Ibrahim birthday celebrations on Nov 22.

It is learnt that all the necessary items needed for the coronation including robes, uniforms, and crown jewel for the
fake cheap oakleys event are
cheap oakleys ready.

As part of the preparations for the coronation, a giant
fake oakleys replica of the Johor Ruler crown was placed at the entrance of Istana Bukit Serene recently.

The crown, weighing
fake oakleys several tonnes and placed on an arch resembling elephant tusks, had attracted a lot of admiring glances, especially from motorists along Jalan Skudai, near Danga Bay.Articles Connexes:

Articles Connexes:

Categories: Companies

fake oakley sunglasses cheap fake oakleys 3196

TargetProcess - Edge of Chaos Blog - Mon, 06/22/2015 - 08:54

New York debut for Scots plays

Two Scottish plays have been selected for New York premieres in this year’s Brits off Broadway festival.

The Tailor of Inverness, produced by Dogstar Theatre from Inverness, and In My Fathers’ Words, by Dundee Rep, are two of the seven shows selected for this year’s festival at 59E59 Theaters in New York.

Brits off Broadway is an annual festival premiering British plays to New York audiences. Critically acclaimed, the festival is described as a showcase for innovative and
cheap oakley sunglasses wholesale provocative theatre and this year runs from April to June.

The productions are travelling to the US
cheap fake oakleys thanks to combined funding of 70,000 from Creative Scotland and the Scottish Government. Creative Scotland’s Open Project funding awarded Dundee Rep 58,000. Dogstar have received 11,457 through the Scottish Government’s Edinburgh Festivals Expo Fund.

Brits off Broadway opens with the Tailor of Inverness at the end of Scotland Week 2015, Scotland’s annual showcase of culture and creativity in North America. The Tailor of Inverness, the true story about how a boy from the Ukraine became a tailor in northern Scotland, will launch on April 14th. Following a 23 night run it will close on May 3rd.

Festival organisers have also chosen in My Father’s Words a play about dementia, the Gaelic language and family revelations that span the Atlantic. In My Father’s Words will run from June 4th until June 27th.

The festival has often drawn on plays first shown in Scotland and a highlight of this year’s programme, Tuesdays at Tesco’s starring Simon Callow, was first performed at the Edinburgh Festival Fringe in 2011.

Cabinet Secretary for Culture Europe and External Affairs, Fiona Hyslop said:

"Scottish theatre and culture resonates across the world. This is great opportunity for two brilliant productions to make their mark in the USA. It’s exciting that Brits off Broadway will start at the end of Scotland Week with In My Father’s words; a great Scottish play with internationalism
oakleys sunglasses at its heart. This year’s Brits of Broadway demonstrates confidence in Scottish talent and the role of our world renowned festivals as platforms for international success."

Brits off Broadway Executive Producer, Peter Tear said,

"As a Scot based in New York it is always a pleasure to present outstanding Scottish work at 59E59 Theaters.

"We have waited a few years to introduce the remarkable, inspiring story of The Tailor of Inverness to New Yorkers, and this year happily the stars aligned. Dogstar’s Matthew Zajac, Aidan O’Rourke and Grid Iron’s director Ben Harrison will be with us for the first time for Brits Off Broadway at the close of Scotland Week.

"When I called my dear friend Philip Howard in Dundee last year, to see if we could dream up a way for the venerable Dundee Rep to make its New York debut he said: "I have the perfect play for you! And he did!

"It was a thrill for me to fly to Stornoway to see the final performance of the tour of Justin Young’s In My Father’s Words, with Gaelic by Iain Finlay MacLeod and indeed to meet Iain literally on his home turf in Lewis! Philip Howard has excelled himself as a director and a champion of new work with this eloquent, beautifully acted play, truly representative of what top quality Scottish theatre is all about.

"Neither of these productions would have happened without the enlightened support of Creative Scotland and the Scottish Government.

"I am confident that New Yorkers will warmly welcome both of these excellent Scottish exports!"

Notes to editors

The critically acclaimed Brits Off Broadway festival hosts the UK’s most innovative and provocative theatre in New York City and returns for its
fake oakley sunglasses cheap 10th season of New York premieres of new British theatre in April 2015. Presented by 59E59 Theaters, Brits Off Broadway launches on Tuesday, April 14 and runs until Sunday, June 28. A story of deception, identity and survival, The Tailor of Inverness has moved thousands across the world. This remarkable true
fake oakley wholesale story, lovingly recounted by his son, the acclaimed actor Matthew Zajac, and directed by Grid Iron’s Ben Harrison, is "a resonant meditation on what can become of families when countries shift beneath their feet." (The Guardian)

Thursday, June 4 Saturday, June 27

IN MY FATHER’S WORDS, by Justin Young, with Gaelic by Iain Finlay MacLeod, directed by
fake oakley sunglasses Philip Howard

With Angus Peter Campbell, Garry Collins, and Muireann Kelly

Produced by
oakley sunglasses discount Dundee Rep

In an old wooden house by the shore of Lake Ontario in Canada, Louis battles with his elderly father, Don, whose decline into dementia is gradually robbing him of the ability to speak. Into their lives comes Flora, the caregiver that Louis employs to
cheap oakley sunglasses look after Don. Flora, who is of Scottish heritage, understands that the ‘nonsense’ that Don speaks is fragmented Gaelic, opening up an ocean of revelations and buried family history spanning the Atlantic. IN MY FATHER’S WORDS is a beautiful play about identity national and personal and language, and the utter indivisibility between the two.Articles Connexes:

Articles Connexes:

Categories: Companies

How Value Stream Mapping can help your Agile Journey

Would you be surprised to learn that many people who participate in getting an idea to market are not very aware of all of the steps it takes to get it to the customer?  People know their sliver of work well but when asked if they know where in the full process their slice lives, it can be a bit challenging to pin it down.  One solution is to apply Value Stream Mapping (VSM) to gain that end-to-end view. 
Value Stream Mapping is a lean method for mapping an end-to-end flow of a product or service from the idea to the delivery to the customer.  It represents all of the activities required to transform a customer request into a product or service.  More importantly it is a way to optimize your flow through understanding what the state is today and then incrementally improving it over time to reduce waste and achieve faster delivery.  It is a means to help you optimize the value being delivered to the customer by creating a value stream that indicates what is value and what is waste.
Having applied Value Stream Mapping a number of times, the first benefit is it makes people aware that they are part of a much larger value stream than they thought.  People start to realize that there are more upstream and downstream steps and interdependencies than they thought.  It can be quite an eye-opener for some. 
The next benefit is that it highlights the end-to-end flow of work, not just the development work.  Some folks like to highlight only the development work and fail to realize that there are activities occurring prior to and after development.  An example is that if you are applying a yearly planning process, an idea or customer request may sit in the planning pipeline for upwards of half-a-year.  This is a very slow way to get an idea to market.  An end-to-end view ensures we visualize the full picture starting with an idea or request and then understand the amount of time it can take to get it to market. 
Another benefit is that now we visualize the end-to-end view of the work, we can identify the value-added and non-value added steps as well as the waste (e.g., wait) states.  It becomes much easier to become aware of the value and non-valued steps and waste when the big picture is in front of us. 
And most importantly it provides us an opportunity to incrementally improve.  Now that we are aware of the end-to-end value stream and we know what steps are value and where is there waste, it is time to experiment with incrementally improving the process.  The primary goal of the incremental improvement is to increase the process cycle efficiency and reduce the lead-time from the idea or customer request to delivery. 
Process cycle efficiency is a number that represents the efficiency of your lead-time (concept to cash).  It is a summation of all value-added time divided by that same value-added time + all of the wait/waste time.  A process efficiency example is while the value-add steps takes 115 minutes and the full processing time takes 2275 minutes, then you divide 115 by 2275 or 5%.  The goal is to look for those incremental areas of improvement.  
How does this help in an Agile environment?  If a goal in Agile is to get an increment of value to market quicker, then by identifying waste in your end-to-end value stream, and removing it, can reduce the time to get that value to market.  Value Stream Mapping is yet another tool in your Agile toolkit.  Consider learning more about Value Stream Mapping and experimenting with it for incremental improvement.
Categories: Blogs

R: Scraping Neo4j release dates with rvest

Mark Needham - Mon, 06/22/2015 - 00:07

As part of my log analysis I wanted to get the Neo4j release dates which are accessible from the release notes and decided to try out Hadley Wickham’s rvest scraping library which he released at the end of 2014.

rvest is based on Python’s beautifulsoup which has become my scraping library of choice so I didn’t find it too difficult to pick up.

To start with we need to download the release notes locally so we don’t have to go over the network when we’re doing our scraping:

download.file("http://neo4j.com/release-notes/page/1", "release-notes.html")
download.file("http://neo4j.com/release-notes/page/2", "release-notes2.html")

We want to parse those pages back and return the rows which contain version numbers and release dates. The HTML looks like this:

2015 06 21 22 57 20

We can get the rows with the following code:

library(rvest)
library(dplyr)
 
page1 <- html("release-notes.html")
page2 <- html("release-notes2.html")
 
rows = c(page1 %>% html_nodes("div.small-12 div.row"), 
         page2 %>% html_nodes("div.small-12 div.row") ) 
 
> rows %>% head(1)
[[1]]
<div class="row"> <h3 class="entry-title"><a href="http://neo4j.com/release-notes/neo4j-2-2-2/">Latest Release: Neo4j 2.2.2</a></h3> <h6>05/21/2015</h6> <p>Neo4j 2.2.2 is a maintenance release, with critical improvements.</p> <p>Notably, this release:</p> <ul><li>Provides support for running Neo4j on Oracle and OpenJDK Java 8 runtimes</li> <li>Resolves an issue that prevented the Neo4j Browser from loading in the latest Chrome release (43.0.2357.65).</li> <li>Corrects the behavior of the <code>:sysinfo</code> (aka <code>:play sysinfo</code>) browser directive.</li> <li>Improves the <a href="http://neo4j.com/docs/2.2.2/import-tool.html">import tool</a> handling of values containing newlines, and adds support f...</li></ul><a href="http://neo4j.com/release-notes/neo4j-2-2-2/">Read full notes →</a> </div>

Now we need to loop through the rows and pull out just the version and release date. I wrote the following function to do this and strip out any extra text that we’re not interested in:

generate_releases = function(rows) {
  releases = data.frame()
  for(row in rows) {
    version = row %>% html_node("h3.entry-title")
    date = row %>% html_node("h6")  
 
    if(!is.null(version) && !is.null(date)) {
      version = version %>% html_text()
      version = gsub("Latest Release: ", "", version)
      version = gsub("Neo4j ", "", version)
      releases = rbind(releases, data.frame(version = version, date = date %>% html_text()))
    }
  }
  return(releases)
}
 
> generate_releases(rows)
   version       date
1    2.2.2 05/21/2015
2    2.2.1 04/14/2015
3    2.1.8 04/01/2015
4    2.2.0 03/25/2015
5    2.1.7 02/03/2015
6    2.1.6 11/25/2014
7    1.9.9 10/13/2014
8    2.1.5 09/30/2014
9    2.1.4 09/04/2014
10   2.1.3 07/28/2014
11   2.0.4 07/08/2014
12   1.9.8 06/19/2014
13   2.1.2 06/11/2014
14   2.0.3 04/30/2014
15   2.0.1 02/04/2014
16   2.0.2 04/15/2014
17   1.9.7 04/11/2014
18   1.9.6 02/03/2014
19     2.0 12/11/2013
20   1.9.5 11/11/2013
21   1.9.4 09/19/2013
22   1.9.3 08/30/2013
23   1.9.2 07/16/2013
24   1.9.1 06/24/2013
25     1.9 05/13/2013
26   1.8.3         //

Finally I wanted to convert the ‘date’ column to be in R date format and get rid of the 1.8.3 row since it doesn’t contain a date. lubridate is my goto library for date manipulation in R so we’ll use that here:

library(lubridate)
 
> generate_releases(rows) %>%  
      mutate(date = mdy(date)) %>%   
      filter(!is.na(date)) 
 
   version       date
1    2.2.2 2015-05-21
2    2.2.1 2015-04-14
3    2.1.8 2015-04-01
4    2.2.0 2015-03-25
5    2.1.7 2015-02-03
6    2.1.6 2014-11-25
7    1.9.9 2014-10-13
8    2.1.5 2014-09-30
9    2.1.4 2014-09-04
10   2.1.3 2014-07-28
11   2.0.4 2014-07-08
12   1.9.8 2014-06-19
13   2.1.2 2014-06-11
14   2.0.3 2014-04-30
15   2.0.1 2014-02-04
16   2.0.2 2014-04-15
17   1.9.7 2014-04-11
18   1.9.6 2014-02-03
19     2.0 2013-12-11
20   1.9.5 2013-11-11
21   1.9.4 2013-09-19
22   1.9.3 2013-08-30
23   1.9.2 2013-07-16
24   1.9.1 2013-06-24
25     1.9 2013-05-13

We could then easily see how many releases there were by year:

releasesByDate = generate_releases(rows) %>%  
  mutate(date = mdy(date)) %>%   
  filter(!is.na(date))
 
> releasesByDate %>% mutate(year = year(date)) %>% count(year)
Source: local data frame [3 x 2]
 
  year  n
1 2013  7
2 2014 13
3 2015  5

Or by month:

> releasesByDate %>% mutate(month = month(date)) %>% count(month)
Source: local data frame [11 x 2]
 
   month n
1      2 3
2      3 1
3      4 5
4      5 2
5      6 3
6      7 3
7      8 1
8      9 3
9     10 1
10    11 2
11    12 1

Previous to this quick bit of hacking I’d always turned to Ruby or Python whenever I wanted to scrape a dataset but it looks like rvest makes R a decent option for this type of work now. Good times!

Categories: Blogs

Thoughts on "mission" OR why "mission" != "mission statement"

The purpose of exploring "mission" is to provide enough and only just enough guidance to support independent action.
Too little guidance leads to confusion and unaligned action; too much guidance undermines autonomy and creative initiative.
What needs to be known for a mission?
  • Context
  • Intention
  • Constraints
  • Implications
What needs to be communicated?  Any of the previous items that are non-obvious for the particular organisation, team, individual
The simpler the context, intention, constraints, implications, the more likely that a one-line mission statement is sufficient.  If you assume that a one-line mission statement is not enough, you'll be right in the vast majority of cases.
Because of the problem of false understanding (we believe we understand each other but actually don't), the important part of mission is not the mission statement but rather the dialogue to validate shared understanding of context, intention, constraints, and implications.  A mission statement might be an input to trigger this dialogue AND/OR an output to remind of that dialogue.
Categories: Blogs

R: dplyr – segfault cause ‘memory not mapped’

Mark Needham - Sun, 06/21/2015 - 00:18

In my continued playing around with web logs in R I wanted to process the logs for a day and see what the most popular URIs were.

I first read in all the lines using the read_lines function in readr and put the vector it produced into a data frame so I could process it using dplyr.

library(readr)
dlines = data.frame(column = read_lines("~/projects/logs/2015-06-18-22-docs"))

In the previous post I showed some code to extract the URI from a log line. I extracted this code out into a function and adapted it so that I could pass in a list of values instead of a single value:

extract_uri = function(log) {
  parts = str_extract_all(log, "\"[^\"]*\"")
  return(lapply(parts, function(p) str_match(p[1], "GET (.*) HTTP")[2] %>% as.character))
}

Next I ran the following function to count the number of times each URI appeared in the logs:

library(dplyr)
pages_viewed = dlines %>%
  mutate(uri  = extract_uri(column)) %>% 
  count(uri) %>%
  arrange(desc(n))

This crashed my R process with the following error message:

segfault cause 'memory not mapped'

I narrowed it down to a problem when doing a group by operation on the ‘uri’ field and came across this post which suggested that it was handled more cleanly in more recently version of dplyr.

I upgraded to 0.4.2 and tried again:

## Error in eval(expr, envir, enclos): cannot group column uri, of class 'list'

That makes more sense. We’re probably returning a list from extract_uri rather than a vector which would fit nicely back into the data frame. That’s fixed easily enough by unlisting the result:

extract_uri = function(log) {
  parts = str_extract_all(log, "\"[^\"]*\"")
  return(unlist(lapply(parts, function(p) str_match(p[1], "GET (.*) HTTP")[2] %>% as.character)))
}

And now when we run the count function it’s happy again, good times!

Categories: Blogs

Leadership Skills for Making Things Happen

J.D. Meier's Blog - Sat, 06/20/2015 - 21:48

"A leader is one who knows the way, goes the way, and shows the way." -- John C. Maxwell

How many people do you know that talk a good talk, but don’t walk the walk?

Or, how many people do you know have a bunch of ideas that you know will never see the light of day?  They can pontificate all day long, but the idea of turning those ideas into work that could be done, is foreign to them.

Or, how many people do you know can plan all day long, but their plan is nothing more than a list of things that will never happen?  Worse, maybe they turn it into a team sport, and everybody participates in the planning process of all the outcomes, ideas and work that will never happen. (And, who exactly wants to be accountable for that?)

It doesn’t need to be this way.

A lot of people have Hidden Strengths they can develop into Learned Strengths.   And one of the most important bucket of strengths is Leading Implementation.

Leading Implementation is a set of leadership skills for making things happen.

It includes the following leadership skills:

  1. Coaching and Mentoring
  2. Customer Focus
  3. Delegation
  4. Effectiveness
  5. Monitoring Performance
  6. Planning and Organizing
  7. Thoroughness

Let’s say you want to work on these leadership skills.  The first thing you need to know is that these are not elusive skills reserved exclusively for the elite.

No, these are commonly Hidden Strengths that you and others around you already have, and they just need to be developed.

If you don’t think you are good at any of these, then before you rule yourself out, and scratch them off your list, you need to ask yourself some key reflective questions:

  1. Do you know what good actually looks like?  Who are you role models?   What do they do differently than you, and is it really might and magic or do they simply do behaviors or techniques that you could learn, too?
  2. How much have you actually practiced?   Have you really spent any sort of time working at the particular skill in question?
  3. How did you create an effective feedback loop?  So many people rapidly improve when they figure out how to create an effective learning loop and an effective feedback loop.
  4. Who did you learn from?  Are you expecting yourself to just naturally be skilled?  Really?  What if you found a good mentor or coach, one that could help you create an effective learning loop and feedback loop, so you can improve and actually chart and evaluate your progress?
  5. Do you have a realistic bar?  It’s easy to fall into the trap of “all or nothing.”   What if instead of focusing on perfection, you focused on progress?   Could a little improvement in a few of these areas, change your game in a way that helps you operate at a higher level?

I’ve seen far too many starving artists and unproductive artists, as well as mad scientists, that had brilliant ideas that they couldn’t turn into reality.  While some were lucky to pair with the right partners and bring their ideas to live, I’ve actually seen another pattern of productive artists.

They develop some of the basic leadership skills in themselves to improve their ability to execute.

Not only are they more effective on the job, but they are happier with their ability to express their ideas and turn their ideas into action.

Even better, when they partner with somebody who has strong execution, they amplify their impact even more because they have a better understanding and appreciation of what it takes to execute ideas.

Like talk, ideas are cheap.

The market rewards execution.

Categories: Blogs

R: Regex – capturing multiple matches of the same group

Mark Needham - Fri, 06/19/2015 - 23:38

I’ve been playing around with some web logs using R and I wanted to extract everything that existed in double quotes within a logged entry.

This is an example of a log entry that I want to parse:

log = '2015-06-18-22:277:548311224723746831\t2015-06-18T22:00:11\t2015-06-18T22:00:05Z\t93317114\tip-127-0-0-1\t127.0.0.5\tUser\tNotice\tneo4j.com.access.log\t127.0.0.3 - - [18/Jun/2015:22:00:11 +0000] "GET /docs/stable/query-updating.html HTTP/1.1" 304 0 "http://neo4j.com/docs/stable/cypher-introduction.html" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"'

And I want to extract these 3 things:

  • /docs/stable/query-updating.html
  • http://neo4j.com/docs/stable/cypher-introduction.html
  • Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36

i.e. the URI, the referrer and browser details.

I’ll be using the stringr library which seems to work quite well for this type of work.

To extract these values we need to find all the occurrences of double quotes and get the text inside those quotes. We might start by using the str_match function:

> library(stringr)
> str_match(log, "\"[^\"]*\"")
     [,1]                                               
[1,] "\"GET /docs/stable/query-updating.html HTTP/1.1\""

Unfortunately that only picked up the first occurrence of the pattern so we’ve got the URI but not the referrer or browser details. I tried str_extract with similar results before I found str_extract_all which does the job:

> str_extract_all(log, "\"[^\"]*\"")
[[1]]
[1] "\"GET /docs/stable/query-updating.html HTTP/1.1\""                                                                            
[2] "\"http://neo4j.com/docs/stable/cypher-introduction.html\""                                                                    
[3] "\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36\""

We still need to do a bit of cleanup to get rid of the ‘GET’ and ‘HTTP/1.1′ in the URI and the quotes in all of them:

parts = str_extract_all(log, "\"[^\"]*\"")[[1]]
uri = str_match(parts[1], "GET (.*) HTTP")[2]
referer = str_match(parts[2], "\"(.*)\"")[2]
browser = str_match(parts[3], "\"(.*)\"")[2]
 
> uri
[1] "/docs/stable/query-updating.html"
 
> referer
[1] "https://www.google.com/"
 
> browser
[1] "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36"

We could then go on to split out the browser string into its sub components but that’ll do for now!

Categories: Blogs

Why Agile Teams Often Don’t Thrive

DFW Scrum User Group - Fri, 06/19/2015 - 18:18
On TUE May 19, we hosted Ron Jeffries (yes the guy who has been building software longer than you have been alive) at DFW Scrum. Ron is a frequent visitor of our group and has provided unbelievable guidance and direction to my own … Continue reading →
Categories: Communities

How to deploy composite Docker applications with Consul key values to CoreOS

Xebia Blog - Fri, 06/19/2015 - 17:34

Most examples on the deployment of Docker applications to CoreOS use a single docker application. But as soon as you have an application that consists of more than 1 unit, the number of commands you have to type soon becomes annoying. At Xebia we have a best practice that says "Three strikes and you automate" mandating that a third time you do something similar, you automate. In this blog I share the manual page of the utility called fleetappctl that allows you to perform rolling upgrades and deploy Consul Key value pairs of composite applications to CoreOS and show three examples of its usage.


fleetappctl is a utility that allows you to manage a set of CoreOS fleet unit files as a single application. You can start, stop and deploy the application. fleetappctl is idempotent and does rolling upgrades on template files with multiple instances running. It can substitute placeholders upon deployment time and it is able to deploy Consul key value pairs as part of your application. Using fleetappctl you have everything you need to create a self contained deployment  unit of your composite application and put it under version control.

The command line options to fleetappctl are shown below:

fleetappctl [-d deployment-descriptor-file]
            [-e placeholder-value-file]
            (generate | list | start | stop | destroy)
option -d

The deployment descriptor file describes all the fleet unit files and Consul key-value pair files that make up the application. All the files referenced in the deployment-descriptor may have placeholders for deployment time values. These placeholders are enclosed in  double curly brackets {{ }}.

option -e

The file contains the values for the placeholders to be used on deployment of the application. The file has a simple format:

<name>=<value>
start

starts all units in the order as they appear in the deployment descriptor. If you have a template unit file, you can specify the number of instances you want to start. Start is idempotent, so you may call start multiple times. Start will bring the deployment inline with your descriptor.

If the unit file has changed with respect to the deployed unit file, the corresponding instances will be stopped and restarted with the new unit file. If you have a template file, the instances of the template file will be upgraded one by one.

Any consul key value pairs as defined by the consul.KeyValuePairs entries are created in Consul. Existing values are not overwritten.

generate

generates a deployment descriptor (deployit-manifest.xml) based upon all the unit files found in your directory. If a file is a fleet unit template file the number of instances to start is set to 2, to support rolling upgrades.

stop

stops all units in reverse order of their appearance in the deployment descriptor.

destroy

destroys all units in reverse order of their appearance in the deployment descriptor.

list

lists the runtime status of the units that appear in the deployment descriptor.

Install fleetappctl

to nstall the fleetappctl utility, type the following commands:

curl -q -L https://github.com/mvanholsteijn/fleetappctl/archive/0.25.tar.gz | tar -xzf -
cd fleetappctl-0.25
./install.sh
brew install xmlstarlet
brew install fleetctl
Start the platform

If you do not have the platform running, start it first.

cd ..
git clone https://github.com/mvanholsteijn/coreos-container-platform-as-a-service.git
cd coreos-container-platform-as-a-service
git checkout 029d3dd8e54a5d0b4c085a192c0ba98e7fc2838d
cd vagrant
vagrant up
./is_platform_ready.sh
Example - Three component web application


The first example is a three component application. It consists of a mount, a Redis database service and a web application. We generate the deployment descriptor, indicate we do not want to start the mount, start the application and then modify the web application unit file to change the service name into 'helloworld'. We perform a rolling upgrade by issuing start again.. Finally we list, stop and destroy the application.

cd ../fleet-units/app
# generate a deployment descriptor
fleetappctl generate

# do not start mount explicitly
xml ed -u '//fleet.UnitConfigurationFile[@name="mnt-data"]/startUnit' \
       -v false deployit-manifest.xml > \
        deployit-manifest.xml.new
mv deployit-manifest.xml{.new,}

# start the app
fleetappctl start 

# Check it is working
curl hellodb.127.0.0.1.xip.io:8080
curl hellodb.127.0.0.1.xip.io:8080

# Change the service name of the application in the unit file
sed -i -e 's/SERVICE_NAME=hellodb/SERVICE_NAME=helloworld/' app-hellodb@.service

# do a rolling upgrade
fleetappctl start 

# Check it is now accessible on the new service name
curl helloworld.127.0.0.1.xip.io:8080

# Show all units of this app
fleetappctl list

# Stop all units of this app
fleetappctl stop
fleetappctl list

# Restart it again
fleetappctl start

# Destroy it
fleetappctl destroy
Example - placeholder references

This example shows the use of a placeholder reference in the unit file of the paas-monitor application. The application takes two optional environment  variables: RELEASE and MESSAGE that allow you to configure the resulting responses. The variable RELEASE is configured in the Docker run command in the fleet unit file through a placeholder. The actual value for the current deployment is taken from an placeholder value file.

cd ../fleetappctl-0.25/examples/paas-monitor
#check out the placeholder reference
grep '{{' paas-monitor@.service

...
ExecStart=/bin/sh -c "/usr/bin/docker run --rm --name %p-%i \
 <strong>--env RELEASE={{release}}</strong> \
...
# checkout our placeholder values
cat dev.env
...
release=V2
# start the app
fleetappctl -e dev.env start

# show current release in status
curl paas-monitor.127.0.0.1.xip.io:8080/status

# start is idempotent (ie. nothing happens)
fleetappctl -e dev.env start

# update the placeholder value and see a rolling upgrade in the works
echo 'release=V3' > dev.env
fleetappctl -e dev.env start
curl paas-monitor.127.0.0.1.xip.io:8080/status

fleetappctl destroy
Example - Env Consul Key Value Pair deployments


The final example shows the use of a Consul Key Value Pair, the use of placeholders and envconsul to dynamically update the environment variables of a running instance. The environment variables RELEASE and MESSAGE are taken from the keys under /paas-monitor in Consul. In turn the initial value of these keys are loaded on first load and set using values from the placeholder file.

cd ../fleetappctl-0.25/examples/envconsul

#check out the Consul Key Value pairs, and notice the reference to placeholder values
cat keys.consul
...
paas-monitor/release={{release}}
paas-monitor/message={{message}}

# checkout our placeholder values
cat dev.env
...
release=V4
message=Hi guys
# start the app
fleetappctl -e dev.env start

# show current release and message in status
curl paas-monitor.127.0.0.1.xip.io:8080/status

# Change the message in Consul
fleetctl ssh paas-monitor@1 \
    curl -X PUT \
    -d \'hello Consul\' \
    http://172.17.8.101:8500/v1/kv/paas-monitor/message

# checkout the changed message
curl paas-monitor.127.0.0.1.xip.io:8080/status

# start does not change the values..
fleetappctl -e dev.env start
Conclusion

CoreOS provides all the basic functionality for a Container Platform as a Service. With the utility fleetappctl it becomes easy to start, stop and upgrade composite applications. The script is an superfluous to fleetctl and does not break other ways of deploying your applications to CoreOS.

The source code, manual page and documentation of fleetappctl can be found on https://github.com/mvanholsteijn/fleetappctl.

 

Categories: Companies

Knowledge Sharing


SpiraTeam is a agile application lifecycle management (ALM) system designed specifically for methodologies such as scrum, XP and Kanban.