TSM_13_2013_en

48
TO DAY SOFTWARE No. 13 • July 2013 • www.todaysoftmag.ro • www.todaysoftmag.com MAGAZINE Haskell (III) ICT Spring Europe 2013 (I) Product Mindset fresh … ideas! Hadoop (III) Book review: Java Message Service Romania, the ugly duckling of the software outsourcing lake Towards an IT community – via HR (2) 3 Months of Springboard HTML 5: WebSockets Migrating MVC 3 website and DB to Azure (II) The high price of lean software developement adoption of Software Craftsmanship techniques: Technical Coaching Interview with Peter Lawrey high performance systems in Java

description

http://www.todaysoftmag.com/pdf/TSM_13_2013_en.pdf

Transcript of TSM_13_2013_en

Page 1: TSM_13_2013_en

TSM T O D A YS O F T WA R E

No. 13 • July 2013 • www.todaysoftmag.ro • www.todaysoftmag.com

M AG A Z I N E

Haskell (III)ICT Spring Europe 2013 (I)Product Mindset

fresh … ideas!

Hadoop (III)

Book review: Java Message Service

Romania, the ugly duckling of the software outsourcing lake

Towards an IT community– via HR (2)

3 Months of Springboard

HTML 5: WebSockets

Migrating MVC 3 website and DB to Azure (II)

The high price of lean softwaredevelopement

adoption of Software Craftsmanship techniques: Technical Coaching

Interview with Peter Lawrey high performance systems in Java

Page 2: TSM_13_2013_en
Page 3: TSM_13_2013_en

6ICT SPRING

EUROPE 2013 (I)Ovidiu Mățan

9I T.A.K.E.

UNCONFERENCEAna Maria Constantinescu

103 Months of

SpringboardBogdan Iordache

12Agile

Summer Camp

Diana Tîrnovan

15Product Mindset

Dan Suciu

18The adoption of Software

Craftsmanship techniques: Technical Coaching

Alexandru Bolboaca and Adrian Bolboacă

20Book review: Java Message

ServiceSilviu Dumitrescu

22HTML5: Web Sockets

Radu Olaru

22Team building (I)

Andreea Pârvu

28TOWARDS an IT COMMUNITY – via HR (II)Dan Ionescu and Cristina Nicule

32Interview with Peter LawreyAttila-Mihaly Balazs

34The high price of lean software developementFlorian Ivan

35Romania, the ugly duckling of the software outsourcing lakeMihai Nadăș

36Migrating MVC 3 websiteand DB to Azure (II)Dragoș Andronic

39Hadoop (III) Radu Vunvulea

41FunctionalProgramming in Haskell (III)Mihai Maruseac

44fresh … ideas!Antonia Onaca

46It’s time for vacation…Simona Bonghez

Page 4: TSM_13_2013_en

4 nr. 13/July, 2013 | www.todaysoftmag.com

TSM’s participation in ICT Spring Europe 2013, event that took place last month in Luxembourg, was a unique experience. There were 3300 participants from Europe, America and Asia. Among the most important guests, there was Jimmy

Walles, the founder of Wikipedia, who talked about what the power of information means, when we deal with a global knowledge library: Wikipedia. Trip Hawkins, the founder of Electronic Arts, presented the power of games in our society and he antici-pated a possible evolution of education, where young people no longer accept the role of a passive listener in the classroom. We enjoyed two entire days of presentations in the conference room. A special corner was dedicated to start-ups and there were only pitches. There was also a corner of experts. Networking was the key word, encouraged by the great presence of technical stands and dedicated events such as Networking Cocktail. You are welcome to find out more details in the first article, which is dedicated to ICT Spring.

Number 13 is an issue that brings a light holiday breeze. Therefore, we publish Andreea Parvu’s article on organizing team buldings, the one by Simona Bonghez “It’s holiday time…” and “Orange Fresh Juice” by Antonia Onaca.

We are pleased to publish the second part of the study conducted by Danis company about the IT environment in Cluj, which aims at the creation of some HR best practices in the domain. We also have an interesting interview with Peter Lawrey, taken by Attila Balazs, about the realization of high performance Java applications, used especially in the banking and exchange domains.

Coming back to events, I congratulate Yonder for the initiative to organize an event at Victoria cinema in Cluj-Napoca as well as for projecting during it a Star War episode. It was an interesting local event in which they shared their vision on the evolution of the software market. You can get to know it, too, in the article of Mihai Nadas. Still in the event section, we have a review of I T.A.K.E Unconference, organized by Mozaic Works in Bucharest. For those who are in Cluj between the 18th -19th of July, Florian Ivan will organize a two day Agile workshop. You can find more details in the article dedicated to this.

The series of technical articles reached number three for Functional Programming in Haskell and Hadoop. HTML 5: Web Socket shows us a practical solution for cli-ent-server communication available in HTML 5. Product Mindset signed by Dan Suciu presents the product oriented strategy versus the service orientation in the outsourcing domain.

Enjoy your reading !

Ovidiu MăţanEditor-in-chief @Today Software Magazine

Ovidiu Măţan, [email protected]

Editor-in-chief Today Software Magazine

editorial

Page 5: TSM_13_2013_en

5www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

Editorial Staf

Editor-in-chief: Ovidiu Mățan [email protected]

Editor (startups & interviews): Marius Mornea [email protected]

Graphic designer: Dan Hădărău [email protected]

Copyright/Proofreader: Emilia Toma [email protected]

Translator: Roxana [email protected]

Reviewer: Tavi Bolog [email protected]

Reviewer: Adrian Lupei [email protected]

Made byToday Software Solutions SRL

str. Plopilor, nr. 75/77Cluj-Napoca, Cluj, [email protected]

www.todaysoftmag.comwww.facebook.com/todaysoftmag

twitter.com/todaysoftmag

ISSN 2285 – 3502ISSN-L 2284 – 8207

Copyright Today Software Magazine

Any reproduction or total or partial reproduction of these trademarks or logos, alone or integrated with

other elements without the express permission of the publisher is prohibited and engage the responsibility of the user as defined by Intellectual Property Code

www.todaysoftmag.rowww.todaysoftmag.com

Silviu [email protected]

Java consultant@ .msg systems Romania

Radu [email protected]

Senior Software Engineer@iQuest

Lista autorilor

Alexandru [email protected]

Agile Coach and Trainer, with a focus on technical practices@Mozaic Works

Mihai [email protected]

IxNovation @ IXIAmember of ROSEdu, ARIA

Adrian [email protected]

Programmer. Organizational and Technical Trainer and Coach@Mozaic Works

Andreea Pâ[email protected]

Recruiter at Endava

Simona Bonghez, [email protected]

Speaker, trainer and consultant in oroject management,

Owner of Confucius Consulting

Mihai Nadăș[email protected]

CTO@ Yonder

Attila-Mihaly [email protected]

Code Wrangler @ UdacityTrainer @ Tora Trading

Bogdan [email protected]

Co-Founder of How to Web

Ana Maria [email protected]

Community Manager @ Akcees

Diana Tî[email protected]

Coordinator @ TechLeague

Dan [email protected]

Executive director@ Danis Consulting

Cristina [email protected]

Consultant@ Danis Consulting

Dan [email protected]

Director of Delivery@ 3Pillar Global

Radu [email protected]

Senior Software Developer@ Small Footprint

Florian Ivan, PMI-ACP, CSM, PMP,

Prince2 Practitioner, MVP, [email protected]

Managing Partner@Rolf Consulting Germany

Dragoș Andronic [email protected]

CTO@ TXTFeedback

Antonia [email protected] and consultant

Page 6: TSM_13_2013_en

6 nr. 13/July, 2013 | www.todaysoftmag.com

ICT SPRING EUROPE 2013 (I)

events

a shuttle directly to our final destination. Luxembourg has about 500.000 inhabitants and the city itself, about 300.000. A great part of those who work here come from the neighbor countries: France, Germany and Belgium. Traditionally, the country’s economy is based on the banking area, its ace up sleeve being the bank pri-vacy. However, this right will be lost in 2014, but the current focus is on the IT area, especially communications, data centers, as well as the development of bank software. This is achieved through the political involvement in sustaining the local business, promoting and facilitating it. We would like to mention the possibility of deducting 80% of the Intellectual Property costs from tax con-tribution or the support of up to 50% of the costs involved by the participation of companies to events abroad. Taking all these into consideration, no wonder we find here the highest income per inhabitant in Europe.

Coming back to ICT Spring, the event was organized in four areas:

1. The exhibitors’ stands, which gathered technical products, start-ups and organizations,

2. The conference room, where the keynotes took place,3. The start-ups’ corner, where during the two days we saw the

pitches of start-ups, 4. The experts’ corner, where we saw a series of technical pre-

sentations, approaching some restricted areas.

The presentations were interesting, focusing on innovation. Oliver Royant, chief editor in Paris Match, explained the

importance of the message in the media, the reporters’ passion for their work and its significance in our lives. Each media platform: print, web, mobile requires expe-rience and specific content.

Pe t e r S o n d e r g a a r d – S e n i o r VicePresident Research, Gartner. We select some of the opinions he expressed:

• In the next few years, all the budgets will be only IT budgets.• Enterprise is represented by Facebook, since they are in con-

trol of the data, not the corporations.• Paradoxically, technology will decrease the car sales, since

more and more people will prefer the virtual environment instead

The first TSM delegation abroad took part in the ICT SPRING EUROPE 2013, event that took place in Luxembourg and lasted for two days. The public was numerous and, as partners, we had the opportunity to share our magazine within the event. The stars of the event were Jimmy Wales, founder of Wikipedia and Trip Hawkins, founder of Electronic Arts.

Let us begin with the story of the event. From Cluj, Luxembourg is not very far away, a flight to Charloi (Belgium), and from here,

Page 7: TSM_13_2013_en

7www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

of the direct contact.• Recession remains a problem, but technology is not slowed

down. More and more business leaders orient towards the digi-tal. According to the Gartner chart, only 2% of the 391 CEO and Senior Business Executives have a digital strategy as a business strategy. However, 49% have it as a plan, but 14% do not take it into consideration at all.

• While the traditional positions of CEO or IT executive remain at the same level or decline, the role of innovation incre-ases and the position of Head of Innovation becomes more and more important.

• The data and the clients represent the key investments in IT, but the sales and marketing leaders will no longer have absolute control.

• Business analytics, enterprise mobility and business process outsourcing are the first three positions in the top of investment priorities.

Nexus of forces –represent the way people will interact with each other in the future and will deal with their information. The choice will be made at four levels: mobile, social, Cloud and infor-mation. The end of the presentation was unedited, as the following incentive was uttered: Start a marketing program digitization. May the IT force be with you!!!

Next, we attended the Kidoria startup presentation. They drew an application which allows adding all data on children, beginning with their pictures and continuing with their medical information or grades received in school. The application is based on a monthly pass and there is the possibility to create photo albums from the stored photos. Until now, they have received a financing of 180.000 euro, most of the amount being used for appli-cation development and the programmers’ salaries.

D a n S i r o k e r – C o - f o u n d e r & C E O o f

Optimizely – former analytics manager in the presidential cam-paign of Barack Obama. He shared with us some of his experience from the last presidential campaign and he presented a few of the actions taken in order to increase the impact of the messages pre-sented on the site.

