Archive for the 'Technologies' Category

Design Patterns: Wise Solutions to Save Time and Money

May 13, 2011


 
By Sibers Unix Developer Maxim Aksanov

Accompanied by Sibers PHP Developer Konstantin Sherpaev

Is it possible to quickly add features to your applications without having to completely rewrite them from scratch?

As a customer have you ever thought about the technical structure of your development project? Of course, you are probably thinking “Isn’t that your job?” Regardless of occupational designation, you are still probably aware that every application inherently has an abstract structure. Sooner or later you might want to change it, and thus you should have an understanding of at least the basic structure. A clear and good structure includes certain patterns of development, which is exactly what we are going to debate in this entry. These patterns, when used in the design of your application, can save significant development time and allow developers to use a number of useful features. So, what exactly are design patterns, and when they are useful for your tasks?

Design patterns are fixed templates which are used by developers for building a basic application frame. The frame choice depends on the specific features and purposes of the application. Since some application features are similar, developers create models for how to solve the most frequent design problems. These models are effective, internationally accepted design patterns. For these patterns work well, you need to consider what functions and supplements your application will need during the specification phase, as well as what you might want to add. In this phase developers can identify and reserve some “free places” for these components.

If developers ignore design patterns when creating application versions, adding every new feature, even a simple one, is going to become a very difficult task requiring a great deal of the developer’s time. In fact, it will result in rewriting the entire source functioning code. By sharing your project plans with your project manager upfront, your team will be able to change the code according to your desires with minimal difficulty and minimal time.

This particular issue has come to light a number of times with our own customers. One such example of this type of project involved an application that did not have any patterns in its structure. Each time our customer wanted to add a new feature, we had to add more and more work around. It was too complicated for us, but seemed very simple for the customer. He thought such minor additions could not possibly take hours of development. So, when the next feature addition was estimated to take 40 hours of work, we decided to apply design patterns. This task took 60 hours, but as a result we could add every new feature in just 4 hours. In addition, further support became simpler, and the customer, needless to say, was quite satisfied.

Another important advantage to using design patterns is their international recognition. These patterns speed up the transfer of your project to other developers in the event that you want to change the team, or want to make further additions with another provider some time after the project concludes. The new provider or developer will not have to spend hours working from scratch, and your money is going to be allocated more wisely.

However, the key to using patterns may is to use them wisely. The worst way to use patterns is to use them in all cases, with all variants in the same application in place, which will not be needed for some additions. This will actually increase the development time, and will result in complicating the code. Even worse, the next developers will have to spend much more time to repair the matter.

Types of Design Patterns

According to the Gang of Four, the authors of the book Design Patterns: Elements of Reusable Object-Oriented Software, there are 23 design patterns. These patterns are then divided into 3 functional categories: Creational, Structural, and Behavioral Patterns. Let’s briefly describe each and look at some case studies from our own practice.

Creational design patterns deal with object creation mechanisms, and attempt to create objects in a manner suitable to the situation. The basic form of object creation designed without patterns could result in design problems or excessive complexity. Creational design patterns solve this problem by controlling object creation.

Structural design patterns ease the process by finding a simple way to realize relationships between entities in the code.

Behavioral design patterns identify common communication patterns between objects and then realize these patterns. These patterns increase flexibility in carrying out communication between the objects.

Example 1

One project the Sibers team developed involved using the WebSpider module. WebSpider is a website downloading program that is used for analyzing and recording information in a database. For this project we completed multithread downloading by using a special algorithm.

Another application in the project required a different supplementary module — AvailabilityWatchet. While developing this application we found that this unit had the same structure and functionality as WebSpider, however the downloading algorithm was slightly different. In this case we had two possibilities: copy the process thread characteristics and correct them for new tasks, or redevelop the first module with a design pattern without code copying. It was a much wiser decision to follow the second variant, in case similar applications appear again and again. Therefore, we decided to apply a design pattern Factory Method. This pattern makes it possible to describe the logic of a process once in the basic technical class. In the new module we described a simple class which created concrete objects. As a result we created a technical class to manage abstract threads. In each module we had to briefly describe peculiarities of management and how the application met new needs.

Thus, the Creational design pattern was most beneficial in this situation.

