Month: March 2013

Mobile Silesia #2 – mobile technology in the southern Poland

2013-03-30 Conferences, Mobile No comments

mobilesilesia

In this post, I am going to present a short overview of the one-day conference concerning mobile technology I was attended in my hometown in Gliwice, Poland on 11th of march 2013.

Mission

Mobile Silesia is Silesian regular meeting for people involved in mobile market. Their goal is support of the business development by creating a platform for exchanging the knowledge and experiences. Important part of the meeting is integration of the business environment and people. Meetings are open for everyone and participation is free.

Beginning and first edition

Idea of organization of the free, regional, educational-networking meetings about mobile technology appeared in the beginning of 2012 year. Idea quickly came true. On 26th May of 2012, first edition of Mobile Silesia in CKS “Mrowisko” (Student Culture Center) in Gliwice, Poland was organized. First meeting consisted of two presentations: Andrzej Ogonowski from SMSapi.pl and Piotr Koźniewski from 3R Studio, who presented Augmented Reality technology.

Second edition

Second edition was organized in the same place as the first edition on 11th March of 2013. First part was a conference including presentations of people involved in marketing areas, mobile market and mobile technology. Second part of the meeting was a networking where people could talk to each other, exchange experiences and contact information.

Agenda and speakers

  1. Robert Rachwał and Edyta Przybyłko: Skuteczność kampanii mobilnych z wykorzystaniem QR kodów i NFC (Eng. Effectiveness of the mobile campaign with using QR codes and NFC)
  2. Rafael Moucka: Wizjonerstwo czy gadżeciarstwo? Czy warto inwestować w Responsive Web Design (Eng. Visionary thing or gadget? Is it worth investing in Responsive Web Design?)
  3. Michał Kraus: Mobile w sprzedaży wielokanałowej (Eng. Mobile technology in multi-channel e-commerce)
  4. Arkadiusz Haszto: Why mobile? Dlaczego przyszła pora na mobile w marketingu? (Eng. Why Mobile? Why is it time for mobile in marketing area?)

Official website: www.mobilesilesia.pl

Short summary

Mobile Silesia was very well organized. It was mainly addressed to people working in marketing areas as well as to those, who wanted to get fresh information about mobile technology and learn something new. I am a software developer working with mobile technology on daily basis, so topics mentioned above weren’t new to me. Nevertheless, such meetings are good opportunity to get new contacts, reach people interested in mobile market and see, what others want to show us. I think, I am going to attend next meetings if they will be organized in the future.

Photos from the conference

All photos are available on the official website of the event: http://www.mobilesilesia.pl/galeria

_MG_9281

_MG_9307

_MG_9466

_MG_9305

_MG_9413

Video material (in Polish)

5 essential tools for serious software development in a team projects

2013-03-27 Software Development, Tools 3 comments

Introduction

Daily usage of tools mentioned in this post is quite obvious for me right now, but using them wasn’t obvious while I was working alone or when I was involved only in freelance or private projects.
Whilst we don’t work in a group, we don’t have to care about lot of things, but when we work in a team (even small), we have to organize and optimize our work very well in order to obtain its high quality, work efficiently and make life of future developers of our code and co-workers easier.

1. Good IDE or editor