In order to increase the impact of an application or a web page, reduce the number of options: less is more. Among the examples given was the online sales page of Sim City, where, by giving up an online banner, sales increased by 43.8%. During the campaign for presidential elections, the donations were increased by 15.2% when the text was changed from “Donate now” to “Donate and get a gift” for those who hadn’t registered before on the site. But the same option reduced the donations by 24.6% for those who were already registered and who no longer donated. For them, the best choice was “Please donate”, which increased the donations by 27.8%. Learnt lesson: explore in order to find the best option, instead of refining the existent solution (http://insideintercom.io/criticism-and-two-way-streets/).

The conclusion of the discourse offered us a revision of the presented rules:

1. Define successful metrics that can be measured.2. Less is more. Reduce the options.3. Words count. Focus on the action.4. Try to reach the global maximum.5. Start today.

Bart Vercammen - Product Manager, Technicolor, told us about the interconnected devices and applications: Services of Things. “Technicolor” is synonym with the special manner of processing color movies, but the company is also a lea-der in the home gateway production. The main challenges from a connected home of our days are the multitude of protocols used by the different devices, the number of devices, App’ification of the connected home. Their control represents a challenge and the solution suggested by Technicolor is Qeo. This is a communication framework based on a Publish-Subscriber architecture which uses limited hardware resources, having extensible data patterns and a coded data transfer. This is open-source and can be downloaded for free. At the same time, the Qeopedia standard was created for the interconnection of different ecosystems.

The first day of the event ended at 17:30 and afterwards there was the special socialization event: the Networking Cocktail, where I met Oana Casapu and Alexandru Rotaru from Altom Consulting. We were surprised to meet there. TSM did not pass unnoticed, thanked to the great number of tweets displayed in the conference room and the exhibition area, enabling thus the connection. Also, they used the participation code made available

Page 8: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

8 nr. 13/July, 2013 | www.todaysoftmag.com

startups

in the former issue of the magazine and in the TSM Facebook community.

We continued with the official dinner, European ICT Awards Gala Dinner, event opened by Xavier Bettel, mayor of Luxembourg city. During it, the winners of this year’s European ICT awards were announced. These awards are a reward for ICT good practices.

European CIO of the YearLance Fisher, CIO of SThree company, specialized in human

resources in London. The award was given as a result of his global strategy and implemented projects, technical choices and mana-gement knowledge.

European ICT Innovation of the YearApplidget, a web development company from Paris, specia-

lized in software solutions for organizing events. The award was given for its innovative products and the contribution brought to this domain.

European Startup of the Year The award was received by Uplike, an application that turns

bookmarks into “real” things, by the possibility to share by a sim-ple click.

In the next issue we will tell you about the second day of the event, when guest stars Jimmy Walles, founder of Wikipedia and Trip Hawkins, founder of Electronic Arts, made their appearance.

Ovidiu Măţan, [email protected]

Editor-in-chief Today Software Magazine

Page 9: TSM_13_2013_en

9www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

I T.A.K.E UNCONFERENCE

More than just a conference

events

There were workshops organized where the participants were asked to write code and had a lot to learn due to the high level of interaction with the other group mem-bers. The topics were: Agile Architecture Techniques and Values, TDD, DDD and BDD. Moreover, there was an Open Space where the participants brought the topic, picked the time and together with the ones interested had some informal discussions. They talked about things like: „How to start writing Unit Test?”, „How to keep control when refactoring”, „Problems and solutions for big data bases”, etc.

B esides this , at the I T.A.K.E. UNCONFERENCE one could understand what a Product Owner role means and which are the responsibilities that come with it. There was a Product Management area where everybody, either speaker or participant, contributed to the deve-lopment of a web application called KeepInTouch that allows the participants to keep in touch even after the conference. The Product Owner, Flavius Stef, prepared an initial backlog that guided and prioritized the development stages of the application. The participants practiced Agile Software Development techniques, iterated every hour, used pair programming, unit testing and TDD. The result? A fully functional

application according to the plan. Speaking, Open Space, Product

Development, and this is not all. Due to the fact that a programmer needs to prac-tice and become better at writing code, the organizers of I T.A.K.E. UNCONFERENCE prepared a Kata Lounge, an area where the challenges were waiting for the pro-grammers to take them. Each participant that solved one of the problems, called Katas, got feedback from the speakers. The winners for the cleanest code were Catalin Lazar who got an invitation for one of Mozaic Works workshops and three months subscription to the Today Software Magazine and Eduard Stanculet, who also got a three months subscription to Today Software Magazine.

The conference started with Rebecca Wirfs-Brock, president of Wirfs-Brock Associates and IEEE Software’s Design Columnist, well-known and respected object-oriented practitioner. She invented the way of thinking about objects known as Responsibility-Driven Design and is the lead author of Object Design: Roles, Responsibilities, and Collaborations (2003) and the classic Designing Object-Oriented Software (1990).

During the presentation on the topic “Maintaining your code Clint Estwood style”, she explored options for revising, repairing, and extending good, bad, and ugly code. When she talked about good code she advised us to write easy code des-pite its complexity, keeping in mind that in the future the respective code will solve much more than it solves today.

Moreover, she started from Clint Eastwood’s idea that “Whatever success I’ve had is due to a lot of instinct and a little luck” by confessing that in her case “Whatever success I’ve had is through a lot of hard work and a little luck”.

Vasco Duarte, Agile Coach held a work-shop about TDD. Vasco has Product and Project Management experience. Having worked in the software industry since 1997, Vasco is one of the leaders and catalysts of

Agile methods and Agile culture adop-tion at Avira and previously at Nokia and F-Secure. He said that TDD is an invest-ment in becoming a good programmer. Between the problems concerning TDD, he mentioned that it is hard as programmer to detect repetition and usually one tends to complicate the solutions. Therefore, he recommended to write easy code and do lot of Refactoring.

Aimee Rivers, with many years experi-ence in web programming and behaviour driven development, helped to test and deliver the BBC’s Interactive Video Player for the Olympics. On the link: http://aime-erivers.com/weather/berlin one can see the weather in Berlin on the whole webpage and one can replace Berlin with any other city.

Mostly the conference was about Clean Code, Architecture, Design, Unit testing, TDD, Functional programming, Domain Driven Design, Legacy Code, Productivity, Testing.

The conference I T.A.K.E. UNCONFERENCE happened in Bucharest on 30-31 of May and it was more than just a conference. The speaking part was about code and new techniques for programmers, testers, architects, technical managers. Over these two days a lot of interesting things happened.

Ana Maria [email protected]

Community Manager @ Akcees

Page 10: TSM_13_2013_en

10 nr. 13/July, 2013 | www.todaysoftmag.com

startups

3 Months of Springboard

The 3 months have passed at high speed and the work amount was some-times overwhelming. To be in charge of the Springboard programme while you give a helping hand to launch TechHub Bucharest, while you help your colleagues from Conectoo and you start organizing How to Web 2013, that is the definition of a busy schedule. This is also the reason why I have no longer had the time to write on the blog, which I hope to make up for in the following period.

After 3 months spent in Cambridge, I can say that this has been one of the most interesting professional experiences I have lived in the last few years. I had the opportunity to work with Jon and Jess, the ones who have founded/ led/ develo-ped the Springboard accelerator during the last 3 years, but also with 8 fabulous teams, gathered from all the corners of the world (UK, Spain, Portugal, Canada and Bulgaria). Footnote: the Springboard team will be in charge, from this year on, of TechStars London, the first extension out-side US of the most important accelerator programmes network and an extraordinary significant development for the European eco-system, which thus gets an open door towards the US market.

Cambridge is one of the key points of European hardware (if not THE key point), a city of 100.000 inhabitants, where impor-tant companies appeared, companies such as ARM (the producers of processors for almost all smart-phones and tablets in the world, having delivered 9 billion processors last year), Raspberry PI, Acorn Computers (for those who have a passion for history), but also the newer Neul and Weightless.

I accepted Jon’s proposal (my first real job since I was 21) because I was eager to understand how an accelerator programme is organized and which are the key elements that make such a programme successful. Besides many practical considerations (among which the most important is that an accelerator programme must be led by entrepreneurs and/ or investors), it is now clear to me that the most important ingre-dients are the quality of the teams and of the mentors, or, in other words, the context that one creates around the programme.

When among the mentors you have personalities such as Hermann Hauser, David Cleevely, Eben Upton or Peter Cowley, together with representatives of (without any exaggerations) tens of first class investment funds/ groups, as well as corporations such as Unilever (income of 51.32 billion EUR in 2012) or Bosch (income of 52.3 billion EUR in 2012) which make their top executives available for meetings and presentations with the teams, combined with a global selection area, well, things cannot be bad for you.

All these interactions build a context that can help you from several points of view: you will get a valid feedback for all the development alternatives that you analyze, you will get a ton of interesting information that is relevant for what you are doing and you can, ideally, meet your future investors and partners. But nothing is more concrete than the fantastical tension that floats in the air when the discussions heat up and the debate challenges you to find solutions and alternatives near people that are excel-lently trained from the professional point of view, because those are the moments

when, just like an athlete that runs in the company of some better athletes, you pro-fessionally outrun yourself.

I feel that, after only 3 months there, I need other 3 more months to fully under-stand the experience I’ve been through and which, one way or another, I wish you to live, too.

What does an accelerator programme for startups look like from the inside?

In the two weeks since I returned to Romania I keep getting, in almost every discussion, questions such as: “What exactly is Springboard?”, “What is it that you did over there?. Here are some additi-onal explanations.

Springboard is (was?) one of the most important European accelerators, surely placed among the top 3, besides (my 2 cents) Seedcamp and Startupbootcamp. The 2013 spring/ summer programme was dedicated to startups from the “Internet of Things” domain and represented the last Springboard batch in the near future.

In February, Springboard announced its fusion with TechStars and the Springboard team will manage, from this month on, the TechStars London accelerator programme (the Springboard – TechStars fusion is an extraordinary success which brings the best network of accelerators to Europe). The Springboard brand is, for the time being, laid away. The overlapping of the two pro-grammes (TechStars London began to be intensely prepared from May) made that the Springboard team (Jon and Jess) need a helping hand. This was, in short, how I got to work for Springboard as a programme manager for 3 months. I was eager to see

In December 2012 I accepted a very interesting challenge: to become the programme manager of Springboard, one of the best (no modesty, I know, but that’s a fact) European accelerator programmes. The 2013 edition also brought an element of absolute novelty: it was the first European programme dedicated to hardware startups, a very interesting movement which followed a 2012

year full of news for the hardware developers.

Page 11: TSM_13_2013_en

11www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINEstartups

what an accelerator programme looks like from the inside (and not from the perspective of a startup).

Springboard IoT had the classical structure of a mentor-dri-ven accelerator: 3 months of programme, in the first half of which the teams meet more than 80 mentors, then, in the second half, the teams order the information they received, make strategic decisions regarding the target market, the typical client and the development strategy and they iterate the products in the desired direction.

Even though the title of programme manager sounds somewhat high-flown, Jon Bradford, the founder of Springboard (also an Irishman having a downright manner) and an old friend of mine (the first official Springboard T-shirt appeared in How to Web 2010) put me through all the possible tasks that someone can perform within an accelerator.

So, what does a programme manager do? Well, first of all, a lot of logistic work:

• Organizing and managing the meetings with the mentors, which are surprisingly complex because of their great number (over 80 in Springboard)

• Organizing workshops on different subjects, from business modeling, connected issues, marketing, financing, to campaign creation on Kickstarter

• Organizing pitching meetings, which prepare the teams for Demo Day

• Organizing Demo Day, the final event of the programme, where startups present their progress to the investors, media, etc.

• However, my favorite part was working individually with the teams:

• The (almost) weekly session of Office Hours, where we indi-vidually talked to each team about the strategic problems they were facing

• Show and Tell, the weekly meeting where the teams pre-sented their previous week’s progress and the following week’s challenges

• (A little bit of) Competitive Analysis, analysis by strategic investors from an upright angle, etc.

Because our role was not that of giving advice (unless it was explicitly asked for), but that of facilitating the process the startups were going through, the debates that resulted were sometimes of a spectacular refinement. The role of facilitator was a new and extre-mely useful experience, which helped me better understand the decision making processes.

A quality accelerator programme surely has an impact on the teams that attend it, but its quality depends a lot on the mentors and the involved teams. Equally, it is extremely easy for the pro-gramme to be replicated as a structure, but it may not have any kind of consistency from the point of view of the results. Look carefully to whom you are going to meet when you choose the accelerator to apply for!

Bogdan [email protected]

Co-Founder al How to Web

Page 12: TSM_13_2013_en

12 nr. 13/July, 2013 | www.todaysoftmag.com

events

Agile Summer Camp Cluj-Napoca

Agile Summer Camp is an insight into Agile methodologies (such as Scrum, XP, Kanban, Lean, FDD, Crystal, DSDM), that aims to contribute to:

• Build confidence and increase team’s motivation;

• Develop a close relationship to the customer;

• Increase productivity on a regular basis;

• Increase the personal organization.• On time and on budget project

completion;

Florian Ivan’s over 15 years of experi-ence in the software industry makes this event to be quite an experience. Not just theory and frameworks, but real life stories and lessons. See Agile in actions through different scenarios from start-ups to large corporations. All very real, covering topics like:

• Introduction to Agile methodolo-gies and standards• Key Agile methodologies: Scrum,

XP, Kanban, Lean, FDD, Crystal, DSDM• Agile delivery teams: Roles and res-

ponsibilities, Accountability in project teams, Communications and stake-holder management, Leadership and management in Agile projects, Tools

and practices, Information sharing in Agile projects • Project initiation: Project and

portfolio management, Key project indicators, vision and charter • Backlog management: User stories,

Requirement collection techniques, Planning, organizing and prioritiza-tion, Re-prioritization and grooming, Change requests management • Rel e as e/ i ter ati on pl anning :

Agile planning concepts, Estimation techniques, Story points and other esti-mating indicators, Story mapping and product roadmaps, Wireframes and personas • Inside and around the iteration:

Before the iteration, Daily stand-ups, Reviews and retrospectives

A goal of the course is to under-stand and correctly use the tools and Agile practices. One such case is estima-ting the stories in several points. We will discuss why an apple gets to have more points than a cherry and why the road to Bucharest gets more than the one to Sibiu. And of course we will try to understand the concept of task management from a new perspective, namely the one of rela-tive values, and not absolute ones as we

Florian Ivan - SCM AC PMI, PMP, Prince2Practitioner and Microsoft MVP - challenges you to 2 days with and about the most famous Agile practices in the world, a training that promises to make you become truly Agile.

As a must for professionals in software, Agile is an indispensable tool for the deli-very of quality software. Whether the projects relate to product development, software solutions or outsourcing, Agile is widely recognized as a solution that enables the on time delivery at high quality standards, though maintaining the cost constraints.

Diana Tî[email protected]

Coordinator @ TechLeague

Page 13: TSM_13_2013_en

13www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

Agile Summer Camp Cluj-Napoca

were accustomed to until now.Florian Ivan brings a unique view on

how projects should be led. His belief is that through profound education, prag-matic experience and correct attitude we all can achieve far better results.

Florian is the managing partner of Rolf Consulting Germany, a project manage-ment consulting and training company with a strong focus on Agile methodolo-gies. Prior to dedicating himself to training, he worked as a Partner Program Manager for Microsoft Corporation. Before joi-ning Microsoft, Florian was involved in a software start-up specialized in business intelligence and data management.

Agile Summer Camp takes place on 1-2 July in Bucharest and 18-19 July in Cluj-Napoca. The event in Cluj is sponsored by Accesa and organized by TechLeague – the IT professionals‘division created out of passion for technology.

Equally embracing events such as: presentations, trainings, workshops

– mainly dedicated to Microsoft techno-logies- TechLeague is being introduced for the first time to the Cluj audience through the Agile Summer Camp event. TechLeague aims to become the ideal context through which the passion for technology challenges you to discover, to get to know and share methods of techni-cal excellence.

Agile Summer Camp is an event with a limited number of seats. This is why we eagerly expect your registration at:

[email protected][email protected]

For further details please visit us:http://www.rolf-consulting.com/http://www.tech-league.net/

Page 14: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

14 nr. 13/July, 2013 | www.todaysoftmag.com

Transylvania Java User GroupJava technologies community.

Website: http://www.transylvania-jug.org/Started on: 15.05.2008 / Members: 546 / Events: 43

Comunitatea TSMCommunity created around Today Software Magazine.Website: www.facebook.com/todaysoftmagStarted on: 06.02.2012 / Members: 745 / Events: 11

Romanian Testing CommunityTesting dedicated community.Website: http://www.romaniatesting.roStarted on: 10.05.2011 / Members: 626 / Events: 2

GeekMeet RomâniaCommunity dedicated to web technologies.Website: http://geekmeet.ro/Started on: 10.06.2006 / Members: 278 / Events: 17

Cluj.rbRuby community.Website: http://www.meetup.com/cluj-rb/Started on: 25.08.2010 / Members: 139 / Events: 34

The Cluj Napoca Agile Software Meetup GroupCommunity dedicated to Agile development.Website: http://www.agileworks.roStarted on: 04.10.2010 / Members: 326 / Events: 33

Cluj Semantic WEB MeetupCommunity dedicated to semantic technologies.Website: http://www.meetup.com/Cluj-Semantic-WEB/Started on: 08.05.2010 / Members: 144/ Events: 22

Romanian Association for Better SoftwareCommunity dedicated to IT professionals with extensive experi-ence in any technology.Website: http://www.rabs.roStarted on: 10.02.2011 / Members: 226/ Events: 12

Testing campA project that wants to bring together testers.Website: http://tabaradetestare.roStarted on: 15.01.2012 / Members: 227/ Events: 19

I feared there wouldn’t be enough events for the calendar column in August, but I was pleasantly surprised. We begin this month’s series of events with the issue of number 14 TSM, which will take place at the msg systems headquarters in Cluj-Napoca, where we will also host a mini- summer party at the end of presentations. An important event that will take place in Bucharest at the end

of August is Agile Learning Europe (ALE) 2013, which is also TSM’s recommendation for the month of August.

Calendar August 5Launch event of no. 14 TSM (Cluj)www.todaysoftmag.ro

August 7Summer evening on a terrace (Cluj)w w w . m e e t u p . c o m / Ta b a r a - d e - Te s t a r e - C l u j /events/127909542/

August 7Building Startup Communities it-events.ro/events/building-startup-communities-with-brad-feld-and-anca-albu/

August 9International Coworking Day (Cluj)it-events.ro/events/international-coworking-day/

August 17Open Space on Technology in Startups (București)it-events.ro/events/open-space-on-technology-in-startups/

August 18-19Summer school (Macea, Arad)it-events.ro/events/scoala-de-vara-informatica-la-castel/

August 19-24Moodle Moot România 2013 (Brașov)it-events.ro/events/oracle-summer-school-2nd-edition/

August 23-25SummerHacks (Timișoara)it-events.ro/events/summerhacks/

August 28-30ALE 2013 (București) - TSM recommandationale2013.alenetwork.eu

August 29Linked Data Technology Stack (Cluj)www.meetup.com/Cluj-Semantic-WEB/events/115920132/

Thursday/weeklyOpenConnect (Cluj)www.facebook.com/groups/355893314491424/

Wednesday/bi-weeklyOpenCoffee (Cluj)www.facebook.com/opencoffeecluj

IT Communities

communities

Page 15: TSM_13_2013_en

15www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE management

The idea that keeps coming up is that in the competition with the low costs of the employees of other geographic areas (such as, for example, Asia), the solution is to migrate from outsourcing to one’s own products, or, in a less radical process, to change the relati-onship with the clients and turn the status of mere executant (such as it could be induced by the outsourcing model) into a status of consultant (which would turn the IT compa-nies into partners for their customers).

Product Mindset represents a modern and challenging approach based on the idea of developing one’s own product applied in a context that is specific to providing IT ser-vices, by maintaining the main advantages of both directions.

This approach has both advantages and disadvantages and the purpose of this arti-cle is to present in detail the most important ones.

Services oriented companies (CoS) and Product oriented companies (CoP)

Before offering a detailed image of what product mindset would represent for the outsourcing area of the software industry, we will present some definitions.

Product mindset refers to the idea of extracting information about what the clients want from a product without them stating directly or exactly this thing, eventually

developing a product they are happy with. By contrast, services mindset represents

the idea of achieving very well what a certain client wants and specifies. The clients voice the requirements and if these requirements are not well defined, successive questions are asked with the aim of clarifying all aspects.

The main difference between the two approaches is represented by the decisive involvement of the person developing the product to identify the features and define its final form. If the services mindset approach sees the development team as formed by mere (but very good) executants, product mindset sees the development team as a team of consultants for the development of the product, the client and the team becoming, thus, partners.

We will further detail some of the defi-ning aspects of the companies that are services oriented (CoS) as compared to those of product oriented companies (CoP). For each of the two approaches we enumerated those aspects which seemed relevant to the subject of the present article. In the case of CoS, it often happens that a project lasts for several months, after which the members of the project team continue to work (together or not) to totally different projects, that belong to different domains and, why not, using totally different technologies (or the same technology, but different frameworks

According to human resources specialists, IT in Romania is one of the few domains in which the number of available jobs has raised after the beginning of the economical crises and one in which companies compete for the best specialists.

Product Mindset

Dan [email protected]

Director of Delivery@ 3Pillar Global

Page 16: TSM_13_2013_en

16 nr. 13/July, 2013 | www.todaysoftmag.com

managementProduct Mindset

and versions). About 50-60% of the new employees will learn and will make the transition towards new technologies right from the beginning and almost all are likely to change the technology during the employment. In a very high percentage (90%) the candidates for the vacancies in CoS will not be interviewed by the team in which they will work.

By contrast, the applicants in CoP are interviewed much more carefully in order to see if they fit in with the team they will work in, both from the technical point of view as well as from that of personality. Furthermore, during the period of employ-ment they will not change the technology and the team that easily.

CoP generally attach great importance to employee satisfaction and considers that the leave of one of them constitutes an important loss. The experience accu-mulated in time in the development of the companies’ products makes a certain person hard to be replaced. On the other hand, in the case of CoS, the employees leave more often and seldom affect the company significantly. The low impact on the company is due to the fact that most of the times the CoS employees rarely develop expertise at product level, as mere programming knowledge is enough to carry out the tasks. On the other hand, the frequency of these often changes of jobs can be explained to a certain extent by the fact that the employee has the opportunity to work in time on different projects and in different teams within the company (the transition towards another company may seem an ordinary process). The dynamic technological context contributes in its

turn to facilitate the changing of employer. In a CoP there is the possibility to work for a longer period of time on a very particular technology. In this context, the employees are much more interested in remaining and specializing within the company.

In the services oriented companies, the employees are evaluated according to the quantity of work they perform, the res-ponsibilities they assume and the degree of client’s satisfaction. The connection between effort and promotion or remune-ration is, generally, more clear. In the case of product oriented companies, the effort put to achieve the aims of the product is seen as a natural, basic activity. The pro-motion or a more significant leap from the point of view of the salary happens when other activities are performed, activities that are not connected to the natural work activity, such as article writing or keeping professional blogs, putting forth technical presentations within different events, etc.

Consequently, there is also a certain contrast in relation to the title of the posi-tion/ seniority occupied by the employees. The transition from junior programmer to intermediate and then senior programmer is done more quickly and more easily in CoS and it is directly depending on seni-ority. In CoP a person remains on a senior position constantly for a longer period of time and the number of years spent in a domain does not constitute an argument sufficient for promotion. The main argu-ment is that of expertise in the domain in which the employee works.

Parenthetically, we have to mention that the position “earned” by a person in a CoP remains permanent and it strengthens

in time. In CoS, with every new project, the position has to be reconfirmed and the client’s trust in the person that plays a cer-tain role must be re-earned. As opposed to the new projects in CoP, where a person brings along their reputation gained during the previous projects, in CoS everything starts from zero and the client must be per-suaded by the team’s quality as if there were no relevant past behind.

In another train of thoughts, CoS gains contracts before its competitors, by ensuring a quicker delivery of the same quality (and/or lower costs). In many cases, this is materialized in a sustained effort of the team and the completion of the project is celebrated by the team. CoP very rarely delivers the products on their deadline, but most of the times they are richer in features than it was initially planned.

Another interesting paradox is the fact that in CoS the projects are obtained upon proving the employees’ professionalism and the history of references. However, for most of the newly obtained projects, new people will be hired for the project team, people whose professionalism has not been yet proven.

We will not find a company exclusively oriented towards its own products trying to obtain a maturity certificate. Why would it need the certification of an external orga-nization when it is already developing new products on the market? On the other hand, such a certification assures the cli-ents that the products achieved by a CoS are according to certain quality standards.

Financially, the CoS grow linearly along with the increase in the number of projects and the number of employees. However,

www.3pillarglobal.com

3Pillar Global, a product development partner creating software that accelerates speed to market in a content rich world, increasingly connected world.

Our core competencies include:

ProductStrategy

ProductDevelopment

ProductSupport

Our offerings are business focused, they drive real, tangible value.

Page 17: TSM_13_2013_en

17www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

the necessary of capital is low, since the money for the offered services will be received right from the beginning of the project. In CoP, financial growth is accor-ding to the number of clients and outlets for their products and the relation between the profit and the number of employees is much more favorable than in the case of CoS. Moreover, a bigger capital is necessary for the development, promotion and sale of the product. A special budget is allocated to marketing and sale.

In practice we are likely to never encounter one of the two approaches implemented in a pure manner. For each of the mentioned traits we can find valid counterexamples among the companies we see around us. This thing happens, on the one hand, because of the vision that some of the managers of companies have, but also, on the other hand, to some companies’ lack of maturity, which sometimes leads to the implementation of wrong strategies, igno-ring the context. Still, the essential features are maintained in most of the cases and they represent a very good starting point for the debate on product mindset.

Product MindsetOne of the most interesting challenges

is that of bringing together the advantages of the two above mentioned approaches and diminishing the disadvantages that derive from each of them. Their combina-tion refers to introducing elements that are specific to services based project approach into CoP or to the implementation of a pro-duct based approach in CoS. There is also a third type combination, namely that in which we deal with a company oriented on services as well as on products, but this case can be reduced to the preceding cases if we do not take into consideration the depart-ments that manage the products and the services of such a company.

We will focus below on the second type of combination, leaving the other two as subjects for a possible future article.

Product Mindset is a manner of approaching services which implies a signi-ficant value added to the provided services. It offers greater satisfactions to the clients and the gained profit is noticeably enhan-ced. In the case of IT industry, the client’s product or products are “adopted” by the company which implements such a pro-duct mindset and the software companies’ involvement is no longer exclusively cente-red on execution. New roles appear, which double or sometimes even replace the ones

that are naturally included in the client’s responsibilities (such as, for example, the role of product owner).

There are two elements specific to CoS that impose a certain inflexibility in the acti-vity and require special attention when one wishes to implement a product mindset. First of all, there is the team’s reluctance to work with incomplete specifications. Generally, the team expects all the details concerning a feature (or a user story) to be clarified by the client before beginning its development. Arguing that this way they avoid wasting effort on developing and rewriting some parts of the application twice or several times, the project team postpones the development of some essen-tial elements of the application, focusing its effort on a “ping-pong” exchange of emails or clarification meetings which can last forever. Product mindset project approach implies the implementation of features that have not been completely specified by the client. Obviously, this means knowing as well as possible the business domain of the client and at the same time it implies a higher degree of risk. However, this way, the development of important features is no longer impeded, since the client is now much more capable to identify its needs, having an already implemented example.

A second essential issue is represen-ted by the project team’s incapacity to understand and follow through the client’s suggestions regarding the completion of a product or module to the detriment of its quality. A solution that is particular and not generic, flexible and adaptable (but which takes longer to develop), the maintenance of some components written in an “anci-ent” technology instead of rewriting and “updating” them, a partial implementation of some features or the incomplete testing of the product sometimes represent the cli-ents’ explicit requirements in order to force the meeting of some deadlines that are essential to the product’s fate. If they are not made to a team having a product mindset, such suggestions may lead to its members’ frustration and even to the refusal of some of them to continue working on the pro-ject, as they complain about a supposed lack of professionalism. Solving this pro-blem implies effort from both directions: the client has to be willing to share with the project team the elements that relate to the product’s life, but the team also needs to be interested in these aspects and not entirely focused on execution.

A product mindset approach helps

long lasting collaborations between the CoS and their clients, as the latter see the development team as part of their own organization, crediting it with trust and respect. This togetherness, however, may result in an attachment, sometimes exagge-rated, of the team members for the client and its product(s), some of them even con-sidering themselves employees of the client and not of the services company they are part of.

Furthermore, some special attention must be paid to project completion, since such moments can actuate the resignation from the company by many of those who have developed a great attachment to the project.

ConclusionsThe analysis of the implementation

of a product oriented approach in a com-pany whose activity is mainly oriented toward services is far from being an exha-ustive one. However, the tackled aspects are relevant ones, as they influence deci-sively the path and success of a CoS in IT and the advantages of implementing such a combination are obvious. The manner of implementing this combination is, of course, another discussion as it greatly depends on the organizational culture and the internal procedures existing in each and every company.

Page 18: TSM_13_2013_en

18 nr. 13/July, 2013 | www.todaysoftmag.com

programming

Pair Programming helps eliminating the mistakes while the code is produced, fast knowledge dissemination in a team and finding simpler solutions. Continuous Integration helps solving integration issues between components fast and without stress. Continuous refactoring helps kee-ping the code flexibility, so that when the customers ask for unforeseen functionali-ties, the team can add them very fast.

There is though the other side of the coin. Test Driven Development can lead to tests hard to maintain and to abandon them in time. Refactoring is often understood as „iterations” or „periods” of refactoring, that can go up to weeks, sometimes without any result. Trying to do pair programming can be interpreted as lack of trust for the pro-grammers: „someone will be my supervisor while I write code”. Continuous integration can generate a lot of problems when it is applied on projects that have tens of diffe-rent components, resulting in an arguable return of investment.

What specifically makes the diffe-rence between the success examples and the failures? What can lead to a successful adoption?

The answer consists of managing change. Here the coaching part comes into place; in this specific case, because the practices that want to be adopted are uber-technical, we speak about technical coaching.

The adoption of technical practices in an organization

A technical coach is concerned with several important aspects of adopting a practice:

• Identifying the purpose: why do we adopt the particular practice? From a business reason (ex. reducing the release cycle from 12 to 3 months, from 3 months to 2 weeks, continuous delivery, increa-sing the customer satisfaction)? From

an operational reason (ex. Reducing the number of non-billable hours, redu-cing the number of calls to the support team)? Reasons like „I heard about TDD and it’s cool”, “I heard about X practice and it will help us” are not good enough; a coach can help identifying the appro-priate technical practices to reach the objectives of the organization.• Defining an adoption road map.

Usually a pilot project is defined, inside which 2-4 teams will offer themselves volunteer to adopt the practices. The results of the adoption are monitored and discussed continuously with the management.• Identifying and managing the risks.

Some risks are visible from the start (for example the lack of necessary knowledge to write simple unit tests, a release date during the coaching period), but others appear during the adoption.• Working directly, hands-on, on the

production code with the programmer teams.• Mini ad-hoc trainings, when

necessary.• Introducing the communities of

practice, where any person interested can see and try the practices that will be adopted.

The technical coach can be from inside or from outside of the company that wants to adopt TDD, refactoring, or event Extreme Programming. Both approaches have their advantages and disadvantages. The internal coach has the advantage of understanding the structure of the com-pany and the projects, but has usually the disadvantage of being part of the system and so it is harder for them to see some things that need to be changed. And exter-nal coach has some advantages that need to be considered:

• The experience with teams and

We know from the experience of the industry that the techniques promoted by the Software Craftsmanship movement have the potential to increase the productivity of the development teams. Test Driven Development

helps obtaining solutions with better design and more stable in a shorter period of time.

The adoption of Software Craftsmanship

techniques: Technical Coaching

Alexandru [email protected]

Agile Coach and Trainer, with a focus on technical practices@Mozaic Works

Adrian [email protected]

Programmer. Organizational and Technical Trainer and Coach@Mozaic Works

Page 19: TSM_13_2013_en

19www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

different contexts: an experienced tech-nical coach passes through tens of teams and projects, through technologies and diverse solutions. This experience enables them to adapt fast to a new environment.

• The relationships with other con-sultants, technical coaches or elite programmers: part of the technical coach job is teaching and speaking at conferences. A good technical coach creates a network of acquaintances who can answer specific technical questions, helping to solve some difficult problems faster.

• Leadership and communication: a good technical coach must be able, together with the managers, to define a vision that the developers will follow and convincingly circulate.

It is sometimes difficult to under-stand how an external technical coach can become productive very fast in a team with a completely new application. Sounds magic, right? The explanation is in fact sim-ple: the technical coach does not need to understand the business and all the inter-nal details of the application. The product of the coach is the team; the team makes sure they understand the application and the business. The technical coach relies on the solid knowledge about the practices that will be adopted and on architecture, design and code patterns, but also on human interaction to bring the entire team to a higher level of productivity. The coach cannot work without a team, in the same way as the software product cannot be created without a team. Only through tight collaboration with the team, by having discussions, honest and continuous communication, through trust and mutual respect, the coach can help the team adopt a new practice.

The adoption of technical practices on an individual level

Until now we have discussed about adopting one new technical practice inside a company. On the individual level, the things are similar but much simpler.

A motivated programmer that has the necessary conditions can learn alone a new practice. Using individual prac-tice techniques like coding kata or having pet projects is recommended, together with following web resources (ex. http://katacasts.org) and reading two or three recommended books on the subject. Further on, everything resides in the tenacity, willingness and self-motivation.

Attending coding dojos, code retreats or technical conferences is useful to keep the motivation. Pair programming with chosen people is another way that can be applied to continue learning.

Not all the developers, though, have the will and the necessary self-motivation to sustain this process. For them, a techni-cal coach is one of the means to reach their purpose of learning a new practice by:

• Identifying the strong points and the points that can be improved. For exam-ple, he/she understands code very fast, but writes very complicated unit tests.

• Determining the aim for the next 3-4 months. For example simplifying the unit tests.

• Defining a learning plan made up of: reading books, writing code that is revised by the coach, pair-programming sessions, etc.

• Following the learning plan. The coach makes sure the programmer keeps the promises and helps them eliminate the blockages that appear during the learning process.

On the individual level, the coaching activities are very similar with those of mentorship or with the craftsman – master relationship. A technical coach helps you to identify and reduce the impediments more than a traditional mentor. The typical impediment declared by the programmers is the lack of learning time, that can be easily solved by short learning sessions each day (30-45’ per day), better planning or more intense but less frequent sessions (ex. pair-programming, coding dojos or code retreats).

It is worth explaining the role of pair-programming during the learning process, because it is fuzzy sometimes. Pair-programming can be used in production, with the purpose of learning the project and to prevent coding mistakes. In the context of adopting a practice, pair-programming can be used as a means by which the tech-nical coach passes the knowledge related to a certain practice (for example Test Driven Development) to the programmer. To apply pair-programming in production, an adop-tion period is needed as well, and adopting pair-programming is done by pairing ses-sion between two programmers under the supervision of the technical coach. While the programmers focus on solving the pro-blem they work for, the coach will focus on the interaction between the two and on eliminating the communication problems and the inefficient discussions. So there is a major difference between adopting

pair-programming, using the technique in production and learning other techniques by using pair-programming. The technical coach needs to master very well the pairing techniques in order to succeed in sending the necessary information even to those programmers that have never done pair-programming, but want to learn one of the techniques described above.

ConclusionIn conclusion, a technical coach mana-

ges the adoption process of one or more technical practices on individual, team or 2-4 teams level. The expertise of a techni-cal coach can make the difference between success and failure when a company or a programmer wishes to adopt practices like unit testing, TDD, incremental refactoring, improving design, minimizing the issues for existing code that is hard to understand, etc.

The coach can be internal or external to the organization. The advantage of an internal coach is that they are familiar with the organizational context and applicati-ons, but has the disadvantage of limited experience and belonging to the system. An external coach has the advantage of being part of tens of projects with different constraints and needs and can look at the organization with a fresh view, outside of the system. The external coach needs to understand just briefly the business needs of the application and trusts the team with the specific details of the project. The pro-duct of the technical coach is the team; a team that learns new techniques, that they can apply directly in production with trust, succeeding in the same time to reach their business objectives. The tight collaboration between the technical coach and the team, based on mutual respect, communication and honesty is the main success factor of the adoption. After the initial coaching period, the team has the necessary means to continue the learning, the coach having only a support role (“the voice of the conscience”).

So think what you miss every time when you are saying you do not have enough time to adopt a certain practice. Maybe you lose customers, opportunities, innovative potential, a better job. A tech-nical coach can help you decide which practice is useful in the context of your business and your existing applications and can help you adopt the practices that will help you reach your potential.

Page 20: TSM_13_2013_en

20 nr. 13/July, 2013 | www.todaysoftmag.com

Some of the advatages of useing Message Service are listed below:

• Integrating heterogeneous platforms, for example ActiveMQ platforms and IBM WebSphere MQ, but also non-Java clients such as those developed in C and C + +

• Hybrid architectures, which are a combination of centralized and decen-tralized architectures

• Patterns of messages, point to point and publish-and-sub-scribe. This means that a message is addressed either to a single pro-ducer consumer or to a group of consumers

The development of messaging ser vice had many milestones during the last 10 years. The emer-gence of new techniques and technologies such as Message Driven Bean (MDB), Spring messaging framework, Event Driven Architecture, Ser vice-Oriented Architecture, RESTful JMS interfaces and Enterprise Service Bus (ESB) are just some of the important marks in this development.

The Message Service is managed by an API, now

in version 1.1. This is actually the second version of the specifications, after the initial 1.0 version. Java Enterprise Platform, 7th version, which is close to being officially launched, brings a new version of JMS spe-cifications: 2.0. Improvements are plentiful, most of them on the simplification of the code and adjustments to new technology developments (sending messages asyn-chronously, introducing factory, etc.)

Java Messaging Service and associated architectures are an alternative to traditional communication methods and associated architectures such as RPC and distributed systems. The level of trust, flexibility, extensibility and modularity of an application

are much higher when using these architectures instead of the classic ways, previously mentioned.

Book review:Java Message Service

by Mark Richards, Richard Mon-

son-Haefel and David A. Chappell

Silviu [email protected]

Java consultant@ .msg systems Romania

programming business

Page 21: TSM_13_2013_en

21www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

The book which I submit for review this edition of TSM, Java Message Service, second edition, having Mark Richards, Richard Monson-Haefel and David A. Chappell as authors, represents a complete guide for using messages and architectures based on these messages.

Divided into 11 chapters, the book presents step by step aspects related to achieving performance when using Java Message Service.

If the first chapter approaches general aspects of messages, such as considerations and parallel with other architectures, in chapters two, three, four and five the authors present everything that a beginner should know about this architecture. The structure of a message consists of three major parts: headers, properties and types of messages. Then, using point-to-point and publish-and-subscribe messaging are described with discussions on possible methods of implementation. Each of these chapters is fully illus-trated with strong examples. From a classic chat application up to a loan and lenders application, all emphasize the theoretical aspects presented in the book.

Section 6 covers the message filtering aspect. Filtration of a queue or a topic in the message is made using message selec-tors. Message selectors apply to message consumers. Consumers will receive only those messages that meet the filter conditions. Selectors will use properties and message headers to test condi-tional expressions of filters. The chapter concludes with aspects regarding the design of applications that use filters.

The seventh chapter is divided into two related subparts, the first one is about how to verify messages, and thus the con-sumption of messages and the second one is associated with transactions. JMS transactions are determined by the different perspective that producers and consumers have upon a message. The producer has a contract with the messaging server that ensu-res that the message will be delivered to the server. The server has a contract with the consumer which ensures that the message will be delivered to him. The two operations are distinct, which is an indisputable benefit for asynchronous messaging. Transactions follow this separation of send and receive operations, but it groups messages which means that either they get all or none to the ser-ver. JMS transactions, although similar to JTA (Java Transaction API) are managed by the messaging provider.

Chapter eight presents a major step forward in the optimal management of this architecture: Message-Driven Beans (MDB). MDB’s are logical components that are automatically instantiated by the container and which waits and consumes messages from various producers. The advantages are significant for the entire life cycle is managed by the container and the asynchronous processes receive a considerable support. The chapter concludes with best practices for using MDB, which is facade pattern.

Chapter nine presents the support provided by Spring for developing applications based on JMS.

Chapter ten is focused on resources used by the JMS architectures.

The last chapter is based on messaging design with specific discussions related to internal or external destinations, messaging request/reply design, anti-patterns in the messaging design.

The book includes four appendix related to JMS API, message headers, message properties, installation and configuration of ActiveMQ’s.

In my opinion, the messaging service offered by Java is not used, probably because it is not known enough, at its true poten-tial. The major advantages highlighted at the beginning of this

review together with the improvements brought by version 2.0, makes this service worth a lot more interest than the current one. I think that, at a backend level, regarding asynchronous commu-nication, JMS and MDB are excellent solutions.

As always, I look forward to discussion related to the topic of the book.

Enjoy the reading,Silviu DumitrescuJava Consultant msg systems Romania

business

Page 22: TSM_13_2013_en

22 nr. 13/July, 2013 | www.todaysoftmag.com

TCP and HTTPCommunication protocols allow long

debates and discussions. In short, there is a protocol that defines communication between systems called TCP, and a protocol built upon that defining the communi-cation between a web client and a web server, called HTTP. HTTP implements TCP communication but adds web speci-fic features: a client calls for a web page, the server gives a response after which the communication is considered closed. For new information from the server, the client has to make a new call.

HT TP implements the s imple and efficient communication between an application and a server offered by TCP, guaranteeing the destination of its received messages – but also limits the server to a single response. This kind of

communication is useful for applications, but is far from being enough. The server is not allowed to send messages to the clients by itself. Any message coming from the server must be asked for by the client. If the server receives another useful information later, for example some data updates which the client has just asked earlier, it cannot deliver them until the client makes a new request.

From acceptable solutions to pluginsOver the years, many attempts have

been made to bypass this case. Meanwhile the web applications got more and more complex, defined new tendencies and finally became compulsory for the majority of companies. The AJAX revolution crea-ted the illusion of a permanent connection between the server and the clients. Other

HTML5: Web Sockets

If we think of the most important influence any protocol had over computer commu-nications, it has to be HTTP. This protocol made possible the web we use daily which itself spawned revolution after revolution in these last years. The first web pages were

mostly static, few having modest multimedia content. But after a while, complex applica-tions started to emerge prompting developers to hunt and discover the new possibilities as well as the limits of the Internet at that time.

programming

Radu [email protected]

Senior Software Developer@ Small Footprint

Page 23: TSM_13_2013_en

23www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

HTML5: Web Sockets

attempts were made to force the HTTP protocol to emulate a permanent connecti-vity – but to no avail. A somewhat drastic solution were plugins which simply opened a new TCP port and forwarded messages there. Flash and Silverlight are probably the best known examples. Permanent commu-nication with minimum lag seemed to need unpractical solutions competing with the rewriting of the whole HTTP protocol.

The solution? As HTTP is not a stan-dalone protocol but works over TCP, if the browser could interpret that protocol it could permanently connect to a server to communicate without interruption. HTML5 defines a specification allowing just that: the interpretation of a communi-cation protocol similar to TCP in a browser.

Upgrade to WebSocketsThe implementation is also smart: the

browser request a web page using HTTP, but the page is then able to change the con-nection to WebSockets:var connection = new WebSocket(‘ws://site.org/echo’, [‘soap’, ‘xmpp’]);

connection.onopen = function () { connection.send(‚Ping’); };

connection.onerror = function (error) { console.log(‚Error: ‚ + error); };

connection.onmessage = function (e){ console.log(‚Server: ‚ + e.data); };

We can see above the page initiali-zing the websocket communication and setting up handlers for the connection events. When the connection opens, a Ping message is sent to the server. In case of communication errors, they are logged in the browser console. If the server sends a message to a client, it will also be logged in the console. Of course, any other instruc-tion may be executed at each point.

By running the above code, no TCP port will be opened. The existing HTTP connection will simply receive an upgrade request, switching to a different commu-nication protocol. The protocol used will not be HTTP anymore, but WebSocket – running over TCP.

In order to send messages, the server must also implement the WebSocket spe-cifications. There are many libraries for the main programming languages and plat-forms which implement WebSocket.

Also we can send binary messages:var img = canvas_context.getImageData(0, 0, 400, 320);

var binary = new Uint8Array(img.data.length);

for (var i = 0; i < img.data.length; i++) binary[i] = img.data[i];connection.send(binary.buffer);

Or files:var file = document.querySelector(‘input[type=”file”]’).files[0];

connection.send(file);

TCP and HTTP differencesWebSocket switches the HTTP con-

nection in a new one, similar with TCP. The resulting protocol is not raw TCP, but an upgraded version of it. WebSockets imple-ments full duplex communication with the remark that the messages are not byte streams, but text streams (of course, binary data may also be sent).

The HTTP message sent to initiate the new communication method is the followingGET /mychat HTTP/1.1Host: server.example.comUpgrade: websocketConnection: UpgradeSec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==Sec-WebSocket-Protocol: chatSec-WebSocket-Version: 13Origin: http://example.com

To which the server responds with:HTTP/1.1 101 Switching ProtocolsUpgrade: websocketConnection: UpgradeSec-WebSocket-Accept: HSmMlYUkAGmm5OPpG2HaGWk=Sec-WebSocket-Protocol: chat

The exchange is identical with the protocol upgrade from HTTP to HTTPS. The HTTP message allows the servers to receive both HTTP and WebSockets connections on the same port, but the WebSockets upgrade involves protocol-specific messages.

Once the connection is done, the client and the server may exchange information in full-duplex. The data contains minimal overhead, basically having a small hea-der followed by the message itself. Sent WebSocket data is called a message and a single message may be split among many communication pages sent separately (just like TCP). This allows messages with unknown size to be sent – the message is paginated, the last page being marked with a special end flag.

Proxy traversalThe WebSocket implementations will

try to detect if the browser uses a proxy when connecting to a destination. If a proxy is detected, the client will use HTTP

CONNECT to create a persistent tunnel. Although the WebSocket protocol is

not aware of any proxy and firewall, it uses an HTTP compatible handshake allowing servers to grant access to HTTP and HTTPS ports (80 and 443). WebSockets defines the ws:// and wss:// prefixes, indi-cating the type of required connection: simple or encrypted. Both use the same upgrade mechanism described before.

Of course, the proxy will have the final decision to allow WebSocket traffic or not. The main thing is the protocol does not require new ports to be opened nor the composition of complex messages, outside of the regular HTTP standard. Also, the protocol does not require any supplemen-tary configuration to the existing firewalls – if the HTTP port is open, the WebSockets communication will work alongside HTTP.

WebSockets cu Node.JS We have seen how simple WebSocket

communication is initiated from the cli-ent using JavaScript. Well the server part is simple as well. Internet Information services requires version 8 together with further Windows configurations to allow the new protocol to work, but for brevity we will demonstrate a WebSockets server using Node.JS – and again, JavaScript:var WebSocketServer = require(‚websocket’).server;var http = require(‚http’);var clients = [];

var server = http.createServer(function(request, response) {

// aici se procesează cererile HTTP// dacă implementăm un server pur WebSocket, nu // trebuie să scriem nimic aici

});server.listen(1337, function() { });

// inițializăm serverul WebSocketvar wsServer = new WebSocketServer({ httpServer: server });

wsServer.on(‘request’, function(request) {var connection = request.accept(null, request.origin);

// mesajele primite de la client vor fi // procesate aiciconnection.on(‚message’, function(message) {if (message.type === ‚utf8’) {connection.sendUTF(‚Hello’);

// trimite înapoi un mesaj la client

clients.push(connection);

// rețin clientul}});

connection.on(‚close’, function(connection) {

for (var i = 0; i < clients.length; i++) clients[i].sendUTF(‚someone left’);});});

Basically the work model is similar to the Observer pattern: a list of subscribers is stored. When the server has a message to publish, the message is sent to each mem-ber of the list.

Requirements and restrictions

Page 24: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

24 nr. 13/July, 2013 | www.todaysoftmag.com

As we have seen, WebSockets is more than an HTML5 API. The client communication instructions are standardized in the HTML5 specification – but the protocol must also be implemen-ted on the server. The server part is specified in RFC 6455.

So WebSockets communication requires a browser which supports the protocol but also a server which implements it. Currently all mainstream HTTP servers have been updated to support WebSockets: IIS 8, Apache, LightHTTPD and of course Node.JS which can build compatible web servers. Still, the main restriction comes from previous versions of IIS – IIS 8 is available only in Windows 8.

As of browsers, again, all mainstream browsers allow WebSocket communication – but for companies requiring Internet Explorer, the only compatible version is Internet Explorer 10, available again only in Windows 8.

Resources and references• http://www.html5rocks.com/en/tutorials/websockets/basics/• http://www.websocket.org/• https://developer.mozilla.org/en/docs/WebSockets• http://tools.ietf.org/html/rfc6455

HTML5: Web Sockets

programming

Page 25: TSM_13_2013_en

25www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE HR

Step 1: Paricipants needs assessment. The easiest method is to use a survey. The most interesting part is to define the proper questi-ons to find the right information. The answers are interpreted, and based on that the objec-tives of the team-building are defined. On the other side, there are also other methods that could be used: the structured interviews who have clead criteria defined. Depending on the number of the team members, more than one tool could be used.

Step 2: Define the objectives. In order to have an impact on the development of the participants, the objectives should be SMART (S=Simple, M=Measurable, A=Achievable, R=Realistic, T=Timeline).

Step 3 : Define the development blocks. The role of these blocks is to encompass more than one activity. In order to have a clear understanding of the concept of develop-ment block, I will give an example : one block could be : develop communication skills in the team.

Step 4 : Define the activities. For each block it is necessary to define the purpose and objective of each activity.

Step 5 : Define the timeline needed for every activity. Based on the objectives set, every activity should have a timeline defined.

Step 6 : Identify the proper trainers. It is a complex process, because it is necessary to have a well prepared and capable trainers or company team.

Step 7: Prepare the team-building based on step 2. Each activity defined in the team-building program should have a session outline that should be used by the trainer.

Step 8: Coordinate the activities during the team-building, for a better time schedule and for a better communication.

In the second part of the article I will pre-sent 2 activities that you can use for a better team consolidation.

Team building (I)

Many companies are organizing in this period team building activities and managers are talking about what kind of activities are suitable to be used during these events. My purpose in this article is on a more practical approach. I don’t want to insist on

defining the concept of team building because people are already used with it, but I would like to mention 7 steps related to how to organize team building activities.

Andreea Pâ[email protected] at Endava

Page 26: TSM_13_2013_en

26 nr. 13/July, 2013 | www.todaysoftmag.com

Activity 1

Timelime 5 minutes/ participant

Total: Activity name  RULMENTULTeams 4 teams (10 members/ team – maximum) Location Indoor / outdoorMaterials One flipchart with the following questions :

1. Your craziest dream ?

2. Your craziest/ funny activity in your childhood ?

3. The most interesting place you ‘ve visited ?

4. The most wanted place where you would like to go ?

These are 4 questions defined for a personal interaction between the participants.

To be mentioned : these questions are only a suggestion, but they could be defined based on the group.

Obiectives Get to know the other members of the team Obiectives Team members are splitted in circles and every participant has 5 minutes to

answer to these 4 questions. Materials An A4 with the questions for every participant

It is recommended that the get to know each other activities to be deployed in the first part of team-building programme. The better the participants know each other, the easiest the interaction is between them and conflict resolution approach will be more personal.

It is worth mentioning that these activities of knowing each other should not to exceed more than 30% of the total time spent on team-building.

Team building (I)

HR

Page 27: TSM_13_2013_en

27www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

Activity 2

Timelime teams/ 20 minutes + debriefing 30 minutes (maximum 10 persons in a team).

Total: Activity name TURNURILE GENERAȚIEI Teams TeamsLocation Outdoor/indoorMaterials A4 with the rules for the facilitators of the teams created. The role of a facilitator is to

observ every team and to write down the most important things happening during the activity played. These will be used in the debriefing part.

Obiectives Planning the activities

Organizational communication

Responsibility and accountability

Feedback

Conflict management Description The team is splitted in smaller groups (not more than 10 persons/ group). Every group

will start the construction of one tower with a minim 2.5 meters height who needs to support a tennis ball.

After 20 minutes the teams change the places and they have to continue to work on the tower of the other team.

After another 20 minutes the teams change places again until they will reach the first tower they started to build.

Debriefing How it is to depend on others work?

Why it is important to have written plans?

Who does seem the initial vision with the final tower?

What would you do better?

Did you choose to continue the work of the others or you decided to destroy everything?

How did you prepare the working environment for the others?Materials String, cartoons, PETs,paper, tennis ball, scissors, scotch

Activities to improve communication skills, the ability to work in teams and to achieve a common goal and gaining the confidence of others are particularly relevant as the debrifing is more detailed and personalized on how the team is involved in the games and how everybody reacted during the task solving. The debriefing is necessary to always have some clear conclusions jointly agreed by the team members to see the relevance of the work undertaken in daily work.

The purpose of the following article will be to continue this series and have other activities.

Good luck and have fun!

Page 28: TSM_13_2013_en

28 nr. 13/July, 2013 | www.todaysoftmag.com

HR

TOWARDS an IT COMMUNITY

– via HR (2)

Dacă în articolul anterior, apărut în nr. 11 TSM, am surprins factorii ce au favori-zat evoluția firmelor ce a folosit firmelor de IT ca să crească în anii din urmă și ce prac-tici de conducere au fost mai apreciate, în întâlnirea din 11 iunie, de la sediul firmei Danis, am abordat câteva dintre cele mai actuale preocupări ale firmelor de IT în sfera managementului resurselor umane. Acest demers a fost facilitat de prezenţa reprezentanţilor HR-ului din următoarele firme cu sediul în Cluj: AROBS, IQUEST, FORTECH, RECOGNOS, cărora le mulţu-mim pentru dedicaţie și interes onest!

Cu ce probleme se confruntă HR-ul din IT acum, în Cluj?

Vrem să specificăm de la început că este mai mult decât evident pentru toţi că MAREA PROBLEMĂ cu care se confruntă HR-ul din IT-ul clujean este aducerea și reţinerea oamenilor în companii. Acest proces a devenit ca un fel de „obsesie” și o abilitate-cheie a unui om de HR aflat într-o companie de IT. În același timp, este și un subiect devenit oarecum „tabu” tocmai pentru că recrutarea de oameni este atât de dificilă. Noi NU am abordat acest subiect în discuţiile noastre pentru că este oare-cum saturat și, credem noi, aproape inutil să o facem: nu este cum să găsești metode noi să aduci oameni (și fără să-i „furi” de la alte companii…) dacă nu ai numărul de

oameni necesari pe piaţă. Diferenţa între cererea firmelor de IT și numărul de anga-jaţi disponibili pe piaţă este atât de mare încât credem că, în acest punct al pro-iectului nostru – discuţii despre practici de succes în resurse umane – ar fi inutil să discutăm despre strategii eficiente de recrutare… Poate va reapărea subiectul pe tapet atunci când vom aborda idei legate de o comunitate matură de profesioniști IT aici în Cluj…

Dar, până atunci… Subiectele abordate în acest al doi-

lea workshop s-au bazat și pe sugestiile participanţilor și dezbaterile din cadrul discuţiilor panel realizate în cadrul lansă-rii TSM nr. 11. Principalele idei de practici pe care vi le vom prezenta în continuare se pot structura în două mari categorii:

1. Procesul de dezvoltare a angajaţi-lor din companiile de IT cu referire la particularităţi ale modului de abordare a propriei dezvoltări, tehnici de atragere a oamenilor în astfel de acţiuni, provo-cări oferite de angajaţii din IT faţă de alţi angajaţi din alte arii profesionale;

2. Modalităţi de construire şi menţi-nere a echipelor de lucru performante în domeniul IT vizâmd practici pentru atingerea rapidă a gradului de maturi-tate și, implicit, a rezultatelor; depășirea provocărilor legate de fluctuaţia mare;

Revenim cu al doilea articol care sintetizează părerile unor reprezentanţi HR din firme IT clujene de marcă, reuniţi în al doilea workshop din cele patru pe care ni le-am propus în anul 2013. Dorim să identificăm practici din sfera resurselor

umane, trecute și prezente, posibil utile pentru procesul de constituire a unei comuni-tăţi mature de IT în zona Clujului. Ne-ar plăcea ca acest demers să fie urmat și de alte „bresle” profesionale din regiune. Deocamdată credem că industria IT, fiind „pe val”, se poate constitui într-un veritabil model de succes, care să seteze standarde de muncă și pentru alţii (venituri decente, mediu de lucru incitant, șefi apropiaţi oamenilor). Dar pentru asta mai este puţin de lucru!

Dan [email protected]

Executiv director@ Danis Consulting

Cristina [email protected]

Consultant@ Danis Consulting

Page 29: TSM_13_2013_en

29www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

Ideile și părerile împărtășite în cadrul acestui articol pot fi utile oricărui manager/specialist de Resurse Umane dintr-o com-panie de IT, precum și oricărui lider (de la nivele de top, până la cel de team-leader) care își asumă cu adevărat răspunderea pentru creșterea performanţei oamenilor pe care îi organizează. Dacă sunt noi pen-tru dumneavoastră, vă invităm cu drag să le aplicaţi în propriile dumneavoastră orga-nizaţii. Dacă aţi utilizat deja unele practici similare sau altele eficiente, am fi încântaţi să le dezbatem în cadrul discuţiilor panel din cadrul lansării actualului număr TSM – la care vă invităm să participaţi.

Să le luăm pe rând!

Procesul de dezvoltare a angajaţilor din companiile de IT

De ce este o provocare pentru HR dezvoltarea angajaţilor din IT? Cel puţin din două motive: 1) sunt oameni tehnici, logici, raţionali care au nevoie de chestiuni practice – de aceea formele de învăţare la care participă trebuie să fie de foarte bună calitate; 2) Oamenii din industria IT-ului se află într-un context privilegiat, pozitiv: au de regulă, foarte devreme, poziţii bune, sunt „hrăniţi emoţional” bine la locul de muncă (este satisfăcător în ceea ce privește beneficiile de toate felurile), sunt oameni implicaţi în proiecte tari – toate acestea reprezintă un set de avantaje, dar în același timp pot reprezenta și o capcană a auto-suficienţei care poate împiedica pe unii reprezentanţi ai domeniului să mai aibă motivaţia internă de a se dezvolta, consi-derându-se deja suficient de buni. Aceste provocări au fost surmontate în mare măsură în companiile prezente la work-shop printr-un set de practici menite să crească gradul de determinare, implicare și dorinţă reală a angajaţilor din IT pentru propria lor dezvoltare.

Tendinţa spre a opune rezistenţă în faţa propunerilor de dezvoltare venite din partea companiei, a HR-ului sau a mana-gerilor se pare că este mai mare în cazul angajaţilor din IT decât din alte domenii. Oamenii din IT sunt oameni inteligenţi și mult mai independenţi decât cei formaţi în alte profesii / companii. Ca atare, orice formă de impunere – chiar și blândă – nu funcţionează!

De aceea, pentru ca acţiunile de dez-voltare (cursuri, programe, conferinţe etc.) să aibă rezultate, oamenii trebuie implicaţi în procesul de decizie. Acest lucru se poate face prin mai multe căi. Monica David de la AROBS susţine ideea utilizării survey-urilor interne pentru a evalua nevoile și

interesele angajaţilor pentru dezvoltare, care sunt ariile de îmbunătăţire dorite, cine sunt persoanele care doresc să se implice în acţiuni de învăţare și dezvol-tare. „Dacă omul nu simte din interior nevoia de dezvoltare, degeaba!”. Şi cele-lalte companii prezente la discuţii susţin ideea folosirii formelor de analiză și eva-luare a nevoilor de dezvoltare / training în companii – periodice, sau legate de siste-mele interne de evaluare a performanţelor. Prin aceste survey-uri poţi face și compa-raţii între ceea ce doresc oamenii și ceea ce doresc managerii lor (pentru oameni) în termeni de nevoi de învăţare. Acolo unde sunt discrepanţe se poate analiza în detaliu de unde provine acea discrepanţă – unde se întrerupe comunicarea directă între manager și angajat, foarte impor-tantă în cadrul echipelor din IT. Însă, de regulă, cei prezenţi la întâlnire ne-au spus că nu au observat mari discrepanţe între aceste două tipuri de percepţii: IT-iștii și managerii lor aveau cam aceleași tipuri de păreri despre obiectivele de dezvoltare necesare – în Fortech, de exemplu. După sondarea tuturor acestor opinii, este mult mai sănătos să organizezi orice formă de training / dezvoltare bazându-te pe rezul-tatele survey-ului – tendinţa de respingere va fi mult mai mică. Aceste survey-uri îţi pot oferi informaţii valoroase, dar uneori generice: poţi afla „chunk-uri” mari (= categorii mari de domenii de dezvoltare), pattern-uri dorite în organizaţii (susţine Răzvan Voica), nu însă și nevoi punctuale, personalizate.

De aceea, o cale de conștientizare și implicare în stabilirea în detaliu a nevoilor de dezvoltare – complementară survey-ului poate fi sistemul de management al performanţei dintr-o organizaţie. În iQuest de exemplu, sistemul – pomenit și în arti-colul anterior – de „career management” este din start prevăzut și cu obiectivul de a ajuta la dezvoltarea angajaţilor, nu doar de a evalua performanţele. Astfel, se pot obţine informaţii și conștientizări despre nevoi de dezvoltare „la cald”, deoarece managerul care conduce discuţii lunare cu angajaţii este ca și un coach pentru aceștia, oferindu-le suport și ghidare în dezvoltare lor. De asemenea, atunci când, cel puţin o dată pe an, fiecare angajat are și ocazia unei evaluări de tip 360grade, cresc șansele ca nevoile de dezvoltare reale să fie acceptate de cel care beneficiază de un feedback atât de complex.

În cazul tuturor acestor sugestii de abordare a procesului de dezvoltare și de alcătuire a planului de training-uri într-o

companie de IT, principiul central este cel al transparenţei – valorizat explicit și în Fortech. Oamenii din IT – poate mai mult decât în alte industrii – au nevoie de cla-ritate și argumente, „trebuie să ştie de ce au fost selectaţi pentru un curs” pentru a obţine angajamentul lor real în procesul de dezvoltare (Alexandra Bayer).

Tendinţa oamenilor din IT de a res-pinge o formă de dezvoltare este și mai accentuată în cazul domeniului de „soft-skills”. Este ușor de înţeles de ce: IT-iștii sunt oameni tehnici care operează ușor cu informaţii exacte și cu calculatoare. Atunci când vine vorba de relaţionare interumană, comunicare interpersonală, informaţii extrem de variate legate de natura umană – lucrurile nu mai sunt așa exacte și oame-nii din HR se confruntă cu o provocare suplimentară în a „vinde” nevoia de dez-voltare și pe această arie. În acest caz, cele mai de succes strategii sunt discuţiile cât mai apropiate, repetate cu oamenii despre importanţa acestor abilităţi în muncă, în lucrul în echipe și în relaţionarea cu cli-enţii. Cele mai de impact mesaje însă nu vor fi neapărat cele care vin de la HR, ci vor fi cele care vin de la persoane recunos-cute, apreciate în acea organizaţie (în mod oarecum ciudat, aceste persoane sunt recu-noscute pentru competenţelor lor tehnice și de business, competenţe „hard”). Cu alte cuvinte: oamenii din IT vor crede că soft-skills-urile sunt importante, dacă cei mai competenţi dintre ei pe hard-skills-uri le vor spune acest lucru! Practic, dacă lide-rii competenţi din organizaţie vor practica și „propovădui” învăţarea și pe partea de relaţionare interumană, comunicare, lucru în echipă, atunci angajaţii din acea compa-nie vor accepta mult mai ușor să participe la astfel de forme de dezvoltare.

Legat de folosirea de forme de dezvol-tare inteligente pentru oamenii inteligenţi din IT, Monica David, de exemplu, sus-ţine clar ideea că training-ul / conferinţa / workshop-ul la care participă un angajat din IT trebuie să aibă o componentă direct aplicativă care să dea rezultate imediate – altfel, IT-iștii vor semnala imediat inu-tilitatea. Răzvan Voica și Cosmin Molnar din iQuest susţin această idee și ne-au împărtășit experienţa din compania lor din ultimii ani când au început să caute forme de dezvoltare cât mai valoroase și care să poate fi absorbite cât mai natural în organi-zaţie. Practicile care s-au dovedit de succes au fost pe de-o parte, aducerea de furni-zori / traineri cu renume (a căror calitate nu mai era necesar să fie testată, fiind recu-noscuţi pentru aceasta) și, pe de altă parte,

HR

Page 30: TSM_13_2013_en

30 nr. 13/July, 2013 | www.todaysoftmag.com

conceperea unor programe de dezvoltare de mai lungă durată. Training-urile simple au fost completate cu sesiuni de follow-up la câteva săptămâni sau luni de zile care cresc probabilitatea ca lucrurile discutate în training să fie aplicate / reamintite și să determine rezultate concrete. Şi acest lucru este valabil mai ales în cazul soft-skills-uri-lor care au nevoie de timp pentru a se vedea rezultate palpabile.

În Recognos, până în prezent, s-a aplicat mai mult tehnica training-urilor interne care sunt foarte bine primite în rândul angajaţilor, săptămânal adunând un număr mare de developeri, atât juniori, cât și seniori. Continuitatea acestor sesiuni de training arată interesul real de a acu-mula și a învăţa tehnologii și tendinţe noi în acest domeniu care este într-o continuă schimbare.

Modalităţi de construire şi menţinere a echipelor de lucru performante

Lucrul în echipe este cea mai uzuală modalitate de organizare în companiile de IT. Mai mult decât atât, constituirea echipelor este de cele mai multe ori o pro-vocare pentru HR-i și liderii de echipă, deoarece echipa trebuie să obţină rezultate și să lucreze bine împreună rapid, chiar dacă e proaspăt formată. Timpul scurt în care trebuie să atingă performanţe este clar o particularitate în domeniul IT. În plus, gradul de fluctuaţie și dinamica într-o echipă din domeniul IT – cel puţin pe piaţa Clujului – poate fi foarte mare. Oameni noi pot intra în echipe frecvent, ceea ce aduce aproape întotdeauna echipa la o nevoie de readaptare permanentă.

De aceea, am dezbătut împreună cu participanţii la acest workshop cum se poate depăși această provocare pentru echipele din IT.

O echipă performantă și matură în IT este o echipă care obţine rezultate în primul rând, dar care și lucrează bine împreună; este o echipă care reflectă cultura compa-niei din care face parte și este compusă din toată diversitatea de roluri și personalităţi necesare. Ai și oameni creativi, dar și per-soane bune executante și finalizatori; există și buni organizatori, și buni comunicatori etc. . De asemenea, o echipă sănătoasă este o echipă care are un mecanism natural de „auto-curăţare”, prin care membrii care nu se potrivesc culturii și stilului de lucru în echipă pot ieși din echipă atunci când performanţa lor devine o piedică pentru întreaga echipă. Acest mecanism este important pentru ca activitatea echipei să

nu se blocheze.Cosmin Molnar de la iQuest consideră

că cea mai eficientă metodă de constituire a unei echipe performante în IT este alcă-tuirea ei dintr-un mix bine ponderat de seniori (sau mai vechi în companie), mid-level developeri/ testeri și juniori. Procentul poate fi diferit în funcţie și de ceea ce îţi poţi permite ca alocare de resurse, însă prezența celor mai experimentaţi este vitală din cel puţin două puncte de vedere: 1) competen-ţele tehnice ale membrilor seniori se pot transfera mai rapid, prin mentorat, celor juniori; 2) oamenii cu mai multă vechime din companie pot asigura o infuzie rapidă de modalitate de lucru acceptată și valo-rizată în companie – o infuzie de cultură, de fapt. Prezenţa seniorităţii într-o echipă nouă are avantajul recunoașterii din partea celorlalţi membri care vor urma track-ul gândit de seniori, făcând mai rapidă obţi-nerea de rezultate bune.

