No. 7 • January 2013 • www.todaysoftmag.ro • www.todaysoftmag.com
TSM
T O D A Y S O F T WA R E MAG A Z I NE
How to Web 2012 has reached its end. Thank you all for attending! Achievements and visions at the end of 2012 The Cluj IT History (II) SEO - Improving CTR with Rich Snippets? Financial software development: trading platforms requirements Liferay Service Builder vs. Spring Roo Situational Leadership Art & IT: overcoming the conventional framework by stimulating creativity Alternative PHP runtimes What are the real cucumbers of the ISV gardener? How to be a Registered Sole Trader (PFA) Windows Azure Mobile Services 10 design principles - part II Cheap startup Startup - TXTFeedback Introduction to Grails (II) The Case for PHP Gogu and Miorita
6 How to Web 2012 has reached its end. Thank you all for attending! Oana Călugar
7 Achievements and visions at the end of 2012 Ovidiu Mățan
8 Made in România Ovidiu Mățan
10 The Cluj IT History (II) Marius Mornea
12 SEO - Improving CTR with Rich Snippets? Radu Popescu
14 Financial software development: trading platforms requirements Cristian Ruja
17 Liferay Service Builder vs. Spring Roo Vlad Hosu
20 Situational Leadership Andreea Pârvu
23 The Case for PHP Ioan Bercea
26 Alternative PHP runtimes Attila-Mihaly Balazs
29 What are the real cucumbers of the ISV gardener? Mihai Nadăș
31 Introduction to Grails (II) Tavi Bolog
34 Windows Azure Mobile Services Radu Vunvulea
36 10 design principles - part II Ștefan Baritchii
39 Cheap startup Dragoș Andronic
41 Startup - TXTFeedback Dragoș Andronic
43 How to be a Registered Sole Trader (PFA) Delia Coman
45 Art & IT: overcoming the conventional framework by stimulating creativity Delia Coman
46 Gogu and Miorita Simona Bonghez, Ph.D.
editorial
Ovidiu Măţan, PMP
ovidiu.matan@todaysoftmag.com Founder & CEO @Today Software Magazine
Let’s review 2012. It was a year of preparation, negotiation, optimization of processes and a lot of plans. Some of them were accomplished and others will be put into practice in the future. We have started the idea of promoting the IT world, which was largely unknown to the local public and I think we achieved it. In this year’s seven editions we had a total of 160 articles and 56 published authors. We had over 8,000 unique visitors, with a total of 27000 viewed pages, given that many readers have directly downloaded the magazine in pdf format. Cluj leads among cities with nearly half of the visits, followed by Bucharest and Timisoara. I would like to mention the series of events during the magazine launch, which have enjoyed great success. All this would not have been possible without the four main sponsors: ISDC, Small Footprint, 3 Pillar Global and Endava. I would also like to thank Skobbler and Ullink in this issue for their support. Last but not least, we thank our readers, because without their support all this would not have happened! Looking back, I would like to mention the most important events I attended and which are a point of reference for the Romanian software development: IT Camp, Business Day Cluj and How To Web 2012. I should note that none of these are at their first edition, which again proves the importance of prediction and learned lessons. What do we want for next year? A monthly publication of the magazine, publishing to Apple Newsstand and a new website. We have a lot of ideas and we believe we will surprise you in a pleasant way. Number 7 contains several articles begun in the previous issue: 10 design principles and Introduction to Grails and the series Made in Romania, The Cluj IT history. We also have Achievements and vision at the end of 2012 from three major Romanian businesspeople. Financial software is a topic that has not been addressed so far, so we will try to have a series of articles on it. A special emphasis falls on PHP language with two articles on this topic in this issue. A description of two RAD frameworks: Liferay Service Builder Vs. Spring Roo. TXTFeedback is a startup from Cluj. Dragos, its co-founder, explains how we can create a startup using minimum funds, but with different programs that the Romanian state makes available. He will also tell you about the way he wants to improve the customer support services using a product developed by them. What are the real cucumbers of the ISV gardener shows the business challenges and solutions in Cluj and beyond. An original article is the link between programmers and streets art by a specific event. Finally, I suggest you shouldn’t forget about Gogu and Miorita, a quick, enjoyable and instructive reading.
Ovidiu Măţan Founder & CEO of Today Software Magazine
4
nr. 7/2013 | www.todaysoftmag.com
TODAY SOFTWARE MAGAZINE Editorial Staf Fondator / Editor in chief: Ovidiu Mățan ovidiu.matan@todaysoftmag.com
Authors list Oana Călugar
Attila-Mihaly Balazs
Customer Care @ Weebly
Code Wrangler @ Udacity Trainer @ Tora Trading
oana.calugar@wembrio.com
dify.ltd@gmail.com
Editor (startups and interviews): Marius Mornea marius.mornea@todaysoftmag.com Graphic designer: Dan Hădărău dan.hadarau@todaysoftmag.com
Cristian Ruja
Andreea Pârvu
Product Team Manager @ ULLINK
Recruiter @Endava
Ovidiu Măţan, PMP
Radu Vunvulea
andreea.parvu@endava.com
cristian.ruja@ullink.com
Marketing:: Ioana Fane ioana.fane@todaysoftmag.com Translator: Cintia Damian cintia.damian@todaysoftmag.com
ovidiu.matan@todaysoftmag.com Founder & CEO @Today Software Magazine
Reviewer: Tavi Bolog tavi.bolog@todaysoftmag.com Reviewer: Adrian Lupei adrian.lupei@todaysoftmag.com
str. Plopilor, nr. 75/77 Cluj-Napoca, Cluj, Romania contact@todaysoftmag.com www.todaysoftmag.com www.facebook.com/todaysoftmag twitter.com/todaysoftmag
Senior Software Engineer @iQuest
Marius Mornea
Simona Bonghez, Ph.D.
Founder of Mintaka Research platform
Speaker, trainer and consultant in project management
marius.mornea@todaysoftmag.com
Simona.bonghez@confucius.ro
Owner of Confucius Consulting
Made by
Today Software Solutions SRL
Radu.Vunvulea@iquestgroup.com
Vlad Hosu
Dragoș Andronic dragos@txtfeedback.net
Senior Developer @ ISDC
CTO
vlad.hosu@isdc.eu
@ TXTFeedback
Tavi Bolog
Mihai Nadăș mihai.nadas@tss-yonder.com
tavi.bolog@nokia.com
CTO @ Yonder
Development lead @Nokia
ISSN 2285 – 3502 ISSN-L 2284 – 8207 Radu Popescu
rpopescu@smallfootprint.com
Delia Coman
delia.coman@impulsit.ro economist, trainer and antreprenor
QA and Web designer @ Small Footprint
Ioan Bercea
Rodica Manolache
Senior Web Developer @ 3Pillar Global
Marketing & PR Specialist @ .msg systems Romania
ioan.bercea@3pillarglobal.com
rodica.manolache@msg-systems.com
Copyright Today Software Magazine Any reproduction or total or partial reproduction of these trademarks or logos, alone or integrated with other elements without the express permission of the publisher is prohibited and engage the responsibility of the user as defined by Intellectual Property Code www.todaysoftmag.ro www.todaysoftmag.com www.todaysoftmag.com | nr. 7/2013
5
events
How to Web 2012 has reached its end. Thank you all for attending!
W
November.
hen you enter 2012.howtoweb.co, you encounter these words: How to Web 2012 has reached its end. Thank you all for attending! One month after the conference, I am still inspired by some of the speeches I’ve heard and the people I’ve known. And I’m really sorry it only lasted for two days and it was over. How to Web was held in Bucharest on 7 and 8
After months of planning, organizing, waiting, overloaded schedule and hundreds of hours of communication, the organizers, Bogdan Iordache and his team, have lived the beautiful moments of the successful event and received applause for their efforts. As a supporter of How to Web I lived a bit of the excitement preceding the event, when I helped sending the message about How to Web to those who should Know about it. Thus to minimize the number of people who will tell you their stories after the event: If I knew that it was so interesting, I would have come too. Because How to Web is so interesting and important for this part of Europe and especially for those people in Romania who work with, live and breathe technology. Below are the most important ideas we heard:
-- there are live humans behind the software
Max Niederhofer, Partner @Accel Partners -- Building Big in Europe
There are many obstacles to building billion dollar companies in Europe: structural, regulatory, industrial. But the biggest barrier to building a big company in Europe is the one in our heads. Listen -- most great entrepreneurs are great listeners. Take pride in what you do. Everything that’s worth doing, is worth doing well.
Christian Boos - Founder & CEO @Arago AG -- Particle Collision in Code Space API meets Big Data
79 times more CPU power than used in Apollo Missions -- on one iPhone. Your platform can not handle infinite exploration and your users will not underPhil Libin, CEO @Evernote -- The power stand the mechanics behind your data of innovation processing. Advice on building a company and a Example: Big Data-based IT modelling tech business: don’t do it, it’s tough. If you do and pricing app: mars-o-matic.com it, do it for the right reason. Build something for yourself. You have to be good at math to Mark Pascarella, CEO @UberVU -- The be an entrepreneur. pains of growth Why consider global growth? David Bizer, Talent Geek @HackFWD -• Follow the money: US, China, Brazil, The Culture Club Japan, China -- go where the money For startup, everyday meetings are like is air. You need to gain support for your idea • 21% disposable income spent online from your colleagues. in US, UK, Canada, Australia Product-focused culture: It’s empowering • Global expansion means: to be asked to look at what’s possible, not told • huge markets how to do it. If you’re not embarrassed by the • access to talent first version of your product, you’ve launched • access to partner & platform too late • access to capital • Expansion may not be good for you: David Noel, Community Manager @ • if you don’t speak the language SoundCloud • if you’d rather be a big fish in a small How to Build a Community: Three pond Confessions Humanize customer care; when • if your product doesn’t translate to our service is down, respond with a picture local market with the worried team, the people who care • it could divide your team
6
nr. 7/2013 | www.todaysoftmag.com
• • • • • •
if you don’t like this kind of lifestyle Resources to make it happen: culture communication network presence
Besides the two-day conference, Romanian and international startups entering the Startup Spotlight competition had four days of workshops, pitching sessions, mentoring sessions, meeting with 12 business international accelerators and $ 20,000 cash prizes. Those who were not in a startup, have immediately wanted to start or work In a startup! My impression after two days of How to Web: there are people who have succeeded – so it is not impossible, even in Romania we can learn from the best; the speakers are very eager to share – we only need to have the curiosity to ask; technology is great to work with because change and innovation are the only constant and we learn all the time. All in all, If all participants left with something new they learnt at How to Web, it would be a good step forward for the Romanian tech entrepreneurship.
Oana Călugar
oana.calugar@wembrio.com Customer Care la Weebly @ 3Pillar Global Romania
business
TODAY SOFTWARE MAGAZINE
Achievements and visions at the end of 2012
W
e had the opportunity to ask Marius Ghenea, Andrei Pitis and Voicu Oprean’s about their achievements in 2012 what global vision they have for 2013. We have also discovered their opinion about the Romanian software industry. These mini interviews were conducted using Business Days www.businessdays.ro. We would like to thank Codruta Nicolescu, CEO of ADESCO, for all her help. Q: What are your main achievements in 2012? This year’s key achievements were related Marius Ghenea to the launch of a new Business angel educational program called BusinessDrive, a program which is aimed to both small and medium entrepreneurs and managers as well as medium-large companies, to regional development of some of my portfolio investment companies, such as FashionUp, the online expanding mall in Bulgaria, the significant turnover rise in virtually all companies in which I invest as business angel and last but not least, the fact that I started work on the board of Tarom, the national airline, in order to improve as fast as possible this important Romanian brand.
Q: What about the Romanian software development market? I think that it is a market not valued at its real potential, because the products and services of low added value (call center, outsourcing) perform most of the volumes of the Romanian IT market, while the ideal situation would be that in which Romanian IT firms will increasingly focus on the production of original software which can then be scaled and will produce high added value for those companies, but also for the Romanian economic environment as a whole. However, good signs have appeared in recent years from this point of view in the Romanian IT market, especially that the entry barriers in global markets are falling, along with the occurrence of aggregation sites, cloud opportunities or application platforms such as appstore.
Q: What do you think the worldwide lines of Q: What are your main achievements in evolution will be in 2013? 2012? Worldwide, I believe that 2013 will be • Clevertaxi, the angel similar to this year, a new year of entreinvestment at the end preneurship, meaning that most progress of 2011 launched the in the global economy will be sustained or product as planned and even defined by entrepreneurial business, Andrei Pitiș started to generate revewhich at the same time will continue to be President of ANIS nue positioning itself as a the main source in creating new jobs. The market leader verticals with the most significant develop• a new type of angel ment will be the IT ones (mainly mobile investment in i-Rewind, a worldwide Internet and mobile Internet-based applipatented innovative product which cations, as well as related equipment such will be released soon as tablets and smartphones) green energy • TechMind, the headhunting agency (wind, solar / photovoltaic, other forms for software engineering has become of renewable energy), environment (envibreakeven and began to grow. ronmental goods and services, recycling), • I co-founded TechAngels together and bio-technology and the health busiwith Radu G. and Bogdan I., the ness (especially medical care for the aging first group of angels in technology population). in Romania • As the President of ANIS I brought Ixia as a lead partner in HowToWeb,
•
the biggest Tech event of the region. Ixia offered prizes for Startup Spotlight, a contest with 32 participating companies selected from over 120 applicants from all countries around. The ANIS participation in the state aid scheme for companies with an innovative component / Tech for more than 20%, the scheme initiated by the IT & C Commission of AmCham.
Q: What do you think the worldwide lines of evolution will be in 2013? Worldwide, 2013 will mark the emergence of new competitors in the mobile devices market. Microsoft just released the Surface; Amazon is likely to introduce a phone as far as their Fire tablet is more and more present. I do not think Nokia has said its last word. It is also expected that the mancomputer interaction to be increasingly linked to mobility, if only emails are now on your phone or tablet or computer and, along with the increasing penetration of cloud technologies, we’ll see the documents for any device. Q: What about the Romanian software development market? The Romanian software development market continues to grow due to the existence of qualified specialists, but especially due to foreign offers, not at all cheap. We see that more and more IT entrepreneurs are turning to their own product development and even attacking foreign markets. The mobile application market will grow further. I think The Romanian Ecommerce will have an explosive growth as people are more familiar with the cards and the returns policy is increasingly better. www.todaysoftmag.com | nr. 7/2013
7
business
Kishinev applications for mobile devices increased Q: What are your main achievements in - The launch of Web Smailo Energy - 5 times in 2012 as compared to 2011 and 2012? the first Smailo tablet will definitely keep its pace in 2013, since external demand is growing. The call cen- T h e l au n c h of Q: What do you think the worldwide lines of ter services also recorded a large increase TraficOK, the first plat- evolution will be in 2013? and more and more foreign companies are form that integrates outsourcing these services for Romanian software from Romania The optimization processes and companies. However, the internal demand an d t r ans m it s re a l - restructuring of companies started in the remains small compared to the potential Voicu Oprean time traffic information early years of crisis would rather have to be benefits. The budgets that companies or CEO Arobs nationwide; completed and in 2013 we should start to institutions from Romania invest in tech- The launch of Smailo see the effects. Even if the economic envi- nology are greatly diminished and 2013 TMC - the first GPS solution in Romania ronment is still unstable, we do not know does not seem to be spectacular in this with preinstalled TMC (Traffic Message how the euro will evolve and whether there matter. The only software solutions that Channel) will be repercussions on EU countries, the have increased domestic sales are those - The strenghtening and expanding of investors are reserved, and so on. There are dedicated to reducing costs and optimizing the operations in Hungary and Moldova and will be areas that will record growth in the activities with short-term effects and -The increase of over 1500 clients only both services and manufacturing. results. in Romania - New contracts for software deve- Q: What about the Romanian software development in countries like U.S., Canada, lopment market? Finland,Sweden and Norway Ovidiu Măţan, PMP ovidiu.matan@todaysoftmag.com - The development of a new version of The software market in Romania has the OptimallSFA product for mobile termi- increased steadily over the past five years Founder & CEO @Today Software Magazine nals operating on Android even if not as spectacular as in the past but - More than 300 employees in Cluj, it is a healthy growth based on efficient Iasi, Bucharest, Oradea, Ploiesti, Budapest, businesses. For example, the segment of
Made in România
T
his section started in the previous issue is now presenting another games production company in Cluj-Napoca. It is an area of particular interest in terms of Romanian innovation. The company initially started offering outsourcing services, but then it gave them up, the focus being now 100% on developing new applications.
I
DEA Studios is a startup founded in 2007 by Daniel Tamas and Tudor Rad, two young entrepreneurs and former web development freelancers, or SEO. If firstly the company focused on web design outsourcing contracts, today SEO and game development only focus on their own products and they have created a network of Flash games portals that raise 9 million visitors each month. In early 2012 they bought what today is their main project, www.enjoydressup.com and Paul Muresan, the site owner, joined the management team.
www.ideastudios.ro
8
Q: Describe the newly launched product Tudor: Our latest product is www.gamolition.com launched in March 2012 and is a Flash portal focused on games for boys. Working for 4 years only in the girl gaming niche we felt the need to diversify the range of games we produce as well as our portals’ traffic pool. The incentive was twofold: the opening of a new market and the fact that we got tired of drawing and coding pink dresses and curly hairstyles every week :)
nr. 7/2013 | www.todaysoftmag.com
business
TODAY SOFTWARE MAGAZINE
Q: Describe the technologies used Tudor: Exclusive Adobe Flash and Adobe Illustrator. We are trying to gradually change phones and we use Adobe Air to port some of over 300 games created by us on Android. Many people asked me why we do not shift to mobiles faster, because this is the place where the money is, because Flash is dying, etc. The reason is simple: we have a rather big piece of the International Flash market and earn our bread here. The mobile still remains the main technology but we do not want to replace what we have with Angry Bird, at least until we gather some market data with our exploratory product.
Tudor Rad
tudor.rad@ideastudios.ro Co-founder @IDEA Studios
Q: Describe the main challenges that have appeared in product development and what solutions you found? Tudor: We are in a massive traffic industry and the main difficulty was our lack of experience in the management of viral content sites that caught spikes which destroyed the server every few weeks. I have not actively participated in their development but my colleagues Daniel and Paul have done a great job in optimizing web sites and the server for our growing traffic. Another technological challenge is the change from Flash to mobile - even if Adobe Air is becoming a more attractive option for porting, there are still enough problems and it takes user-made extensions to use certain features, such as Facebook integration, using micro transactions in games, commercials integration etc. We are in the process of learning and still do not know exactly what Air’s limits are, but the fact that games running and functioning as well as those written in native code are already ported to Air on Appstore and Google Play gives us some hope. Q: Tell us a few words about the company Tudor: Besides my other two colleagues in management, we have a team of 5 Flash developers, 5 and 6 graphic content managers dealing with the PR of games portal and other secondary projects. Aside from our network of sites, which reached some respectable numbers, I am mostly proud that we managed to build a team. We are all young and may not have much experience but my colleagues have proven many times that they are united for better or for worse. It’s an incredible feeling that under the economic and social conditions in Romania we can create our own products and an enthusiastic team without external capital flows and without signing contracts with the devil (or the Romanian state). Q. Care este următorul produs la care vă gândiți să îl lansați ? Tudor: We are now discussing the details for more complex game for girls, which we want to launch simultaneously in Flash and Android (perhaps the Appstore, which is yet untested). I think the niche games for girls is still very poorly represented in mobile gaming and our experience in Flash might help us create products to a quality standard that would give us that „edge” that you need to succeed in any industry. In 2012 we started with one site that had ~ 2 million active users per month and the target for the end of the year was to reach 10 million (a target that we missed with almost 1 million). In 2013 we aim to reach and stabilize ourselves to 15 million visits and have at least 5 quality mobile products.
www.todaysoftmag.com | nr. 7/2013
9
history
The Cluj IT History (II) Lessons from the past
I
n our last issue, we’ve asked many questions, some philosophical, some statistical, some to the point, others completely open, most requiring complex answers in need of in depth research. As a result, we began with the more approachable side, the technical one, discovering straight away that most of its history profits from an abundance of information made available due to the “great achievements of the people” cult, specific to the political medium that gave birth to the Romanian IT. Also, in the same direction, we benefited from our readers support, and I’m taking this opportunity to give my thanks to Mr. Marius Muntean, for all the materials he sent. In contrast, the social perspective is much poorer in information, and most of the prominent historical figures are harder to come by and challenge to one on one discussions. As such, we turned for help to Mr. Ioan Salomie, university professor at UTCN, and he granted us a meeting full of memories, nostalgia, but also important data and characters from Romanian ITs early years. The meeting went exactly as expected, raising more questions than answers, and the new information and figures deserve at least a dedicated article much bigger than what I had planned for this number. I’ll dwell on one curiosity: information access. Trying to identify knowledge sources, in a time before the Internet, with solid political borders, I’ve come across three slightly unorthodox solutions, hard to imagine for any contemporary IT worker. First spot is occupied by the Russian publishers: represented by a small brochure found at the University Library, which listed all of the titles translated from English to Russian by Moscow editors, and it was renewed every two weeks. More precisely, everything that was published internationally, especially from the states, was translated in a matter of six months. If one title raised your interest, you could just write your name next to it and, in about a months time, you would get an identical copy of the original edition (Addison-Wesley, John Wiley, etc), translated into Russian, for the price of one or two beers. The only drawbacks were: the fact that you had to learn Russian and to accept the massive intellectual theft, carried on by the Russian publishers, with no regard for any international copyright policies. The professor assured me that necessity, one
10
dictionary, English code fragments and a lot of determination, allowed him to learn Russian all by himself. Standing proof are approximately 500 titles in his basement. Coming in second place are article titles and classic mail. Some local institutions, like ITIM, had subscriptions at „Current Contents”, which listed, every week, all the titles of the latest scientific publications from international journals. You would drop by, read titles and try to infer a loose idea about whats new in science, general trends, and if one article in particular would raise your interest, a quest, to find the authors mailing address and start a long term plea for a copy of the article, would commence. Sometimes, after spending your time and money on international land mail, you would find that the article does not suit you, but you still had to send your thanks and try to build friendly relations for future collaboration. On the third spot, Xerox: big industrial players had a few photo-copiers and several ladies in charge of their well being. It was a distinct type of diplomacy to build alliances with those ladies, which would come in handy once you found out that a valuable book surfaced in Iasi, Bucharest or Timisoara, and ran along on a night train and borrow it for a week, enough to make a quick and cheap copy of the book. In conclusion I would like to share my lessons learned from the above. First comes the strength to fight off the over saturation feeling I get from the constant bombardment with information. To ignore the smart sport shoes, fridges, mirrors and TV’s, all of them sharing the latest weather forecast, number of burned calories, what vitamins to take in the morning and what all of my friends posted on their social networks. I
nr. 7/2013 | www.todaysoftmag.com
should be glad that Google and Wikipedia don’t send search results through land mail, Kindle doesn’t have Russian only books, and I can always join a MOOC and directly interact with leaders from almost any field of science and knowledge. Secondly, I shouldn’t get upset on high profile intellectual property law suits, every time a big multinational tries to own hot water and the word “mother”. Its enough to step back and change to the historic perspective, which just showed me how a systematic, large scale, theft and distribution of scientific publications inside the soviet block can take place without any regard for copyright, only abiding by the law that all is fair in war, even the cold one. Don’t take me wrong, I’m not inciting to theft, but I’ve just learned that people will always find a way to access and profit from information. And what at some point looks like a generation of intellectual propriety thieves, over the decades, turns into a generation of highly skilled programmers that allow the previous victims to cover their losses and even make big profits through outsourcing.
Marius Mornea
marius.mornea@todaysoftmag.com Founder of Mintaka Research platform
communities
TODAY SOFTWARE MAGAZINE
Local communities
I
nstead of the usual introduction, I want to say a few words about CodeRetreat. Due to space constraints, I won’t go into details about what it is (googleit), but I want to share how it is. It is very cool! I genuinely felt the pleasure of being and engineer, faced with a problem, without any costs concerns or deadlines, with the sole purpose of trying to solve it. Further more, I had the opportunity to search for solutions in three different programming languages, with different partners and growing constraints that made things increasingly difficult and called for strategy shifts, while every 45 minutes a debate session at least as interesting as the coding one would follow. A very good analogy would be a proper fitness training, where you work your muscles, growing tired, occasionally its hard and frustrating, when you reach your limits, but you always walk away with a positive energy and a general state of well being and relaxation. And similar to the fitness trainings, if you want to be in top shape, you need to have a proper schedule and keep at it. I’m sure that frequent sessions of CodeRetreat will push the local programmers towards their peak performance. Transylvania Java User Group Java technologies community. Website: http://www.transylvania-jug.org/ Started on: 15.05.2008 / Members: 518 / Events: 40 Romanian Testing Community Community dedicated to QA. Website: http://www.romaniatesting.ro Started on: 10.05.2011 / Members: 560 / Events: 1 GeekMeet Cluj Community dedicated to web technologies. Website: http://geekmeet.ro/ Started on: 10.06.2006 / Members: 522 / Events: 13 (Cluj) Cluj.rb Ruby community. Website: http://www.meetup.com/cluj-rb/ Started on: 25.08.2010 / Members: 130 / Events: 31
Calendar 6th February Monthly Meetup http://www.meetup.com/Tabara-de-Testare-Cluj/ 1-3 March Startup Weekend - Recomandat TSM http://cluj.startupweekend.org/ Thursday/weekly OpenConnect http://www.facebook.com/groups/355893314491424/ Wednesday/bi-monthly OpenCoffee http://www.facebook.com/opencoffeecluj
The Cluj Napoca Agile Software Meetup Group Community dedicated to Agile development. Website: http://www.agileworks.ro Started on: 04.10.2010 / Members: 293 / Events: 17 Cluj Semantic WEB Meetup Community dedicated to semantic technologies. Website: http://www.meetup.com/Cluj-Semantic-WEB/ Started on: 08.05.2010 / Members: 136/ Events: 19
Tabara de testare QA dedicated community. Website: http://www.meetup.com/Tabara-de-Testare-Cluj/ Started on: 15.01.2012 / Members: 133 / Events: 7
Romanian Association for Better Software Community dedicated to IT professionals with extensive experience in any technology. Website: http://www.rabs.ro Started on: 10.02.2011 / Members: 193/ Events: 11
Others: Cluj Perl Mongers (www.cluj.pm), GeekMeet (http:// geekmeet.ro/), ITSpark (http://itspark.ro/default.aspx), CodeCamp (http://www.codecamp.ro/), CodExpert (http:// www.codexpert.ro/), PHPRomania (http://www.phpromania. net/), ARIES (http://www.aries.ro/)
TSM community Community created around Today Software Magazine. Website: http://www.todaysoftmag.ro Started on: 06.02.2012 / Members: 389 / Events: 5
www.todaysoftmag.com | nr. 7/2013
11
programming
SEO - Improving CTR with Rich Snippets?
F
ormatting and adjusting the SERPS results can be done by any site owner thought Rich Snippets (an internal SEO technique). One of the most important advantages it can bring to a website is the growth of organic traffic by making the result stand out from the crowd.
Radu Popescu
rpopescu@smallfootprint.com QA şi Web designer @ Small Footprint
First we need to understand what Rich Snippets are. They are a set of information, images or links that appear in a result of a search, to give users more details about it. All of this additional information will make the result stand out. Rich Snippets offer some valuable advantages like: • • •
Helps increase the CTR and lower bounce rate; Provides additional information on a search result; Draws the attention of users to your result;
To confirm the benefits mentioned above, I would like to bring up a test made just a few months ago by Catalyst American Company using a blog with food recipes. In the first month after using Rich Snippets, the site had a CTR increase of 150% which demonstrates the huge potential of this internal SEO technique. Next, let’s see two examples of results that are using Rich Snippets. In Figure 1 we have the result, of Google Play, on a search for a game called „cut the rope”. This result is in the software category content and it displays the game rating, its price and the platform on which it runs. Figure 2 shows the result of IMDB.com for the search
Figure 1
12
nr. 7/2013 | www.todaysoftmag.com
„titanic”. Here we can see that it contains a rating, film grade, the number of votes received as well as the director and actors names.
Using Schema.org
Schema.org offers a series of HTML attributes which site owners can use to take advantage of Richs Snippets. These attributes are also known as micro data and they are accepted by the most important search engines like Google, Bing and Yahoo. This site offers a wide range of attribute collection which we can use for different content categories like: organization, persons, events, restaurants and many more. To see the difference between a simple HTML code and an enhanced one, below is an example of a personal web page: Code without micro data John Doe <img src=”johndoe.jpg” /><br/> Professor <br/> 2341 Whitworth Institute <br/> 45 Whitworth <br/> Seattle WA 980 <br/> (425) 123-4567 <br/> <a href=”mailto:john-doe@xyz.edu”>john-doe@ illinois.edu</a>
Code with micro data <div itemscope itemtype=”http://schema.org/ Person”> <span itemprop=”name”>John Doe</span> <img src=”johndoe.jpg” itemprop=”image” /> <br/>
Figure 2
programare
TODAY SOFTWARE MAGAZINE
<span itemprop=”jobTitle”>Professor</span> <br/> <div itemprop=”address” itemscope itemtype=”http://schema.org/PostalAddress”> <span itemprop=”streetAddress”> 2341 Whitworth Institute <br/> 45 Whitworth <br/> </span> <span itemprop=”addressLocality”>Seattle</span>, <span itemprop=”addressRegion”>WA</span> <span itemprop=”postalCode”>980</span> <br/> </div> <span itemprop=”telephone”>(425) 123-4567</span> <br/> <a href=”mailto:jane-doe@xyz.edu” itemprop=”email”>john-doe@xyz. edu</a> <div>
As we can see, micro data is used in <div> and <span> tags. The Schema.org attributes role is to transform simple HTML tags in semantic tags. The example above shows us how we can do that. First we need to include all the content in a container (div or span) which is going to tell search engines in what category that content belongs. On the first line, our container specifies that its content is about a person (itemscope itemtype=”http://schema.org/Person”). Next we need to encapsulate each property of that person with the corresponding attribute. For example, the person’s name “John Doe” will be wrapped around a span with itemprop=”name”. In the same manner, we wrap his job title “Professor” in a span with itemprop=”jobTitle”.
Author information with Google+
There is a simple way to use Rich Snippets to show author information on a search result, without the need of knowing HTML. In figure no.3, for “radu popescu” query, you can see little information about me and a picture. In order to achieve this, we need to follow two simple steps: 1. On the pages you would like to show author information, there must be a link to your Google+ profile. The link needs to contain the profile ID and the “rel=author” attribute link in the following example: <a href=”[ URL_PROFIL_GOOGLE+ ]?rel=author” >Google+</a> <a href=”https://plus.google.com/10954875114587?rel=author” > Google+</a>
2. On Your Google+ account, in “Contributor To” section, adds a link to your website. The author information will not be available as soon as you go through the above steps. You need to allow up to 3 weeks for the search results to update. However, you can test the updates made using a free tool offered by Google: http://www.google.com/ webmasters/tools/richsnippets
www.todaysoftmag.com | nr. 7/2013
13
requirements
Financial software development: trading platforms requirements
W
hat would you feel developing software used in the biggest financial institutions worldwide, software which trades billions of Euros daily? Responsible? proud? happy? all of them together :) ? We are are trying to present, below, which are the functional and nonfunctional requirements of such a trading platform
Cristian Ruja
cristian.ruja@ullink.com Product Team Manager @ ULLINK
and the process used to build it, keeping high quality standards required by such a software.
Nonfunctional requirements of a trading platform •
•
•
14
nr. 7/2013 | www.todaysoftmag.com
Reliable - having a software product which will always works, without interruptions/errors (ex. during stock exchanges opening hours Monday to Friday 9:00 - 17:00) High Throughput/Performance - platform should process high number of orders/Transactions on a longer period of time (ex. stock exchanges opening hours Monday to Friday 9:00 - 17:00) all the platform parameters being in the optimum range. Low latency - orders delays crossing the platform should be minimum,
•
•
•
in order to ensure fast access to the exchange’s transactions engines(ex. ~50μs) Load balancing, hot failover & highly availability (99.999%) - capacity to be always up and running usually having at least 2 servers such that if one is is restarted the other will take the responsibility to process order, the change being invisible to the customer. 24h „follow the sun” availability - the platform should be available 24h being available all around the globe, starting with Tokyo Stock Exchange, continuing with London Stock Exchange and continuing with NewYork Stock Exchange Highly scalability - The architecture should be easily scalable in order to respond to increasing number of
TODAY SOFTWARE MAGAZINE markets and customers, distributed around the globe;
Functional requirements of a trading platform
One of the key features of a trading platform is to act as a multiprotocol connectivity hub making connectivity between different markets participants. Different markets supports different protocols for connectivity so the platform needs to be able to work with different protocols in order to enables to connect and intelligently route transactional messages to their final destinations: exchanges, brokers, Buy-Side firms, trading applications, order management systems, and routing networks through FIX protocol or custom protocols/APis Fix (http://www.fixprotocol. org/) protocol is the most common protocol used in this industry; however platform must be easily extensible to support other custom APIs and different versions of the FIX protocol. Some non-functional requirements regarding connectivity: low latency for order processing/ routing(ex ~50μs); high throughput (ex 1000 messages/sec, ~10 millions messages per day) HighTouch Trading solution covers the daily trading activity. Its targets is to work with the ~10k orders daily - used to replace paper tickets used in trading rooms with electronic tickets, to manage client orders which can be forwarded to different users and processed easily, and to share information in real time between all users (sales, dealers, clients). It should work in real-time across ass et class es (equity,derivatives) It should provide fast and reliable order submissions with instant feedback to clients Another trendy feature is the algorithmic engine enabling automatic trading. Beside standard algorithms it should provide also easily pluggable Low Touch Trading Solution - cover the low latency Direct Market Access and includes also liquidity-seeking smart order router (finding the best prices over all available markets), sophisticated pre-trade risk management software, advanced monitoring capabilities (dealing with ~10 millions orders daily). Risk management is another mandatory component of a trading platform and is enforced by regulations. Beside that, brokers need to filter their client flows in order to check two types of rules: • Contractual : clients have to respect their broker rules • Compliance : clients have to respect the targeted market rules The purpose is to check and validate in real time orders and end user positions (long/short/net) across markets. All this should happen with minimum impact in processing time e.g. very low latency (ex: 3μs latency wire to wire). Middle Office management handles management of the executed orders morespecifically it handles the allocation and confirmation workflows. Allocation information is provided usually through instructions (how to dispatch the executed quantity), or some third party systems will provide these informations Confirmations is the “acknowledgment” received back for the different accounts. Last step is the settlement and delivery information, with account-specific, exchange specific added information. The product is also responsible for computing all fees and commissions (including market fees) which need to be invoiced to the clients.
How to produce such a software
Which are the steps to create such a high quality software platform?
First step is to get together top specialists from different areas: business analysts, architects, developers, QAs and working closely together using SCRUM methodology. Having a top performers team is not enough. We need to listen and react to customers needs: business analysts listen to customers requests and maps them in the context of the existing products and platform. They are also detecting the new customer requirements and gaps between products and customer needs. In this phase, the system architects come with suggestions mostly for defining the products architectures and the APIs for communicating between products and components; The purpose is to enforce homogeneity through products and components for easy extensibility and maintainability. Splitting and defining the functionality for each individual product which is the responsibility of the „Product Owner”. In the development phase we need to focus on high quality and use industry best practices. SCRUM process is suiting well for developing this type of products; team estimates the effort needed trying to identify problems which might generate risks related to performance, quality,regression; Quality is very important for such products; In order to keep the high quality standards we are using industry best practices: • unit tests - automated code testing • code review - process in which team members are reviewing the code of their pairs, before going to QA • continuous integration - process which ensure automatically build, test and integration of the platform QA is the last step in the development process; www.todaysoftmag.com | nr. 7/2013
15
requirements Financial software development: trading platforms requirements Targets for the QA are: functional validation, testing that functional requirements are fulfilled • non regression validation, ensuring that previous functionality is not affected • performance validation, ensuring non-functional requirements are fulfilled • platform integration validation, focusing on products interaction •
Which is the receipt of success for developing such a platform?
Since 2001, the ULLINK client experience has been grounded in access to our reliability to deliver the most current and innovative technology available in the industry. Clients benefit from ULLINK’s modular, scalable front and middle-office solutions, across all asset classes, encompassing low latency, pre-trade risk, algorithmic and direct market access (DMA) trading. With almost 300 expert staff distriMost of the QA is based on the auto- buted across eight offices (New York, Sao mated tests Paulo, London, Paris, Cluj-Napoca, Hong
Figure 2 - detailed diagram
16
nr. 7/2013 | www.todaysoftmag.com
Kong, Tokyo, Sydney, and growing), with a lot of professionalism, hard work, passion for technology and fun, ULLINK has the local knowledge and expertise to support customers worldwide, around the clock. Innovation is the salt & pepper over all these products and processes. More information about the trading platforms is available on www.ullink.com
architecture
Liferay Service Builder vs. Spring Roo
R
.A.D. also known as Rapid Application Development is common sense nowadays when we’re speaking about development methodologies. Briefly, this methodology assumes gathering of functional and non-functional requirements through workshops or other means of fast communication, prototyping as well as re-using already implemented components. In order to successfully assume this technology regarding the time needed for application development, many companies use source code generation tools.
Vlad Hosu
vlad.hosu@isdc.eu Senior Developer @ ISDC
The concept of Vendor Lock-in is meant to bring attention upon technical decisions regarding the easiness for integrating a source code generator within the used technology as well as the difficulty to customize or even remove certain generated components. This is a common practice. It’s used by Oracle, IBM, Apple, shortly, everyone does it. In order to detail this concept I chose a case study: Spring Roo vs. Liferay Service Builder. Both are source code generation tools and both are compatible with Liferay. From this point of view I will make a DAR (Decision Analysis and Resolution). For this analysis the following criteria will be used: • Meta data: the capacity of customizing the generated code through descriptors • Generated Code Quality: regarding coding standards, e.g. Oracle Code Conventions (http://www. oracle.com/technetwork/java/ codeconv-138413.html) • Documentation • Vendor Lock-out: the easiness to get rid of the generated code or integrate it within the application • Compatibility: Liferay integration aspects
Meta date - Liferay Service Builder
Benefits are from an Eclipse Plugin which is simple and intuitive in order to run the tool. Another way is to use Ant or Maven in order to run it. The major configuration entry stands as an xml, which will help generate for each entity a domain model, persistence layer and service layer. It will also automatically generate CRUD methods and finders for the entities based on their fields. This tool covers most of the required layers except the presentation layer. However it will offer integration with web services for JSON and SOAP. <?xml version=”1.0” encoding=”UTF-8”?> <!DOCTYPE service-builder PUBLIC „-//Liferay//DTD Service Builder 6.1.0//EN” „http://www.liferay.com/dtd/liferay-service-builder_6_1_0.dtd”> <service-builder package-path=”ro.tsm”> <author>Vlad Hosu</author> <namespace>TSM</namespace> <!-- PLACE YOUR ENTITIES HERE --> <entity name=”Articol” localservice=”true” remote-service=”true”> <column name=”id” type=”long” primary=”true” id-type=”increment” /> <column name=”titlu” type=”String” /> <column name=”descriere” type=”String” />
Figure 1 - Structure of Liferay Builder service
17
nr. 7/2013 | www.todaysoftmag.com
architecture Liferay Service Builder vs. Spring Roo
<column name=”autor” type=”String” /> <column name=”likeCount” type=”long” /> <finder return-type=”Collection” name=”Autor”> <finder-column name=”autor”></finder-column> </finder> </entity> </service-builder>
The package-path attribute from the “service-builder” tag is used for setting the base package name of the generated code. The tag “namespace” is used to name the database table namespace; for example, for this entity it will be tsm_Article. The “localservice” and “remote-service” attributes from the “entity” tag are used for specifying local persistence and respectively whether you want web services (JSON and SOAP). Specifying the “finder” tag will generate API as well as implementation for obtaining a list of Articles depending on the author field. It is obvious that this example can be customized much more. commands and we will also benefit from presentation layer, integration tests and Meta date - Spring Roo Spring Security: In order to configure Spring Roo you • project --topLevelPackage ro.tsm need STS (an Eclipse muscled for Spring), • jpa setup -- provider HIBERNATE or another option is to choose the console. --database MySQL For the console you will need to define a • entity jpa --class ~.domain.Articol command for each task. You will iden--testAutomatically tify a lot of tasks which can be abstracted • field string --fieldName titlu --notNull in order not to make a repetitive task so • field string --fieldName descriere much. From my point of view the configu--notNull ration is not as visual as a diagram design • field string --fieldName autor tool (which generates code) or an xml. A --notNull negative aspect is that for each .java gene• field number --fieldName likeCount rated file, Roo will also add an AspectJ one, --type java.lang.Long which might conclude in twice as much • finder add --finderName findArticofiles, hence a more complex maintenance leByAutor --class ~.domain.Articol when it comes to customizing certain • perform tests components. A very important aspect is • perform eclipse that Roo is able to generate all the needed • web mvc setup layers, including the presentation one. This • web mvc all --package ~.web is a great pro against the Liferay Service • security setup Builder. The same Article example can be geneAs I was saying earlier, if you’ll need rated with Roo by using the following much more entities, you’ll have to repeat
for each of them, the steps which refer to this. The command „perform tests” is used for testing the integrity of the generated entity within the project. The command „perform eclipse” is used for configuring the workspace. If you’re using STS, you won’t need to run this command anymore. Otherwise, either the command has to be run or you need to install an additional plugin for this in order to mavenize the project.
Code Quality
It is important to mention that this criterion doesn’t matter unless you’ll need to access the generated code. Otherwise, most probably the generated code will end up in an external library.
Calitatea Codului - Liferay Service Builder
If we put Sonar (see http://www.sonarsource.org/) you’ll find that at each method there’s at least a Major. For example: • Catching Throwable in exceptions
•
} catch (Throwable t) {
Unchecked Casting
AdditionalInformationClp oldCplModel = (AdditionalInformationClp) oldModel;
Figure 2 - Structura of Spring ROO service
18
nr. 7/2013 | www.todaysoftmag.com
The manner in which an entity generates is very complex and mainly unconceivable unless to be a part of an API (this because of the desire to support major database providers like MSSQL, PostgreSQL, MySQL and so on). We won’t include here the service layer also which adds up eight more classes: (http://www. liferay.com/community/wiki/-/wiki/Main/ Service+Builder)
TODAY SOFTWARE MAGAZINE
Code Quality - Spring Roo
Offers a code which respects the best practices imposed by Oracle and Google (regarding the front-end) Also you’ll find that at any moment you’ll have the ability to extract a method from generated code state to customizable code state which brings a powerful advantage
Roo community is still pretty narrow.
generation tool can actually bring. Briefly, there might come up prototyping issues. Also, Spring integration with Liferay is a bit different, meaning that the Spring container is in Liferay and the bean injection is done in a different plugin. This fact assumes you will have to make an additional configuration in order to use Spring Roo.
Vendor Lock-out - Liferay Service Builder
All code needs to be re-written in order to reach Java extensible code, usable and easy to maintain considering but considering that Liferay generates the API detached from the implementation you can write another implementation at any time in another plugin. However this will never Documentation - Liferay Service Builder help removing the generated code. Briefly, Conclusions There is only Wiki page available – ine- Liferay Service Builder offers a contract for As a conclusion you can consider using xistent documentation. However, you will the services and the model and this should the Service Builder when Vendor Lock-in is be able to find much information regar- suffice for most of the cases. not taken into account. Also Code Quality ding this tool on forums due to the fact and Documentation lack a bit of confithat Liferay has big community which is Vendor Lock-out - Spring Roo dence. This means that you’ll not assume growing. The tool can translate everything any technology change throughout the proIf you consider a partnership with which is written in the AspectJ files into ject and also you have enough knowledge Liferay you’ll benefit for all the needed the Java classes. This offers a high degree regarding this tool. On the other side, support in order to use this tool. of extensibility. Spring Roo will offer a bigger satisfaction regarding the code quality and documentaDocumentation - Spring Roo Compatibility tion but you will have a risk for integration, Roo however through comparison with It is important to mention the inte- depending on the application prototyping. Liferay Service Builder has an enriched gration aspects can sometimes offer a funcție de prototipizarea aplicației. documentation. Regarding the forums, the greater time penalty than the source code
WE HIRE
IN GOOD COMPANY PROJECT MANAGER
.NET DEVELOPERS JAVA DEVELOPERS JAVA ARCHITECT .NET ARCHITECT
ISDC.EU/CAREERS
WE DO PROJECTS
OUR CUSTOMERS
ISDC
WITH IMPACT. WE
ARE IMPRESSED
ENGINEERS
DELIVER RESULTS,
BY OUR AWESOME
YOUR
NOT RESOURCES.
TECH TEAMS.
DREAMS!
RALUCA HIREME @ISDC.EU
SIMONA HELLO @ISDC.EU
www.todaysoftmag.com | nr. 7/2013
19
HR
Situational Leadership
T
his article is the first one when I am writing about Leadership. I have to confess that at the very beginning I was not very comfortable in addressing this topic, because everybody has an opinion on what means to be a Leader and what kind of Leadership style should be better used. Any affirmation on this topic may be very easy contradicted because there are so many Leadership Theories developed and people can find a lot of counter-arguments.
Andreea Pârvu
andreea.parvu@endava.com Recruiter @ Endava
20
nr. 7/2013 | www.todaysoftmag.com
In my personal opinion, a good leader should have the capacity to adapt in every circumstances and situations. I would like to mention that people have different moods and feelings and certainly motivating factors so varied that it is advisable to treat them mostly as individuals not as a group. B efore st ar t ing to w r ite ab out Situational Leadership, I would like to underline the difference between „being a Leader” and „being a Manager”. At my first job, I had the opportunity to have „a boss” who over-passed the Romanian stereotype of being in a leadership position. I will explain in a few lines what this stereotype means: „a boss” is a person who takes advantage of the status that he has in a company. Frequently „a boss” is the only person that has always right and more than this it is the only person who knows better how things should be done. It is sad, because most of the times the employees don’t have a reaction. If I would have to make a short reference to my first „boss” I would always describe him as a model for me, I would say that he is a „Business developer, people
enhancer, team creator”, because he always was business oriented but without forgetting that results can always be achieved only together with a great team of motivated and developed members. Despite the fact that many of us were novices, he knew how to let us learn from our mistakes, and when to offer support in situations where third parties intervene in our team. He was the perfect combination between a Manager and a Leader. Changing my job and starting in a new working environment I understood that the Leadership Style that “my perfect boss” applied was not suitable in the new company. It was the first time when I realized how important it is for a Leader to know how to adapt in different situations. Based on this key learning point I have started to study in detail this topic and the theoretical model that draw my attention was the one developed by Harsey and Blanchart. Based on Hersey – Blanchard model I will present the Leadership Styles that should be implemented by taking into account 2 important factors: motivation and experience of each of team members
TODAY SOFTWARE MAGAZINE
Lider
vs.
Leaders have „followers” people who follow them because they strongly believe in a vision that the Leader knows how to transmit. In our human history it was demonstrated several times, that sometimes leaders can also have a negative impact not only a positive one, but the power with which they transmit their vision and how they attract others is impressive in both cases.
Manager
Managers have „subordinates” because they have a position in the hierarchical organizational chart. In these situations the employees must listen to managers’ orders, because otherwise they could be „punished”. More than this, managers are the ones who tell the employees what should be done.
Leadership Style – DELEGATIVE
The role of the Leader is low, because employees have the experience and the motivation to successfully accomplish their tasks and to achieve objectives. It is encouraged for the employee to take control and the Leader only interferes only when requested or in crisis situations. Decisions are taken by the employee. In this phase employees can receive new responsibilities, not to be excluded the Leadership ones.
Leadership Style – DIRECTIVE
The role of the Leader is very high by being final responsible of accomplishing the tasks. Team members have high motivation and low experience the Leader take decisions and communicates task and explains in detail what the employee has to do. In real life are the first weeks of the employee in a new job.
Leadership Style – COACHING
Leaders are most of the times Managers are more tasks oricharismatics and with excel- ented than people. lent communication skills, they manage to attack people to follow them. Leaders are people oriented more than task oriented, being capable to create a personal relationship with the „followers” by understanding their needs. Even though Leaders are more people oriented than task, they always keep in mind the final goal and vision that they’ve set.
Managerii sunt orientați spre sarcină și pe ceea ce este de realizat, mai mult decât spre crearea unei relații cu angajații și înțelegerea nevoilor lor.
Leaders are risk takers, they see in every challenge that they encounter a big opportunity and they take advantage of it.
Managers are the ones who are not that willing to take risks, they are trying to avoid them.
It is one of the most difficult Leadership Styles, because the employees are demotivated and they still don’t have the necessary skills to accomplish their tasks. The role of the Leader is double: increase the motivation of the employee, but also the level of experience, so he has to pay attention on how he communicates the tasks and how much time he dedicates to the employee. It is one of the most risky phases of the Situational Leadership, because the risk of leaving the team by the employee is very high. This phase happens few weeks after hiring a new person and putting him/her in a new working environment.
Leadership Style – SUPPORTIVE
The role of the Leader is to facilitate discussions and decisions while encouraging the employee to take responsibility on them, because in this phase the level of experience is high. This time the leader is the one who positively stimulates each employee to successfully raise motivation. For a proper implementation of this Leadership Styles it is necessary that each Leader knows very good every team member. The Level of expertize it is quite easy to be settled, because from the very first days of a new employee in a company it is known the degree of theoretical and practical knowledge he/she
www.todaysoftmag.com | nr. 7/2013
21
HR Situational Leadership
holds. The evolution it is simple to follow, by constantly monitoring the way in which he/she works or by the help they require from the other colleagues or leader. It is therefore necessary to evaluate the performance to analyze the progress of each employee. The Level of motivation it is much more difficult to be defined, because it is necessary to build a trustful relationship with the employee in order to identify the factors that motivate him/her in order to become a true performer. A reference system can be the extremely known theory of Maslow. It is important to remember that employees’ age is an influenced motivational factor. (Ex: (1) the young employee (25-30 years old) are motivated by the opportunity to develop a career path, (2) the employees that over-past 30 years old are motivated by a flexible working program in order to have more time to spend it with their family, (3) the older employees (45 – 55 years old) are motivated by involving them in coaching the novices). There are some aspects that should be taken into
22
nr. 7/2013 | www.todaysoftmag.com
consideration. The reward for increasing motivation is again a different one. Most of the company’s focus is on financial motivation, which is not everything. Money can cover the first two levels of Maslow’s pyramid, but the other 3 what happens? The answer is simple you can use other types of rewards: • Public recognition of the contribution of each employee: offering medals, titles or promotions. • Recognition programs: employee of the month (clear criteria defined), celebrating success; • Special awards for great results; • Non –wage benefits; • Career path and career development opportunities. And these are only few examples of ways to motivate the employees. To identify better the level of satisfaction, it could be used different instruments for evaluating the level of motivation: questionnaires, interviews, individual discussions, focus groups.
From the theoretical point of view things are easy, but when it comes to implementation things are getting even difficult, but I believe that the results that could be accomplished are worth all the effort. Who would wish to come with pleasure and energy every day at work? I don’t believe in the ideal company or ideal job, but I truly believe that the beauty of a job is to put passion in all the responsibilities and tasks that you have to do and more than this to be part of a team with a vision an common objectives and goals, with a manager that can overcome the hierarchical barriers. I have the chance to come daily at work and to meet leaders from all the fourth Leadership Styles mentioned above. To see directive Leaders who are there to explain in detail how a task should be accomplished. I see Leaders who motivate people and who are preoccupied in assess their development needs and to build together a career path. I see Leaders who unleash the potential of their team members. I see colleagues who are capable to become Leaders for the new hires. And I see an organization that grows sustainable, because the people inside it are doing the same. I wish all good luck and if you want to find more about this topic, do not hesitate to read: Management of Organizational Behavior (10th Edition) by Paul Hersey, Kenneth H. Blanchard and Dewey E. Johnson (Jul 28, 2012).
programming
TODAY SOFTWARE MAGAZINE
The Case for PHP
P
HP is a programming language dedicated to developing web pages and web applications. Its name is a recursive acronym meaning PHP: Hypertext Preprocessor, adopted the name after the release of version 3.0.
Ioan Bercea
ioan.bercea@3pillarglobal.com Senior Web Developer @ 3Pillar Global
The first version created by Rasmus Lerdorf in 1994, was written in C and was a suite of scripts to monitor visits to his personal page (Personal Home Page Tools). Over time it has brought more functionality suite of scripts, so it was capable of connection to the database, allowing users the capability to develop dynamic web pages. After a period in which he experimented with various new functionalities, returned in 1995 with a rewritten version of PHP. The language was intended to be similar to C structure can be easily adapted to the original developers of C, Perl and other similar languages. In 1996 the new version 2.0 included supports for DBM, mSQL and Postgres95, cookies, upload files and other important functionalities dynamic web pages required. In 1997, Andi Gutmans, Zeev Suraski and Rasmus Lerdorf have decided to rewrite and turn it into a mature programming language / modern, resulting in version 3.0, a version that had a great success among web developers covering 10% of web servers on the Internet. As a result of this success and that is
not only developed web pages but also web applications, performance improvement was needed, taking birth version 4.0 in 2000, behind which is the Zend Engine. Version 5.0, the most mature to date, based on engine Zend Engine 2.0, was launched in 2004, and brings support for OOP programming in PHP. Together with several projects very close to language: PEAR and PECL, PHP brings a wealth of facilities, libraries and extensions. So, after this brief introduction to PHP language we cannot deny that PHP did web development accessible to users and developers.
Integration with web servers
PHP integration with Web servers experienced a variety of models. The first one, CGI, was the base from which we started expanding and enhancing the programming language. Ways in which this programming language was built in web servers include: CGI / FastCGI / Apache SAPI, CGI / FastCGI / IIS ISAPI for Microsoftâ&#x20AC;&#x2122;s product, and FPM for new and promising nginx web server, web server with a major increase in recent years due to high Performance and high stability. www.todaysoftmag.com | nr. 7/2013
23
programming The Case for PHP
CGI - Common Gateway Interface, means that every time the web server receives a query for a PHP page, the PHP upload a new process, the result of processing the request and giving back to the web server, which in turn sent him web browser. An improvement was made with FastCGI, so not every request to create a new process, but it will be reused for other applications. A recycling process was also implemented so that these processes had a fixed number of applications determined life or the lifetime of the process. Integration as how Apache web server (AIPS) was still an option that PHP was built in web server, PHP becomes an active component of the web server and there was a separate process. For Windows servers, IIS ISAPI called it. As the newest and most advanced integration method, FPM (FastCGI Process Manager) is more than a simple FastCGI, with the convenience that this technology brings: fine control of the process running PHP, the ability to control the number of processes depending on the server load, the control of these processes by turning them under different users, and more. Continuous development and interconnection with web servers to increase performance and high security level continues to keep PHP as the preferred programming language in relation to other programming languages.
24
nr. 7/2013 | www.todaysoftmag.com
PHP vs. other languages
PHP vs ASP:
PHP uses a language similar to C / C + + on the one similar to Basic ASP and PHP PHP was the prototype language Perl, performance is high because running in so the syntax is similar, therefore PHP Perl dedicated memory area (CGI / FastCGI). has common features with the. But PHP has been from the very beginning web PHP vs Ruby: programming language, while Perl site was Ruby and the Rails framework site, created as a scripting language. has attracted many followers of release. Many PHP programmers migrating after a PHP vs Python few years into this language, but not actuPHP and Python are the most popu- ally migrate to a programming language lar web programming languages in this but to a duplex: a programming language period. PHP syntax is similar to C lan- framework. guage, anyone who has worked with C Both are slightly deficient in terms of assimilate the language in a very short documentation, but PHP has the advantime. Pythonâ&#x20AC;&#x2122;s syntax is based indenture is tage of longevity while in Ruby, it could not also very simple and similar pseudo-code. keep from rapid growth and has some gaps Using languages PHP, Perl, Ruby you often in the documentation. several solutions to implement a certain The trend of using PHP for Web sites functionality, while using the Python lan- is still a rose from 77.2% of websites in guage is not so encouraging developers to December 2011 to 78.5% in December solve a problem from the beginning using 2012. the best solution. PHP has a list of more than profiling Advantages tools, debugging, frameworks, extensions Without going into polemics and and open source libraries, making work a without starting a war of server side lighter Developer, itâ&#x20AC;&#x2122;s got but the various programming languages, we can easily distools needed to solve the problem faced. tinguish the advantages of choosing PHP as However Python is a popular language a programming language for web project: a that is gaining more and more followers in large number of experts compared to other recent years due to the elegance of this lan- languages, rich documentation, a large guage, which is exemplified by the use of community and many helpful resources this language by Google. (libraries, extensions, modern frameworks) Web developer is not defined by a
PHP vs. Perl
diverse
programming language, this is merely an instrument of his work. When the project requires it, he may choose another instrument or even more, perhaps even more effectively (s) for the project.
Disadvantages
PHP as a programming language has a fairly long history and over time has seen many rewrites, improvements and fixes. Some of the largest were in the security category. But they are probably related to the process by which versions of PHP was originally released, a process that was recently changed: although it is an open source programming language PHP has again organized a group called PHP / QA Team, which is the main purpose developer support through high quality versions released. On the other hand, PHP can be accused some inconsistent elements: inconsistent names of functions, function parameters unnatural order some customized solutions that can be a little awkward. At one level, this language requires more attention Developer, due to the high flexibility offered by this language.
Frameworks
As a consequence of this increase PHP web developers as preferred language, many frameworks have emerged devoted to various types of web sites and / or Web APPLICATION. Most areas were covered: from e-commerce, blogging, social networking pages to complex web applications infrastructure by type framework sites MVC (Model / View / Controller). Wordpress as a CMS framework type (Content Management System), has facilitated the development of many blog type websites, making new web accessible not only experts or developers and content publishers information on the net. Frameworks like Magento and osCommerce online store dedicated infrastructure have brought them too many online retail businesses. Framework MVC type sites are constantly developing new versions appearing adapted to new requirements for performance, security and scalability. Mature frameworks like Symfony and Zend Framework to version 2.x Both reached, use the new facilities provided by the programming language. In parallel, development libraries ORM (Object Relational Mapping) used these
TODAY SOFTWARE MAGAZINE
frameworks to keep pace with new needs. The most important Doctrine, Propel and ZendORM progressed, and even constructive competition exists between them, say constructive, because it triggers a significant increase in their Performance. The Symfony Framework, noted for its appearance as a PHP framework that promotes the design and structure that allows a rapid application development (RAD). Symfony encourages developers to follow a set of best practices in web application development. Also a growing and active community makes this framework to be very attractive for developing web applications. Currently, Symfony is defined to be: a PHP framework, a philosophy and a community. One of the sites CMS frameworks, Drupal announced this year as the Symfony components will use version 8.0, which shows that Symfony is a role model and offers besides a full-stack framework for developing web applications, and other resources and integrated innovations independently in other web projects. I gave the example of the framework, due to my experiences of fun with it. An experience devoid of tests or challenges stands even downright interesting. One of the qualities you see in this framework, along with rich resources as documentation, plugins, bundle links, code snippets, tutorials (even video), is that this framework gives the developer more time to solve the problems of architecture, design of new product, to the detriment to write code in industrial quantities. For every problem there is a solution already written, leaving the developer to only address specific project issues.
And so HipHop project, which was launched in 2010 as an open source project on Github, licensed under PHP 3.0. HipHop for PHP is a tool to transform PHP code, thus achieving a reduction in CPU uses Facebook servers up to 6 times. A more than massive improvement is now available in PHP community.
Yahoo
Another case worth mentioning is Yahoo, which in 2002 began the transition to a proprietary system written in C/C++ to PHP.
Future
Were recently launched new versions, 5.2, 5.3, 5.4 and 5.5-Alpha, which continues a major improvement programming language. They added its support for namespaces, „traits”, „late static bindings”, „generators”, with smaller improvements and fixed defects. Version 6.0, which now allow less expected, promises a full native support for Unicode in PHP and is still in development.
Conclusion
PHP as programming language actively in development, has a solid foundation, a rich history, an active community and innovative. Libraries, extensions, frameworks and modules develop into a steady pace and accelerated web developer offering a palette full of choices in the design and implementation of solutions. PHP is still the main language used for web programming.
Famous Cases Facebook
In addition to numerous known and big websites made in PHP (Wikipedia, Yahoo, Digg, etc.) is Facebook, which is a special case, not only because of its complexity, the tests and technical barriers experienced by teams (development, deploy, QA) on Facebook, but also how to solve a specific problem projects of this magnitude. PHP performance has become cause for concern in the team after massive increase in the use of the portal, and came to make a choice between PHP replace or find another way to improve this performance. www.todaysoftmag.com | nr. 7/2013
25
programming
Alternative PHP runtimes
P
HP is a very popular dynamically typed scripting language available on a variety of operating systems. There are however alternatives to the standard interpreter which provide various features that may be advantageous in certain circumstances. This article aims to provide a theoretical and practical overview of the existing options. The practical part consists of running the synthetic performance test from the PHP source tree against each runtime and testing a WordPress site with Apache Bench .
Attila-Mihaly Balazs dify.ltd@gmail.com
Code Wrangler @ Udacity Trainer @ Tora Trading
26
nr. 7/2013 | www.todaysoftmag.com
The test platform was a quad-core platforms i7@2.4GHz virtual machine with 1G memory. The operating systems used were The standard PHP interpreter is avaiUbuntu 12.10 Server / Windows 7 Pro. I lable at php.net and is written in C. It runs used an installation of WordPress 3.4.2 the source code in two steps, repeated for populated with the content of transylva- every page request: nia-jug.org. The database was MariaDB • first it parses the source code and 10.0 under Linux and MySQL 5.5 under generates byte codes (opcodes) Windows. encoding the functionality of the The performance tests were repeated original source. Includes / requires several times to make sure that the results are resolved at this stage are stable and reproducible. If the runtime • then it runs the byte code using the platforms were using JIT, a “warm-up” interpreter and generates the resulperiod was granted to give time to the comting page pilation/code analysis process time to run. This execution strategy suggests an Standard interpreter obvious optimization strategy: store the • Ease of setup/use: easy (often comes generated byte code and avoid parsing of preconfigured) the source repeatedly if it didn’t change. • Cost: Free This optimization is implemented by seve• Su pp or te d Pl at for m s : * n i x , ral libraries/extensions known collectively Windows, Mac OS X... as „PHP opcode caches” or „PHP accelera• Advantages: ease of use, almost tors” of which I tested four (a more detailed perfect compatibility, over 50% per- list can be found on Wikipedia ): formance increase (with opcode • APC - Alternative PHP Cache caches) • XCache, • Disadvantages: performance bene• eAccelerator, fits are small compared with the • Zend Server. theoretical values of more exotic
management
The first three options are open source and free. The fourth is a commercial product of Zend Technologies which includes more than just opcode caching: performance monitoring, troubleshooting and so on. For testing I used Apache 2.2 in prefork mode with mod-php. I also did a quick test with FastCGI but I didn’t notice a performance difference (this being said, the test focused exclusively on the performance of PHP - in a less artificial benchmark you may see differences between the two alternatives). A solution offering similar features for the Windows platform is WinCache . It was tested separately (see the “IIS 7.5 with PHP 5.4.9” section below). The project is sponsored by Microsoft and is specific to Windows platform. All the tests were run with and without the Suhosin security extension and there was no measurable performance difference. This shows that security doesn’t necessarily affect other features (such as performance). As can be seen from the results at the end of the article, these solutions provide a speed increase of 50% for repeated execution of PHP code. If the code is executed only once, they offer no advantage and can even slow down the execution slightly (as seen in the results column for „bench.php” the shortest running time was observed when no opcode cache was present). Note: these solutions are general (they work for any site that uses PHP). For specific cases there are solutions that can provide huge performance benefits compared to the generic solution. For example installing a cache plugin for WordPress I could reduce the execution time for ApacheBench to 0.08 seconds (which is a more than 80 fold improvement over the best results obtained by opcode caches!).
Hip-Hop VM from Facebook • • • • •
Ease of configuration/use: medium (there are prebuilt packages for some Linux distributions) Cost: Free Supported Platforms: *nix Advantages: improved performance (theoretically) Disadvantages: limited number of supported platforms, limited number of plugins (extensions) supported, not all standard PHP functions are supported (for example preg_replace was not supported
TODAY SOFTWARE MAGAZINE
at the moment of testing) Hip-Hop VM is a runtime environment for PHP created by Facebook to run the PHP code behind their website and then open-sourced. It was written because opcode caches did not provide the desired performance but at the same time the company did not want to switch programming languages. The Hip-Hop project has gone through several phases: • initially it was transcribing PHP code into C++ that was compiled with GCC . The project was called HPHPc at this stage • compiling C++ code was slow (compared to regular “save and run” to which PHP developers are accustomed). Thus they created HPHPi the aim of which is to run the code in an environment similar to production (so that bugs can quickly be discovered) but without the overhead of the compilation process • in the current phase they work on a virtual machine called HHVM which compiles the code using JIT Installation was performed using the prebuilt packages for Ubuntu 12.04 (currently compiling fails on Ubuntu 12.10) and the indications from the HipHop for PHP blog . Some WordPress plugins had to be uninstalled because of they used functions unsupported by HHVM. The performance numbers were well below expectations.
Caucho Resin • • • • •
Ease of configuration/use: medium to easy Cost: free/commercial Supported platforms: Windows, Linux, Mac OS X, etc. Advantages: high performance, clustering, scalable, easy integration with Java systems Disadvantages: Limited number of extensions, cost
Caucho Resin is an application server (a term familiar to Java web developers). This means that it deals with all aspects the running the application and you don’t need to use other software (such as Apache as web server, Squid/Varnish for reverse proxy, a database connection pooler, etc.) because these roles are filled by Resin and components loaded into Resin. The module
responsible for running the PHP code is called Quercus. Those who used other Java application servers like Tomcat will feel right at home. Others will need some time for adjustment. The biggest advantage offered by Resin is the easy integration of Java code with PHP (PHP code can instantiate Java classes, call Java methods etc.). It is a solution worthy of consideration for companies having expertise on the Java side and which need to use / integrate with a couple of PHP applications. The biggest disadvantage is that it does not use the standard PHP libraries/extensions, rather it re-implements them in Java (and the set of re-implemented functions is not yet complete). There are two versions of the server: the open source, freely available one and the commercial one. Its performance places it towards the middle of the tested solutions
IIS 7.5 with PHP 5.4.9 • • • •
•
Ease of configuration/use: medium to difficult Cost: commercial (IIS, Windows) / free (PHP) Supported platforms: Windows Advantages: availability of all standard extensions, integration with Windows technologies (COM, Active Directory, etc.) Disadvantages: cost (for the OS), complicated setup process
There are several ways to install the standard PHP interpreter on Windows: manually, using WebPI , packages like XAMPP , etc. For this test the manual installation was chosen because WebPI currently installs PHP 5.3 (an older version). WinCache 1.3.4 was also installed for better performance (WinCache is not installed by WebPI). More difficulties were encountered during the benchmarking, the most disturbing of which is the presence of an approximately 2 seconds delay for every HTTP request. This resulted in very poor performance on the first run of the benchmark. The problem was caused by a DNS lookup issue and was solved by using „skipname-resolve” in the MySQL configuration and by changing the source of Wordpress to use persistent connections, after which the benchmark was redone.
www.todaysoftmag.com | nr. 7/2013
27
programming Alternative PHP runtimes
IIS 7.5 with Phalanger 3.0 • • • •
•
Ease of configuration/use: medium to difficult Cost: commercial (IIS, Windows) / free (Phalanger) Supported platforms: Windows, Linux (using Mono) Advantages: availability of all standard extensions can use native extensions compiled for Windows, .NET integration, access to Windows technologies (COM, Active Directory, etc.) Disadvantages: cost, complicated setup procedure
Phalanger is a re-implementation of PHP on Microsoft’s .NET platform. It’s an open source project and can be used on multiple platforms/web servers (Apache under Windows, IIS on Windows, and Apache under Linux with Mono). It is the easiest to set up using IIS, thus this option was chosen for the benchmark. Besides the supposed speed advantage, Phalanger has several advantages: • the close integration between .NET and PHP (the PHP code can call .NET code and vice-versa) • includes a compiler that can generate executable from PHP files (which still depend on the .NET framework and the Phalanger runtime libraries however) • can use native extensions compiled for Windows if the “managed” version is not available
Untested alternatives
The options analyzed in detail were the ones which are most readily available and actively supported by the community. There are many other projects that do not fall into these categories and as such they will be only briefly mentioned: • TalariaTech - a commercial product. Their website contains very few details. They promise “a 10x performance gain on real applications like WordPress or Drupal” • php-llvm - is an extension which generates native code from PHP byte code using the LLVM project. It is in its early stages of development and I was unable to compile it. • phc - the open source PHP compiler - is based on the same idea as the original version of Hip-Hop (translation of PHP code into C++ code which is then compiled with GCC). Unfortunately the current version cannot be compiled under Ubuntu 12.10 • Hippy VM - an open source project based on PyPy. It was designed as a performance test. The PHP extensions were never implemented and it provides no way to be integrated with a web server. • php.js - is a partial implementation of a PHP-to-JavaScript compiler. This creates the foundation for interesting use cases (such as running PHP code directly in a web page or on the server with Node.js), but currently cannot parse/ compile bench.php
28
nr. 7/2013 | www.todaysoftmag.com
•
•
• •
Roadsend PHP and Roadsend PHP Raven - are two related PHP compilers that are no longer actively developed and are not compliable with the current versions of the libraries they depend on Pipp - is a PHP implementation on ParrotVM, a virtual machine “designed to efficiently compile and execute byte code for dynamic languages”. It is not actively developed and is not compatible with current version of the libraries it depends on. PHP4Mono - was developed in 2005 as part of a graduate project. Development stopped in 2006 and the current version is not able to compile bench.php Project Zero / IBM sMash - a project from IBM which seems no longer to be supported. It is a PHP runtime written in Java. It has the advantage that native extensions can be used directly through JNI
Conclusion
There is no general solution that will work for any PHP application (aside from opcode caches). Alternative technologies/ runtimes are worth considering when there is a need to provide specific functionality (for example integration with Java or .NET) but they do not provide a performance advantage. At the same time they assume a high degree of familiarity with the platform underlying them (for example you should know about things like WEB-INF or web.config). I would not recommend them for someone who has never used the platform for other applications. Almost everybody should be using an opcode cache (APC or eAccelerator probably) and should consider application-specific modules for caching (like W3 Total Cache like or WP Super Cache for Wordpress).
Performance test results
business
TODAY SOFTWARE MAGAZINE
What are the real cucumbers of the ISV gardener?
I
t is no longer a surprise for anyone that we live in hyper-dynamic times, when the rhythm imposed by the new trends and technologies creates an environment favorable to those who are capable of adapting quickly, anticipating the positions the market is going to adopt.
Mihai Nadăș mihai.nadas@tss-yonder.com CTO @ Yonder CTO at Yonder, in his role being responsible for the R&D activities and for increasing the level of innovation of the products of Yonder’s partners.
Companies are thus under pressure to increase their agility, and according to the lessons learnt during the last few decades, the most efficient manner of reaching this goal is by concentrating the efforts of the company on the aspects that really matter and at the same time by externalizing those functions that can be managed more efficiently by external experts.
development process and the technology used. The question raised is, in fact, which are the real “cucumbers” of the producers of standard software solutions? Or said in a different manner: does it make sense for an ISV to externalize the development process of its own product?
The challenges of an ISV
In order to answer correctly to this question, we first must have a look at the The challenge resides in identifying the main challenges that the ISV companies are critical functions, which bestow unique- facing in the new context of development ness on the market value of the company, for the software products. from those that can be externalized. The gardener will never buy cucumbers from Flexibility other gardeners, because this would mean The condition of adaptability requilimiting their potential and added value, res flexibility in allocating the resources thus implicitly the profit margin; howe- for development. The optimum can be ver he will always be interested in buying attained only with teams that vary in size equipment, cultivation technology, fer- during a period of time, and this is difficult tilizers, pesticides, fungicides, and seeds to achieve when costs increase from one from specialized suppliers. The produ- year to the next one. The opportunities for cers of standard software solutions (ISV expansion and optimization of products are companies) are confronted with the same neglected because of the pressure coming dilemma, but the slightly higher complexity from the market and from the competition. than in the case of gardening leads to a less The new ideas must wait in line on the list clear border between the final product, the of priorities, and many times they end up
The Dilemma
www.todaysoftmag.com | nr. 7/2013
29
business What are the real cucumbers of the ISV gardener?
being implemented with delay, thus missing opportunities for development and for reduction of costs.
Innovation
Technology evolves at a pace with which the original development team cannot keep up, so that they would have both a vision regarding the applicability of the new trends and technologies as well as the experience needed in the actual implementation of those. The consequence translates to delays in the cycles of modernization which imply costs and limitation of new opportunities. For instance, Cloud Computing is a paradigm which will inevitably dictate the new order in the coming decade; however, even though the technology surrounding it has been available on the market for at least 5 years, too few companies defined a clear strategy for adopting it. There will come a moment, not too far away in the future, when the threshold of critical adoption will be crossed, and those who will not have benefited from the advantages offered by the new model by then will suffer.
Efficiency and predictability
The process of development of software solution is a complex one, and one
30
nr. 7/2013 | www.todaysoftmag.com
subjected to risks. For meeting deadlines are sacrificed most of the times accuracy, with an impact on the quality and degree of the final client satisfaction. At the same time, because it’s lacking a high degree of maturity, the efficiency of the development process is affected, while the final costs rise to be significantly higher than optimal.
DaaS
The list above represents a common set of challenges for most of the ISV companies I come in contact with, regardless of their size. The solution I found to be most adequate each time consists of externalizing the responsibility for solving these. The reason is a very simple one - “the cucumbers” of the ISV companies are the products they sell on the market. This means that what is truly essential for these companies is to understand and to have a vision regarding what the market expectations are, to structure these requests and finally to sell their product. The process through which the identified requests get to be put into practice in a new version of the product may also be according to the observations made during a period of time and must be completely abstract. In the same way as in 2020 very few companies will buy IT infrastructure that they will
manage by themselves, choosing instead the IaaS model, the ISV companies must begin to think at a similar moment for the technical development of their products. A simple analogy with Cloud Computing made me think of DaaS – Development as a Service. I think it represents accurately the essence of what the new trend may be on the software market, namely the specialization of some companies in the direction in which they serve the producers of standard software solutions by serving them in a transparent manner, but fully externalizing the development process (SDLC). At Yonder we have been successfully experimenting with this model for over a year and the conclusion that our ISV partners from Western Europe are communicating to us is a completely favorable one; this makes me even more confident in its potential for the future
External links • •
innovation.tss-yonder.com mihainadas.com
programming
TODAY SOFTWARE MAGAZINE
Introduction to Grails (II)
L
et’s now create our login page for the application. As I mentioned in the beginning, Grails uses conventions a lot. This means that if you have a domain class called “User”, you need to have a “UserController” controller. If you have an action defined in a controller, like “login”, you need to have a view called “login” view under grails-app/ views/user. To create views, Grails offer a script: generate-views com.todaysoftmag.gsn. User, but for the time being we can just create them by hand.
Tavi Bolog tavi.bolog@nokia.com Development lead @ Nokia
The file name is login.gsp (which stands for Groovy Server Pages). We will add a login form to it. Listing is here: https:// github.com/tavibolog/GrailsSocialNetwork/ blob/master/grails-app/views/user/login.gsp This is plain HTML with additional tags specific to Grails. These are pretty similar with other view templates, so I won’t insist too much. One thing to mention is the “url” parameter of the Grails form, which allows you to specify the controller and action to be executed on form submission. Let’s start the application now, by running run-app command and browse to http://localhost:8080/GrailsSocialNetwork. You notice that app redirects to the login page under http://localhost:8080/ GrailsSocialNetwork/user/login. Because of the security filter we created, Grails redirected the application to UserController and “login” action, which rendered the “login” view. If you try to login with an incorrect user/password combination, you noticed an error message being displayed: “Wrong username or password!”, because for this case, the “login” action renders back the “login” view and passing to it the model, which is basically a map. In our case, the map contains a “message” key and associated value (the error message itself). Then, on the “login” view, we test for the existence of the “${message}” variable and render it as error. The “model” is implicit in the GSP files, so no need to call it explicitly. Let’s try to use the proper credentials of one of the users we created in BootStrap. The login is successful, and we get redirected to / message/list, but we don’t have yet the associated controller action and view and we get a not found/available page from the servlet
engine used by Grails (Tomcat) To avoid this, we need to build the action to list the messages in the MessageController:
def list() { def allMessages = Message.list() def myMessages = Message. findAllByUser(session.user) }
[allMessages: allMessages, myMessages: myMessages]
This action retrieves all Message instances we have (posted by all users) and also all the messages of the current user. After the successful login, the “current” user object was set on the session and can be used in the controllers. Both queries are possible due to GORM. The action returns a map containing the two lists and will render them with the associated “list.gsp” view file. Few things here: • Name of the key and value on the returned map is identical, but this is just habit and there is no restriction • On Groovy, keyword “return” is not mandatory, but the last expression that can be evaluated is considered the returned value. • You can put different types in maps and lists, but be careful when you read them Listing of the view is here: https://github. com/tavibolog/GrailsSocialNetwork/blob/ master/grails-app/views/message/list.gsp
www.todaysoftmag.com | nr. 7/2013
31
programming
Introduction to Grails (II)
def create() { Few things here: [message: new Message(params)] • Session object is used to show the } current logged in user. “session?. “Save” action is the one posting the user” syntax is used to verify that message and handling validation and “session” is not null before getting redirects: the “user” on “session”. def save() { def message = new Message(params) • Flash.message is an informative def user = User.findById(session.user.id) message used to show an end result user.addToMessages(message) if (!message.validate()) { based on a previous user action. We render(view: „create”, model: [message:message]) will see below how this gets created return on the controller. } if (!user.save(flush:true)) { • G:link is displaying a link to the render(view: „create”, model: [message: message]) action called “create”. Since there is }else{ no controller specified, the action flash.message = „Message posted with success!” redirect(action: „list”) has to be in the MessageController } } (current controller). • G:each is used to iterate over list of Let’s see what happens here: objects. The list is declared in the • We create a message object from the “in” parameter and you can define request parameters coming from the a variable with “var” to use it in the “create” view loop. If no variable is defined, “it” is • We look for the current user and add the default variable name. To show the message to it the post, we called the toString() • Validate the message attributes. This method implemented for Message will invoke the constraints applicadomain: ble to Message objects and, in case of String toString() {message + „ on „ + date + errors, it will fill those in the “errors” „ by „ + user} attribute of Message. which uses toString() from the User • If validation fails, we re-render domain (mind again the usage of return is the “create” view with some error not mandatory, last expression that can be messages (internationalization will evaluated gets returned): be discussed on the next article) String toString() {userName} • If validation succeeds, we persist Now, we have all our friends messages the changes, and instruct GORM to displayed and also we can see ours. One last flush them into the storage thing we will do is to create a new message • If persistence fails, we re-render in the spirit of keeping everybody up to the “create” view with some error date with what we’re doing right now. messages • If everything ok, the application redirects to the “list” of messages, but issuing a flash message. These are messages that can be used to capture user attention.
For this we need “create” and “save” actions in the MessageController and the associated view here: grails-app/ views/message/create.gsp. Listing is here: https://github.com/tavibolog/ GrailsSocialNetwork/blob/master/grailsapp/views/message/create.gsp “Create” action is used to handle eventual request parameters when displaying the create message view. It is pretty basic, by just passing to the view an eventual Message object that can be constructed from request parameters to prefill the form.
32
nr. 7/2013 | www.todaysoftmag.com
Another constraint that can be added is on the request methods allowed for each action. This is pretty straightforward to add in a controller – example below to restrict “save” action execution to only HTTP POST request, while rest of actions won’t have restrictions: static allowedMethods = [save: „POST”]
Unit tests
Grails automatically creates unit test classes for each controller, service, domain, filter, etc. created. In this chapter I would like to discuss briefly about writing and running unit tests for controllers. Grails is keeping its tests under “/test” folder. Tests could be “unit” and “integration” (there is a 3rd category, functional, but this is testing using another framework to test via HTTP requests). Integration tests are well suited to test integration of components of the same application or integration with 3rd party components. I will not insist too much on those, but would mention that you can run them from Grails console: test-app –integration or test-app –integration <Fully qualified test class name>. And that integration tests are usually way slower than unit because of the context they need. Unit testing is my favorite part of testing, because tests are fast, pinpoint the problematic code very fast, do not depend on other system running and allow developers to test corner cases (with help of mocking). Let’s write few unit tests, start i n g w it h t h e Me s s a g e C ont ro l l e r class. This has an associated test class MessageControllerTests: @TestFor(MessageController) class MessageControllerTests { def messageController @Before public void setUp() {messageController = new MessageController()} void testRedirectOnIndex() { messageController.index() assertTrue response.redirectedUrl == „/message/list” }
}
Here is what happens here: @TestFor annotation marks that this is a test for the MessageController. • setUp method behaves as in Junit (executed before each test method due to @Before annotation) • testRedirectOnIndex is the actual test (it starts with test, so there is no need to annotate it with @Test, but @Test annotation is also accepted) • the test is calling the index method of the controller (which actually does a redirect) • it asserts if the redirect is the expected one (response object is available in tests) •
Moving now to the UserControllerTest class, to test the UserController:
TODAY SOFTWARE MAGAZINE
@TestFor(UserController) @Mock(User) class UserControllerTests { def userController @Before public void setUp() {userController = new UserController()} void testWrongUserNameOrPassword() { request.method = „POST” params.username = „notfound” def user = new User(firstName: „John”, lastName: „Doe”, userName: „jdoe”, password: „passwd”) mockDomain(User, [user]) userController.login() assertTrue view == „/user/login” assertTrue model.message == „Wrong username or password!” } void testLoginWithSuccess() { request.method = „POST” params.username = „jdoe” params.password = „passwd” def user = new User(firstName: „John”, lastName: „Doe”, userName: „jdoe”, password: „passwd”)
}
}
mockDomain(User, [user]) userController.login() assertTrue response.redirectedUrl == „/message/list” assertTrue session.user.userName == „jdoe”
Conclusion and next steps
Grails helped my team to improve drastically the development speed and also helped in a better utilization of team’s skills. Learning Grails was fun and fast, but of course we’re still learning while we hit into one of the not so groovy issues from time to time. Personally, I’m happy we use Grails in our project and I recommend the usage it in any web project. I think at this moment the support of the framework is mature enough to be used with very good results in your projects. The demo GrailsSocialNetwork project, built for this article is available here: https://github.com/tavibolog/GrailsSocialNetwork. It was developed using STS 3.1 on Eclipse 3.8.1 on CentOS 6.3, using Grails 2.0.4 and Groovy 1.8. In the next article will discuss more Grails related stuff: custom validators, packaging, persistence, tag libs, internationalization, url mappings and more Groovy.
Here is what happens here (things which are new compared to Bibliography the previous test class): • @Mock annotation specifies that this test will use specific • http://grails.org/documentation mock objects • http://www.springsource.org/downloads/sts-ggts • Request object can be accessed in tests and we can prepare our test data using it • mockDomain is used to mock domains specified by the @ Mock annotation. This is useful because of offers support for findBy* methods and long list of injected method. • assertions use additional objects now: session – current session, model – which is the model returned to a view, view – which is the view name to be rendered
www.todaysoftmag.com | nr. 7/2013
33
technologies
Windows Azure Mobile Services
T
he number of people who own new generation tablets or mobile phones is increasingly higher. Nowadays, almost every family has at least one device of this type. Much of the desktop applications have been or will be ported on this kind of devices. On tablets and phones we can currently see everything, from Office to very complex games.
Radu Vunvulea
Radu.Vunvulea@iquestgroup.com Senior Software Engineer @iQuest
34
nr. 7/2013 | www.todaysoftmag.com
Besides the application that we need to develop, we often need a backend. Even if it is something very simple, such as data storage, it is necessary to invest time in this area. Helpfully, Microsoft comes up with a solution in cloud - Windows Azure Mobile Services. This collection of services helps us develop in a very short time the back side, without requiring knowledge of SQL, Web Services and security. Imagine that presently when we can develop the storage of Windows Azure data in less than 10 minutes. All you have to do is to create a class to store our data and a table in Mobile Services. We can copy from the local portal a project that is configured for our solution - no additional setup is
required. The first question that comes to our mind is what kind of platforms are supported. We have currently three platforms that are natively supported: Windows Phone 8, Windows Store (applications for Windows 8) and iOS. Specifically, we have native support for iOS. What do we mean by native support? We provide a component through which we can enter our data. Windows Azure Mobile Services offers three types of services exposed through an API in REST format: • Data - data storage • Users - user authentication, • Push - sends notifications to the user.
TODAY SOFTWARE MAGAZINE We propose the following part of the article to examine each service. Let’s begin with Date. Through this service we can store any data in Windows Azure and easily access them to a highly mobile app We can store data in these tables can be of any time. The only condition is that these data are to be serializable. For those in the NET world, this translates to any entity that is decorated with the DataContract attribute. Each entity must have a property called „id” integer. This will be used to uniquely identify each entity separately. Each entity can have several properties of value type. Data is stored as a non-relational database. Therefore, if you have references between objects, it is necessary to separately charge them using the id. When you add a new property, you do no need to change the table definition. This is done automatically. All data that is sent on the wire are in JSON format and the layout is natively supported. Every table you create in Mobile Services may have different access rights, besides the name, for each partial operation (Insert, Update, Delete, Read). The four types of rights that we can use are: • Anybody with the application key - Any user that uses the application can perform the operation on the table. • Everyone - anyone who has the access credentials to Mobile Services can perform the operation, even if this is not made in our application. • Only authenticated users - only users who are authenticated can perform the operation on the table. • Only scripts and admin - the operation can be executed only by administrators or by scripts (It is suitable for delete or update operations). In addition to this functionality, each operation can have a script attached on the server side. Through this script we can run any action, before the order is run on the table. We can change the command that the client sends, we can validate the data, we can even check the user and if we are to reject on request. Setting these scripts is the gateway and the language is JavaScript. Although it seems strange, Microsoft chose to use this language for two reasons. Firstly, the reason is that this language is known by almost any developer (iOS, Web, NET). Besides this, JavaScript is a dynamic language, therefore changing and running is extremely
simple. If we write the script directly into the portal we see that there is support for IntelliSense, which can to be very useful. There are many NodeJS libraries available for this location. We can, for example, send requests to various services without any problems. In the following example, we will check that the length of the name is at least three characters, otherwise we have an exception function insert(item, user, request) { if (item.name.length < 3) { request.respond(statusCodes.BAD_REQUEST, ‚The name of the student is to short.’);
}
} else { request.execute(); }
There are several things to which we must be careful. For example, we cannot have global variables or to store our libraries. We can define methods but they must be in the script. On the other hand, nothing is stopping us to call other service or upload data that are stored in other tables. Because these scripts can only be set from the portal, their management in a source control can be problematic. This feature is extremely strong because we can have validation data before they are stored in tables. At the same time when a user wants to execute a query can add a new filter to limit the data that is returned. Any application that stores data needs a mechanism to identify their users. Windows Azure Mobile Services offers the service for authentication. Through this service we have a build-in authentication mechanism. There is no need to implement our own mechanism. At the moment we have four supported providers: Windows Live, Google, Facebook and Twitter. Unfortunately, presently, you cannot define a proper provider using this service. But for a normal application these 4 providers should be enough. For each provider you want to use in your application you need to configure the id / key application portal along secret key. Once you have done this configuration, you can use the authentication mechanism. In the following example we can see how to do this in C #:
data. For example, when a user performs an insert on a table, we can add a property ”id” to the user in the server script. function insert(item, user, request) { item.userId = user.userId; request.execute(); }
Push Notifications can be used when we need to push different data to the application. A scenario where I need this mechanism is that we want to update a tile or send weather notifications to the user. An interesting thing is that Push Notifications are not supported and the applications written for iOS. Windows Mobile Azure Services was integrated with Apple Push Notifications. I said at the beginning that the majority of libraries for NodeJS are available when you define scripts for CRUD operations from tables. In an insert operation from a table, we can send a notification to the customer and make updates to the tile. Here’s how you can do this: function insert(item, user, request) { request.execute({ success: function() { request.respond(); sendNotifications(); } }); function sendNotifications() { push.wns.sendToastText04(channel.uri, { text1: „Hello kitty” }; } }
All services listed above can be successfully used if we have an application that needs a backend to store data, allowing users to login, or if we need to push data to our users. The learning curve is extremely good, requiring less than a day to learn how to use these services. Windows Azure Mobile Services contains a collection of services that could assist us in the development of applications for mobile devices. In addition to this, the complexity of our applications will decline because we no longer need to write cod to define different services.
var currentUser =App.MobileService.LoginAsync (MobileServiceAuthenticationProvider. Facebook);
All available data is returned from the identify provider and, if the operation fails (eg invalid credentials), we could encounter an error of the InvalidOperationException type. Once a user is authenticated, each operation done through the Windows Azure Mobile Services will contain user www.todaysoftmag.com | nr. 7/2013
35
architecture
10 design principles - part II
A
nd because zebras have no circles on them but at most slightly curved lines which flow nicely across their bodies, they also thought about cyclic dependencies. (This section talks about how we should avoid cyclic dependencies with few zebra world examples)
Stefan Baritchii
stefan.baritchii@3pillarglobal.com Technical Lead @ 3Pillar Global Romania
36
nr. 7/2013 | www.todaysoftmag.com
In ord e r to avoi d su ch unscripted scenarios please make sure your components don’t cross call one anothers 7. And because no one understood why a zebras have stripes the way they have them, they decided to DOCUMENT that for future generations so that it can be understood easily. (This section describes when Do you know the story about the zebra to write good comments so that every zebra who continuously eat it’s own tail? Thought user can understand it in future) so. Because it was a snake not a zebra. But you got the idea. It’s a thing that looks A lot of people stared at zebras and weird, and no one can predict what is going didn’t have any clue about what the stripes to happen about it. represent or why they are the way they are. But it would have been so nice if someIn software world cyclic dependencies one would have explained this mystery mean that you have a library A depending somewhere (different than National on a service within library B. In library B Geographic). you have some other service that is dependant on something else in library A. And The same is with software you write. we all know that in software world there aren’t only library A and B. There are much much more. Now imagine that one day you change something to one of them and deploy the one that you are responsible for. You will be like Neo in front of Morpheus in Matrix handing you a blue and a red pill. But this time you’ll have to take both.
management
There are times when something that defines a business is represented by a piece of code that contains no explanation. There are many times when you modify it and the hell breaks loose. Sounds familiar? When writing a piece of undocumented code think about these questions: What if one of your calls got spread across multiple modules behind scenes? How easy (fast) would be for someone to figure out what it does? Is it going to be some day as a core for the whole project or for at least one or more components? Is it going to expand into new functionality? If in doubt when answering these questions please consider documenting your interfaces, your services, and why you have done certain things like you did across your codebase. Document details like weather a value stores milliseconds or seconds, what represents a null value when found in a boolean, etc. Write only what’s important, and what others may want to see explained there. Pair often with other developers when doing some piece of code and let them ask what they don’t figure out. The answers to those questions make a perfect code documentation.
TODAY SOFTWARE MAGAZINE
testing refers to internals. That means you Open close principle: Any zebra shoshould be able to test if the zebra has a liver uld be open for extension but closed for and not some mixture of filling inside her. modification. (Well that’s why developers never attempted to create zebras - it might be too painful So you don’t end up having a zebra for them and developers love zebras). which instead of stripes has squares. As long as you have something that works But developers create software. And and it serves the purpose for what has been developers should care also if their software designed you shouldn’t let someone else need to feel any pain when being tested altering it, simply because... it’s perfect! But either blackbox or whitebox. So for you if someone else wants to add something to to know blackbox testing is a method of it then this should be a nice & easy thing to software testing that tests the functiona- do. (note: just substitute zebra with class, lity of an application(doesn’t require QA package etc) to know how the internal components communicate to each other i.e. for this kind Single responsibility principle of input you should receive this response), Every zebra should have a single resweather whitebox testing is a method of ponsibility, and that responsibility should testing the application internals. be entirely encapsulated by the zebra. 9. And because a zebra is not just a strip colored horse, zebra is called a true zebra if it follows some design principles. (This section will expand into explaining some common sense design principles - open/ close principle, single responsibility principle, stable abstraction principle and how we can apply them on a zebra)
This is why we call it a zebra(remember keeping things clear & simple?). We don’t want to have a zebraANDhunter thing. No. Those are two different things that serve different purposes. Therefore make sure your entities (classes, methods) respect this principle.
Even though some pop stars strived in their life to become zebras they haven’t 8. And because a zebra has NOT ONE BUT succeed because they were either black or TWO colors, zebra was designed to be testa- white. They couldn’t be both because unlike ble for both black and white colors. zebras they didn’t have a clue on design (This section talks about both white box principles. and black box testing in regards to how they designed zebra so that it can be tested this way)
Any unlikely to change core concept in an OO design should be made abstract. Yes no joke for you in here. Because this principle is quite serious. Don’t abstract things unless you know that what you abstract covers pretty many use cases that are less probable to change. By first abstracting
Stable abstraction principle
Zebras like to think about themselves as being half-transparent animals when they have a black background behind them. In order to tell them it’s not true a QA process should be in place. That means check if the zebra has all the qualities and nothing more than the ones documented in functional document. Zebras are black and white. In QA world there are two concepts. Black box testing and white box testing. Black box testing refers to a zebra from outside. That means with some indulgence from QA perspective black box testing a stuffed zebra will give you the same results as testing a live zebra(indulgence = we assumed a zebra is horse looking animal with black & white stripes). On the other hand white box www.todaysoftmag.com | nr. 7/2013
37
architecture 10 design principles - part II
it you may end up with lots of maintenance May I ride your zebra? afterwards therefore lots of money or resoIt is said that if you lose an airplane you urces spent on that if it’s not done properly. may ride a zebra as they tend to run as fast And zebras will hate you for that. as the airplanes. But they often fall asleep cause they are exhausted. So in order to 10. And because when thinking of a zebra have a whole trip you have to borrow one we think about a nice looking, fast, live, cute from another guy. But can you ride someanimal that lives in hordes some stuff sho- one else’s zebra? Of course. REUSABILITY uld be ensured when thinking about how to is the benefit of letting you ride someone design it. else’s zebra. (This section explains how scalability, availability, performance, reliability, security, Have you walked a zebra into a bar? reusability fits into a zebra world) You will find out that they are so thirsty. As they are given more and more water they As Prozac or Xanax make you more still get the bucket empty. So RELIABILITY friends in real life, zebras were now ready is the ability of the system to continue proto see the daylight. But seriously they were cess requests and handle transactions as not even close. Because a checklist of some accurately when the load increases as it QoS need to be ensured: did before. Reliability may have a negative impact on scalability.
Is your zebra able to grow? Is it able to run in flocks?
This is SCALABILITY. If you see a big zebra than the same zebra made BIGGER, than that’s vertical scalability. If at some point in time you consider that one zebra is not enough for you and you want two zebras than that’s horizontal scalability. Because a zebra can’t be bigger than our planet always think about how you can design your system in order to be horizontal scalable. Vertical scalability means you put more processor, more RAM, more HDD power into a single computer. Horizontal scalability means you need to have your software run on many computers.
Does your zebra entertain you all the time?
If it doesn’t it’s useless or at least disturbing. You need to have a responsive zebra. So does the clients of your software. They are keen for using your software. It should be available all the time, even when you sleep or do deployments to production. This is called AVAILABILITY. It can also be achieved by redundancy(you have another zebra that does exactly what the first one does, and this way you can make sure if one of them go barbecuing the other one will still entertain you). By setting up an environment of redundant components and failover, an individual component can fail and have a negative impact on reliability.
38
nr. 7/2013 | www.todaysoftmag.com
Is your zebra safe from lions?
Before starting this story lions have been created. We just know they are somewhere and sometimes are disguised themselves in zebras. Design things that you do with SECURITY in mind. You don’t want anyone ice skating in your database. In neither of your layers. Even though there are laws that protect you against such cases,
no one will bring your clients back if their credit card can be seen from the moon. So ensure that your databases are passwords protected, that you have firewalls configured properly, that your passwords stay with you, and the http connection is secure(that is you have to see https instead of http). And make sure your security certificate provider is a trusted one.
How fast does your zebra run?
Did ever feel like jumping on fields having the same low gravitation like you are on the moon(or in cheap chinese cartoons)? Did you ever imagined yourself jumping on such low gravity fields with a zebra? (Than you should really consider looking for a good psychiatrist, or wake up cause this document is ain’t over yet). Performance is about how fast you can make your zebra run so that it can achieve super speed to reach the moon(in order to jump in low gravity rocky fields). Usually some clients have performance imposed by audits therefore ask them before getting to work if they have certain SLAs that you need to take into account. Imposed SLAs after development are not fun at all.
business
TODAY SOFTWARE MAGAZINE
Cheap startup
W
hen you startup a startup (pun intended), the resources at your disposal: money, time, people, are limited and your challenge is to make the most out of what you have (and sometimes out of what you don’t have. You know the story: you start in your parents’ garage/apartment with 2 people and 1000 $ and in 5 years’ time you have you IPO and appear in top fortune 500. Dragoș Andronic dragos@txtfeedback.net CTO @ TXTFeedback
Ok- I can’t tell you how to do this (ask me in 5 years) but I can tell about some programs that target startups that are designed to give you a helping hand in reaching your dreams
The program for starting and developing businesses by young entrepreneurs.
This is the (translated) name of the program – more common, the famous nonrefundable 10000 EUR. The program took place in the last 2 year and, most probably, will take be relaunched in 2013 (nothing sure, but highly probable – by spring we’ll know) In 2012 the program started on the 15’th of February and the allocated funds summed ~ 6900000 EUR, distributed by the rule: first come, first served. The valid applications, that met all conditions and got the required score, would get funds starting with March 2012 – the application validation procedure took roughly 30 days.
What are the benefits of this program? •
•
•
•
don’t pay the ~21% representing social security (employer’s part). The exemption is applied as long as the employee’s wage is <= than the average wage per economy. For everything that’s more than the average wage you pay full taxes. Exemption from paying the taxes for registering and starting the company. Translation: this saves you up to ~ 500 RON and a couple of visits to the tax office.
Full details about the program/eligibility/terms of agreement can be found on the AIPPIMM (Agenţia pentru implementarea proiectelor şi programelor pentru IMMuri) site. http://www.aippimm.ro/categorie/ programe/programul-pentru-stimulareainfiintarii-si-dezvoltarii-microintreprinderilor-de-catre-intreprinzatorii-tineri-/. Below I’ll also try to answer the most frequent questions:
What are the eligibility conditions?
To be eligible the founder/founders have to fulfill the follow conditions: • To be younger than 35 • To be “first time founders” – this is their first company, and have not been associated to any other company • The business plan meets 60 out of 100 points (below the details)
Access to one nonrefundable grant of up to 10000 EUR, that’s up to 50% out of the eligible expenses (VAT not included). Translation: you create a business plan where, if you want the 10000 EUR grant, you have to bring another (at least) 10000 EUR + VAT (that’s VAT for the eligible expenses How do I enroll? What are the steps? – more below about what is eligible). 1. Starting a new company of type Collateral for getting a developSRL-D (Societate cu Răspundere ment credit of up to 80000 EUR. Limitată Debutanta ). It has to be a Translation: for more details about newly funded company – an existhis it’s best to address a bank. Most ting company cannot enroll in the banks offer custom deals for comprogram. The company can have 1 panies enrolled in this program and or more founders – if there are more can answer your questions better than one than all founders have than I can. to be “first time founders” and be E xe mpt i on f rom p ay i ng t h e younger than 35. Some trips to the employer’s social benefits for Commercial Registry and the Tax the wage of up to 4 employees, Office are needed (out of experience employed on a non-defined period. the most time consuming is getting Translation: for 4 employees you the social office registered). www.todaysoftmag.com | nr. 7/2013
39
business Cheap startup 2. Submitting your application + busi• The location of the social office: rural ness plan on the AIPPMM’s site (e.g. Floresti) 10p, urban (e.g. Cluj) (below will be the details about what 5p should the application contain) • The utilization of new technologies 3. If you would like to cover your side and promoting an information based of the money out of a credit, now society: if you’re creating software would be the time to solicit a credit. you get 10p, otherwise you’ll most When your credit will be approved probably get 5p you’ll have to let AIPPIMM knows • Financing: bank credit 20p, no creso that your application moves dit: 10p. They encourage you to pick forward. a bank credit so that the investment’s 4. Your application is analyzed and, value is greater. if approved, you’ll have to transfer your side of the money in the bank You have to get up to 60p. For example: account that will be created for this a software company (20p) with 3 employees program. (15p), with investments summing 40% of the total amount (10p), located in Cluj Details about starting a S.R.L-D can be (5p), that promotes an information based found at http://www.firmatineri.ro/etape. technology (10p), will get 70 points. html.
eye to otherwise your refund may not be approved. The good side is that obliges you to financial discipline – an important aspect of a sustainable company.
All the liabilities can be found in the applicant’s guide. The most important can be found below: 1. To keep 2 full time employees on the payroll during the time you are enrolled in the program (up to 3 years or until the turnover exceeds 500000 EUR). 2. To reinvest a minimum of 50% of the annual profit. 3. To file in at AIPPIMM all the paperwork required (there is a monitoring period and everything you buy has to be on the “at least 3 offers” model).
Where can I get advising on creating the application?
What are the “eligible” expenses? On What are the liabilities of the companies what can you spend the money? that join the program? You can spend them on: investments
What are the judging criteria?
For 2012 the criteria were: • Activity domain – Production (20 points), Services (15p), Commerce and other activities (10p). If you want to develop a software product you’ll get 20p. • Number of created workplaces (full time): >= 4 20p, >=3 15p, >=2 10p. If you say that you’ll have 3 full time employee the payroll should indicate this. • T he % of investments out of the whole business plan value: >80% 20p, >60% 15p, >40% 10p. What’s considered an “investment”: buying land/commercial spaces, hardware, furniture, vehicles, software licenses, trademarks, francizes, etc. It’s important to keep in mind that you should have a minimum of 40% investments in the business plan.
40
nr. 7/2013 | www.todaysoftmag.com
(hardware, furniture, web domain, software licenses, etc.), salaries, web hosting, accountant, etc. The complete list of eligible expense can be found in the applicant’s guide: http://www.aippimm.ro/files/articles_files/37/5794/ghid-tineri---2.doc.
Important to know about the grant
1. Your share has to be transfer from the beginning and will be locked until spent -> you’ll need a considerable amount of money up front. 2. The grant is “spend and then get refunded” – so you’ll actually need 20000 EUR + VAT and then be reimbursed 10000 EUR
Advantages and disadvantages
Another thing to keep in mind is not to rely on the refunds as operational money (day to day expenses) – you can never be sure when the state will refund you (can be weeks or months), so keep this in mind when creating the business plan – make sure you have enough money for the day to day expense without this grant.
What happens if you go bankrupt? Do you have to refund the grant?
No and yes. The non-investments money (salaries, accountant, hosting, rent, etc.) don’t have to be refunded. The “investments” have to be leased in favor of the state: if you go bankrupt the state will get your “investments”.
The easies is to go directly to. Their Cluj office is on the Horea street, no 13, and the staff there will be able to answer all your questions. You can go to a consulting company for creating the application (http://consultanţi.finanţare.ro/) – the costs associated to consulting can be deducted from the grant. Careful at picking a consulting – their fees can be quite high. From personal experience it’s best to talk to someone that went through the program before applying to get some feedback and advice.
Other questions?
The nonrefundable grant is always welRead the applicant’s guide. comed in a startup, but you have to look Take a trip down to AIPPIMM and at these money as “extra funds” and not as discuss with their staff. Google it: there’s startup money – as I was explaining, this plenty of information around. For example grant will come a refund, once you have this. made the payments. If you’re serious about starting a software startup I encourage you to docuAt the time of being accepted in the ment yourself regarding this program, program you’ll have to transfer a consi- the main benefit being the nonrefundable derable amount of money in a CEC bank funds – these funds come with some strings account, amount that will remain there attached but can be a “breath of clean air” until spent -> to be least affected by this for a startup. you’ll have to plan your biggest payments as soon as you get the grant. The project is under constant monitoring -> all purchases must be made through the auction system: 3 offers + official record of deciding the winner. This means extra paperwork to which you have to keep an
startup
TODAY SOFTWARE MAGAZINE
Startup - TXTFeedback
T
xtFeedback is a cloud platform for customer to business interactions. The focus is on real time conversations – question and answer – the final objective being solving the issue/problem as soon as it arrived. The platform was created and financed 100% in Cluj. When we started working on TxtFeedback our main drive was enhancing the “customer experience” – what your experiencing when you are buying from a store or when registering for a service. Dragoș Andronic dragos@txtfeedback.net CTO @ TXTFeedback
The problem (examples)
You are in a retail store, strolling through the aisles searching for a certain product/brand (e.g. sushi rolls) and you don’t know where to look. Or you get to the electronics department and you’re greeted by 50 similar products, all with details technical details that mean nothing to you, and you would need an store associate (specialist) to come and help you make your mind. Easily asking questions like: “Do you have sushi rolls? At what aisle?” or signaling “I need someone at the electronics department” associated with a prompt answer would save you time and effort. Or you would like to offer feedback to that store – the cashier was rude to you, you were bothered that you had to queue for 10 minutes or, on the contrary, you were
impressed by the quality of the waiting and you would like the restaurant’s management know this. In such moments you are in need for an easy and fast way to reach the staff & management. The already existing methods may fall short or may not be a good fit for you - e.g. the suggestion box may is (imho) outdated and directly talking to another employee is the last thing you want to do after you’ve been mistreated.
The TxtFeedback platform
Through TxtFeedback we’re offering a solution for such scenarios. Once a business (store/restaurant) joined the TxtFeedback community you will see throughout the store pliers/posters with something like:
www.todaysoftmag.com | nr. 7/2013
41
startup Startup - TXT Feedback
“If you have questions or want to give us feedback, send us an SMS at XXXXXXX or go to t3xt.me/@ demo from your smartphone and we’ll answer in the shortest time”. You text (SMS or web message) will reach an employee/the management that will answer “sushi rolls can be found at the fish department, the last aisle near the exit. We have an entire self for sushi treats”, “a colleague will be with you in 2 minutes” or “we are sorry that you found the cashier rude. What checkout did you use?” As a customer you receive the answer and you feel value by the company because your voice was heard and your issue addressed.
The idea
The idea for such a service – real time, on premises, conversations with the employees/management – came from similar services came from the US market, a more mature market with regards to customer services. We took this idea, refined it, analyzed the feasibility of such a product & business on the European market and once we saw that there is a niche to be exploited and that we have the know-how and resources to implement this idea we started working.
Development & architectural details
The platform was developed using more technologies & programming languages, composing wirhg now: a web dashboard and mobile website powered by ASP.net MVC 3 & 4 and an android app.
42
nr. 7/2013 | www.todaysoftmag.com
On the backend we have a linux machine that runs our custom communication server developend in Java, and a MsSql database. The required coding was done by 2 developers. We got from 0 to beta in 5 months and from 0 to release 1.0 in 7 months. Besides this we worked on our presentation website – this required an extra 2 months of effort using Wordpress as CMS.
Investment
Until now we invested ~ 30000 EUR in the startup, money coming from the founders and from the EU through a program supporting young entrepreneurs. We started from a team of 3 in Cluj and got to a team of 5 – 4 in Cluj and one salesman in Germany. In order to reduce costs we tried to develop everything in-house but where we saw that we didn’t have enough experience we externalized: e.g. the UX and UI we realized with the help of a designer, the hosting/IIS administration are externalized.
Challenges
Many, diverse and continuous. Looking back the technical challenges seem the smallest – business development: market acquisition, marketing and sales being the hardest. In a certain way this mirrors the existing Cluj reality – well rounded technical professionals that are able to find solutions to most problems, that now have to metamorphose into business people if they are to make the leap from outsourcing to “product oriented”.
Next steps
Business wise: focus on raising sales, mainly in western Europe, through direct and indirect (distributors) sales. Technical wise: we’re expecting an increase in the number of clients in the next period so the main challenge will be to scale up our platform and internal processes (maintenance and support).
About Ab Mobile Apps
Ab Mobile Apps is a startup founded by 2 “adopted” clujeni, Dragoş Andronic and Bogdan Oros, from their desire to show that “Romania’s Silicon Valley” is not only a saying but a reality. Presently the Cluj team numbers 4, split 50/50 between sales and development. In Germany we have only one person, focusing on sales.
economics
TODAY SOFTWARE MAGAZINE
How to be a Registered Sole Trader (PFA) – preliminary notions
W
e are increasingly speaking about entrepreneurship, freelancing or start-ups, so I think it would be very useful to talk about an aspect that is perhaps less known to people who want to trade on their own - namely taxes, as well as other financial accounting issues that an entrepreneur should consider.
Delia Coman
delia.coman@impulsit.ro economist, trainer and antreprenor
In Romania, the simplest form of Office: http://www.onrc.ro / Romanian / authorization for carrying out commercial formulare_pf.php activities is to be a registered sole trader. The required documents are: Commercial activities include: trading, • The registration form; services (other than those considered to be • The proof of your business name liberal professions - lawyers, public notaavailability check and registration ries, doctors, accounting experts, auditors, (original); tax consultants, architects or translators) or • Identity card or passport (a holograpracticing crafts. phic certified copy of the holder on The registered sole trader is the regiscompliance with the original); tration form of individuals who wish to • Copy of diploma or other docuperform independent activities and to me nt s atte st i ng profe ss i ona l get income from them. Basically, you can training, if applicable; become a registered sole trader for any of • The signature; the activities provided for in the existing • The information from the tax NACE codes in Romania, except for a few record; that require a special authorization or there • Documents certifying the rights to are special laws that prohibit the perforuse the registered office (a legalized mance of those activities by the registered copy or a certified true copy of the sole trader. original). This document may be one of the following: property act, Setting up as a Sole Trader rental contract or loan contract; To registering as self-employed, you • The Real Estate Register for the have to go to the Trade Register Office registered office – it is obtained from the place where you would like to from the Office of Cadaster and Real perform your activity. Additional inforEstate Publicity; mation and models of standard forms • If the office is in a block of flats, that must be completed can be found on you will also need the Neighbors the website of the National Trade Register Agreement signed by all neighbors www.todaysoftmag.com | nr. 7/2013
43
economics How to be a Registered Sole Trader (PFA) – preliminary notions
• • •
with which the premises have common walls; The registration form for proving the right to use the space; Evidence of payment of fees / legal charges: registry fees; The standard statutory declaration showing that the fulfillment of the operating conditions set by special legislation in the medical, veterinary, protection environment and safety field.
Since 2012, NTC has introduced the possibility of online operations: name reservation, tax pay. These services can be accessed on the website https://portal.onrc. ro/. It is however advisable to check the information on the NTC website before going to the front desk, because in time there might be some changes. Moreover, if the applications mentioned above are not found on the NTC site, then you must obtain them from the Trade Register inquiry office. Once all documents have been submitted to the Trade Register Office, you have to expect a couple of days for the issuance of the registration certificate
Tax registration
After the registration certificate release by the Trade Register Office, you must submit Declaration 220 to the Department of Public Finance, within 15 days following the date listed on the certificate. You can find the declaration together with additional instructions at this link: http:// static.anaf.ro/static/10/Anaf/formulare / decl_220_2008.pdf. Declaration 220 should be completed in 2 copies and signed and then submitted to the Department of Finance in town where the individual was recorded, together with a copy of the registration certificate and an ID card copy. This statement basically determines the tax system (non-personal tax or an
44
nr. 7/2013 | www.todaysoftmag.com
income tax bracket),the form of organization (individual or joined), plus it declares an expected amount to be achieved by the sole trader during that year (the registration year). Based on this amount, freelancers who opt for the non-personal system will calculate and pay tax income from self-employment during that year. All other available sources will mention Declaration 070, which should be submitted with 220. For authorized individuals who obtained registration certificate from the Trade Register Office, this tax registration statement, 070, is no longer necessary, since registration is automatically done based on the information transmitted from the Trade Register Office to Public Finance Administration.
Subsequent changes in tax registration
Subsequent changes in tax registration data must be notified to the competent fiscal body subordinated to the National Agency for Tax Administration, within 30 days of their occurrence, by completion and submission of the certificate of recorded amendments, which is the same statement that was originally completed (220). You should just tick on the first page the „Certificate of recorded amendments” and not the option” Initial declaration „. If the conditions which generated the tax registration cease to exist, the tax payers are required to deliver the certificate of tax registration to the tax administration, in order to be cancelled, along with the submission of the certificate of recorded amendments. If changes occur in the originally reported data and those inscribed in the tax registration certificate, payers will submit, along with the certificate of recorded amendments, the tax registration certificate, so that this might be cancelled and a new one might be issued. The certificate of recorded amendments should be accompanied by documents that show the changes that have occurred. Changes requiring the submission of the
certificate of amendments, namely a new Declaration 220, may occur in any of the following type of information: • Tax residence (address); • NACE Code; • Registering as a VAT payer, either by going beyond the tariff ceiling or by the taxpayer’s decision; • Hiring one person / more people with an employment contract; • Cessation of the activity. If you want to change the option to determine the net income, you should submit Declaration 220 by 31 January of the tax year. The option to determine the net income based on the single-entry accounting data (ie in non-personal system) is obligatory for the taxpayer for a period of 2 consecutive tax years and is considered renewed for a further period, if the taxpayer does not require the determination of the annual net income based on the income tax bracket by proper completion of the declaration of estimated income and its submission to the tax authorities until January 31 inclusive. You can find more information about revenues from independent activities in the guide for sole traders released by Contzilla. ro. The guide addresses any self-employed who makes money from independent activities and is a useful tool that guides you step by step in the whole process required for registration, accounting organization and choosing the best tax option for your business. It contains practical examples and solutions to ensure a good start of your business. The guide contains related legislative changes in July-August 2012. http://www.contzilla.ro/2012/09/ venituri-din-activitati-independente-minighid-pentru-persoanele-fizice/
events
TODAY SOFTWARE MAGAZINE
Art & IT: overcoming the conventional framework by stimulating creativity
L
et’s put aside facts and figures. Beyond annual turnover and technology, the real drivers of a business are people, their creativity and how they collaborate in order to provide services or software systems desired by the client. Software solutions have often been the innovative factor that turned conventional business services, offering customers’ significant added value. While the processes of a certain domain, such as automotive, insurance or banking are standard, the software platform that is at the basis of their innovation makes the difference between an innovative and a standard service. Therefore, overcoming the conventional framework and endorsing creativity and innovation has become one of the targets pursued by all software companies. In IT the use of templates (frameworks, platforms or patterns) and “best practices” has become one of the main trends. They define standard ways of solving problems and often become routine in a software developer’s activity. Doing an excellent programming job, qualitative, yet pleasant,
means putting your print on what you realize, and this requires personal creativity. The very same idea stands behind the association and involvement of msg systems, a German company with over 30 years experience in software, in TIMAF (Transylvania International Music & Art Festival, which promotes art, both in its traditional and modern forms). The festival took place in Cluj Napoca, during the first three weeks of October, 5th to 28th, 2012, and has consisted of concerts, workshops and competitions. The 13 arts were TiMAF’s central idea, and the discovery of these arts through the 5 senses: listen, view, feel, taste and scent.
Although, judging from an image and structure point of view, TiMAF and msg systems and different, we found that we still have in common the interest in overcoming the conventional framework by stimulating creativity as a source of innovation. Thus, the slogan used in our marketing campaign during TiMAF was: „discover msg systems through the 5 senses“. Beyond lines of code there are men. Innovation in IT, as in any other field, requires overcoming the conventional framework, and discovering personal expression of creativity in every day work. Hence, we brought our own creativity as a partner in TiMAF, even if this meant changing temporarily the standard image of msg systems. It was a project in which we tried to become inventive, in an area that it was not familiar to us and, at the same time, we tried to present our image as a company, bringing up front msg systems’ team. As a partner during TiMAF we did: • An online msg branded software, through which visitors could meet company employees and their personal preferences in an unusual context. With a 100% design „street arts” and information about the taste, smell, favorite movie of colleagues - those interested had the opportunity to come into contact with each msg team colleague on a background playing each colleague favorite song. • Photo Exhibition in Shto College B ar, u n d e r t h e s am e n am e : „Discover msg through the five senses.” And, not to forget, a purple „msg” cocktail was served during the entire event. • An unconventional msg corner (see
image below), powered by the street art attitude located inside TiMAF Lounge in Piata Unirii. We promote a culture of ingenuity, creative exploration. A modern software development culture based on creativity and innovation offers customers the best way to create or adapt their product or service in a dynamic market, constantly changing.
Rodica Manolache
rodica.manolache@msg-systems.com Marketing & PR Specialist @ .msg systems Romania
www.todaysoftmag.com | nr. 7/2013
45
misc
Gogu and Miorita - Damn with the „mioritic” shepherd! – said Gou out loud. He suddenly looked around to see if he had to give some explanations, but no one seemed to bother. They were all deepened into the documentation they had received, all cheerless... Yeah, no one seems too happy about the requirements list. How could someone accept that? Such resigned people ... He continued to read the email, becoming more and more cheerless; from time to time, he was muttering something to himself. - What’s with the funeral atmosphere? Chief ’s entrance took everyone by surprise. Oh my God, what’s with the look on your faces? What’s wrong with you? The end of the world has been officially confirmed? Don’t worry, it won’t come, it’s snow-bounded on the roads of Moldova, ha-ha-ha... But he stopped instantly, it was clear that nobody shared his good cheer. He changed his tone immediately: What happened? Since nobody seemed to have the slightest intention of responding, Gogu cleared his throat: - The requirements from the client came... - Ah, awesome! They managed to send them in time... But he suddenly realized: they are a mess, aren’t they? What did our folks say? - Well there’s the problem, Chief! Misu intervened. I’m not quite sure that „our folks” are indeed our folks. They said it was ok because it was too late, we were lucky to even have these ones, che sera sera, there was nothing they could do, but we would certainly handle it because we’re smart guys - us, the development unit. - It’s not like this isn’t true... Gogu couldn’t help but comment. But even so, we have to work at least a week on them! Just to be clear... Voices of approval began from the entire office, suddenly animated. Although no one seemed willing to say anything, now, like at a signal, everyone warmed up and started sharing their opinions on the document. Comments came from everywhere, some blamed the document and its authors, others blamed their fellows who had accepted it, but most of them were already imagining themselves working hard and for nothing, hours of wasted
46
work, futile efforts, endeavors, anger, d i s app oi nt m e nt , frustration... - Stoop! Chief almost shouted, desperate to cover the uproar created. Did anyone answered to the email? The silence was an obvious answer. - Well guys, as far as I see it, we don’t have a problem yet but you are about to create one. Gogu got struck with thunder. If he shows that playful smile now, in the midst of our general tragedy, I’m going to shoot myself ! Actually I’ll shoot him first and then myself, at least I’ll die at peace... - Gogu, I see you’re puzzled. Let’s see, what is actually our problem? Ours, Chief, not yours as far as I can see! He didn’t say that out loud, he verbalized only his greatest sorrow: - The problem is that our guys have accepted the document! And it’s almost unusable. Formulations are vague, incomplete, some requirements collide, there are inconsistencies in the terminology, there is no prioritization, and instead of describing requirements they present solutions... Gogu pulled his breath and continued even more huffily: How can someone accept that?! They didn’t read the document? How could they send it to us? As in Miorita! This is what defines us: we reconcile to what we have, we resign. And that means we will work double tides... - Stoop! We are back to the beginning again? Chief was desperate. I repeat the question: did someone answer to the email?! What’s with this Miorita? Sorry to disappoint you guys, but this Miorita of ours is not relevant for all of us. I admit that some of us tend to let the fate decide
nr. 7/2013 | www.todaysoftmag.com
for us. We gloss, but we accept the situation and move forward. But not all of us, the generalization is not valid. Let’s think for a little bit: how many shepherds were they, one? Not really. There are three in the ballad, right? And what do the other two do? Plans, my boys! The other two plot! That is they met, discussed, analyzed the situation of the herds, the number of sheep and their quality, and set some goals and priorities and an action plan... So, guys, if you like this Miorita, I suggest you put aside the role of the resigned shepherd and take on the role of the others. Do a quick review of the document and send back to „our folks” our improvement requests. I know it’s easy to complain, but we can’t change anything unless we mobilize. So, let’s get to work! Let’s have solutions and action plans in our Miorita! Simona Bonghez, Ph.D.
simona.bonghez@confucius.ro Speaker, trainer and consultant in project management Owner of Confucius Consulting
sponsors
powered by