Intellij IDEA
Having good Integrated Development Environment or editor is very important during software development. When we master keyboard shortcuts and useful features of our environment, we can increase speed of work and debugging. Choosing environment depend on the projects and programming languages which we are using on daily basis. Eclipse is a good choice, when we develop code in Java language, but we can use it for creating C/C++ code, PHP and web development. Good alternative for Eclipse is IntelliJ IDEA (only Community Edition for Java developers is free right now). Android developers should strongly consider using Android Studio, which is based on IntelliJ IDEA. JetBrains provided IDE for Python developers as well. It’s called PyCharm and its Community Edition is free. Obvious choice for developers using Microsoft technologies will be MS Visual Studio. Despite IDEs, we can also consider using advanced editors like Sublime Text. After proper configuration, it can be very nice tool for web development and JavaScript development (including node.js). Some Ruby developers use Sublime Text as well. In general, it is worth considering while we write our programs in scripting languages. In addition, it is available on MS Windows, Linux and Mac OS. Sublime Text is just an editor, so it does not have code debugger like Eclipse or MS Visual Studio, but we can add this functionality for JavaScript language by installing Sublime Web Inspector plugin. Some people also use Notepad++. I like this editor, but I wouldn’t use it for software development due to lack of important features. In my opinion it’s good for editing single files or performing some simple operations on text or code. Of course, Linux geeks should not forget about exclusive Vim editor, but use of this software must be learned before using.

2. Source control system

branching-illustration@2x
When we work in a team, we need to have source control system. Uploading code to server by different people or sending code via e-mails is not efficient and unprofessional. That’s why we should use Git, which is distributed version control system. While using such tool, we can be always up to date with our code and we can easily track changes in the project, create branches for several tasks and so on. We can also rollback changes, when something will go wrong. Git clients are available for all popular operating systems. When we are not familiar with command line interface, we can use tools like TortoiseGit. On daily basis, the most important commands are: clone, pull, commit and push. Good practice is to create branch for development version of the application and treat master branch as a release version of the application. In addition, we can create separate branch for each issue we are working on and when we finish our task, we can merge our branch with development branch. It’s very helpful and allows us to increase stability of the project. If we want to know all advanced features of Git and master this environment, we should read “Pro Git” book which is available on-line for free.
Another, older source control system is SVN. Well known GUI client for SVN on MS Windows is TortoiseSVN. SVN is not distributed version control system like Git and does not have such amount of features, but it’s worth to know it, because it is used in some projects today for some reasons. Yet another source control system, which is less famous than SVN and Git, is Mercurial. Like mentioned systems, despite command line interface, it also has client with GUI called TortoiseHG available for Windows OS.

3. Continuous integration tool

ci-diagram

Continuous Integration is a software development practice where members of a team integrate their work frequently, usually each person integrates at least daily – leading to multiple integrations per day. Each integration is verified by an automated build (including test) to detect integration errors as quickly as possible. Many teams find that this approach leads to significantly reduced integration problems and allows a team to develop cohesive software more rapidly.

Quote of Martin Fowler.

Continuous Integration is also explained in details on Wikipedia.

jenkins_logo

One of the common tools used for Continuous Integration is Jenkins. In simple words, developers commit changes to the project and afterwards Jenkins download source code from the repository and generates a fresh build of the project (compiled application). Builds can be scheduled and run automatically, but we can also run our builds manually. When something will go wrong, we receive an information that build is broken, unstable or cannot be compiled. In such case, developer who broke the build (pushed changes, which caused such situation) is responsible for repairing the build. We have to take care about the configuration files, because sometimes Jenkins may analyze our source code differently than our local compiler (because of specific settings or different operating system) and it may cause build failure. While using Continuous Integration, we don’t have to send compiled projects via e-mail or in other inconvenient way. We can just run the build. After that operation, Quality Assurance Engineers and Project Leader will always have access to the newest version of our project.
When we don’t want to use Jenkins, we can consider adapting alternative Continuous Integration service called Travis, which is integrated with GitHub. Yet another continous integration and build server is Bamboo from Atlassian.

4. Code review tool

PeerReview

Code review as a systematic examination of the source code plays important role in the quality of the project. Different programmers have different background and point of view. We all make mistakes and it’s easier to fix them when we have good support. There are tools which can help us to make Code Review. One of them is Review Board written in Python, which can be associated with Jenkins. After running Review Board build, we can send e-mails including current revision changes to our team in order to keep everyone up to date. There are also other tools, which we can use. Phabricator can be an interesting tool, but I don’t have any experience with it yet. Nevertheless I know, that it is written in PHP and was developed at Facebook. Gitlab is also worth considering during conducting code reviews. Moreover, we can omit using additional tools and perform code reviews by browsing code and talking with another developer verbally, which is also good practice. To summarize this section, Code Review lets us to know what is going on in all projects of our team and, what is more important, helps us to increase quality, maintainability and robustness of our code and projects, which are used by the final users.