Această soluţie a fost susţinută și de ceilalţi participanţi la workshop, Alexandra Bayer adăugând faptul că, din experienţa Fortech-ului nu a fost nevoie de un procent prea mare de seniori, ajungând câteva per-soane mai vechi la o echipă de angajaţi noi. De asemenea, ea a accentuat importanţa procesului de „on-boarding” / inducţie a noilor veniţi într-o echipă deja formată. Acest proces este foarte important să fie făcut rapid, eficient și să conţină atât ele-mente tehnice cât și de conduită a muncii. Pe anumite proiecte mari, de lungă durată, în Fortech s-au realizat video-tutoriale care erau obligatoriu de parcurs de noii veniţi în acele echipe și care ajutau mult procesul de eficientizare a echipei.

În cazurile de constituire a unei echipe total nouă, cu oameni noi și în care nu există posibilitatea de a folosi resurse umane mai vechi din companie (de ex., o filială a companiei în alt oraș, sau o echipă pentru un client / produs total nou), priori-tatea celor de la Resurse Umane, împreună cu managementul companiei ar trebui să fie infuzia de cultură organizaţională. Acest lucru se poate face prin diverse sisteme de tipul „tutorilor”, „buddy system”, „mentor” în care fiecare nou angajat este preluat de un angajat mai vechi (din altă echipă) pen-tru a-l ajuta în procesul de inducţie, mai ales în a-i transmite acel cod despre „cum se lucrează la noi în firmă”. De asemenea, oameni mai vechi în companie trebuie să fie cât mai prezenţi în vizite la noua echipă, să-i ajute cu sisteme, proceduri de lucru pentru a deveni cât mai rapid funcţională. Un test că procesul de creare a unei echipe