Even more importantly, we were able to greatly simplify the addition of new units with similar structures without having to spend any time on new coding, as all we needed to do was use the design pattern established in our code.

The design pattern used allowed us to decrease the amount of code, making it more structured and readable. This meant there was less potential for developer mistakes. Overall, the process was a great advantage for us as it decreased the development time for further modules.

Example 2

Another of our case studies involved developing a site downloader which required data to be transferred in the same format. PHP language was used in the development process.

Downloading was needed to accomplish this task, and was started repeatedly. Since the design pattern using downloader had to be initialized for every feature and every time, be it Loginer or Extractor, a solution was needed as the process was quite inconvenient.

We then used Creational pattern Singleton for the downloader, which had a request generation method description. This downloader’s major advantage was logging request data, thus allowing us to process several parallel requests.

***

These cases clearly show the necessary and beneficial usage of design patterns. When we began analyzing the excessive use of patterns in our practice, we only came up with a handful of cases where developers erroneously used a certain type of a pattern. The effect was obvious as the application had a big code dimension, experienced trouble with testing, and worked with objects that required many unnecessary actions. If you see similar symptoms in your project, it is a sign of using an incorrect pattern. However, this does not mean that all the patterns have to be removed. When developers replace just the pattern used erroneously with the correct pattern, everything ran smoothly, and worked effectively.

By now it should be clear how using appropriate design patterns can simplify the process of development, save time and money, as well as improve the functionality of the application. You should also be aware that developing such patterns can take some time, but the extra cost will most definitely pay for itself in the long run. If the code is written without such patterns, which may be less expensive upfront and may seem unnecessary for some customers, any further desirable features in the application may result in many hours of development time, in spite of being consider “minor” or negligible. Now it’s time for you to make a decision as to whether to allow developers to use these suggested design patterns for your project or not.

Android Development: Tricky Tasks — Native Solutions

March 3, 2011

sergey-kiryukhin
 
By Sibers Android Team Leader Sergey Kiryukhin

If you want to develop an Android application, chances are you will be advised to use NDK. So, what exactly is this modern tool, and why do so many developers recommend it? This article will answer these questions, as well as explain the differences between using NDK and Java. You will gain a clear understanding of the advantages and disadvantages of NDK, as well as for what purposes NDK is recommended and for what purposes it is not recommended.

NDK (Native Development Kit) is a type of technology that is used to develop Android app components by using so-called “native language”. In many cases, Android applications that are written in Java have low productivity. When developing using Java, you will be able to use just 24 Mb of RAM, whereas developing with NDK will give you more than 24 Mb, thus increasing efficiency. In addition, by using NDK you will also have a greater increment of process execution speed.

android

Another handy feature of NDK is the option to use many native libraries. Since you can use various ready solutions for your project (e.g., a library which completes math tasks), the overall time for development decreases.

You must be aware of the fact that NDK cannot be the sole technology for development. You will have to use another platform as well due to some of the disadvantages of NDK. For example, NDK makes it impossible to work with events (keyboard, touchscreen or accelerometer) and sounds. For these tasks you should use Java because NDK native libraries can be easily implanted into Java shell.

NDK Advantages

NDK is especially good for tasks when process acceleration is needed, for example, as part of game development where you calculate a game physics engine or AI. These calculations require a lot of RAM despite the fact that the gameplay background itself may require only 3 Mb. Java copes with this work with difficulty, so the majority of games today are developed with NDK (“Angry Birds” for Android is a great example of a program developed with NDK). Sibers developers not only actively use NDK-tools, but also organize workshops based upon this technology for colleagues and interns. This article is a result of one such workshop.

More examples of beneficial usage of NDK include tasks regarding pattern recognition, data encryption and compression, images/video/audio processing, and all actual and modern trends which require a good deal of complicated calculations. It would be quite simple for a PC to perform these tasks, however mobile platforms have limited resources. In fact, Android is a more “convenient” development platform than the iPhone. The iPhone has many limits for potentially dangerous actions (e.g., access to user’s sms, emails, address book, wi-fi signal strength information etc). Thus these dangerous actions could never be legally realized on an iPhone application that needs to be approved by the iTunes App Store. The Android market does not restrict the usage of these actions.