5. Issue tracking system

jiratour_workflow_visualizeworflow

Good Issue Tracking System is also important tool used during the development of the project. It lets you track tasks, bugs and changes in the projects. We can create simple workflow in our project, which will increase quality of the software and also keep you informed about progress of the project. This is important in situations when several people work on the same application, so we can divide and choose tasks wisely in such a way, that people won’t disturb or “interfere” themselves during the work. In addition, project leader will be informed about the progress of the work. There are many issue tracking systems, but one of the best and well known is Jira. In addition, Jira allows you to work with projects in Agile methodology, so you can define backlogs, sprints and create good workflow in the project. Despite of these features it has so called Confluence, which is basically internal project Wiki, where you can create your knowledge base and notes.

Summary

All these five elements can help you to make great applications and projects. It may seem, that using them is a lot of additional work, but in fact, they are really useful and can help you to work faster, better, increase quality of the project, integrate code, identify and track the bugs, track tasks, issues and keep the project up to date for everyone who is involved in it. When we take care of good project organization, the only possibility is awesome outcome.

Displaying image from the Internet resource inside the TextView in Android

2013-03-19 Android 11 comments

Sometimes, we have to work with legacy code and we have to change application’s behavior without modifying layouts, structure of the application and core components. Such situations can force us to do some tricks during development or maintenance process. For example, at the beginning, our app had to download data from the web service or RSS channel. This data consisted of the text, so we could use TextView in order to display such information. After some time, back-end developers decided to put there some HTML code including references to images. We want to display images in our mobile application without modifying existing structure, so we can create data of type Drawable inside the TextView. We can do it by creating an additional method getImageHTML() and using fromHtml method from Html class, which is default Android class.

Below, you can see an example presenting approach described in this post.

hint: if you cannot see the code below, please disable AdBlock on this site (I don’t have advertisements, but I’m using Gist)

If it won’t work, we can also try to replace < with &lt; and > with &gt; inside value of the string.
After that operation our example should work properly.

Improper data type in Android TextView

2013-03-17 Android No comments

Identifying the problem

One of the common mistakes done by Android programmers is using improper data type in TextView.
Let’s have a look on a simple code snippet:

int area;
TextView sampleTextView = (TextView) findViewById(R.id.myTextViewInXml);
sampleTextView.setText(area + " km");

Here, we simply set a value of the text in an exemplary TextView and append string value ” km” at the end. It can be used with SeekBar. For example, when we change value of the SeekBar, we can also update value of the text inside the TextView.

Let’s have a look on another example:

int area;
TextView sampleTextView = (TextView) findViewById(R.id.myTextViewInXml);
sampleTextView.setText(area);

Here, we don’t append string value ” km” at the end. In such case, our application will crash. We have to remember, that Java is strongly typed language and we have to take care about data types. In previous example, we had a cast to the String type, because we appended String value at the end. In the second example, we have only int value, but argument for setText method must be in type of String. Method named setText accepts integer values as well and in such case, it will try to find resource with a specified integer identifier generated with R.java file. Resource won’t be found and application will crash. We can quickly fix this bug by casting argument of the method to the String type.

Solving the problem

There are at least two ways of solving this problem:

Solution no. 1

int area;
TextView sampleTextView = (TextView) findViewById(R.id.myTextViewInXml);
sampleTextView.setText(Integer.toString(area));

Solution no. 2

int area;
TextView sampleTextView = (TextView) findViewById(R.id.myTextViewInXml);
sampleTextView.setText(area + "");