total noi a reușit (dincolo de rezultatele palpabile) este ca atunci când te duci în vizită la acea echipă să simţi că te afli tot în cadrul aceleiași companii, nu într-o altă organizaţie.

O metodă rapidă și des utilizată în companiile de IT pentru creșterea gradu-lui de coeziune reciprocă într-o echipă este și celebrul „team-building”. Dar și aici sunt câteva particularităţi în cazul IT-iștilor care trebuie respectate pentru ca rezultatul aces-tor ieșiri să fie reușite. Pe lângă implicarea membrilor echipei în alegerea tipurilor de activităţi dorite, a locaţiei, a serviciilor, este important ca activităţile planificate într-un team-building să îi ghideze pe participanţi să facă lucruri împreună! Degeaba îi trimiţi pe banii companiei la Barcelona, trei zile, dacă acolo fiecare va face ce-și dorește indi-vidual sau pe „bisericuţe”. Este important ca membrii echipei să facă activităţi împre-ună la care să le găsească un sens și să fie atractive pentru ei. În unele situaţii ajută destul de mult să existe facilitatori care să analizeze puţin comportamentul partici-panţilor în diverse activităţi, să-i ajute să-și dea feedback reciproc și să conștientizeze aportul individual la rezultatul echipei – însă părerea celor prezenţi la workshop a fost că procentul și profunzimea acestor discuţii trebuie să fie rezonabilă, deoarece oamenii din IT se pot simţi mai ușor inva-daţi dacă se intră în analize prea personale.