Another nice and important advantage of NDK is the compatibility it has with OpenGL ES 2.X. This technology allows for the creation of more beautiful 3D graphics.

Disadvantages

While NDK improves efficiency in many cases, there are also situations when NDK works like Java, but requires even more development resources than Java. Take, for example, the development of an application with simple calculations and a lot of supplemental information to be displayed using a complicated user interface. Classic examples of this type of application are guide-books and shopping apps. In these cases using Java would be more beneficial, due to its effective tools for easy interface development. “Easy development” means that you save both money and time for your clients.

Interaction with Other Platforms

The use of native language makes porting applications easy, because NDK makes it possible to implement standard native code libraries. These libraries can be used for other iOS platforms development; however they do not simplify porting to Windows Phone 7, Blackberry, or Symbian. You will need to rewrite most of the code in these cases.

Porting C++ desktop apps to Android becomes simpler with NDK, but it does not mean that you can replace the app without any changes. This would be too complicated, slow, and inappropriate for a small screen.

To Sum Up…

You have now seen how the use of NDK helps solve many of the problems with Java, however development with this tool is not always ideal.

NDK should be used for:

  • Developing components with complicated calculations (game physics, AI, pattern recognitions, data encryption and compression, images/video/audio processing);
  • Making “a clone” of a C++ desktop application for Android.

NDK should not be used for:

  • Creating user interfaces;
  • Working with bulks of static data.

10 Simple Pieces of Advice on the Usability of Websites

January 11, 2011

tatyana-medvedeva
 
By Sibers Technical Analysis Specialist Tatyana Medvedeva
Accompanied by Sibers User Experience Designer Eugene Odnoval

 

Long gone are the days when users were satisfied with a basic, working website. Users now need, not just the basics, but also a site that is convenient. Therefore, it is very important that you pay strong attention to your site’s usability, keeping in mind the user’s perspective. After all, even if you have a great design, if the information is not easy to acquire, the user will not return to the site.

So, how do you improve your website’s overall design to create the best possible user experience? Following these 10 simple tips can help accomplish this mission, and keep your users happy.

  1. Use disappearing explanations in the text fields. For better usability, an explanation should disappear when the user clicks on the field, leaving the text field available for the user’s comments.
  2. Avoid pop-ups. You should avoid advertisement pop-ups whenever possible. These items can be detrimental and may even force the user to leave the site. Instead, place all information and ads directly on the page layout instead of designing it to pop up when the site is opened, or the user’s mouse hovers on the page.
  3. Post the publication date. Users want to know how current your information is; this helps to increase credibility and relevancy. It is always a good idea to display the date of your postings on the site.
  4. Enable search functionality throughout the site. One of the most serious and common mistakes is a lack of search functionality. The availability of a search box on the page makes navigation on the entire site much more comfortable.
  5. Disable automatic music intros and audio ads on the site. You should definitely give your users a choice whether or not they choose to play audio files.
  6. Clearly indicate links. The user would appreciate it if it is clear what areas can be clicked and what areas cannot. Links should be highlighted in a different color from plain text, and they should also be underlined. This makes the page appear more pleasant to the eye, making it more readable, and user friendly.
  7. Remember breadcrumbs. Of course, this issue has nothing to do with food, but is essential for site navigation. Visitors like to know where they are, where they can go, and how to keep from becoming lost when moving between pages.
  8. Avoid deadlocks (windows can’t be closed, icons don’t work, everything freezes). If your site has a bug, you absolutely need to fix it. Of course, testing all the buttons and links should have been done in advance, before launching a live version; however, if you plant deadlocks as a strategy in an effort to trick and force the user to enter extra data (for example, you make them register for something), you can pretty much guarantee the user will never visit your site again.
  9. Avoid animated ads. A lot of huge banner ads blinking with different colors and changing their size and location tend to distract and annoy even the most discreet user. Say “no” to blinking texts, and your users will thank you.
  10. 10. Give your contact information. Providing contact information in a noticeable place helps visitors easily get in touch with you, as well as provides a feeling of trust. These simple details, such as your contact address and phone number will make you appear honest and friendly. Additionally, you can gain feedback, which many users like to view before deciding to apply, or contact you.

