41 • June November • www.todaysoftmag.ro • www.todaysoftmag.com No. 36 2015 •2015 www.todaysoftmag.ro • www.todaysoftmag.com
TSM
T O D A Y S O F T WA R E MAG A Z I NE
Download from
Windows Store
Indoor Positioning System Using Wi-Fi Signal t
The User Experience Audi
Cluj IT Days 2015 from the point of view of presentations Designing strong systems some guiding marks Acceptance Testing Driven Development utilizând SpecFlow cu Selenium în C# OSMTime meetups on improving OSM Data
Logging on external storages.... lesson learns Imagination + Involvement + LEGO bricks = mutual help Common misconception: How many objects does this create?
Innovation, entrepreneurship and technology 24-25 November 2015, Cluj-Napoca
Cluj Arena, Conference Room & Multifunctional Hall
www.itdays.ro
2 days access - 80 euro + TVA
November 24
November 25 Conference Room
Multifunctional Hall
Trends & Leadership Sessions
Startups & Entrepreneurship
Software Architecture
Conference Room
09:00
Coffee & Registration
09:00
Coffee & Registration
09:00
Coffee & Registration
09:30
Opening Remarks Stelian Brad (Cluj IT Cluster) & Ovidiu Mățan (Organizer of IT Days)
09:30
09:30
10:00
Vector Watch in the Context of Wearable Fashion Trends Rareș Florea (Country Commercial Manager Vector Watch)
Driving innovation – TechLeague Diana Tîrnovan (Accesa) Florin Pascaru (Accesa)
On synchronizing data in distributed applications Sergiu Damian (iQuarc)
10:10
Innovation in Product Development and Future of Work Christoph Steindl (CEO Catalysts Software)
Growth Hacking and Lean Canvas Christoph Steindl (CEO Catalysts Software)
10:10
10:40
A Reactive World Robert Cristian (3Pillar Global)
10:40
Start-Ups accross cultures Șerban Țîr (CTO Gemini Solutions)
10:40
Decisions in Architecture Florin Cardasim (Endava)
11:10
Coffee & Networking Break
11:30
Coffee & Networking Break
11:10
Startups & Entrepreneurship
.NET
11:10
Local Product Launches Beyond reality. Virtual Reality. The future of gaming and information visualization Robert Mureșan (CEO Exosyphen)
11:30
Microsoft Cloud Services and Tools tailor-made for startups Radu Ștefan (Microsoft)
11:30
How to manage one million messages per second using Azure Radu Vunvulea (iQuest)
12:00
Implementing Ports-And-Adapters [in the .NET ecosystem] Andrei Larionescu (Yonder)
12:30
ASP.Net 5 (vNext) Performance Characteristics Cătălin Pop (iQuarc)
13:00
Lunch Break
12:00
The Power of Play Simona Bonghez (CEO Colors in projects)
12:30
Launch of Programez.ro Ovidiu Mățan (TSM) and Vlad Derdeicea (Subsign)
12:00
Seedfortech Mircea Vădan (Fortech)
13:00
Lunch Break
12:20
Tools and talents for tomorrow Roxana Rugină (Simplon)
Conference Room
Multifunctional Hall
12:40
Local startup pitches
Java
Management
13:00
Lunch Break
14:00
Work with Hundreds of Hot Terabytes in JVMs Peter Lawrey (Higher Frequency Trading)
15:00
Be Fast, be Off-JVM, be Chronicle-Queue Vasile Mihali (AROBS)
15:30
jOOQ - an object oriented abstraction interacting with relational databases Silviu Dumitrescu (Telenav)
16:00
Pizza Break
Big Data
14:00
Let’s “GamEventify”! Adina Grigoroiu (Colors in projects)
Research
Hands on Lab
14:00
Using artificial intelligence for automatizing software development Răzvan Florian (Romanian Institute of Science and Technology)
14:00
Low Latency in Java 8 Peter Lawrey (Higher Frequency Trading)
15:00
Reliable Chip Designs from Low-Powered Unreliable Components Sorin Coțofană (Delft University)
Creating things with a 3D printer Mihai Oltean (Babeș-Bolyai University)
15:30
Programming collaborative robots with ROS László Tófalvi (Accenture) Péter Magó (Accenture)
14:30
Make it Warmer Dan Suciu (3Pillar Global)
15:00
Building a Strong Employer Brand Through Organizational Culture Cristian Philipp (Essential Training and Consulting)
14:30
15:30
Usable Software Design Alexandru Bolboacă (Mozaic Works)
15:30
16:00
Pizza break
Driver assistance systems and outlook into automated driving Cătălin Golban (Bosch)
16:00
Pizza break
16:00
Pizza break
16:20
16:20
Driver assistance systems and outlook into automated driving Cătălin Golban (Bosch)
How to build your own Smart House Călin Bunea (Gemini Solutions)
16:50
Crouching Admin, Hidden Hacker Teodor Olteanu (Betfair)
16:50
Large-scale Data Analytics for Smart City and Industrial Applications Dan Puiu (Siemens)
16:20
Evolving Ideas with BigData tools Tudor Mărghidanu (Yardi)
Automated Testing
16:50
Data modeling in Apache Hadoop Tudor Lăpușan (Telenav)
16:20
17:00
Machine Learning in the age of Big Data Daniel Sârbe (SDL)
Selenium WebDriver patterns for maintanability Vasile Pop (Intel)
16:50
17:50
Networking & wine
Performance testing how the needs for efficiency dictate the Automation Process Codruța Bunea (Yonder)
Partners
Coffee & Networking Break
17:20
Struggling with Test Automation -Issues and solutions Gabriel Fericean (Siemens)
17:50
Networking & wine
HR & Management 17:20
Is it easy to integrate young people in IT companies? Dan Ionescu (Danis)
17:50
Networking & Wine
HR & Management 17:20
Healthy Organizations Andreea Pârvu (Endava)
17:50
Networking & Wine
Supporters
Organizer
6 Cluj IT Days 2015 from the point of view of presentations Ovidiu Măţan
11 Indoor Positioning System Using Wi-Fi Signal Teofil Cojocariu, Bogdan Oniga, Iacob Nașca
14 Designing strong systems some guiding marks Romulus Bucur
17 Acceptance Testing Driven Development using SpecFlow with Selenium in C# Sebastian Silaghi
20 The User Experience Audit Mircea Gui
23 OSMTime meetups on improving OSM Data Dragoș Andronic
25 Common misconception: How many objects does this create? Peter Lawrey
37 Logging on external storages.... lesson learns Radu Vunvulea
30 Introducing ironwingjs Andrei Cacio
32 Imagination + Involvement + LEGO bricks = mutual help Ana-Maria Trifan
34 Time Management – Take over! Magnoliu Stan
37 SoCraTes 2015 Unconference Mihnea Lazăr
editorial
T
Ovidiu Măţan
ovidiu.matan@todaysoftmag.com Editor-in-chief Today Software Magazine
his issue of the magazine is to be distributed for the first time in printed version during Cluj IT Days, an event which has reached its third edition this year. I hope those who are reading these lines in Cluj Arena on the 24th-25th of November think their participation is a good opportunity to connect to the IT life in Cluj and to enlarge their professional horizon. The presence of a large number of participants from different regions of the country has proved to us that the interest for this event has grown beyond Cluj area, especially the concern for self-improvement. We invited the best local experts, those who stand out in other cities of the country, such as Iasi, Timisoara, Brasov, Bucharest, but also specialists from Rotterdam or London, since Cluj IT Days hopes to reflect the fact that within the national, but also the European area, the IT industry in Cluj stands out as an important landmark. For the organization and unfolding of this event, Today Software Magazine has involved several teams, among which I would like to mention the Subsign team, which has become our designer and has done all the visual materials for this year’s conference, as well as for the new project called programez.ro. I would also like to thank the TSM team: Ana-Maria, responsible for the desktop-publishing and marketing and Alex, for implementing the new itdays.ro website as well as programez.ro in a short time. This month’s release is scheduled to take place after IT Days, on Thursday, November the 26th, at 6 PM. You can find out more details on the site and in the social media. We begin the series of articles – how else? – with an article on the Cluj IT Days 2015 presentations and we go on with How to Web 2015, an event that is to take place in Bucharest, right after the one in Cluj. The salaries in IT is an interesting topic, engaging different opinions, as we can read in the article signed by Adrian Lupau, a specialist in sales and an entrepreneur. A positioning system for closed spaces based on Wi-Fi signal promises a solution for the places where the GPS is not available, but we have a WiFi signal. Designing strong systems – some guiding marks contains a few pieces of advice related to the development of projects depending on their complexity. From the area of testing, the article called Acceptance Testing Driven Development using SpecFlow with selenium in C# offers several useful solutions to those from the testing domain. The User Experience Audit goes through the analysis steps for an appropriate user experience, probably one of the most important steps in the process of development of a new product or redesign of an existing one. In the end, I invite you to read Peter Lawrey’s article: Common misconception: How many objects does this create?
Ovidiu Măţan
Founder of Today Software Magazine
4
nr. 41/2015, www.todaysoftmag.com
Authors list
Editorial Staf Editor-in-chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com Copyright/Proofreader: Emilia Toma emilia.toma@todaysoftmag.com Translator: Roxana Elena roxana.elena@todaysoftmag.com Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Accountant : Delia Mircea delia.mircea@todaysoftmag.com Junior developer: Alexandru Diniș alexandru.dinis@todaysoftmag.com Marketing and tehnoredactor: Ana-Maria Bivol anamaria.bivol@todaysoftmag.com Printed by Daisler Print House
Ovidiu Măţan ovidiu.matan@todaysoftmag.com Editor-in-chief Today Software Magazine
Sebastian Silaghi sebastian.silaghi @veinteractive.com Senior Software Developer in Test @VE Interactive
Irina Scarlat
Dragoș Andronic dragos.andronic@telenav.com
PR Manager @ How to Web & TechHub Bucharest
Product Manager @ Telenav
Adrian Lupau adrian.lupau@fortech.ro
Andrei Cacio andrei.cacio@yahoo.com
Business Development Manager @Fortech
Web Developer @ Evozon
irina.scarlat@howtoweb.co
Bogdan Oniga bognda.oniga@betfair.com Development Security Testing & Assurance Analyst @Betfair
Iacob Nasca iacob.nasca@betfair.com Principal Developer @ Betfair
Radu Vunvulea radu.vunvulea@ iquestgroup.com Senior Software Engineer @iQuest
Ana-Maria Trifan anamaria.trifan@happy-employees.eu PR & Custumer Care Specialist @ Azimut Happy Employees
Made by
Today Software Solutions SRL str. Plopilor, nr. 75/77 Cluj-Napoca, Cluj, Romania contact@todaysoftmag.com www.todaysoftmag.com www.facebook.com/todaysoftmag twitter.com/todaysoftmag
ISSN 2285 – 3502 ISSN-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
Romulus Bucur romulus.bucur@siemens.com
Magnoliu Stan magnoliu@smart-training.ro
Senior .NET developer @Siemens
Director @ Smart HR
Peter Lawrey peter.lawrey@ highfrequencytrading.com CEO @ Higher Frequency Trading Ltd
Mihnea Lazăr mihnea.lazar@ msg-systems.com Software Developer @ msg systems
Teofil Cojocariu Teofil.Cojocariu@betfair.com Development Security Testing & Assurance Analysts @ Betfair
www.todaysoftmag.ro www.todaysoftmag.com
www.todaysoftmag.com | nr. 41/november, 2015
5
event
Cluj IT Days 2015 from the point of view of presentations
T
here are still a few days left until Cluj IT Days, an event that has reached its third edition and has grown year after year. We have almost 320 participants, and if you hurry up, registration is still possible. For a good perspective, we have asked some of the speakers to describe their presentation, the target public and what the participants will be able to learn from the event.
A reactive world - Robert Cristian
Ovidiu Măţan
ovidiu.matan@todaysoftmag.com Editor-in-chief @ Today Software Magazine Organizator @ Cluj IT Days
6
nr. 41/2015, www.todaysoftmag.com
programmers, data analysts and people In this presentation, we are going to with experience in data acquiring and debate the ideas contained in the “reactive processing. Difficulty level: medium. manifesto”, focusing on the analysis of the most important non-functional features which must be associated to a modern Beyond reality. Virtual Reality. The future application. of gaming and information visualization The participants will be able to under- Robert Mureșan stand design principles that must be taken The topic of the presentation is repreinto consideration in the development of a sented by the Virtual Reality games, performant application. more precisely the creation and delivery The presentation addresses applica- of games that offer more than just visual tion developers and architects. information, namely extraordinary feeDifficulty level: medium. lings and memories similar to reality. The audience is general. The presentation is to be done in a manner that is easy to underEvolving ideas with BigData tools - Tudor stand by everyone. Mărghidanu Difficulty level: easy. We are going to present the evolution of a software project and the transition from the standard ETL technologies to How to build your own Smart House - Călin using a set of Big Data tools for importing Bunea and processing the data in a distributed The presentation will teach you how environment. We will focus on the design to build your own smart house by using concepts and models used in a real case, some quite simple and cheap electronic taking into consideration the performance components. Moreover, some interesting and degree of maintenance. and motivating automation ideas will also The participants will learn concepts be presented. such as Big Data, design patterns, as well The participants will learn that in as a few rules to consider when developing order to implement different automations an application. it is not necessary to have advanced elecThe presentation is addressed to tronics knowledge; that such automations
programare
TODAY SOFTWARE MAGAZINE
can be done by anyone. The presentation is addressed to those that we will answer to during the presentation, addressing all who have some average programming knowledge and minimum those who have worked at least once in a team following an agile electronics knowledge and who dream about implementing diffe- methodology. Level of difficulty: easy – medium. rent automations in their own homes. Difficulty level: medium.
On synchronizing data in distributed applications - Sergiu Damian
Selenium WebDriver - patterns for maintanability - Vasile Pop One of the major problems that emerge during the creation of an in-house testing framework of web applications is maintenance. The initial steps are generally easy, but in time, the amount of code increases, making it more and more difficult to adapt to the changes of the tested applications. Design approaches such as PageObjects, LoadableComponent, the usage of SmartWaits in code, simplify the task of keeping the tests synchronized to the application, representing steps to be taken into consideration during the incipient steps of projects. The participants will be able to use the ideas of the presentation in their new projects or to rewrite parts of the existing projects. The transition to more efficient versions of design can be done gradually. The presentation is addressed to members of the QA teams or programmers interested in writing automated tests for web applications. Difficulty level: medium.
Crouching Admin, Hidden Hacker - Teodor Olteanu Network administrators lead a real battle with the evil-minded people who want to gain access to the confidential data of the company. Most of the times, everything happens without us even viewing this things. The presentation focuses on the importance of implementing a few basic rules for securing the networks and IT systems. You will learn how to protect yourselves against the most usual types of attacks and you will assist to a live demonstration. The presentation is addressed to the people interested in the IT security. Difficulty level: medium.
„Make It Warmer”! - Dan Suciu The presentation is centered on the idea shared by many people, namely that the agile approach of software projects represents the opposite of classical management methodologies. An important exponent in this line is Waterfall. Can we consider the two approaches as being extreme? And if yes, is there a middle way in approaching soft projects? These are just a few questions
I often wonder why the alert evolution of technologies doesn’t necessarily bring along an increase in the productivity of the industry. Maybe it is because, though we have more advanced technologies, the complexity and speed in which our life is unfolding are higher and higher. In this presentation, we are going to focus on the problems related to the synchronization of data in distributed applications, that is most of today’s applications, especially the mobile ones. We are also going to analyze a possible multiplatform solution offered by Azure Mobile Services. We are going to see together why the problem of synchronizing the data is not a trivial one, reason for which it probably doesn’t have yet an unanimously accepted solution. We are going to consider a potential solution in the form of Azure Mobile Services. The presentation is addressed to developers, architects, product managers and to anyone who is interested in the challenges encountered in the development of mobile or distributed applications. Difficulty level: medium – advanced.
Let’s „GamEventify”! - Adina Grigoroiu Suppose you wish to organize an event dedicated to the business environment. We are living in a time when conferences, congresses and events are within one’s reach, both virtually and with physical participation. What can you do in order to organize an original event? How do you convince the participants that their time is worth being invested into your event? This presentation offers examples on how games can be used in order to increase the participants’ involvement and willingness to experiment and learn new things. Of course, you will have to be open, creative and willing to work hard. The business events with an innovator, fun and captivating concept have a price. Are you ready to pay it? Within this presentation, the participants are going to discover how games can be used to increase the involvement of the people attending their events and how they can create a memorable experience for them. The presentation is dedicated to all those involved in the organization of such events, whether they are big
www.todaysoftmag.com | nr. 41/november 2015
7
event
Cluj IT Days 2015 from the point of view of presentations
conferences oriented towards the communities they belong to, or internal events of the companies they work for. Difficulty level: easy.
Healthy Organizations - Andreea Pârvu In a context marked by constant evolution and dynamics of the market, a comparison between the concept of smart organization, centered on building a marketing strategy, a financial or technological one, and the concept of healthy organization, places the later in a competitive advantage, through the creation of an environment that reduces the risk of creating confusion, enhances the motivation and productivity of the teams, as well as the retention degree. The presentation is going to have two directions of analysis: • How to build a cohesive leadership team; • How to create clarity within the organization. The presentation is addressed to all the people who are part of a team, whether management or functional. Difficulty level: low.
Start-Ups across cultures- Șerban Țîr This presentation is a personal perspective on the similarities and differences between smart-ups in different cultures of West, USA and Romania, which I have noticed during my professional experience. The people attending will have a better understanding of what the mechanisms of a startup mean. They will also receive some advice on how to develop their own startup. The presentation is addressed to the people who are familiar to the startup culture, as well as to those who want to start a start-up. Difficulty level: easy.
Machine Learning in the age of Big Data - Daniel Sârbe An overview on the domain of Machine Learning and Big Data, mainly focused on the reasons why Machine Learning has become an important concept in the BigData era, including a demo algorithm of the online machine learning type, which we are developing in SDL Research at the moment. The participants will be able to learn what they can do with Machine Learning in the Big and Small Data context. The target audience: anyone interested in the BigData/ DataScience/ MachineLearning domains. Difficulty level: advanced.
8
nr. 41/november 2015 | www.todaysoftmag.com
Using artificial intelligence for automatizing software development - Răzvan Florian It is estimated that in five years, the shortage of programmers will reach over 1 billion people on the global level. Hundreds of billions of euros are lost every year because there is no one to write all the code that is necessary. The crisis of human resources for software development is the greatest challenge of those running the IT companies. On the other hand, the technologies of deep learning are developing fast. Can artificial intelligence increase the efficiency of available programmers? How much can software creation be automatized? How can Cluj take part in the next programming revolution and take advantage of it? The participants will learn about one of the most important transformations foreshadowed in the software industry. The target audience: all the programmers or people working in the IT industry or who are interested in it. Difficulty level: medium.
Usable Software Design- Alexandru Bolboacă “Usable Software Design” starts from the observation that the programmer is the user of the software design. Consequently, we can use techniques from UX/ Usability to improve the manner in which we create software design. The participants will learn a new approach of software design, inspired from the success story of usability and UX in the industrial and graphical design. In addition, we will discuss about how we can apply certain techniques of UX to software design. This presentation is addressed especially to programmers and technical leaders from organizations, but also to managers who want to increase productivity or decrease the time necessary to the integration of a new programmer. Difficulty level: medium.
The Power of Play- Simona Bonghez We all like to play. Studies have shown that besides the relaxation effect, the games correctly used facilitate the process of learning and increase the involvement of the participants, whether they are employees, students or clients. However, is Gamification a concept that solves all our problems related to involvement or commitment? Why is it such a debated topic today? These are but a few of the questions we will try to find an answer to during this presentation.
TODAY SOFTWARE MAGAZINE In the presentation, the following concepts will be clarified: Playful Design, Gamification, Experiential Learning and Serious Games. We will offer examples of ways of putting them into practice, and the participants will understand their benefits and the manner in which they can be applied in their companies, for real situations they are confronted with. The presentation is dedicated to all those who are willing to try new approaches, who are looking for less conventional solutions. The level is general and does not require technical knowledge. Difficulty level: easy – medium.
Programming collaborative robots with ROS - László Tófalvi, Péter Magó
very young. Are there any particularities in approaching them? Is it a different generation or is it the classical syndrome of “the young people of today…”? We are going to analyze some opinions, general or more punctual, of those who come across this situation. Other people’s experiences, whether good or bad, suggestions for or against different practices, they can all be food for thinking for the participants. The presentation is dedicated to those who come into direct contact with the new employees: managers from different areas, those from HR. But anyone working in IT can take advantage of the optimal way of approaching a situation of this type. Difficulty level: easy – medium.
We are going to meet Baxter, a robot of the new generation. It will show us what it can do and how it can be programmed. The participants will be able to learn some basic principles in robotics and ROS. They will get in touch with the main challenges in the domain. The presentation is for programmers, robotics enthusiasts and curious people. Difficulty level: medium.
Struggling with Test Automation - Issues and solutions - Gabriel Fericean In this presentation, I have gathered some of the challenges encountered on the occasion of implementing automated tests on the projects I have been working on. The presentation will tackle a wide range of technologies and tools such as Selenium WebDriver, UFT or CodedUI. This presentation will offer the participants the opportunity to improve their knowledge on automated testing. It is addressed to all the people interested in automated testing, but especially to those who are working in this domain. Difficulty level: medium – advanced.
It is easy to integrate young people in IT companies? - Dan Ionescu This presentation is intended to investigate some of the realities on a labor market that has become extremely competitive and tough, where the need of new employees has become critical. Many of these newcomers are at their first workplace and are
Young spirit Mature organization A shared vision Join our journey! www.fortech.ro
www.todaysoftmag.com | nr. 41/november 2015
9
community
IT Community
I
n november we are expecting you at Cluj IT Days followed next day by How To Web. With these two events we are closing the big events this year.
Transylvania Java User Group Community dedicated to Java technology Website: www.transylvania-jug.org Since: 15.05.2008 / Members: 598 / Events: 47 TSM Community Community built around Today Software Magazine Websites: www.facebook.com/todaysoftmag www.meetup.com/todaysoftmag www.youtube.com/todaysoftmag Since: 06.02.2012 /Members: 2700/ Events: 33 Cluj Business Analysts Comunity dedicated to business analysts Website: www.meetup.com/Business-Analysts-Cluj Since: 10.07.2013 / Members: 91 / Events: 8 Cluj Mobile Developers Community dedicated to mobile developers Website: www.meetup.com/Cluj-Mobile-Developers Since: 05.08.2011 / Members: 264 / Events: 17 The Cluj Napoca Agile Software Meetup Group Community dedicated to Agile methodology Website: www.agileworks.ro Since: 04.10.2010 / Members: 437 / Events: 93 Cluj Semantic WEB Meetup Community dedicated to semantic technology. Website: www.meetup.com/Cluj-Semantic-WEB Since: 08.05.2010 / Members: 192/ Events: 29 Romanian Association for Better Software Community dedicated to experienced developers Website: www.rabs.ro Since: 10.02.2011 / Members: 251/ Events: 14 Tabăra de testare Testers community from IT industry with monthly meetings Website: www.tabaradetestare.ro Since: 15.01.2012/Members: 1243/ Events: 107
10
nr. 41/november 2015 | www.todaysoftmag.com
Calendar November 24-25 (Cluj) Cluj IT Days www.itdays.ro November 26 (Cluj) Launch of issue 41 of Today Software Magazine www.todaysoftmag.ro November 26-27 (Cluj) How To Web 2015 2015.howtoweb.co December 3 (Cluj) „Steps towards automated driving” workshop @ Bosch facebook.com/events/926482357430895/ itdays.ro December 3 (Cluj) Let’s meet and talk about Window functions and reducing SQL Server Contention meetup.com/SQL-Cluj/events/226808955/ December 8 (București) Angular JS with Andrei Rinea m e e t u p. c o m / B u c h a r e s t - A- D - C - E - S - Me e t u p / events/226695597/ December 15 (Cluj) Launch of issue 41 of Today Software Magazine www.todaysoftmag.ro December 17(Timișoara) Testing camp Timisoara - Meetup #39 m e e t u p . c o m / Ta b a r a - d e - Te s t a r e - T i m i s o a r a / events/224894942/
programming
Indoor Positioning System Using Wi-Fi Signal
W
Bogdan Oniga bognda.oniga@betfair.com Graduate Application Security @Betfair
Iacob Nasca iacob.nasca@betfair.com Principal Developer @ Betfair
Teofil Cojocariu Teofil.Cojocariu@betfair.com Development Security Testing & Assurance Analysts @ Betfair
e have all seen the cool movies like ‘Enemy of the state’ in which the NSA is able to pin-point your location, without you noticing, by using your phone. The movie was released in 1998, and at the time those ideas might have looked like science fiction, but nowadays this might actually be plausible. With our upcoming fedex day, this was a good opportunity to try it out. Surely we don’t have the capabilities or the time that the intelligence agency has, but we should give it a shot. The problem: Can we track various col- MAC) and their Received Signal Strength Indicator (RSSI) (bsnMobileStationRssiData leagues / devices through the office? + Decimal representation of device MAC + The solution(s): There are quite a few Decimal representation of AP MAC). There solutions out there. Some commercial, some were plenty of other informations available free but it wouldn’t been nowhere near as fun for each device (IP, VLAN, Encryption used to just install one, so we had 24 hours to build etc) but were not relevant for the purpose. one from scratch. We wanted to pinpoint the location using Wi-Fi, since everyone has a Wi-Fi connected phone/laptop/watch. Our office is equipped with multiple access points (antennas), in order to ensure that we have sufficient signal throughout the building. All these access points are connected to a single wireless controller, which manages them independently. The first step was to interrogate the Wireless Lan Controller (WLC) via SNMP protocol and find out the list of Access Points (AP) MAC addresses by doing a SNMP walk on cLApIfMacAddress. For each AP in the list, we then went and read a list of all devices that AP sees (bsnMobileStationMacAddr + Decimal representation of AP www.todaysoftmag.com | nr. 41/november, 2015
11
programming Indoor Positioning System Using Wi-Fi Signal The RSSI data is given in dBm so the second step was to convert these values in meters. To do that we need the signal strength (which we have) and the frequency of the signal (which we know). The formula is a transformed form of Free Space Path Loss (FSPL)
For distance in meters and frequency in MHz, constant K is -27.55, transmitter power (Ptx) up to 20dBm (100mW) and a frequency of 2412MHz (2.4GHz) we get a simple function for the transformation.
We expected that all circles to intersect at a single point, but in the real case the measures are affected by error and the circles intersect at more than one point. These points identify an area and the precision of this solution is given by the residual
Dm = (Xm, Ym) is the resulting estimated device position.
For example, for a signalLevel of -57dBm, the result would be 7.000397427391188 meters Having all the available informations, we now need a scaled map of the place and the locations of the AP and transform everything into pixels. For our map, we scaled it so that 1m = 16px
To pinpoint the location on the map with the available informations we used multilateration. The multilateration problem can be written as follow
n is the number of AP that “see” the device and we can read RSSI value, D = (X,Y) is the position of the device, APi = (Xi, Yi) are the positions of AP i, and Ri is the distance measured from AP i to device. The system is not linear but it is possible to linearize it by subtracting the i-th equation from all other n-1.
12
nr. 41/november 2015 | www.todaysoftmag.com
The final step was to add some HTML5 smoke and mirrors to display all that information we acquired from the network equipment and see some real time movement on the map. Unfortunately, because of the rate at which the AP were updating their information, realtime actually meant every 3 seconds but having a very big office, you can’t cover much ground in 3 seconds and you’re still in the error range until the next measurements can be made. The final solution looked something like this.
TODAY SOFTWARE MAGAZINE
www.todaysoftmag.com | nr. 41/november 2015
13
programming
Designing strong systems some guiding marks
T
he strategies of software development have always been and will continue to be a permanent topic of debate and contradictions, which generates at the same time an environment favorable to important ideas. Throughout the years, I have had the opportunity of dealing with different opinions and attitudes regarding this topic.
Romulus Bucur romulus.bucur@siemens.com Senior .NET developer @Siemens
14
nr. 41/2015, www.todaysoftmag.com
Taking into consideration both the convergent opinions as well as the divergent ones in respect to a certain vision is a fundamental condition of the evolution of software development strategies. The architecture of a system cannot be defined independently; it depends on a given context, fact which introduces the later into equation, as an important and defining aspect in choosing the architectural pattern. The analysis of the component elements will cast more light upon choosing the architectural form of the solution we are developing. Each of us are formed and trained following a certain path, which determines the forming of different visions on technology. The universities we graduate from, the companies we go through, the projects we work on, the individual study contribute to the formation of a package of information which makes us see things one way or another. On the other hand, the rate of technological evolution makes every one of us assimilate the novelties to a certain degree. An important aspect, in such a dynamic environment, is constituted by the filtering of the information. The appearance
of tens and hundreds of technologies on time unit requires time for assimilation, analysis criteria, labeling capacity. Most of the times, our professional formation is the result of other people’s conclusions. We embrace the technological preferences of the companies we are working for, take over the know-how automatically, most of the times. All these form a system of values and knowledge which determine our work capacity. We begin to mature the moment we are able to detach ourselves from this entire system of technological processing and see things in an objective manner. The maturing of the architectural vision is acquired along with the participation in a bigger and bigger number of projects and through the interaction with more and more diverse work teams. The variety of projects enlarges our degree of perception of the problem. Each project contributes to the formation of a new perspective or the redefining of an existing one.
Complexity vs. simplicity Your appetite for complexity or your tendency for simplicity are traits that characterize us ever since our years in school.
It is easy to notice that right from the first years in school, some students prefer complex solutions in mathematics and others are satisfied with the shortest way to the solution of the problem. These tendencies are determinant throughout one’s entire life. Complex solutions bring new arguments and open a wider area of visibility when they are well chosen. The qualities we endow a software solution with can bring direct benefits in scalability or the strength of the application. However, if the relations between the important aspects are not well defined, then complexity can be a major impediment. It’s not seldom that I have encountered applications which were trying to combine the most important technologies of the day with the most recommended architectures, but in exchange they required a complex framework, with no well-defined directions, a kind of a chess without clear rules. The process of development and then that the systems, so that the emergence of some puzzle pieces, hard to of maintenance of such an application can be extremely difficult. anticipate at the beginning of a project, almost becomes evidence. The needs of the clients are in continuous growth, and therefore the software systems must anticipate and integrate some architecture with a high level of flexibility and adaptability to a complex environment. This fact brings up the need of creating some more and more complex and intelligent systems. The inversion of control has become a main requirement in the systems design, where each component should have the quality of being well defined and independent from the others. The same important role is also played by the interface oriented design. Right from the start, we may say that the applications that do not observe the new simulation standards are a trouble maker. Time line An important constraint is given by the deadlines for product delivery. They can put some considerable pressure on choosing the architectural elements. A complex architecture requires proportional development time. However, an architecture that is too Complexity can be an attribute of chaos or one of evolution. simple can bring a wide range of problems. Thus, the tendency of The architecture of the system has to bring clarity, flexibility and sacrificing the unit testing modules is almost obvious, in most of it has to endow the system with strength. The simplicity of a com- the situations. There is a subconscious tendency to consider that plex system is in the fact that a great number of pieces on the the functionality of the modules is guaranteed by the mere fact that there is written code, but we should pay more attention to game board create a clear, intuitive view. this aspect. The Agile environment requires the adding of new functioThe Agile environment nalities at a very fast pace, which does not allow good planning The software system of nowadays are subjected to different requirements than those produced 20 years ago. The Agile deve- and analysis of all the implications, as Waterfall does. Thus, the lopment environment brings extremely diverse requirements for introduction of errors is almost inherent. But along with the
www.todaysoftmag.com | nr. 41/november, 2015
15
programming Designing strong systems - some guiding marks adding of a package of features, the number of errors will be rather difficult to control and the time allotted to unanticipated events will be spent mainly on fixing the errors introduced during development. The need for creating error free modules requires the anchoring of every feature in a system that ensures behavior integrity. An excellent design pattern which allows us to ensure a backup of this type is offered by test driven design. This design pattern ensures the creation of some state indicators of every aspect. The testing based design (improperly called testing) imprints the solution of a somewhat different development pattern from the classical one. A mind formed on the classical programming principles omits important details in the process of design, focu-
sing on other components. The test driven design (TDD) allows the detection of problem items right from the designing stage. Even if for many, this type of development seems atypical, it guarantees strength. Thus, the effort of integrating this design procedure leads to very good results in the following stages. The systems whose architecture does not observe certain clear norms for component and layer networking, as well as the modules whose behavior cannot be continuously guaranteed (through checking mechanisms) constitutes an impediment often encountered. The development deadlines are not met, generally, because of these two categories of problems. These drawbacks can be easily surpassed if the architecture of the software systems is conceived and built with maturity. The designing of the systems should have a primary place in software development; otherwise, the applications may show a high degree of fragility. The criteria for architects’ formation are very complex. Even if many companies promote developers with
16
nr. 41/november 2015 | www.todaysoftmag.com
less than 8 years of experience on such positions, I think it is a too short time for formation. The process of defining the profile of an architect lasts a longer period of time and it also involves other factors than the purely theoretical training. The interaction with a great number of projects is important in order to better understand the conclusions of important authors, as well as the arguments that they are based on. Maturity in system designing comes when a programmer has assisted to the development of a rich number of applications, in order to be able to understand the drawbacks, but also be able to define powerful systems. Only such an experience can guarantee the strength of the created systems.
Acceptance Testing Driven Development using SpecFlow with Selenium in C#
I
n recent years, software organizations strive for client satisfaction and for that reason, testing focus changes more on what the customer needs. Acceptance Test- Driven Development is one of the wonderful testing practices where business users will get to test the product, which makes this practice not only be most important for client but is the Sebastian Silaghi sebastian.silaghi @veinteractive.com Senior Software Developer in Test @VE Interactive
last major test before delivery. In this article, I will present how to create Acceptance Testing Driven Development tests in .NET using SpecFlow. SpecFlow is an open source tool, it integrates with Visual Studio. You can define automated test using Selenium Web Driver for browser interaction, write scenarios in 100 % Gherkin language and automation code in C#.
Automation Tests in A Continuous Integration Pipeline A successful Continuous Integration pipeline is defined by automated tests that run fast, have good coverage and no erroneous results. The automation tests are usually divided in multiple suites, each with their own objective: unit tests, acceptance tests, integration tests, system tests and security tests. Acceptance tests are a crucial stage in the deployment pipeline. They take delivery teams beyond basic continuous integration. Once you have automated acceptance tests in place, you are testing the business acceptance criteria of your application, namely, validating that it provides users with valuable functionality. Acceptance tests are typically run against every version of your software that passes the commit tests. An individual acceptance test is intended to verify that the acceptance criteria of a story or requirement have been met. Acceptance criteria come in many different varieties: they can be functional or nonfunctional. Functional criteria are related to end-user scenarios, closely connected to the business processes that the application
enables, while nonfunctional criteria deal with the operation of a system, rather than specific behavior of functions. Performance, capacity, availability, security, flexibility to change, error handling and usability are good examples of non-functional acceptance criteria. The key point is that a specific story or requirement is considered complete and working only when its associated acceptance test is demonstrated to pass. The acceptance test suite as a whole, not only ensures that the application delivers the business value expected by the end-user, it also helps mitigate potential defect regression or breaking changes to the application’s functions. Automated acceptance tests catch serious problems that unit or component test suites, however comprehensive, could never catch. From a development cycle point of view, there is another major benefit to emphasizing acceptance testing: it is one of the few processes that ensures that all parties are involved in the delivery process, the customers, the analysts, the project managers and the development team (developer, testers and operational). On complex applications especially, the overhead to create and maintain a proper acceptance test suite is significantly lower than the cost of performing frequent manual acceptance and regression testing, or that of the alternative of releasing poor-quality software. Effective acceptance testing should be done for each release, as a formal phase once development is complete and a release is approaching.
www.todaysoftmag.com | nr. 41/november, 2015
17
testing Acceptance Testing Driven Development using SpecFlow with Selenium in C# In .NET world SpecFlow represents one of the most popular plug-in for Acceptance Testing Driven Development.
SpecFlow Overview SpecFlow aims at bridging the communication gap between domain experts and developers by binding business readable behavior specifications to the underlying implementation. It is an open-source .NET tool inspired by the Cucumber framework which allows writing specification in human readable Gherkin format. Gherkin is a Business Readable, Domain Specific Language that lets you describe software behavior without dealing with how that behavior is implemented and required functionality for a given system. The most frequently reported benefits of using SpecFlow are: • Encourages collaboration between team members – both technical and business oriented • Feature description can be written and/or understood by non-technical people • Implementing changes more efficiently • Higher product quality • Less rework
Using SpecFlow to Drive Selenium WebDriver Tests Integrating SpecFlow with Visual Studio is easy and consists in two steps. The first step is to install Integrated Development Environment using the Extensions and Updates option from the menu, as you can see in the screenshot bellow:
communication, spans organizational boundaries and reduces the production cycle time in new product development flows. A feature file usually contains a list of scenarios, which starts with the word Scenario. Using tagging you are able to group features and scenarios together and you can reuse parts from already defined scenarios. Every scenario is defined by a list of steps, which must start with one of the keywords: Given, When, Then, But or And. Here is an example:
The Given keyword sets up preconditions or context for the scenario. The action, the behavior that we focus on is marked by When. The scenario validation is performed using the Then statement; it actually verifies that the right things happen in the When stage. And can be used in any of the three sections and it serves as a nice shorthand for repeating the Given, When or Then. There are some situations where a negative step is required and the But keyword can be used. Translating lines into steps is performed by rightclicking in the feature file and selecting “Generate Step definition”. A wizard tool will create the step file skeleton.
The last step is to set up the project from Visual Studio to work with SpecFlow by installing the corresponding NuGet package.
SpecFlow supports multiple popular test execution frameworks like Nunit and MsTest, but also comes with a dedicated test execution engine named SpecFlow+Runner. Like any other tests from Cucumber family, a SpecFlow acceptance test requires: a feature file, step definitions and business code. In order to define the behavior of the system, a creation of Feature file is mandatory. The feature file contains an overview of the user story functionality and the scenarios written in Gherkin language. Having cross functional teams working on feature file creation is advisable, as it leads to improved team integration and
18
nr. 41/november 2015 | www.todaysoftmag.com
Executing acceptance tests at the UI level requires browser interaction, where the Selenium Web Driver allows us to abstract the communication with the web application. Inside of the auto-generated steps we can execute different operations based on the Selenium Web Driver functionality which facilitates Document Object Model interaction. Like any other automation tests, in order to handle test initialization and test clean-up, SpecFlow provides hooks: BeforeScenario and AfterScenario.
Conclusions Building the product right and building the right product are two different things, but you need both of them to succeed. Automated acceptance tests represent an important step in Continuous Integration pipeline not only as a quality gate in delivery process but also focusing on creating business- process documentation which help us avoiding the common long-term maintenance problems.
Generally, the hooks can be used to perform additional automation logic on specific events. Even if they are global, they can be restricted to run only for specific features or scenarios. The BeforeScenario and AfterScenario hooks contain automation logic that has to run before/after execution of each scenario, for example, browser initialization at the beginning of each scenario and browser disposal after each test execution. As best practices when we create an acceptance test with SpecFlow you should take into consideration the following: • feature files should actually be features and not entire portions of an application, should use descriptive title or tags and should contain scenarios that are independent and deterministic • steps should be small, simple and concise chunks of code, you should aim them to be re-usable, have a single responsibility and a good separation of concerns • write scenarios for the non-happy-path cases as well • revisit, refactor and improve your scenarios and steps
Implementing acceptance tests leads at integrating cross functional teams where testers, analysts and developers work together to build the right specification of the system. If the communication between business stakeholders and developers is clear, the software teams work best and avoiding misunderstandings by defining acceptance tests also will raise the team collaboration level. Having acceptance tests implemented using SpecFlow tool allows us using the real world example to describe the behavior of the system which makes sense to our stakeholders.
www.todaysoftmag.com | nr. 41/november, 2015
19
programming
The User Experience Audit
T
he growing need of UI/UX designers in Cluj is proof of the maturity of the IT field, registered especially in the past years. This article is meant to help both companies and products that need UX designers and UX designers themselves.
Mircea Gui Mircea.Gui@Yardi.Com UI/UX Designer @ Yardi Romania
20
nr. 41/2015, www.todaysoftmag.com
A designer’s efficiency derives not only from his creative processes, but also from his ability to analyze and rehash product information. The following paragraphs will reveal more about the preliminary stage, the stage of research and analysis (the User Experience Audit). This process has the very clear role of identifying if, and to what extent, a product may need an upgrade regarding its direct relationship with the user/client. The software products must be created and developed alongside the business needs and its clients’ needs. How can we tell which parts or components must be upgraded, re-considered, or re-created? It all starts with a User Experience Audit. This is not a new step specific to the software development process, but rather a basic component of industrial design ever since its early stages. The purpose of the audit has a double function: to create a very detailed analysis stemming from the intersection between business and client requirements and to obtain precise objectives from the users. This may be a long process, but it helps identify a clear course of action and a better plan for developing the product. This type of analysis includes aspects like: precise design rules, functional conformity, information architecture and usage patterns.
The questions that must be answered following a UX audit are: • What are the current trends and what are the users’ expectations for this market? • What have we tried so far? What worked and what didn’t work? • What sort of user problems or needs can be found in the set of data under study? • From those, which aspects can be solved with the help of the UI/UX design of the product? The audit starts with the research and documentation stage. This process will generate information that will be useful for creating research models for the user, like user persona and surveys. Most companies have access to data analysis methods for marketing, analytics, and product usage. Usually, this type of data is not analyzed from the perspective of the user or with the user’s mentality in mind. We will go through a series of sources of information and relevant data: • Interviews with the stake holders – organizing interviews with the people at the top of the decision-making hierarchy (team-leaders, product managers, team leads etc.). these interviews should
TODAY SOFTWARE MAGAZINE
help shed some light on user behavior and market structure. • Sales statistics – although this set of data is primarily used by the sales department, a part of it is useful for the UX audit as well. One type of data that we need to pay close attention to is the type that reflects communication problems with the user. For example, a certain product that is sold online may have a high send back rate because the wrong sisez were chosen. If this rate is much bigger on the website compared to the shop, it may mean that the description of the product’s dimensions might be unclear. • Call Center Information – customer support centers(phonebased or online) are a very good way of finding out about the users’ problems. Though much of this information may be irrelevant, we can discover what components of the product are missing or which aspects could be improved. For example, in the case of a subscription page, presenting 3 subscription plans, many clients would call support to ask about the difference between the three subscriptions offered, although these differences were listed on the presentation page. This type of recurring question represents a clear indicator that the presentation area needs improvement. • Web Analytics – Quantitative analyses of traffic may offer a correct perspective on the number of people who access a site, where they are coming from, what they are looking at, and they may also offer statistics for longer periods of time. We can use more advanced monitoring tools to find out more details about the navigation ”route” of a certain user, where exactly he decides to leave the site and where the user goes after leaving the site. Another useful tool is the one that records the actions of the users on the screen. This way we can easily notice the areas where the user finds it difficult to navigate the page. • Surveys – the marketing departments are responsible for making and collecting the surveys for the users. These surveys don’t usually tackle UX problems directly, but we may discover certain preferences or behaviors of the users. • Social media - review sites, blogs, Facebook, Twitter, and other social networks can offer us unique and unmediated information about how users received a certain software product. There is a big number of tools that help analyze the content generated by important products. There is a big number of users who complain about certain functionalities, but who don’t call the assistance department. There are many examples of users describing their experience and the problems certain products have, complete with screen captions of the errors, as
well as suggestions for improving that experience. • Market research – this type of materials must be read thoroughly to find the necessary information. Although this type of research doesn’t offer particular details about the products’ design, it may be used to reach functional hypotheses and to create user personas and user narratives. The useful information that can be found in market reports includes: technological competency, initial expectations, and level of involvement in fulfilling the actions. After finishing the research part, a key way to do the audit is to start a congnitive walkthrough the features of the product by taking the perspective of the user and by trying to make the product do what it was designed to do. The basic functionalities are tried and tested, one at a time, using realistic actions that the user might perform. We must pay attention to the decisions we make and the reactions we have and take notes. What obstacles do we encounter? What are the interactions that cause frustration? If possible, this process must be repeated using people who are not familiar at all with the product. During our interactions with the product we must pay attention to the following aspects: • Clear, readable text – not too long, not too short, the minimum necessary for a good understanding of the concepts. We must ask ourselves: Does this text help the user understand the context (eg: the title of the page) or the action he must perform? • Call to action – short, but clear and graphical enough for the user to understand the consequence of the action. • Above the fold – the content that is relevant for the user and which generates profit for the business must show up on the screen, above the fold(bottom side of the screen). • Pleasant visual content – using simple images, that are relevant for the target user. Appropriate color scheme, according to product type and purpose. Visual elements that don’t distract the user’s attention from or obstruct his view of the elements pointing to the call to action area. • Adhering to cultural, social, and religious norms – using images, symbols, and colors that don’t clash with the cultural, social, and religious principles of the target users. • Accessibility – checking the contrast values of the colors we used, as well as text and interaction elements dimensions. Another aspect that we need to cover is the major increase of the number of interactions from mobile devices (phones, tablets). We must make sure the navigation patterns are compatible with these devices (interaction area dimensions, hover www.todaysoftmag.com | nr. 41/november 2015
21
programming The User Experience Audit elements etc.). • Feedback Status – the system must keep the user informed about what is going on (the current step in the ongoing process, completion duration, uploading status, correct data input). • The user’s degree of control and freedom – ease of actions like going back a step, repeating or canceling the last action. • Consistency and standardization – the words we use, the situations and all the possible actions must have the same meaning in all hypostases/stances. • Preventing errors – rather than displaying an inteligent error message, it is better to design carefully, so the error doesn’t occur to begin with/in the first place. Random and repeated interactions are to be avoided by temporary deactivation or hiding of buttons. All dangerous interactions must be emphasised accordingly. • Flexibility and efficiency – ensuring different interface environments for beginners and advanced users. Users must have the possibility to customize their interface or to use different shortcuts. • Design principles – the visual composition of interfaces must respect the principles of contrast, repetition, alignment, and proximity. • Acknowledging, diagnosing, and correcting the errors – error messages must be written in a clear and direct language, must indicate the problem and suggest a solution. • Assistance and documentation – easy to access and easy to search. Using the contextual assistance instructions is the ideal way to go, as these instructions are focused on the current actions of the user (tooltips). Whether you decide to create a detailed list of the elements mentioned above or simply to succintly list them, a UX audit is the first step in understanding the design process of a complex product. Although this process seems difficult and demanding, finalizing it will offer a clear image and the right context for making informed decisions. Going through this process does not require years of experience, but it demands patience, grit, curiosity, and attention to details – all of which are vital features of a good UX designer.
22
nr. 41/november 2015 | www.todaysoftmag.com
programming
TODAY SOFTWARE MAGAZINE
OSMTime meetups on improving OSM Data
A
t the end of the each month, in our EU offices we organize an OSMTime meetup. Similar to the Maptime format, during the OSMtime meetup, local maps enthusiasts gather to share information regarding OpenStreetMap initiatives and tools and partake in map editing activities. While all GIS related information & tools are within scope, the main focus of these meetups is OpenStreetMap editing, and more specifically improving OSM within the immediate geographic vicinity.
What have we done until now? We’ve addressed different subjects like: improving the quality & amount of address data in OpenStreeMap (over 6 months, during the meetups we added and edited addresses in Cluj Napoca), contributed to the HOT OSM efforts, organized local mapping parties, learned and used various tools to improve the map (ScoutSigns, MapRoulette, etc.) and trained ourselves on specific techniques ( i.e. how to georeference images and how to use them as support for map editing). Latest OSMTime meetup: testing the Missing Roads tool At our last meetup we tried the Missing Roads tool, developed by our colleagues from Telenav. After a short introduction of the tool, where our colleagues showed us how it works and how to use it, all mappers proceeded to edit in the area they most resonated with. All the fun was possible due to the helpful manual written by Martijn van Exel on his blog. You can check the entire blog post here, but for convenience we’ll add the basic steps that would enable you to test the tool.
1. Start with the web tool
You will notice that there are different Missing Roads Layer colors for both the traces and the tiles The layer shows up like any other themselves. There are three basic tiles that JOSM layer in the layer panel, and of can also be filtered by their status as: ope- course on the main map canvas showing ned (blue), solved (green), invalid(red) you the actual missing road tiles / clusters. and by their (probable) type: – As with any layer in JOSM, it needs to be active if you want to interact with it. 2. Edit the map So if you want to select tile(s) you will need As the web tool is mainly meant for browsing. You cannot change the status to activate the MissingRoads layer first of the tiles from the web tool at this time. This can for now only be done in the JOSM plugin. We do however provide conveni- Missing Roads Panel ent links to edit the current map extent in In the panel, you can interact with the JOSM and iD. currently selected tile(s). If you don’t see the panel, you should be able to reveal it Note 1: To quickly check if there are using ctrl-F3 / cmd-F3. actually roads in the area, you can switch between the default OSM layer and an The panel has three tabs with various aerial imagery layer, courtesy of ESRI. bits of information about the selected tile. If you have more than one tile selecNote 2: The main interface to the ted, you’ll see info about the last tile you Missing Roads data is our JOSM plugin. It selected. offers a similar browsing functionality as the web tool does, but with a slightly diffeThe Tile tab shows basic information rent visualization. about the selected tile. The History tab shows a history of staThe red dots represent clusters of mis- tus changes and comments. sing road tiles at lower zooms. When you The Have a new idea? tab has a link to zoom in you see the actual tiles and the the Missing Roads ideas forum. Submit point clouds. your ideas and bugs there please!
It’s a convenient way to locate missing roads in an area, you can quickly get 3. Install and activate the plugin a sense of the distribution of the missing Install the Missing Roads plugin the roads data. familiar way, through the JOSM plugin preference pane. When installed, and after If you zoom in far enough, you can a quick JOSM restart, you should see the also see the individual tiles. MissingRoads layer and panel.
The panel also has a number of action buttons on the bottom. These are for filtering, adding comments, and resolving tiles. I will discuss those features in the next sections!
www.todaysoftmag.com | nr. 41/november, 2015
23
programming OSMTime meetups on improving OSM Data Similar to the web tool, you can decide which tiles you want to see based on their status and (probable) type. If you want to clear all filters, you can click Reset.
And because an image is worth a thousand words, this is OSMTime:
You can only filter on one status or type at a time. As a bonus, you can also set a trip count threshold. This allows you to filter out tiles that have a low number of trips passing through them. You can see the number of trips for the selected tile in the Tile tab. Clicking on the comment button opens the Add Comment dialog allowing you to add a comment to the currently selected tiles for your fellow mappers to see. If you have multiple tiles selected (using Shift while selecting), the comment will be applied to each tile. Finally, there are three buttons to resolve the selected tile(s): the ‘lock’ button solves a tile and marks it as done, the ‘unlock’ button marks the tile(s) as un-done or open again, the ‘!’ button marks the tile(s) as invalid (used this if there is not actually a road there). It’s simple right? So, shortly what we’ve discovered during our OSMTime meetup is that in certain areas there were a lot of “missing roads” already present ( in conclusion the OSM community is active), but regardless this each of the attendees found an area that needed some “mapping love”.
Mapping tips A specific tip for using the missing roads tool shared by Martijn: “you shouldn’t add roads solely based on the traces. You need a secondary source of validation. Most of the time, this will be an aerial image. The default aerial layer in JOSM is Bing. Bing imagery can be a few years old. For some regions, more recent imagery may be available. Look for aerial layers in the JOSM imagery menu. So be sure to check the imagery menu again if you’re editing in an unfamiliar area.”
24
nr. 41/november 2015 | www.todaysoftmag.com
Dragoș Andronic dragos.andronic@telenav.com Product Manager @ Telenav
programming
Common misconception: How many objects does this create?
A
common question is how many objects or how many Strings does a section of code create. Often the answer is not what you think nor should you really need to know. It is useful to have an idea of when an object is created but there is so many other factors which are often far more important to consider which can mean the total number for an application is not what you think. Peter Lawrey peter.lawrey@ highfrequencytrading.com CEO @ Higher Frequency Trading Ltd
String is a not a single object
The JVM uses Strings, lots of them.
A String wraps a char[]. This means that when you see a new String there could be a new char[] also involved. If you do + with a String it could use a StringBuilder (from Java 5.0) which also wraps a char[]. This means that usually there is more char[] created in Java than String objects. Sometimes char[] is the most common object type in a JVM.
The JVM uses Java code and this uses Strings. The ClassLoader to load your class uses Strings. The name of the class you want to load is a String as are all the System properties and all environment variables which are created so you can run your program are all Strings, both the values and the key names.
String literals are still Strings
Let us consider a Hello World program and see how many Strings are created so this A common misconception is that String literals don’t count. They don’t add to the program can run. Is it 0, 1 or 2 Strings, see if total after the code has been run at least you can guess how many are actually created.. once, however most of the time the question public class HowManyStrings { is about code which is run once. i.e. String public static void main(String[] args) throws IOException { literals still count. System.out.println(„Hello Another common misconception is when String literals get loaded. In Java 6 and earlier they were loaded when the Class is loaded, however they are now (Java 7+) loaded when they are first used. This means that a section of code where String literals appear for the first time will create new String objects.
world”); System.in.read(); } }
This program stops on System.in.read(); allowing me to take a dump of the heap. The utility jmap can give a histogram count of the number of objects currently on the heap, assuming there has been no GCs this will be the number created.
www.todaysoftmag.com | nr. 41/november, 2015
25
programming Common misconception: How many objects does this create?
Escape Analysis As you can see, the number of Strings was 2490. If I had a few more environment variables or a different update of Java it would be a different number. In short, if you are arguing over 2 to 5 String in the code you can see, when the code is run once, you may be missing most of the Strings.
But what if I call the code lots of times? If you are talking millions of times, it is likely to matter, but here is the thing. The JVM will optimise code which called this many times and it can do two things.
Dead Code Elimination Code which the JIT detects doesn’t do anything useful can be dropped. The JIT is pretty good at this and most likely the example you are looking at doesn’t do anything useful either. However in real world code, hopefully it does something useful which is where the next optimisation is useful.
26
nr. 41/november 2015 | www.todaysoftmag.com
The JIT can look at a method (or what the method would look like after everything it calls has been inlined) and see if an object escapes the method. If it doesn’t escape the method it can be placed on the stack, or effectively have it’s fields unpacked onto the stack. This means no object is created on the heap, and in fact the object header doesn’t even have to be created, all it’s fields, possibly none of it’s fields need to be created. In short, just because you see new String in the code doesn’t mean the JIT has to actually create an object, provided it makes no difference to the result (unless you are counting the number of objects created)
Conclusion The number of Strings created by even a trivial application is likely to be far more than you can imagine a use for, but called enough times and you might find that a method no longer creates any objects at all.
programming
Logging on external storages.... lesson learns
L
ogging and audit is a must have to for all applications. Without this information, monitoring and support team would not be able to know what is happening in the system, if the system works correctly and what happens in a specific point in time. On top of this, from a security perspective, you need to audit at different levels of your system who is accessing your system, what is the action and when. Radu Vunvulea radu.vunvulea@iquestgroup.com Senior Software Engineer @iQuest
There are many solutions out of the box on the market that help us to do logging and audit in our system. I suppose that all of us used at least one time in their life log4net or NLog. There are situations when you need to persistent logs in storage that are not on the same machine where your system runs. For example, a common use case can be writing all this information to: • SQL instance • Azure Blob Storage • Azure Event Hub
Hub, from where are analyzed in real time to detect any security problems or instability of the system. To reduce the network load, improve performance (speed) and control costs, each component has a buffer of where logs and audit data are written. Once the buffer reached a specify size, the content is flushed automatically. This would work perfect as long as Azure Blob Storage (for logs) and Azure Event Hub (for audit) are available.
Remarks: We will go forward with the case when you are using log4net, but similar behaBut, did you ask yourself what is happe- vior will exist with other logging frameworks. ning when this storage cannot be reached. What is happening when one of this stoThis post will cover this case, what if … the storage where I persist logs and audit cannot rage cannot be reach? What do you think? be reached. … Let’s imagine a system that write all the logs to Azure Blob Storage and audit information are send directly to Azure Event www.todaysoftmag.com | nr. 41/november, 2015
27
programming Logging on external storages.... lesson learns The buffer will become bigger and bigger. Normally, this buffer in memory because you want to have low latency for write operations. You will start to consume more and more memory and there is a high probability to end up with an out of memory exception, that will not only will block your component or application, but also will cause you to lose the current logs and audit data. Losing this data will not help you too much when you will need to trace what happen, why the component (application) is not working or why logs and audit data are not persistent. Another thing that we need to take into account is that when you write to a different destination that the default one (especially external locations), you need to think at this situation and how you should handle them.
What should I do?
There three important actions that you should make:
Event Log You should ensure that all exception or odd behaviors that appears at logger level are written in Event Logger. Writing logger exceptions in this location will guaranty you that you can trace and identify any kind of issues with your logging mechanism. Another possibility is to write directly on disk, as files, but Event Logger is a very powerful tool and monitoring and support team can aggregate automatically all event logs, define alerts over them and so on. This should be your last safetymen when your logging system is not working as expected. Don’t forget to think about where to log data from the moment when your component (application) start until in the moment when your logging component is initialized – what happens if it fails and how you can detect this. This are two questions that you should ask yourself.
Temporary Storage In the moment when the logging mechanism wants to make a flush but detects that the remote storage cannot be reached a custom action should be triggered.
28
nr. 41/november 2015 | www.todaysoftmag.com
A possibility is to have a retry mechanism that would retry to flush the data, but: • For how long? • What should you do with extra data? For how long you should retry? There is no an out of the box response. I highly recommend to try only for a few time and after that you a backup solution. For example I would make 3 retries (1s, 2s and 4s). If the logging or audit storage would be still down that I would go on the backup solution (the solution will be presented below).
What should you do with extra data? You cannot store data in the buffer, because your buffer is already full. It might be possible to do this for a few second or minutes, but this is not feasible for 1h or 4h. In this situation you should flush all the data that you have in the buffer on your local disk. In this way you will clear your flush and the new logs and audit data can be persisted without having issues with out of memory exception use case. On top of this you should ensure, that once you succeed to write logs or audit on the external storage system (in our case was blob and event hub), you should write all data that was stored on the local storage to external storage. With this solution, you will need to take into account the case when the external storage is down for a long period of time and you will be run out of space on your local storage. A cleanup mechanism should be in place for this situations. The simplest solution, that can be implement with success is for all logs or audit file older than X hours or days delete them. Using such a cleanup mechanism, local space needed for your system can be forecast easily and special cases when logs and audit files are using the available space that should be used by other system that run on the same machine will not exist.
TODAY SOFTWARE MAGAZINE
Our core competencies include:
Product Strategy
Product Development
Product Support
3Pillar Global, a product development partner creating software that accelerates speed to market in a content rich world, increasingly connected world. Our oerings are business focused, they drive real, tangible value.
www.3pillarglobal.com
Passive Storage In comparison with previous solutions, this is an optional solution, that should be used only when is critical to receive logs or audit data in a specific time interval. This solution will come with extra costs and can add also a little complexity on the system that process and analyze logs and audit trails. This solution doesn’t exclude the previous ones because both active and passive storage can go down of course. This solution involve using two different storages, one active that is used all the time and a secondary one (passive) that is used only when the first one is not available. In conclusion I highly recommend to put on the table on this case for all your system. At least write in the Event Logger any errors or strange behavior of your logging mechanism.
www.todaysoftmag.com | nr. 41/november 2015
29
programming
Introducing ironwingjs
I
n a few words, ironwingjs is a lightweight, framework-agnostic JavaScript library. ironginwjs is ment to be super easy to use and easy to integrate on any app. Out of the box, it offers CRUD manipulation over a REST API interface. It all started as a simple necessity on a private project. We needed an easy way to asimilate a RESTful API and manage the data on the client.
Andrei Cacio andrei.cacio@yahoo.com Web Developer @ Evozon
We didn’t want to use a framework at the time. We just wanted a simple library without extra dependencies to achieve this. So we started writting a small implementation of our own. It turned out to be exactly what we needed for the task at hand. So... why not open source it? If you are still reading, this means that you are a tiny bit curious about what can ironwingjs bring to the table. Ironwingjs embraces some well known and used techniques like promises and it also implements some highly extensible concepts: adapters, storage and proxy objects. First of all, ironwingjs is an opensource library, no surprise there. It is fully written in vanilla javascript, which makes it framework agnostic. This means you can use it without any extra dependencies in your own app.
jQuery’s $.ajax() or Angular’s $http service.
Instalation $ npm install ironwing # or $ bower install ironwing
Usage You can include ironwing directly in your HTML or if you are using browserify you can simply require it.
Similar libraries There are other similar libraries to ironwing like Backbone’s Backbone. Model or Angular’s has some community provided libraries like Restangular. However, these implementations depend on a dependency to work.
Fo r c o m mu n i c at i n g w i t h t h e Core & concepts server’s REST API, ironwing uses the Like it was stated above, the core of XMLHttpRequest browser API. This ironwing is build around a few concepts: object is used among other libraries like
30
nr. 41/2015, www.todaysoftmag.com
TODAY SOFTWARE MAGAZINE Adapters
Proxy objects
An adapter is an object which follows a predefined interface, so that it can be integrated with ironwing. Out of the box, ironwingjs comes with a XHR JSON adapter which is an intermediate object that communicates with the XMLHttpRequest API. The developer doesn’t interact directly with the adapter. The adapter is used “under the hood” by ironwing. The main purpose of adapters is to easily modify how ironwing interacts with the server. Anyone can write their own adapter and use it with ironwingjs. To load an adapter you simply call the useAdapter method first.
The constructor method ironwing() is basically a factory method which returns Model instances. Each model exposes CRUD methods for manipulating your data. However, ironwing never modifies the raw JSON data directly. It exposes a proxy object as an intermediate. Each model object has a .attr object which contains a camel cased transformation of the JSON response. Everything you edit on the attr proxy object, it will be later synced with the original raw response and sent to the back-end. This technique offers control over what gets edited and what doesn’t. In future releases, with the help of the proxy object, some cool features can be added like validators on attributes. A quick create and update example:
import ironwing from ‚ironwing’; ironwing.useAdapter(‚JSON’, [‚/ api’]);
This tells ironwing to use the JSON adapter to interacte with the server for all future operations. For this example, the adapter needs to know the basepath for the API’s endpoints.
Storage
By default, ironwing has a local (heap) storage. After ironwing fetches a new model, by default it stores it locally for later use. So for example if we were to fetch data from an endpoint called / users/100: ironwing(‚users’, 100).then((user) => { console.log(user.attr.name); });
We can later on retrieve that model from memory without any extra trips to the server, by simply calling var userModel = ironwing.storage. find(‚users’, 100);
Or, if we fetched a collection ironwing(‚users’,).then((users) => { console.log(users.length); });
we can later on get one or all users type model var usersCollection = ironwing. storage.findAll(‚users’);
For the moment, only the default storage can be used. In future releases we hope to implement a way to switch between storage implementations like an adapter for local storage so you can save the state of your models after refresh.
including Trubzi, Calendis, Hoteliqo and frameworks used by developers worldwide, such as Essence and Crux.
import ironwing from ‚ironwing’; var userData = { first_name: ‚Jon’, last_name: ‚Doe’; }; ironwing.useAdapter(‚JSON’, [‚/ api’]); ironwing.create(‚users’, userData).then((userModel) => { /** * a POST request is sent to the server * /api/users */ userModel.attr.firstName = ‚Jon’; userModel.attr.lastName = ‚Doe’; {
userModel.update().then(() =>
/** * a PUT request is sent to the server * /api/users/:id */ }); });
Conclusion Ironwing is a simple library which you can hook up to an API and start using that data. We decided to share this library to the world in case it comes in handy to anyone. Because it is open source anyone can contribuite with new ideeas and features which they may like. Ironwing is a different way to tackle an everyday problems, it’s meant to be easy to use and highly extensible.
Disclaimer Ironwing was originally developed for a product called Trubzi, which was developed by Evozon Systems in Cluj-Napoca. Evozon is a software outsourcing company founded in 2005 by Gabriel Cretu and Robert Masic, with clients on all continents. Evozon develops both on-demand applications, as well as its own products, www.todaysoftmag.com | nr. 41/november 2015
31
education
Imagination + Involvement + LEGO bricks = mutual help
W
hat can you build using only LEGO bricks?” was a challenge we launched a few weeks ago. We were courious what can be built using LEGOs, and your imagination and involvement really took us by surprise. We’d really like to thank you for that! This also confirms the fact that adults really do enjoy playing, and that they can be quite creative. This is illustrated in an album on our Facebook page which contains all of your creations. Here you will also be able to find those Ana-Maria Trifan anamaria.trifan@ happy-employees.eu PR & Custumer Care Specialist @ Azimut Happy Employees
creations which have been declared the winners of this challenge (Facebook/azimut.teambuilding). Worth mentioning is also the fact that all of these creations were made in a very short time, participants not having been made aware prior that we would ask them to build something. So, of course, we’re wondering what results we would get if participants were allowed to conduct this activity in an organized, controlled environment where there is plenty of time, and, most importantly they are presented with a clear objective!
met throusands of participants during our teambuilding and training programs over the years who managed to surprise us with the innovative solutions they came up during these activities, we started to wonder if we could take this to the next level, making it would be possible to have a bigger and long-term impact. We managed to create a new program which, based on your immagination, will have community impact. Now, we need your help to start implementing it!
Take one part imagination...
The program we’re talking about is called „Toy World” and was created from the desire to help. We’ve been thinking for a while now about a new program with wide social impact, using the resources at our disposal, and we got the brilliant idea to create a new breed of team building activity, one that involves both teams and the community. So, we’d like to challenge teams to a day of activities in the office, where they will have the chance to test
What do you imagine that the purpose of this activity was? First off, we were quite keen to see how creative adults could be. Secondly, we wanted to get them involved in a relaxing activity that would improve their creativity. Lastly, the purpose of this campaign was to see if such activities can trigger responses and results that can be a benefit to not only the person involved, but also to the ones around him. Having
32
nr. 41/2015, www.todaysoftmag.com
Add a pinch of involvement...
TODAY SOFTWARE MAGAZINE their inventivity by creating LEGO structures. All the bricks used in the construction will be donated to the childcare centers in Cluj-Napoca. We managed to compile a list of centers that were thrilled about our idea, and the companies that will want to get involved will also be able to make suggestions.
Mix everything with a lot of LEGOs... Why LEGOs? We chose these toys because they offer numerous benefits to both adults and children. What’s more, this is a very fun, relaxing, but also challening activity. In case there are people out there who are not aware of the beneficial impact that a few pieces of plastic can bare, we’ve made a list:
...And finally, we obtain something that is of mutual benefit! Considering all of the above, we realized that both organizations participating in our teambuilding activities and children would have only to fain from this program. And so the first Azimut Happy Employees teambuilding which includes LEGO based activities was created: Toy World. The program can be held anythime during the year, but considering that December is coming we were thinking that this is a most opportunistic time to do so. The purpose of this program is not to generate any profit, but rather to provide a few smiles and cheer to as many children as possible through the collected LEGO bricks.
We would like to thank you for all your involvement and help! You were instrumental in promoting a project that is very dear to us, and which we hope will bring joy to as many children from Cluj-Napoca as possible. We are eager to see the results of this project and will keep you up to date. If you’d like to know more on this project, or think that the company you work for would like to participate, do not hesitate to contact us!
www.todaysoftmag.com | nr. 41/november 2015
33
management
Time Management – Take over!
T
he way we live and carry on our daily activities is characterized by speed and concourse. We have to deal with an overwhelming amount of tasks and activities. Moreover, we are assaulted by an excess of information: email messages, news on different channels (printed newspapers, online media, radio or TV), phone calls, Skype messages or on other instant-messaging solutions, Facebook, Linkedin, received documents, colleagues and collaborators, clients, different types of reunions. What should our attitude and reaction be to this situation? Magnoliu Stan magnoliu@smart-training.ro Director @ Smart HR
Here are three things that I suggest: 1. Analyzing the manner in which you spend your time. 2. Learning and applying some modern tools of time management. 3. Simplifying. What should the expected result be? That’s easy – the improvement of time usage efficiency through: • the simplification of personal life • the increase of professional efficiency The idea of simplicity on both personal and professional level is approached in the American philosophy (Leo Babauta, The Power of Less), as well as in the European one and is based on identifying the essential and on the idea of eliminating or
34
nr. 41/2015, www.todaysoftmag.com
smartly managing the rest. The starting point is similar for most of us. We have a busy work schedule, we lack time for friends or hobbies, we are overweight, we begin having health problems, we lack energy and tonus. We often confront ourselves with an unhealthy, chaotic alimentation. We do not manage to do sports or work out enough. We sometimes have to deal with a high degree of stress, we have to carry out many tasks and solve work related problems. Or, even worse, we resort to excessive smoking, debts and loans. Does it sound familiar? Taking into consideration the above mentioned things, I think we should take some actions. Let’s not leave things to chance. Let’s take over our own lives. Let’s
TODAY SOFTWARE MAGAZINE gain control over time! A simple pattern, easy to understand and put into practice, involves several steps: a) Simplification and reduction to the essential, b) Planning and establishing in written a few clear goals, c) Focusing, d) Perseverance.
1. Set limits to what you are doing. 2. Identify the essential, give up on what is not important. 3. Simplify. 4. Focus on what you are doing at a certain moment or in a given period. 5. Create healthy habits. 6. Start with small steps.
The goals can be diverse, both from the professional and personal life. You can find a list of possible goals below, of which I recommend you to choose only three for the beginning. 1. Do sport regularly 2. Eat healthy 3. Become more efficient and productive in school or at work 4. Run, for example take part in at least one annual cross race or marathon 5. Increase my income by a certain percentage or amount 6. Wake up early every morning, for instance at 6:00 a.m. 7. Swim (daily, weekly or take part in different contests)
Let’s explain part of these ideas mentioned above, in order to make them easier to understand and apply.
8. Read (one book a week/ month) 9. Write a blog 10. Pay all my debts 11. Save money (a certain percentage of the income or a certain amount, on monthly basis) 12. Simplify my life 13. Free my house and/or office from useless things 14. Lose 10 kilos in 6 of 12 months 15. Write a book 16. Have more free time 17. Make time for a specific hobby 18. Visit three new places every year 19. ………………………………………………………. 20. ……………………………………………………….
anything, undiscerningly, without being necessary) vs. version B – shopping within a budget of 200 RON, based on a written list, situation where I choose only what is necessary or important, with no useless things. This is what our life looks like: we live without any limits! The consequences of a chaotic lifestyle, having no limits imposed, are the following: stress, lack of energy, decrease of efficiency, states of fatigue and running out of time for the truly important tasks. The simplification method: an example. When referring to the manner in which we are currently managing our emails, we should begin by evaluating the actual situation. Probably, at the moment we are checking emails very often, like 15 -20 times a day. How can you simplify? 1. Analyze the frequency/ number/ type/ actual amount. Establish a lower, useful, realistic limit. 2. Test the established limit for a day per week. Analyze the result. 3. If you are not satisfied with it, adjust the limit. Test it for
What does it actually mean to limit yourself to the essential? Let’s become more efficient and productive, by simplifying our lives. How can we do this? Here are some recommendations:
What kind of limits can we impose? What are they referring to? To the number of sent and received emails, to the number of managed projects, to the amount of processed information, to the volume of objects or documents we have to deal with, to the current responsibilities and tasks. For instance, let me challenge you to an exercise of imagination: version A – going shopping without a limit (you buy
www.todaysoftmag.com | nr. 41/november 2015
35
programming Time Management – Take over! a week. 4. Continue until you find the optimal value. Develop a habit, a custom. 5. Choose another aspect you wish to improve. Repeat the steps above.
How do I identify what is essential for me? Idea: just like when sculpting a statue, we begin with a block of stone from which we eliminate what is not necessary, until only the figure of the statue remains. As a method, we have to answer a few questions: 1. What are my values? 2. What are my goals? 3. What do I enjoy? 4. What is important to me? 5. What action has the greatest impact? 6. What action has the greatest impact on a long term? Simplify – eliminate what is not essential by evaluating the current situation, eliminate the unimportant tasks, delegate others, postpone, turn down other people’s requests when it is necessary. Concentrating on a small number of things. As a suggestion: we should choose the “single goal” on which to focus. Different forms of focusing may include: • focusing on a goal, • focusing on what is going on now/ at the present, • focusing on what you have to do on that moment, • focusing on positive aspects, • single tasking. Forming new habits is a method that helps us acquire long term habits. How can we do this? Here are some steps to be followed: • Choose only one habit. One at a time. • Make a plan: what do I do every day, what time. It is important to place it within some routine (for instance: after brushing my teeth, I go running for 20 minutes). The recommended duration for implementing this plan is 30 days.
36
nr. 41/november 2015 | www.todaysoftmag.com
• Give your intended goal to the public: colleagues, family, friends or on Facebook. • Measure and register the results, announce your progress daily or periodically. • After 30 days: you have got a new habit. Even if it seems easy, there are a few rules to be observed: • Choose only one habit at a time. • The habit has to be realistic and easy to carry out. • It has to be measurable. • Be consistent! • Report daily. • Maintain a positive attitude. Begin by small steps, having a simple goal, something easy or by dividing an ambitious goal into smaller sub-goals that can be pursued step by step. This strategy of beginning by small steps is useful for: • focusing attention; • keeping the energy and enthusiasm; • it’s easier to manage; • it ensures success on every step; • progressive change has a longer lasting effect. In conclusion, our time is much too important and valuable for us to waste it. Take over, simplify your life and form healthy habits. Good luck!
event
SoCraTes 2015 Unconference
T
hat is the key idea on which the concept of “unconference” was based upon. “The most interesting parts of a conference are the coffee breaks” That the networking and information transfer, the best part of a conference, happens in a more efficient and enjoyable manner between sessions. Mihnea Lazar mihnea.lazar@ msg-systems.com Software Developer @ msg systems
Also known as an open space conference, an unconference steers away from the classical concept of fixed conferences with predetermined subjects of discussion. • Participants propose subjects of their own. These can be topics on which they have knowledge and want to share, or are seeking knowledge from other participants. • Non-profit, low-cost. Very much resembles a retreat with highly-collaborative interactions. • Whatever happens is the only thing that could have happened.
The conference started on Thursday and ended on Sunday. Thursday, the conference began in the evening. Participants attended a World Café, a meeting where they got to know each other better. Friday and Saturday were the Open Spaces, the main attraction of the conference. On Sunday, the participants were free to make workshops of their own, where they could apply the knowledge they had accumulated and/or work on different projects with people they had gotten to know at the event.
SoCraTes 2015 Germany
The open space
After a few years, SoCraTes has expanded as an event, and now takes place in multiple places across the world (United Kingdom, Belgium, Canary Islands, Switzerland). The Germany edition of SoCraTes took place in Soltau.
The main tool of the open space: the board! On the left side of the board were the time slots available for the session (base time of 1 hour each), and on the upper side, where the meeting rooms available for the sessions.
www.todaysoftmag.com | nr. 41/november, 2015
37
programming SoCraTes 2015 Unconference
After the World CafĂŠ event from Thursday, the participants had gotten to know each other and were more comfortable with sharing their ideas. So, they were invited to line up and present the topics they were interested in. The line of people waiting to add topics stretched on both sides of the board. The board was filled with topics, which stretched out from 10:30 up until 18:00 on both days! Some topics
presentations prepared before, so the questions were welcomed at any time clarification was necessary. Because of the small number of people, the questions could flow at a comfortable pace for all that were present. Some sessions started discussions that grew into other sessions. In these cases, they were either continued outdoors, in the hotel court, they found another timeslot later, or they exchanged
were later expanded and discussed at dinner, after dinner, at the contact info or blogs. bar, or repeated the next day. Inevitably, there were situations when a participant would An average of 10 participants attended each session, creating leave during a session, which was perfectly ok. Participants were the atmosphere of work colleagues discussing random topics free to attend more than one session in a given timeslot, and get after work, over beers. Most topics were discussed without any basic information or references from each.
38
nr. 41/november 2015 | www.todaysoftmag.com
TODAY SOFTWARE MAGAZINE
A selection of sessions: 1) Web front-end • Bootstrap library was presented. This library permits an easier design of the front-end of web pages by adding predefined CSS templates to already existing div elements in web pages. • The concept of grids was introduced, which is a way in which responsive web UI templates structure divs on grids, so that, when the page becomes smaller, for smaller screens, the divs are reordered on the page in the way intended by the programmer, for optimal user experience. 2) Personal knowledge management and productivity • Blog all about it. If you have an idea or article you want to share or remember, a blog can be an excellent centralizing spot. • “Getting things done” – David Allen • Apps with email integration, to remember and remind about tasks. Examples: Todoist, Evernote • Pomodoro technique, allocating a modest fixed timeslot for a well defined task • Personal Kanban boards • Mind mapping tools • Podcasts. Examples: “Turing incomplete”, “.NET rocks” • Gamification, via games that reward players for complete tasks. Example: Habit RPG
o Hard to move from the place • Pros o Time independence o Time for personal stuff o Office distractions absent o Faster switching back to private life 5) Remote pair programming, where some tools were presented, with the purpose of improving this process • Saros – Eclipse plugin, in which two users write on the same code. Only one resource in the IDE is shared via an XMPP protocol, so the users are actually sharing text with this plugin. • Tmate – Instant cross-platform terminal sharing • Screen Hero o Cross platform screen sharing o HD quality o Voice chat o Multiple mouse cursors
3) Blender 3D modelling introduction • Where an example of a 3D model was created during the session with the use of the Blender tool. Complex stuff.
6) Code is music • In which examples of code were shown that create music, by setting the frequency, amplitude and tone of sound waves and overlapping multiple music beats to create a complex music piece. • The base programming language used is SuperCollider, and it has libraries for other languages such as Clojure (Overtone library) or JavaScript (Gibber)
4) Remote work, where a number of people shared their thoughts on this process and compared notes. Some of the people worked remotely, some had colleagues who worked remotely, and some managed over people who worked remotely. Each brought some original ideas to the table.
7) Monorepos • How Facebook and Google distributed their source code repositories • Using a single monolithic repository in which all connected projects are stored
• Tips: o Communication is improved via webcams o Communication should be often, either via email or wiki pages o Information should be centralized on a wiki • Apps o Skype for voice o Slack for chat o VNC for screen sharing o Google Docs
8) Open salaries • How one startup in Berlin experimented in having each employees’ salary disclosed to all other employees • When new people join the company, their salary is decided based on a 2D chart depicting their experience on one axes and their expected responsibilities on the other axes. All employees can participate when deciding the new employees’ salary. • At first, most were paid less than what they should have earned, based on the chart • Presently, most are paid more • Excel sheet with what they should get and what they actually get • Factors: experience, role, family, responsibility, distance (location)
• Cons o Working alone o Distraction from non-working environment
www.todaysoftmag.com | nr. 41/november 2015
39
programming SoCraTes 2015 Unconference 9) Concurrency, robustness & Elixir • Elixir is derived from Erlang • Basic physics don’t permit much more MHz in processors, so basic programming paradigms should be changed • Functional, robust, lightweight VM, massively concurrent, asynchronous • An ecosystem which allows design patterns to be added to build robust systems • Improvements in Elixir: o Syntax improved over Erlang, inspired by Ruby o Full Erlang compatibility o Aims for enhanced productivity • Elixir processes are extremely lightweight • Code can be changed at runtime (hot code swapping)
Souces: Photos: https://twitter.com/coderbyheart/ Socrates 2015 Sessions: https://www.socrates-conference.de/ wiki/2015/index “Code is music”: http://supercollider.github.io/
40
nr. 41/november 2015 | www.todaysoftmag.com
workshops @GrandHotel Italia, Cluj-Napoca 0900-1700
23rd of Nobember
JAVA PERFORMANCE WORKSHOP
LEARNING BY HAVING FUN PROJECT MANAGEMENT THROUGH PM GALAXY BOARDGAME
FOR SENIOR JAVA DEVELOPERS
An advanced review of how the JVM really uses memory: • What are references, • What is compressed OOPS, • How are the fields in an object laid out.
FOR TEAM LEADERS & PROJECT MANAGERS Come to learn and play! Join us on a learning journey, in a workshop about Project Management. Our guide is the first Romanian Project Management boardgame. This workshop is an introduction to project management and offers a clear structuring of projects: a simple approach, but not simplistic. Its goal is to guide participants through project management main stages: initiation, planning, executing, monitoring and controlling, and closing. Traps, challenges and best practices will be experienced with the help of a boardgame especially designed for this purpose: PM Galaxy. The game aims to test your project management knowledge and skills on a fun, challenging route, where the only constant is the struggle for resources. There are five projects in the game, each coordinated by a player. Projects have their own objectives, but are interdependent. The player who completes the project and meets the success criteria listed in the project description wins the game. The game follows closely a traditional Project Management approach, suitable for companies developing their own products or services. The players choose to respond or not to Quizzes, gaining Resources (in exchange for correct answers) and decide how to deal with Challenges and whether or not helping other projects. Resources are shared and – as in real life - limited!
Pushing Java 8 Lambdas to their limits and beyond: • How can new features in Java 8 be used to make writing Low Latency application easier? • How do you tune garbage creation in the use of Lambdas?
Chronicle Engine hands on: • Publish/Subscribe and Key-Value store • It supports building and wiring of objects with a simple configuration • Remote access to those components for Java and C#. • Real time updates to live queries via a streams like API using lambdas. • Write lambdas on the client to be executed on the server atomically or asynchronously, for any purpose. • Supports clustered applications. • Support for millions of distributed actors per server.
If you want to learn or simply recap your project management knowledge, join us for a colorful workshop, full of fun, challenges and AHA! moments related to Project Management best practices.
PETER LAWREY Higher Frequency Trading
SIMONA BONGHEZ, PHD
He has a popular blog “Vanilla Java” which gets 120K page views per months, is 3rd on StackOverflow.com for [Java] and 2nd for [concurrency], and is lead developer of the OpenHFT project which includes support for off heap memory, thread pinning and low latency persistence and IPC (as low as 100 nano-seconds)
Colors in Projects Owner of Confucius Consulting, member of the PMI CMAG has over 15 years of experience as a trainer and consultant in management and project management. She truly believes that humour, games and metaphors are powerful tools for having interactive and enjoyable training sessions, thus enforcing the learning process.
Price: 250 euro + TVA
Price: 90 euro + TVA 0900-1700
23rd of Nobember
0900-1700
23rd of Nobember
0900-1700
26th of Nobember
FUNCTIONAL THINKING
JAVA 8, MULTITHREADING AND PROFILING
The most used languages now have functional programming features
Java 8
• • • •
Multithreading & Currency
FOR MEDIUM & SENIOR DEVELOPERS Why is that a good thing? What is functional programming? How can we take advantage of these features? How does it relate to reactive programming?
During this workshop we will write and discuss code with a functional style and see what the advantages / disadvantages are. The participants can use any of the following languages: Java8, C#, F# , Clojure or Scala.
OVIDIU DEAC Ullink Ovidiu is a software engineer with a particular inclination towards code quality and agile development. He worked with imperative languages, C++, Python, Java and C# for more than 10 years before getting to functional programming. A few years ago he started the local FP community in Cluj and organized regular meetups with topics revolving around FP. Currently he works at Ullink, promoting the functional way of thinking. Ovidiu also orchestrates regular FP and TDD trainings.
Price: 100 euro + TVA
FOR MEDIUM & SENIOR JAVA DEVELOPERS
• How to base line the speed of one thread. • How to identify when using multi-threading makes sense. • What multi-threading model is appropriate for your use case. • How to use thread pools and fork join.
Profiling & Tuning • How to hide problems, how to find problems with performance profiling. • Using JMH for benchmarks. • Writing custom benchmarks, common pitfalls and how to avoid them.
PETER LAWREY Higher Frequency Trading He has a popular blog “Vanilla Java” which gets 120K page views per months, is 3rd on StackOverflow.com for [Java] and 2nd for [concurrency], and is lead developer of the OpenHFT project which includes support for off heap memory, thread pinning and low latency persistence and IPC (as low as 100 nano-seconds)
Price: 250 euro + TVA WORSKHOP PARTNER:
Partners
Supporters
Organizer
sponsors
powered by