***După cum putem vedea din aceste

păreri ale oamenilor care se ocupă de oame-nii din IT, angajaţii din această industrie au o serie de particularităţi legate de experi-enţa de viaţă, stil de abordare a lucrurilor, inteligenţă, modalitate de lucru, context economi, care trebuie neapărat luate în calcul atunci când dorim să ne gândim la practici eficiente în organizaţiile de IT. Suntem nerăbdători să ajungem și la momentul în care vom dezbate cum toate aceste particularităţi – provocări depășite mai mult sau mai puţin în interiorul fie-cărei organizaţii în parte – pot fi luate în calcul în contextul nevoii de constituire a unei comunităţi mature de IT în Cluj… O comunitate în care inovaţia, eficienţa, calitatea, seriozitatea să fie atuurile care să consolideze o imagine a Clujului în ochii clienţilor din toată lumea ca „acolo unde sunt cei super-inteligenţi, care lucrează bine în IT, la care merită să ne ducem”. Merită să ne batem capul?

HR

Page 31: TSM_13_2013_en

31www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

Monica David (Arobs Transilvania Software) – psiho-pedagog de profesie, și-a început cariera în HR în 2008, direct într-o companie de IT veche pe piaţa Clujului (Brinel), iar de curând ocupă poziţia de HR Coordinator în Arobs. Înainte de a încerca domeniul privat, a acumulat experienţă valoroasă în domeniul ONG-urilor, unde a învăţat un mod de lucru structurat – al finanţatorilor străini. Comparând mediul privat cu cel non-profit găsește o mare provocare în ambele: lucrul cu oamenii. Glumind spune că principala diferenţă este că, dacă în ONG-uri lucra cu categorii „defavorizate”, acum, în mediul IT, lucrează cu categorii „favorizate”!