This list of recommendations is limited to the top 10 most common pieces of advice for site usability. More subtle issues are equally as important and can be discussed at a later time. That being said, if designers adhere to at least these basic points, visitors will enjoy their experience on your website and will appreciate the convenience of a user friendly platform.

web software user interface example

Microsoft Certified Partner

October 19, 2010

Sibers has updated its status to a Microsoft certified partner, which is supported by a nice glass tablet from Microsoft saying “for your commitment to creating and delivering innovative customer solutions and services based on Microsoft technologies, we proudly recognize your dedication to excellence” and signed by Steven A.Ballmer and Allison L.Watson.

sibers-microsoft-certified-partner-plate

Such a pleasant present arrived on the day of Key-Soft birthday (editor note: long time ago Sibers was named Key-Soft) and marks the efforts of a whole Sibers team of .NET developers on creating a wide range of high-quality applications. We congratulate our .NET department and its team leaders Alexey Malinovsky and Roman Sitnikov with the achievement. The certificate resulted from our Microsoft team obtaining 23 certificates of 8 types on different technologies:

  • PRO: Designing and Developing Enterprise Applications using Microsoft .NET Framework 3.5;
  • PRO: Designing and Developing ASP.NET Applications using Microsoft .NET Framework 3.5;
  • TS: Microsoft .NET Framework 3.5, Windows Communication Foundation Application Development;
  • TS: Microsoft .NET Framework 3.5, ADO.NET Application Development;
  • TS: Microsoft .NET Framework 3.5, Windows Forms Application Development;
  • TS: Microsoft .NET Framework 3.5, ASP.NET Application Development;
  • TS: Microsoft .NET Framework 2.0 – Windows-based Client;
  • TS: Microsoft .NET Framework – Application Development Foundation.

With the official message complete, let me disclose some confidential information. It turned out that the award package from Microsoft was a bit buggy :) Not that we expected it, but there was an awkward feeling in the air. There were two glass tablets in the package and one of them was through the looking glass, i.e. mirror-printed — yes, you should understand it literally. So, the congratulatory text looked like this:

tfosorciM

rentrap deifitreC

“evitavonni gnireviled dna gnitaerc ot tnemtimmoc ruoy roF
secivres dna snoitulos remotsuc
ezingocer ylduorp ew ,seigolonhcet tfosorciM no desab
.ecnellecxe ot noitacided ruoy”

microsoft-plate-buggy

Nevertheless, the fact of possessing such a rarity makes us happy. This tablet is unique among thousands analogous (we hope, Microsoft doesn’t produce this bug with every other tablet), and due to its uniqueness our company has its own spirit!

Creating Cross-platform Mobile Applications

October 1, 2010

All-in-one with minimum charge: is it possible to save?

HireRussians Mobile Team Leader By Sibers Mobile Team Leader Igor Chertnekov

Thinking about mobile applications, most customers keep in mind that designed once, their application can be easily redesigned for other platforms. Why, they are quite aware of cross-platform transformations and it is not supposed to be difficult for real professionals. Had they but known about all the complications awaiting for the application and their real saving in comparison to the development of a really nice original application, they would have given up this idea quite readily. Curious to see some justification?

A list of the most popular among the sea of mobile platforms includes: BlackBerry OS; Android OS; iOS; Windows Mobile; Symbian; Bada; Palm WebOS; J2ME, etc.

Porting between devices on one platform

The variety of mobile devices

iOS family

Let’s consider the easiest case of compatibility: iPhone – iPod – iPad.

  • iPhone — iPod: goes without any changes.
  • iPhone — iPad: the logic does not need any transformations while the design needs certain changes according to the HIG for iPad, as the screen becomes four-fold bigger. Thus, the interface requires redesigning.

Things to keep in mind:

— With all the compatibility, still there is a problem with different versions of the OS. For example, iPhone 2G/iPod 1G does not support applications for iOS 4.0.

— Some “minor” differences include iPhone 3GS and 4 having an auto focus and a high camera resolution as well as a built-in compass; iPod 2G+ has a built-in dynamic; iPhone 3GS+ allows shooting video; iPad supports direct file exchange between the application and a desktop; iPhone 4 has two cameras; iPad does not support the Game Center, and it is just the beginning of a long list.