Alexandra Bayer (Fortech) a început munca în domeniul IT în urmă cu 7 ani, când a devenit membră a echipei Fortech. Practic, a crescut odată cu compania și a învăţat alături de colegii ei din conducere cum să câștige încrederea oamenilor din IT: cu argumente logice, concrete, statistici. Profesia de bază de inginer a ajutat-o mult în această abordare structurată a activităţi-lor de Resurse Umane. Chiar și acum, când în Fortech sunt aproape 300 de angajaţi, Alexandra se vede ca un ajutor pentru toată compania, ca având „ochi și urechi” pentru toţi, deși devine din ce în ce mai dificil la această dimensiune a companiei.

Răzvan Voica (iQuest) are un backgro-und „vechi” în IT (din 1997), având o diversitate mare de experienţe profesionale, inclusiv ca și programator. Din 2011 a ajuns în echipa de management a companiei iQu-est – unul din jucătorii importanţi pe piaţa IT-ului din Cluj (și nu numai). Recunoaște că această poziţie de management în

domeniul Resurselor Umane a fost dificilă și foarte provocatoare pentru el. De când este în iQuest a iniţiat și dezvoltat foarte multe sisteme și procese interne de mana-gement al Resursei Umane de care ar fi în stare să povestească cu mândrie și pasiune câteva ore!

Cosmin Molnar (iQuest) psiholog de profesie, are o experienţă de 7 ani în domeniul Resurselor Umane, trecând prin aproape toate tipurile de companii: auto-motive, producţie, distribuţie, HR și acum, IT. Având aceste experienţe în industrii diferite poate să analizeze foarte obiectiv profilul angajatului din IT și diferenţele specifice. În iQuest este responsabil de pro-vocarea cea mai grea a oamenilor de HR din IT: recrutarea și selecţia de personal… îi dorim succes!

Andrea Chaimovits (Recognos) este o angajată fidelă – din 2007 – a compa-niei cu tradiţie în Cluj: Recognos, trecând prin diverse poziţii în organizaţie: tehnice, administrative și acum resurse umane – completând, în această ultimă poziţie expertiza printr-un masterat de specialitate. A trecut, odată cu compania Recognos, prin schimbările specifice datorate creșterii de la o companie mică la una din ce în ce mai mare. Având aceste experienţe directe în companie poate să înţeleagă mai multe puncte de vedere și nevoile colegilor ei.

HR

Page 32: TSM_13_2013_en

32 nr. 13/July, 2013 | www.todaysoftmag.com

interview

When people think about low latency / high performance, they usually say things like “C++ is better”, they phrase things in terms of the programming language. How important do you think is the programming language and what other factors influence the latency or the throughput of the system - besides the programming language.

[Peter] What I found is that different programming languages can attract different development styles and developments and, in particular, if you’ve got a low level language like C++ or C and you don’t have a pretty good understanding of exactly what’s going on, you’ll shoot yourself at the foot pretty quickly and you’ll learn fast. You have to. Whereas at Java, a lot of Java developers are deli-berately protected from needing to know all these details and so therefore often they don’t, which is generally a good thing except when you want to be able to program in low latency, you need to have a much better understanding of what is the code really doing, and so it’s not that Java you can’t do it, it’s more that there aren’t as many Java developers that have the skills set and in C++ you’re kind of forced to have that skills set – you won’t survive if you don’t. The libraries can make a difference as well, but the biggest advantage for Java is the fact that so many of the common libraries are likely to need are built in, whereas in C++ you have to go to third party libraries to do a lot of the same things.

So, do you find that the general opinion that C++ is faster or compiled languages are faster than Java holds up or is this just a myth?

[Peter] In theory, C++ is always faster, in theory. The thing is that in practice you have limited resources, you have limited time, you have limited expertise and you have changing requirements and in that sort of environment what can happen is that you don’t have enough time to micro- optimize every little bit, (…) you can’t fine tune everything because data becomes unmaintainable. So, given let’s say a week or a month, a developer who’s reasonably equally skilled in both languages will produce much the same performance. It’s just that if you give that same developer a year instead to do the same task, that will be faster in C++ and when you see the libraries that are particularly faster in C++ and C are well understood problems that don’t change very much and have been really tuned to death, things like video processing, matrix operations, the sort of operations that have been around for a very long time involve huge pulse, simple code repeated many times, and in those situations you find that C is faster. But in most busi-ness related applications, the amount of code fine tuning you can do on each line isn’t so important as the whole performance of your application and business logic tends to change over time and then, what you tend to think about is maintainability and once that starts coming in, and robustness and you face lots of changes then

you have to back off in C++ anyway. You end up building a lot of the protections that Java gives you already, like you end up having some sort of message brokering system to isolate the components of your system, to protect from crashes, for example, all those sorts of things Java will do for you efficiently. So there’s no guarantee that the C++ systems would be faster. In particular I worked in one place where all of the client facing application was written in C++ and that was the less latency sen-sitive, whereas the hedging of all of the funds, the latency sensitive code is written in Java because we had much faster time to market and in fact all of the fast delivery, a lot of the new changes were going into the Java system, simply because the C++ had reached the point where it was very difficult to maintain. And they would print for example daily crash reports. Instead of throwing excepti-ons the whole program would crash and restart, all those sorts of things that would be considered unacceptable in Java.

Interesting. So what advice would you give somebody who is a Java programmer and is just starting to get interested in the per-formance of their system? Maybe they are interested themselves or maybe there is an external reason, like the client is saying that the system is too slow. What would be the first steps they should take?

[Peter] The most useful thing is visibility. What is going on in your system, where is the time being spent, using things like profilers as a first part to look across your whole application. But then, once you feel you have an understanding of what your appli-cation is doing, putting time stamps in and recording those, either logging them or using something like my Chronicle to record them in the low latency way, then that gives you visibility as to what the application is doing, and it allows you to see where is my time being lost, what is it doing and then, the simple problems you can solve, you break those down and make them faster and faster. The way I got into the low latency space is that I initially started with a company which wasn’t particularly low latency, but I had this aim of making the system ten times faster than it nee-ded to be, and then for the next client, the next people I worked for, I did the same thing, and again and again. And eventually I knew from hundreds of milliseconds down into the hundreds of microseconds and eventually sub-hundred microsecond range. So, you can do it in a stepwise fashion, but I generally find that

Hello, everybody! This is Attila for Today Soft Mag and today I have with me Peter Lawrey. Peter thank you for agreeing to this interview and we will talk about Java performance. Could you please introduce yourself?

[Peter] Yes, my name is Peter Lawrey, I am a Java consultant in the low latency space. I have a popular blog called “Vanilla Java” which gets about 120 000 hits / month; I also have a library called Chronicle which is for low latency persistence IPC and data store and also I’m third on StackOverflow for Java.

Interview with Peter Lawrey high performance systems in Java

interview

Peter Lawrey

Page 33: TSM_13_2013_en

33www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

if you make a system that can handle ten times the volume that is actually asked for, it’s usually very stable as well. So, there are benefits to doing this; you’re not just doing the absolute minimum all the time.

Good. So Peter, what is your favorite thing about Java? Either the language or the platform?

[Peter] The favorite thing about Java is just that it has so much of what you need built in and the tool set is very good and mature. There’s a lot of cooler new lan-guages out there, but they don’t have good profilers and debuggers and a lot of the tools set around there to help you write the code and code analysis and it’s really the tool set that really brings Java to life, so to speak, rather than just the language itself. Part of the reason why there is such a good tool set is that Java is such a poor-feature language, in the sense that it’s very econo-mical in terms of what features it adds, but this means that every feature is well under-stood, the interactions between features is well understood, they’re relatively easy for an application to reason about in terms of checking and profiling and analyzing and looking at side effects and so on. So, beca-use it is a relatively simple language at its core, the tool set is generally very good and it can save you a lot of work, so a lot of the complaints people have about Java, things like “it’s very verbose”, a lot of those can be taken care of, using good tool sets and certainly I’d recommend anyone who’s not using an IDE with a profiler, they really should be. And learn to use the debugger when you’re trying to debug your program and it’ll save you a lot of trouble.

Great. Java 8 is coming up and it should be launched this autumn, I think. Are there any particular features of Java 8 which you are excited about?

[Peter] I think the most exciting thing about it is that there are a lot of features being added, not huge ones in themselves, but a lot of improvements. Closures is the one that gets the most press, although tech-nically it’s really just catching up with C#. They couldn’t agree on what specifications they should have for closures, so they even-tually settled on what C# does. They added virtual extensions, which internally are cal-led something else, I can’t remember, but why did they call it “virtual extensions”? – Well, that’s what C# calls them. So, in a way, it’s really just catching up with what other languages are doing. But a lot of the other features - there’re 66 improvements, of which 3 relate to closures - a lot of them are smaller improvements but you see

quite a lot of developments in the evolu-tion in the JVM, things such as JodaTime’s DateTime being brought into the language – probably one of the most popular add-ons till now is to be able to use a proper DateTime and things like for me at the lower level it’s things like having a proper discreet memory barriers. So Unsafe has a force load / force store memory barrier that’s explicit. In the past, you sort of had to do it indirectly by using other operations that also had these features, whereas now you can deal with them explicitly. But that’s a very low level feature.

Are there any features which you would like to see in Java and are not included in Java 8?

[Peter] Probably the biggest thing that I would like to see improved is because I use Unsafe quite a lot, is not add the feature but actually make it part of the specifica-tion. There’s a lot of functionality in Unsafe that’s used in Chronicle and Disruptor and other libraries which are outside the spe-cifications, so they’re there in OpenJDK and HotSpot and other compatible JVMs such as JRocket or Azul Zing, but they’re not standards. So, they wouldn’t need to do anything in terms of adding functionality, they would just need to make it that this is a standard feature of all Java platforms. In that way you’ve got then a standard way of dealing with low level memory access. And in a threat safe manner.

Are there any resources like books, blogs, videos, training courses that you would recommend to Java programmers who are interested in the domain of performance? There is of course your blog, which you men-tioned in the beginning, and we will link to that, but what other resources would you recommend?

[Peter] I would actually recommend looking at the Performance Java User’s Group because that’s where I put all of what I considered the most interesting video posts on the subject and I hope to encou-rage other people to post there as well. So, I think that’s probably the best place to start. There are two other blogs. Sorry, they aren’t really blogs, they’re forums, e-mail forums that are worth looking at, and that’s “The Mechanical Sympathy” which is led by Martin Thompson and he was the CTO at L-MAX when Distruptor was developed, and that’s very low level though. Even most people who are interested in Java perfor-mance wouldn’t have use for about 99% of it but it’s a very interesting discussion, all the same. There’s also a forum called “Friends” at jClarity which is led by a couple of guys

who developed the “Well Grounded Java Developer” for Java 7 and that’s Benjamin Evans and Martijn Verburg. They very much focus on GC and related issues, but they’re very practical based and offer good advice and they also provide consulting if you’re interested. They have a couple of products as well that are in that space but that forum is very interesting if you’re loo-king for tuning your GC.

Great. We will include links to all these in the comment section and annotation for this video. Is there anything else you would like to talk about, related to this?

[Peter] Yes, I’ve got a new version of the Chronicle coming up, which is added to a new organization called on GitHub called OpenHFT that’s set of open high-frequency trading based libraries. And Chronicle itself is being split into sections: memory, memory manipulation and dese-rialization, separate from its logging, so you don’t have to use logging to disk to use its features and it’s also been made more per-formant, for example, on this laptop I can get 80 million messages a second passed from one thread to another, and that’s with every message being persisted. Also it will have a support for rolling logs which you can do yourself in Chronicle 1, but a lot of people would have liked the library to do it for you and so, that’s gonna be a feature added in Chronicle 2. There’s also another library being started up which will look at storing huge amounts of data off-heap. In particular into memory map files, so it will provide similar features to what Terracotta’s BigData does but instead it’s only limited by the size of your disk space rather than your main memory, so you can have much bigger capacities and also the data will be stored much more efficiently, so you can get data in and out faster and use less space, as well. And it will be open source. And the other thing that’s coming up is a fix engine that will be based around the Chronicle as well, so you’ll be able to have low latency parsing and writing of fix messages. It will be loosely based on what QuickFix except that it’s designed to be much more efficient.

interview

Attila-Mihaly [email protected]

Code Wrangler @ UdacityTrainer @ Tora Trading

Page 34: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

34 nr. 13/July, 2013 | www.todaysoftmag.com

Lean is all about movement. It starts with accepting that regardless of your area of practice you cannot stay still. And not because some marketing reason like „com-petition never sleeps” or tehnical pressure to be up to date. It is in our nature to evolve so we might as well do it in a controlled envi-ronment. It is not by accident we call the stillness, lazyness!

The history of lean takes us back to the beginnings of industrialization. And it all started with craftsmen. Very skilled but expensive and highly unlikely to repli-cate. Not to mention to scale. The obvious problem: people wanted things to be more affordable. Mass production was invented which meant high volumes of the same pro-duct. Exactly identical! Henry Ford couldn’t put it better: any car you wish as long as it’s a black Ford T. But then again, more problems. High volume means huge quantities of final products but also of components. Just ima-gine what would happen if a component was wrong. Indeed, quality was a big challenge for mass producers as errors were difficult to spot and most importantly, to fix. Another big trouble was adding variety. Huge volu-mes equal huge stocks. Highly unlikely to be able to repond to a particular demand.

Meanwhile, the software industry has been through the same phases. Long time ago it took a team of hightly skilled engine-ers to program a computer. Or a mainframe, to be more accurate. Things evolved rapidly and once the PC became a common pre-sence in our lives, we needed software to be more diverse not just to process some data. And even more importantly, we started to rely on software for more and more aspects including some very sensitive like flight con-trol or medicine. So, we started to ask for software of better quality and very diverse. Heard that before?

Lean, better known under Agile or Scrum in the software industry is where it all started. And not recently but about half a century ago. Back then, Japanese desperately needed a solution to produce car that would beat Fords in areas like quality, price and variety. Next to impossible, right? They did it by inventing a system (later known as TPS – Toyota Production System) that would use limited stocks, nearly close to zero. That allowed them to spot errors immediately and to improve quality constantly. And with vir-tually no stocks they became able to respond quickly to any particular customer demand. Now, that’s being Agile! By focusing on pro-ducing more cars on each production cycle they were able to produce more value for the same amount of effort spent. And that’s how those cars got really cheap.

In software, we focus on small batches of work which we usually take from a much lar-ger backlog of things to do. Small meaning enough to spot any errors and to be able to switch imediatelly if the customer needs. And by increasing the value of what we offer on a cycle bases (typically called sprint or ite-ration) we can actually deliver great value at a very reasonable cost.

Just like the manufacturing is no longer viable without lean, it started to look like doing software is no longer viable without delivering high value at low cost. Just take a look at any major vendor’s market place and you’ll notice that less than 20% of the apps are actually making money accounting for most of the market. That Pareto, again!

I think I’ve always been a big fan of lean philosophy. Even back when I didn’t know about it or its name for that matter. And not because it looked fancy but probably because I always knew it felt natural. I must be one of those people who think the world keeps

moving even when we’re pausing.

The high price of lean software

developement

Florian Ivan, PMI-ACP, CSM, PMP,

Prince2 Practitioner, MVP, [email protected]

Managing Partner@Rolf Consulting Germany

management

Page 35: TSM_13_2013_en

35www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

In 1993 a programmer from Cluj-Napoca was earning approximately 50 German marks, the equivalent of 25 euro, per month. Today, the best professionals have expecta-tions that exceed 2000 euro, an increase of almost 1000% in less than 20 years. This is probably the most spectacular salary increase in modern Romanian economy.

At the same time, in Western Europe, the salary of a programmer is close to the amounts earned in Romania, and, should the trend of increase be maintained the compe-titive advantage based on reduced costs and a suitable geographical positioning (i.e. near-shoring) will fade in a few years n comparison to destinations such as the Ukraine, Serbia, Russia or the traditional India.

This background forces the outsourcing companies from Romania to think diffe-rently when it comes to their strategy and to diversify their portfolio of services in order to justify the significantly higher price compared to 10 years ago. In other words, the outsourcing companies must re-invent themselves, and innovate in order to remain competitive in a globalized market in a flat world, like Thomas L. Friedman called it in The World is Flat.

Software Projects vs Software ProductsI would like to make the distinction

between two broad software categories: projects and products. By products I mean Microsoft Office, Google Search, Salesforce.com, Skype, Evernote or Dropbox. These represent the central element in the stra-tegy of the company producing them, have a large-scale impact and are used by thousands,

million and sometimes even billion of users.In contrast to the products, software pro-

jects represent efforts to optimize business processes through software, are secondary from the point of view of the company fun-ding them and are to be found mostly in the form of internal, individual initiatives of departments that are designing their own software system in order to make their work easier (e.g. the internal system for the mana-gement of reservations of a tour-operator) or of some websites for presentation-related purposes.

This distinction is important, because, if the objective is to increase the value Romania brings through outsourcing, then the effort must be concentrated in the area in which the impact is the greatest, and from this point of view one must wager on software pro-ducts and on the manner in which Romanian outsourcing could create value in this area. “Projects”, as introduced above, have low impact by default, and are therefore availa-ble for outsourcing based on reduced costs, an area in which the Romanian outsourcing companies compete against cheaper desti-nations, thus eroding their own competitive advantage potential.

The needs of a software product companyValue is created by addressing needs, and

if the greatest impact outsourcing companies can have is in the area of software product companies, then understanding their needs is the first step to be taken. Essentially, from this point of view, we can speak of two big needs: the need to adapt to change and the need of predictability in delivery.

The ‘90s have been dominated in Europe by the aftermath of the fall of the iron curtain. Eastern-European markets, which had been marked by the principles of the planned economy, were opened towards capitalism. Then a chaotic increase ensued, which left

no industry untouched. Some mammoths, such as metallurgy, steel industry and mining, fall into the category of losers; however, a new species started developing, distinguishing itself among the winners, namely the information technology in general and software development in particular.

Romania, the ugly duckling of

the software outsourcing lake

Mihai Nadăș[email protected]

CTO@ Yonder

trends

Page 36: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

36 nr. 13/July, 2013 | www.todaysoftmag.com

The need to adapt to change refers to the fact that we are living in a world in which the only constant is change. Market requirements are changing, competition is changing and, last but not least, technology is changing at an increasingly rapid pace. If we are to look at technology in further depth, we can notice how, for a product company, losing an innovation cycle (by innovation I understand the adaptation to new technology and technological trends) could destabilize its position on the market in a decisive manner. An average product company cannot afford to invest too much in innovation, a reason for which the risk from this perspective, and thus the need, are very high.

The needs of predictability in deli-very pertain to being professional. We are talking about on-time delivery, according to the agreed quality standards and within the agreed budget. This is a wide field in which initiatives such as the Capability Maturity Model Integrated (CMMI), a model deve-loped by the Software Engineering Institute (Carnegie Mellon University) seeks to decipher a complex issue. The lack of pre-dictability in delivery is, again, a risk factor, which, has more than once taken product companies out of the game (e.g. Netscape).

A functional modelChange starts from vision, but vision

itself does not lead to change. Change needs models, results and proofs. The vision described above was implemented at Yonder and, for almost 2 years, we have been able to speak of a functional model within which we notice how addressing the need for change and predictability on the European market of software product com-panies generates value that differentiates us and offers completely new perspecti-ves of development in comparison to the

traditional model of outsourcing, which is based on low costs and low added value.

Beyond the efforts to address the need for predictability, resulting in certifications such as CMMI and in changing the orga-nizational chart, which took place in 2012, this year we reached a new benchmark by launching a booklet that concentra-tes our vision on the need for software product companies to adapt to change. The paper is called “The Innovation Roadmap of Successful Software Product Companies1” and presents an innovation model that software product companies must adopt in order to remain relevant on the market in the long run and describes in detail four trends that we believe the companies must take into account when defining their plans for developing their products. The four trends identified are:

1. Contextual, Social and Modern User Interfaces

1 http://tss-yonder.com/latest-news/downloads/

2. Mobile-Centric User Applications3. Cloud Computing: IaaS, PaaS, SaaS4. Big Data and Next Generation

Analytics

This is a time that highlights not only the change from a reactive attitude to a pro-active one in local outsourcing, but also the implementation of a vision that presents a clear and functional alternative to the cur-rent model, and which already has behind it a series of successful case studies.

ConclusionsOn November 11th, 1843, Hans

Christian Andersen published a story about a transformation for the good, about trust and perseverance. Romania, as an outsour-cing destination, is similar to the story by the Danish author, but, unlike the duckling in the story, which has benefitted from its genetic inheritance and witnessed a fatalist transformation process, Romanian outso-urcing must determine its own phenotype in order to go to the next level of maturity.

In the same way in which the software companies need innovation in order to remain relevant on long term, we can speak of local outsourcing companies where adoption of a vision and of a strategy based on added value will make the difference à la longue.

References1. tss-yonder.com/vision2. innovation.tss-yonder.com3 . h t t p : / / w w w . y o u t u b e . c o m /watch?v=c1AsihGwuxU)

trendsRomania, the ugly duckling of the software outsourcing lake

Page 37: TSM_13_2013_en

37www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE programming

This architecture had to be prepared for

scaling – ported to a system that would allow for a high number of requests to be served.

After analyzing multiple upgrade options (the full reasoning can be read in the previ-ous article) we decided on SQL Azure and Windows Azure as a migration platform.

In this article we will go, step by step, over the database migration procedure, what too-ling we did use and what problems appeared or could appear.

The database migrationThe database was accessed through Entity

Framework – this made our job considerably easier as one of the roles of an ORM is trans-parency regarding the chosen database.

The first thing we have to do is to check if the SQL Azure and SQL server data-bases are compatible – what can be migrated “as it is”, what has to be changed and what cannot be migrated.

A good place to start documenting ourselves is the Windows Azure General Guidelines1 and Limitations on MSDN. If you are dealing with an enterprise database then you have to go over the whole article, otherwise it is enough if you know that

the following are not supported by Windows Azure:

• Cross database stored procedures – if you are dealing with such a scenario then you will have to move the join logic to a superior architectural level (e.g. LINQ)

• Automatic transactions on operations across multiple databases – same as above, if you find yourself having to support this, then you will have to move all the syn-chronization an rollback mechanisms to a higher abstraction level.

• SQL Server agent or SQL server jobs – SQL Azure provides no support for SQL Agent so all your internal jobs have to be moved to an external service that will

1 h t t p : / / b l o g s . m s d n . c o m / b / s q l a z u r e /archive/2010/07/30/10044271.aspx

A brief review of the previous article (part 1):We were given a “classic” web architecture: an ASP.net MVC 3 & 4 web portal,

backed up by a MS SQL database with Entity Framework as a ORM.

Migrating MVC 3 website and DB

to Azure (II)

Dragoș Andronic [email protected]

CTO@ TXTFeedback

Page 38: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

38 nr. 13/July, 2013 | www.todaysoftmag.com

be periodically executed (for example you can move it to a thread on a Azure WebRole). Other alternative solutions can be found here

• Tables without clustered indexes – the good thing is what on every table it is relatively easy to add a clustered index. If you find yourself asking why this limita-tion exists read this article

If you like a little less theory and a more practical approach, you can attempt a migration with one of the migration tools and, in case incompatibilities are detected, all the tools will provide you a detailed report.

Migration toolsOk, what can we use to migrate our

SQL database to SQL Azure?1. SQL Management Studio 2012

(SSMS) – the 2012 version (or newer) is a must due to the fact that in this version a new migration to Azure task has been introduced which will make our life a lot easier. If you don’t own a SSMS license you can use the Express version.

2. RedGate SQL Toolkit – complexity wise is on the same level with SSMS. You will require a license for the SQL Toolkit – depending on preferences and require-ments, your development shop will most likely have either a SQL Toolkit license or a SSMS license.

3. SQL Azure Migration Wizard – avai-lable on codeplex, is the free & open source (but not less powerful) migration tool alternative.

We used SQL Management Studio 2012

– as Bizspark member we had free access to it.

The migration procedure, step by step:1. We select from Management Studio

the database we wish to migrate to azure and select Tasks -> Deploy database to Azure

2. We input the name of the database we wish to create and specify the Azure SQL server instance that we wish to use – the SQL Azure server has to be created before from the windows azure management dashboard ) Note: if you already created a SQL Azure database the wizard has the bad habit of setting the already created database name in

the Connection Properties, „Connect to database” setting. We are trying to create a new database so we have to make sure that the “Connect to database” setting points to “default”. If we don’t do this we will get an error during the migration procedure.

3. We start the migration procedure and, once it ends, we go over the migra-tion Log and see what incompatibilities were detected. In our case we got off

easy: the only detected problem was the fact that not all tables had clustered

indexes: we had to manually add a clus-tered index to each table (this was easily done from SSMS).

4. After all incompatibilities were sol-ved we repeat step 1, until the migration succeeds.

Migration validationAfter the migration is done, to check

that everything works correctly we change the connection string in our web project to point to the SQL Azure database. We start up the project and either run some data-base unit tests or manually go over some basic scenarios. Due to the fact that we have Entity Framework, everything should work as expected, no other change being required.

Final thoughtsThat’s about it regarding the database

migration. If you encounter problems during your migration or have questions you can contact me directly at dragos(at)txtfeedback.net

In the next article I will go over how we moved our website & virtual directories structure to Azure.

Migrating MVC 3 website and DB to Azure (II)programming

Page 39: TSM_13_2013_en

39www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

When?The data our company collects can

become a gold mine. As we are able to pro-cess huge amounts of data, we can visualize the data in a way that was not possible until now.

The first question we should ask when we wish to analyze the data with Hadoop is: What do we want to analyze? The answer to this question is important, because we need to clarify what we wish to do with the data, what information we wish to analyze and which is the value of this data.

A simple scenario is the identification of a user’s profile. We can thus recommend or advertise different products. Moreover, by using a system like Hadoop, we can create a mechanism for identifying frauds, by selec-ting the exceptions from the known patterns.

CostsCompared to the rest of the solutions that

are available on the market, Hadoop comes with extremely low costs. It does not require a special hardware on which to run. It can work without any problems on any kind of system, be it the laptop you have at home or the server from work in the 500.000 euro machine the client has purchased. Depending on the task we wish to perform, a job can take between a few minutes to hours or days. Hadoop has no restrictions from this point of view, being able to run for days, with no problems.

By simulating the environment in which it runs and the manner in which Hadoop is built, we are allowed to do something that cannot be done on any system of the kind. Scalability is linear. This means that if we double the number of nodes we can reduce to a half the analysis time. This way, we can

In the former issues, we discovered the world formed by Hadoop, a world in which 100GB or 500GB files are something ordinary. This allows us to do things we weren’t able to do before.

Hadoop (III)

programare

Radu [email protected]

Senior Software Engineer@iQuest

Page 40: TSM_13_2013_en

TODAY SOFTWARE MAGAZINE

40 nr. 13/July, 2013 | www.todaysoftmag.com

management

start with a simple configuration and, if the data volume increases, we can increase the number of nodes.

Due to this feature, there are many cloud providers who offer this service. Any cloud provider can use the machines he has to run Hadoop and can scale the num-ber of machines according to the client’s necessities.

A rather interesting story is that of Pete Warden who used Hadoop to analyze the profile of 220 milion Facebook users. This took only 11 hours and the cost was extremely low. Do you wonder how low? The final cost was 100 $. This is the perfect example where Hadoop works very well, on minimum costs.

How?As we have seen so far, the Hadoop

architecture is simple, being based on HDFS – Hadoop Distributed File System and Map Reduce.

HDFS is able to divide, distribute and manage very large amounts of data. All this data, once stored in Hadoop, can be processed using MapReduce. The moment when the data is being processed, Hadoop does not send the data to the nodes that are responsible for processing it. Each data storing node in the system will process the data that it stores. Thus, data analysis is done much faster and the system is more scalable.

The MapReduce operation is an opera-tion that unfolds in two phases. During the first phase, the Map operation runs on each

separate node. The second analysis phase, called Reduce, is optional. The entire logic that we write – the manner in which we analyze data lays in the Map and Reduce operations.

LanguageThe logic that we have to write in order

to be able to write the analysis processes can be written in different languages. The thing we should not forget is that the lan-guage in which Hadoop was written is Java.

For this reason, even though we can use other languages besides Java, we will get the best performance by using Java. For example, if we use Streaming API, the per-formance may decrease by up to 20%.

Environment If we wish to set up a Hadoop system,

we must be ready to use Linux. Even though it has no problem running on Windows,

initially Hadoop was designed to run on Linux. Linux knowledge will be useful to us the moment we have to set up this system. Under Linux, Hadoop runs on a Linux version derived from Ubuntu and RedHat. This is called CDH – Cloudera Distribution of Hadoop. A solution I recommend at this point is using some images that alre-ady have this system installed and set up. This way, in no more than 10 minutes we can have a functioning and ready to work system.

DevelopmentIf we are at the development phase,

then it is not recommended to run the code directly on a real system, since the debugging process can be extremely ticklish. In an initial phase, we can employ the Local Jobrunner Mode, which allows us to run small size tests and debug the Map and Reduce type operations. Once we have a functional code, we can move on to the next step and use Pseudo-Distributed Mode. This is a replica of the real environment, but offers us some debug functionalities. If we got beyond this step as well, then we can take the final step and go to the next, Fully-Distributed Mode. This is our real environment, that of production.

By developing and running the code in the three modes, the development cost decreases and the number of found bugs is high.

The programming style we have to apply the moment we use Hadoop is that of defensive type. We must try to figure out all the possible exceptions and treat them cor-respondingly. Running on several nodes, it is required that we treat each exception carefully.

Pig and HiveIn case you are not a developer and you

do not know any programming language, it doesn’t mean that you cannot define

your Map and Reduce operations. By using Pig and Hive, any person who has no pro-gramming knowledge can define their own rules.

Hive is based on a language called HiveQL. This is extremely similar to SQL. All that anyone has to do is to define a query of the kind:

SELECT * FROM CARS WHERE type = ‘BMW’ AND value > 30000

Hive will translate this query into jobs which Hadoop can execute.

Pig is fairly similar to Hive. It uses its own language called PigLatin. PigLatin is a simple language, with operations such as FOREACH, value comparing and SQL functions such as MAX, MIN, JOIN, etc. It translates the orders it gets into MapReduce type orders.

Both systems are easy to use and opti-mize. For those who are not developers, using Pig or Hive is a much better option than learning a language from scratch.

ConclusionIn the last three articles from this series

we discovered the Hadoop world, how it can store and process such a big amount of data. All that is now left for us to do is to take the next step and start using it.

Good luck !

Hadoop (III)programming

Page 41: TSM_13_2013_en

41www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINEmanagement programming

Though the notions of class and polymorphism bring into mind the object oriented programming, remember that Haskell is different. By the end of this arti-cle you would know that the similarities with OOP are very few and squinted. Here, there are totally different concepts having the same names.