Cross-platform changes for Android-based devices

Android keyboard nightmare

With unchanged logic, different models require changing graphics for the screen size; graphics and UI for the keyboard type (screen or physical); graphics and UI for the screen orientation where the keyboard is available.

Things to keep in mind:

— OS versions incompatibility goes without saying; moreover, different devices can have different efficiency, various location of the camera with different orientation (facing the user or facing the world; some Android phones go without a touchscreen).

Cross-platform changes for Blackberry products

With a big number of devices produced without a touchscreen, different devices require special assembling, or the application is going to be a bit too heavy and clumsy. In addition, the 4.5 version, which is still quite popular, does not support many of the convenient APIs, especially those dealing with the interface. As for the interface, Blackberry products have a rather problematic one, which should be written every time from scratch and requires quite substantial design work.

Cross-platform changes for Symbian, WinMobile, etc

The problems are essentially the same and you have already read about the most serious ones – to list a few: different OS versions, resolution, design, keyboards, orientation, etc.

In this case the interface requires ultimate changing including every single detail connected with the API for every platform, namely work with the camera, net, GPS, file system, databases and so forth. In very rare occasions their mathematics and OpenGL graphics stay the same, but it is rather an exception.

Cross-platform modifications cannot but have certain “pleasant” features:

  • Android apps cannot use more than 16Mb RAM;
  • iPhone apps cannot access sms, calls history, correspondence and file system;
  • Blackberry apps require writing their interface from scratch with many standard components having only simple implementation. For example, text fields do not have any visual decorations, and if you need just a field with a simple horizontal bar, it will be necessary to add this feature on request.
  • BB and Android are more difficult for debugging with their clumsy emulators.

In fact, the real saving on the development of the second application for the new platform totals from 5% in the least optimistic case till 30% in the most optimistic one.

Saving on porting apps between mobile platforms

Of course, we know quite a number of standards and frameworks for writing cross-platform applications, including HTML5 web application; HTML5 in original; PhoneGap; MotherApp; Big5; Rhodes. Why not use them?

Frameworks for creating cross-platform applications

You see, all of the mentioned above require a lot of resources. It is impossible to develop games with such frameworks, and they are best only for reference books, guide books and calorie calculators, if you need them. In addition, with one set of graphics your app will be designed for only one platform and look strange on any other.

You get what you pay for, don’t you?

Multitasking in Windows Phone 7

February 18, 2010

gavrilov.jpg By Sibers CTO Andrey Gavrilov

Windows Phone 7 having been announced, everybody wonders if it has a multitasking mode. A Microsoft representative answered to that saying that applications will be able to “bring value to the user, even when their apps aren’t running”.

In fact, it is worth mentioning that the description for hubs (new interface elements, practically the same as widgets) says “…it’s pulling data from the app or the app’s associated service”. That means connection with a service, with the latter working in the background.

Actually, that’s all we need. Ideally, phone multitasking (and I’d like to see it on desktops as well) should not imply a window with the background service popping up any moment. The task should be performed as a background job and notify the user about the events if necessary. In my opinion, Windows Phone 7 has all the prerequisites for it.

A few years ago a similar approach was implemented in Palm OS 6 (Cobalt). Every application had one thread for the interface and an arbitrary number of threads (more than 0) in the background. After minimizing an app the interface thread closed while all the other threads, such as playing music or receiving mail, went on working. Windows Phone 7 seems to have the same approach, only with a more advanced concept of services instead of threads.

What about the new OS kernel? Is it WinCE or something new? Let’s wait and see.

Speculation on the OS to be used

My brief Internet search showed that many think Windows Phone 7 to be working on Win CE. Some turn to Win CE 6, which was produced more that 3 years ago but not used yet in any Windows Mobile version. Others are absolutely sure it is Win CE 7, which has not been announced yet and can well be anything including an absolutely new OS based on fresh principles.

I would choose in favor of a new OS and will try to explain it.

Modern mobile OS have two main trends. The first type is a “scalable” OS, such as iPhone OS, Android, MeeGo with its predecessors Maemo and Moblin, which after some adjustment can work on desktops. iPad and numerous netbooks on Android are in the middle between phones and desktops.

The other trend is represented with such OS for limited environments as Symbian and Brew. An interesting variant is Bada, which is a kind of OS add-in. Together with the Samsung proprietary kernel, Bada requires less resource than Symbian and about the same as Brew. Added to Linux, Bada can turn to an OS of the first type.

Symbian seems to be less favorable in such circumstances as it is much more demanding of resources than Brew and Bada, but lacks the advantages of iPhone OS or Android. Windows Mobile is in the same basket as well.

If we take Windows Phone 7, MS has two variants: to use traditional WinCE, which can result in an unscalable OS with big requests, or to create a new generation of OS taking advantage of reset and use the experience of Apple and Google.

Google can’t be expected to provide a well-thought strategy as they try to win the market, but Apple and Microsoft have all the opportunities to carefully think over their ideas. Apple traditionally puts off compatibility and starts from scratch. Thus, we might expect iPhone OS with additions of background multitasking and split-screen to appear on notebooks soon (and, probably on desktop computers later).

Windows doesn’t throw the idea of compatibility and decided to facilitate the desktop Windows 7 making it more efficient and finger-friendly. However, there appeared a number of challenges:

  • Desktop OS requires too many resources to fit into a smartphone;
  • Old programs have old interfaces, which cannot be managed with fingers or on small screens;
  • With most users preferring full-screen (or double-app split-screen), large number of windows becomes redundant – this was statistically proved by the Microsoft itself with the Windows 7 development;
  • Compatibility prevents implementation of new technologies. There were information leaks what Microsoft was searching for a plan to move from Windows to Midori.

If Microsoft sees the same, it looks like the right time for them to get rid of NT in favor of more advanced concepts.

T-Mobile Ad Features Sibers Android App

October 30, 2009

A new commercial for T-Mobile myTouch 3G features an Android application made by Sibers.

The app is called Face-IT and it turns your Android device into a mouth that moves according to what you pronounce.

ASP.NET MVC Framework vs. Web Forms

March 19, 2009

ASP.NET MVC Version 1 has just been released and we are looking at its benefits over standard ASP.Net Web Forms

- a clearer concept of code division (Model-View-Controller);
- powerful backing for unit tests. Such things as testing classes for generating a page layout has become simpler;
- more global and accurate control of HTML and JavaScript generated;
- coming up with a very user-friendly URL.

Correct Software Development – What’s That and What’s It for?

January 27, 2009

By Alexander Nemtsov

What is meant by correct development of programming systems? What is right? Be it a primitive “piece of cake” or an exotic product using modern RUP, XP, UML, or something still more sophisticated, when can we praise the development as correct and what are the criteria?

The leading question in the title is somewhat similar to a widely discussed holy war of Delphi’s superiority over C++ or vice versa. Quite a number of folks will ignore it and try to prove that all this sophistication is nothing but a bubble in comparison to Visual Basic, the best programming language of everything ever written with a skillful pen of a man. You know, it is so simple without any classes or something odd used to work with a strange, almost swear word UML.

Let such advocates stick to their point. It is a highly thankless task to argue a person out of their opinion. It is not our mission as well to explain which tools help create programs. We will focus on how programs are created, that is, highlight the process in question.

Fancy that! John Doe, a creative programmer, appears at work by noon but presses his computer buttons with great enthusiasm till 3 a.m. When John is in a great mood, he can develop a very sophisticated algorithm, a real thing to boast about. Being out of spirits or humor, he just plays Quake or chats with his buddies. In his free time or even hiding from all-seeing eyes of the boss John sometimes tailors small applications, say in Java/C#/Delphi (you can choose any you like and tick it). The applications are supposed to automate routine work in the accounting department where his girlfriend/grandma/friend works (go on ticking the variant you like). Avoiding any novelties and any help of testers or analysts – the latter will want to be paid, won’t they? – John gets a decent fee, which can be spent on beer with friends, and is absolutely happy about his life in spite of the crisis and all that stuff. Do you think such an approach without a line of official documentation or a UML diagram in Rational Rose or Visio,etc. is a correct way of developing programs? I believe it is, and I am going to argue it. Just go on reading. We will be back soon.