Let’s start with a simple function (+). Last time we used it as having type Integer -> Integer -> Integer but it is self-evident that in this way we could not add two real numbers together. Changing type to a -> b -> c gets us into a situation with 2 problems: we cannot construct type c from types a and b (if it were a constant type we could have chosen a null constructor and use a constant func-tion – not a correct implementation for (+) anyway) and we can also have invalid formu-las like True + “ana has apples”. Restricting

the signature to a -> a -> a in order to solve the above 2 problems will still allow us to write the semantically invalid True + False. We need a way to restrict the types of values of type variable a to the numeric ones.

Let’s consider another example: con-verting values to strings. In Java we can use toString from class Object by overriding it in each of our classes. However, unlike the majority of languages, in Haskell functions are first-class values. Taking into account that we cannot convert a function to a string (excluding the lexical obvious example of “function at line 42”) we arrive at the real problem: we need a function of type a -> String where values of type variable a are restricted to those types for which the con-version has a valid semantics.

The same is true for the reverse case of a function of type String -> a to convert a

In the last article we offered a short review of Haskell types, both the existing ones and the ones which can be defined by the programmer. We continue to uncover features of this language in this article by giving a short insight into another type system cha-

racteristic: the special way in which polymorphism is implemented in Haskell: typeclasses.

Functional Programming in Haskell (III)

Mihai [email protected]

IxNovation @ IXIAmember of ROSEdu, ARIA

Page 42: TSM_13_2013_en

42 nr. 13/July, 2013 | www.todaysoftmag.com

programareFunctional Programming in Haskell (III)

string to another type.We can also look at functions (==) :: a

-> a -> Bool, (<) :: a -> a -> Bool, etc. In each of these cases, we need a supplemen-tary restriction on the types of variables in the signature. These restrictions apply to the type, not to the values of the type.

Finally, let’s consider a more contri-ved example: in a way, it is useful to define functions like map:: (a -> b) -> [a] -> [b] but for other container-like data types (trees, stacks, graphs, etc.). We’d rather generalize the function instead of defining different functions for different containers. That is, instead of having mapTree :: (a -> b) -> Tree a -> Tree b and mapStack :: (a -> b) -> Stack a -> Stack b we would prefer to have fmap :: (a -> b) -> f a -> f b where f is an unary type constructor (needs a single proper type). Of course, we need to restrict f to those type constructors representing a container of values.

In the above fmap signature f cannot be any proper type (for example, it cannot be Bool). Practically, we need a type system for the types of Haskell. This is the kinds system, each type has a kind. The proper types (Bool, Integer, functions) have kind *, while type constructors have kinds along the lines of * -> *, * -> * -> *, etc. In GHCi, one can find the kind of a type expression by using :k.

Going back to type variables restric-tions, we consider the way they are implemented in OOP languages: to force a class to implement some methods we use inheritance, especially interfaces. An inter-face in OOP world is just a contract: if this class implements that interface, then this class has usable definitions for all methods of that interface.

Exactly the same idea resides behind the Haskell’s typeclasses. A typeclass is only a specification for the functions which are associated with a type enrolled in this typeclass. The definitions for these functi-ons can be written by the programmer or generated by the compiler. The second case is when the programmer uses the deriving clause when defining a new type.

So, the equivalent for a typeclass is the OOP interface, not the OOP class. That is as long as we neglect the fact that an OOP interface doesn’t allow implicit definitions for methods or automatically deriving of method’s implementations.

Let’s see now how the typeclasses are used to solve the problems with which we started this article. For the numeric types we make use of the Num typeclass (along

with a typeclass hierarchy starting from it: Real, Rational, Integral, etc):

class Num a where (+), (-), (*) :: a -> a -> a negate :: a -> a abs :: a -> a signum :: a -> a fromInteger :: Integer -> a

x – y = x + negate y negate x = 0 - x

It is evident that (-) and negate are defined one in terms of the other. Thus, for enrolling a type in Num typeclass we only need to define all methods but one of the 2.

To convert to strings we have the Show typeclass which contains the function show :: a -> String. Similarly, for the inverse con-version we have a typeclass named Read with read :: String -> a. For the equality tests we have the Eq typeclass from which we need to implement one of (==) and (/=). Finally, to have an order relation between two elements we need to make use of a typeclass named Ord

class Eq a => Ord a wherecompare :: a -> a -> Ordering(<), (<=), (>), (>=) :: a -> a -> Boolmax, min :: a -> a -> a

For enrolling a type into this typeclass we only need to implement compare. It is possible to also define the 4 inequality tests. Observe that there is one more restriction into play: a type cannot be enrolled in Ord without being a member of Eq as well. Otherwise, the operators (<=) and (>=) would lack sense.

Finally, the fmap function can be applied to all types enrolled into the Functor typeclass. The name comes from a concept in Category Theory and the class has more power than it is visible at the moment, power which will be unleashed in a future article.

class Functor f wherefmap :: (a -> b) -> f a -> f b

Now it is time to see how we can enroll a type to a typeclass without using the deri-ving clause. Here is an example for doing this for lists and typeclass Functor:

instance Functor [] where

fmap = map

Let’s continue the example from the last article: we have 3 data tables with informa-tion about persons. Last time we defined 3 different search functions but we want to define a single one and let the compiler specialize it to the proper one. We will need

several GHC extensions activated by using the LANGUAGE directive.

{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependen-cies #-} {-# LANGUAGE TypeSynonymInstances #-} {-# LANGUAGE FlexibleInstances #-}

The types from the last article:

type Name = Stringtype Age = Inttype Address = Stringtype PhoneNumber = Integer

newtype NameAgeTable = NAgT [(Name, Age)] deriving Shownewtype NameAddressTable = NAdT [(Name, Address)] deriving Shownewtype NamePhoneTable = NPT [(Name, PhoneNumber)] deriving Show

We still use deriving Show to get a tex-tual representation of the tables.

Let’s construct some values for the 3 types:

nameAge = NAgT [(„Ana”, 24), („Gabriela”, 21), („Mihai”, 25), („Radu”, 24)]

nameAddress = NAdT [(„Mihai”, „a random address”), („Ion”, „another address”)]

namePhone = NPT [(„Ana”, 2472788), („Mihai”, 24828542)]

Now it is time to define a typeclass for searching by name in one of these tables:

class SearchableByName t a | t -> a where search :: Name -> t -> Maybe a

Because we need 2 type variables in the signature of function search we need two type variables in defining the typeclass: t for the table in which we search and a for the type of the returned values. Since the table defines the type of the returned values we use fundeps (between | and where). Because of this we needed to activate GHC’s extensions above.

Now, let’s enroll our types to our typeclass:

instance SearchableByName NameA-geTable Age where search name (NAgT l) = lookup name l instance SearchableByName NameAd-dressTable Address where search name (NAdT l) = lookup name l instance SearchableByName NamePho-neTable PhoneNumber where search name (NPT l) = lookup name

programming programare

Page 43: TSM_13_2013_en

43www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINEprogramare

l

Searching is simple now:

*Main> search „Ion” nameAge

Nothing

*Main> search „Mihai” nameAge

Just 25

*Main> search „Mihai” nameAddress

Just „a random address”

*Main> search „Gabriela” nameAd-dress

Nothing

*Main> search „Gabriela” namePhone

Nothing

*Main> search „Mihai” namePhone

Just 24828542

The type of the datatable in which we search completely specifies the type of the result. We use a single function for sear-ching in several tables and the compiles specializes it to the proper implementation.

Next time we will extend this code to implement join operations.

Page 44: TSM_13_2013_en

44 nr. 13/July, 2013 | www.todaysoftmag.com

HR

Why?The human mind is simple. This is great

as long as you need to act fast and be effici-ent. We know, however, that today we need more than quick and easy.

We need something NEW, unseen, cre-ative, innovative, fresh …

The inexperienced have it easy. They don’t have validated patterns (from previous experience) that activate when they need to solve something. For them the challenge is new so they can create a new solution.

However, sometimes we need a NEW solution that is not just new to us. That means we sometimes need new solutions that are different than previous solutions (even carried out by other people)

How to do that? There are many solu-tions to stimulate creativity and divergent thinking. I’ll just talk about one that so far created some pretty cool and new ideas for those who tried it. It takes a while but it’s sure worth the effort.

It’s a kind of magic. Magic54, version 1.

Where is it you need some fresh soluti-ons? What challenge/problem do you need to fix?

It can be anything from “How can I live

in a place I like” to “How do I motivate my team?”

It’s better to formulate the challenge starting with how to instead of black and white phrasing “Am I buying an apartment or not?” “Am I giving them a performance bonus or not?”

Don’t get into too many details, they won’t help.

Now that we know what the challenge is … generate 54 solutions. Yes, I know: “54? Are you serious?”. I am serious.

I’ll help you out a bit. First solution “I don’t do anything and leave things as they are”

Rules for the 54 solutions:• Write whatever comes to your mind• Do not think about the solutions or

try to analyze their feasibility• Do not get into details or try to ima-

gine how they will work• Even if you feel you found the perfect

solution, keep writing up to 54• The written solutions can be variati-

ons or nuances of previous ones

Some realistic preview of the process: It will be frustrating and the tempta-

tion to quit will be high at around 20 and 30 and 40 and 50. The first 12 solutions will be solutions that you already considered or variations of them. Usually the next 12 (from 12 to 24) are solutions that don’t rock

Experience is good as long as you need to solve problems that you already solved once. Experience, unfortunately, is un-good when you’re faced with new problems or you need new solutions.

fresh … ideas!

programare

Antonia [email protected] and consultant

Page 45: TSM_13_2013_en

45www.todaysoftmag.com | nr. 13/July, 2013

TODAY SOFTWARE MAGAZINE

fresh … ideas!

programare

the boat.only after 24 you really start thinking

… about what you want to obtain and how much you are willing to put in.

Some recommendations to make this easier on you:

Every time you get stuck you can use any of the following “unstuckers” or find some new ones. The purpose is to use other parts of your brain, parts that you would not normally use when solving your challenge:

• Re-read the list and spell check it • Talk to someone and try to explain

the challenge• Drink a big glass of water• Take a shower• Solve some math problems or read

poems• Look at pictures• Solve a Sudoku or any other mind

game• Sing

You can even re-read the list and try to rephrase previous solutions.

Remember, not all the solutions need to be perfect. You can, and I encourage you to, write solutions that appear to be weird on unfeasible. The purpose is to let your mind wander and look at the challenge from new perspectives.

If it helps, you can turn to the World Wide Web for inspiration and guidance.

… but if you manage to really stick to it … your brain will impress you

Ok. Now you have a list of 54 solutions or more. Next we’ll do some simple math. Bellow you find some suggestions for solu-tions that can be combined. You can also choose which ones to combine:

3+1224+3929+5313+25+373+42+477+17+29+5219+? (choose your solution)26+?4+14+24+??+??+??+?45+?+??+?+??+?+??+?+?

A combination is when you create a new solution from the ones you combined.

Bonus feature. This is my favorite part.

Write down 10 non-solutions. Non-solutions are things that might work but certainly will not or even things that might make the situation worse.

If you generate the non-solutions your mind will relax and lower the performance anxiety (create good solutions). Right after this list think of at least 5 solutions for the original list.

Pick your thing!Now you have a long list of solutions.

Pick the best ones, at least 6 and write them down on a new piece of paper.

Come up with a plan!I noticed that rarely there is one solu-

tion to a challenge so I recommend you to draw up a plan (write it down) where you take all the solutions from the short list and put them in reality. If needed, you’ll change the plan when you implement it, according to the outcomes it produces.

Is it worth your while? Now you have a list of not less than 6

solutions and a plan to make them happen. Think about it. Is it worth it? Think

if the positive and negative outcomes of implementing it coupled with the effort of making it real weighs more than the cur-rent situations.

It is possible to see that it is not worth your effort or you can even find the drive to make it real.

It is indeed an exercise that is enabled by stubbornness. In this case, stubbornness rules.

It is fun, but it also requires effort. But your mind is awesome; don’t waste

it just by travelling on the known path.

Page 46: TSM_13_2013_en

46 nr. 13/July, 2013 | www.todaysoftmag.com

Gogu saw Chief entering the office and swallowed his line. Misu, with his back to the door, didn’t notice the movement and without any comment from Gogu, concluded:

- So you think that being boss went to his head?!- Who are you talking about?! asked Chief. Hello, Chief

to Misu, reception! He insisted towards a stiff Misu; only his narrowed eyes looking at Gogu were silently screaming for help. However Gogu ignored him and, looking at Chief, put another log on the fire:

- Come on Misu, don’t stay there as a shepherd, Chief asked you something! He smiled fondly under the mustache; Misu’s innocence was incredibly lovely and he couldn’t help but stoking him. Misu’s narrowed eyes past from silent pray to dumb reproach, which made Gogu burst out laughing:

- Before we tell you what this is all about, Chief, maybe you can clarify something for us. Misu’s eyes passed to fear. Hi-hi, the “we” part doesn’t comfort him at all, Gogu thought and continued:

- For two weeks we have been doing only alarm exercises, like if we are an emergency unit. We already dream who is responsible if a tender appears, who and to whom seeks clarifications, who jumps to a claim on the contracts in progress, who goes to what meeting, who can negotiate and to what extent. It only remains to determine what to do in case of nuclear attack, all the rest being already clarified. I think you can even go home at peace ... Oops! Zdrang, Gogu realized. Chief, are you preparing for vacation?!

- Well ... something like that, Chief smiled. You eventually got it, Gogu. All men must relax, even me. When are you going on vacation?

- Ha-ha ... as if I could leave! In the middle of the project?! With the phone ringing on the beach every 10 minutes?! My wife will kill me!!! I won’t go, Chief, not until the project is closed.

- So you’re saying that this summer you won’t take your wife and son to the beach, mountains, sun?! Big mistake, Gogu! It seems that you still need to learn a few things about management.

- What do you mean, Chief? You’re not satisfied with me? You never complained before about how I lead the projects... Gogu minded. And you stop staring at me, he rounded on Misu, who got it blameless. Poor Misu didn’t have a clue about what they were talking; he looked stunned at both of them, the line exchange had probably been too fast and somewhere along the way he lost the string. Chief looked accomplice to Misu (who still wasn’t getting anything and therefore didn’t understand the sense of Chief ’s accomplice looks) and continued:

- Wait a minute, Gogu, don’t enflame yourself, no one here would ever doubt your ability to keep a project under control. But men live and learn...

So now we throw out of pocket the folk wisdom, Gogu thought but refrained from comment. He waited to see what follows.

- Think for a moment about what you’ve just said regarding the preparation of the department. I delegated both responsibilities

and decision authorities for the majority of situations that may arise. Do you know how that helps? I’m leaving on vacation for two weeks! And I will not check my emails nor will I answer to any phone call. Do you know what the result will be?

- Yes, I’d fire you! Well no, the line was not said out loud; Gogu only thought of it and waited for Chief to continue; it was obvious that it was just a rhetorical question.

- I will sit quietly on the beach, I will savor every moment of the vacation, and here everything will run smoothly. He grinned satisfied, and Gogu, although pissed off, could only agree with him. Everyone knew what had to be done and for special situati-ons Chief had taken care to clearly establish both responsibilities and decision boundaries.

- Well, yeah, Chief, but in projects things are different, he tried answering.

- Really? And how are they different? Chief smiled patiently. How about that, Misu, are things different in projects? he turned to their younger colleague. Gogu looked at Misu: well figure that, he regained his intelligent look, he thought while casting his clas-sic „you’d better not comment!”gaze to Misu. But it seemed that junior didn’t like to owe anything to anyone so he ignored the dumb message form Gogu’s eyes and with noticeable satisfaction he replied to Chief:

- No, there’s no difference. Management is in both cases. The only difference is that you are much more experienced...

You snake! I grew up a snake at my breast, Gogu thought bitterly. But he noticed Misu’s playful tone and thankfully found out once again that, although slow to speak, Misu was doing just in time all the necessary connections. Maybe too many connections, I wouldn’t be surprised if soon he’ll start giving me lessons, he said to him; but he was proud of Misu rather than angry. This was felt also in the tone with which he said:

- That’s it, Misu, continue to brag, I have your request for leave. I don’t think I can approve it because I have no one else to replace me when I’m on vacation.

- Didn’t you say you’re not going?! How can the project mana-ger leave in the middle of the project? Misu frightened.

- What did we discuss so far? A manager needs to relax at least once a year and if he’s really good then his absence won’t be felt. Because he knows how to delegate, right? Wait ‘till you see how being boss will go to my head...

Simona Bonghez, [email protected]

Speaker, trainer and consultant in oroject management,

Owner of Confucius Consulting

management

It’s time for vacation…

Page 47: TSM_13_2013_en
Page 48: TSM_13_2013_en

powered by

sponsors