Let’s start thinking in terms of the development goal. It might be a bit unclear, but it always exists. In the case of John he did his work meaning to create a necessary product and get a deserved fee. If the fee is paid, the goal has been achieved successfully. The fee can be not only the money but also some useful experience, one’s friends’ praise, self-satisfaction with one’s wide intelligence and what not. However, the end user does not have a slightest interest in the inside of the product or the development itself. Nor are they going to distinguish between Delphi and Java. The program should work fast enough, take up modest resources and be worth the money paid. And the last but not the least – to perform all the desired functions. In such a case John will get his money.

So, John aims at getting an adequate fee enough to, say, visit a pub/restaurant/bowling/Hawaii in return for his efforts. (If you still tick variants, it is high time you went for a cleaning tissue and wiped your screen.) The fee is the indicator of good and correct work. If John does not receive any complaints or face angry customers, they can be thought of to be satisfied. So, John is on the right way.

Let’s now take a small developing company with 10-15 employees who write programs for small businesses trading goods, or furniture, or something else granted that Excel cannot cope with the amount of data to be analyzed. Should our company use object oriented programming, UML, RUP, MSF or anything else equally complicated? There is a trap here. We cannot be sure if a company needs such tools unless we consider the fee for the efforts. Suppose the customers’ needs are met. Then why invest additional money into expensive courses or buying new licensed products?

It is here when we come to the crucial question asked at the beginning – what is meant by correct software development? I guess now you are ready to answer. Correct development is the process helping the customer to get profit. The choice between waterfall or an iterative process as well as the degree of formalism and sticking to traditional processes is important only in terms of your client’s business.

The series of articles to follow will describe making a product for our needs called Sibers Meetings. You will see how the product grew from «we have a problem» phase to a «ready to use solution».

Sibers Meetings dates back to the moment Sibers expanded its power to a new city office. The office showed up with a number of problems the main being everyday communication. Using a traditional telephone soon became ineffective as public address equipment did not serve the purposes of project meetings. We realized a need in some environment for collective discussions on our customers’ projects. It became the basis for the product in question.

(to be continued)

Custom GoogleMaps integration

December 17, 2008

By PHP Developer Alexey Zabaykin

How to list clients’ feedback in a way that shows that you have many clients and they are spread globally?

Thanks to the huge amount of feedbacks, our previous edition of References page turned to look like the Star Wars story-telling.

We decided that Google Maps will do the job. I should note that the site engine, developed by Sibers, was created using Sophit framework. This engine is very flexible and pretty simple for creating administrative solutions and fully separates HTML templates from PHP code. That’s why creation of PHP administrative part doesn’t cause any problems and webmasters enjoy a huge area for professional activities.

gmapref

The next point was to research the necessary interactions with Google Maps. There is a lot of abilities provided by Google to change types of appearance and various features. So, to escape the mess, I investigated a bit in order to create the optimal solution. Thus, here is a list of crucial moments of creating our References page.

Backend

Simply put, we have to insert locations and link them with needed information. Administrator has two possibilities to manage the locations: automatically, through the function

geocoder.getLatLng()

- looks for the place by name only – and manually with function

GEvent.addListener(map, ‘click’, mapClick)

- sets latitude/longitude by a click on map; coordinates then are transferred into the form by

mapClick function.

Displaying

Ok, the administration form is done. Now, in order to display feedbacks on the map, we pass them to javascript in the cities array and Google Maps start to populate with our thankful customers. For further interactivity, let’s make the bubble images change when mouse hovers it.

GEvent.addListener(marker, “mouseover”, function() {
marker.setImage(pic_hand_up.src);
});
GEvent.addListener(marker, “mouseout”, function() {
marker.setImage(marker.getIcon().image);
});

And one more tweak, image preloading:

var pic_hand_up = new Image()

Now the little green person gladly greets us and does not disappear during first loading. The customer reference can be quite large, therefore its content dynamically loads by clicking on the icon:

_getFullReferences(city_id)

Also, references with phone numbers are displayed immediately below the map. When clicking on the address line, the map centers on this location via method map.setCenter()

Time to check it by yourself: http://www.sibers.com/portfolio/references/

Follow

Get every new post delivered to your Inbox.