Category Archives: Coding

Painless update of third party libraries

Introduction

Sometimes you need to recompile several or all third party libraries in the project you develop. This may happen if you need to switch to another compiler or upgrade version of existing ones.

If you have a lot of libraries in the project you will fix error by error. Third party interfaces are changed. But you can not test everything while you complete fixing all errors.

So it would be good to update piece by piece.

Approaches to achieve update with small pieces described below. Probably you will not find something tricky, but it is good to have small tricks collected in one place. This may be especially useful when you are stuck and bored. This article may help quickly refresh approaches which may be considered to go on.

Continue reading…

Installing Redmine and Ruby language. Fresh and poor experience

About 3 years ago I installed redmine (project management web application, written using the Ruby on Rails framework) and all Ruby-specific components that needed for it on Windows OS. I remember that I had a lot of issues with it. But I already forgot details from that time.

But now I need to install redmine again. I was expected that situation is changed and improved; 3 years is quite long period of time for software project. But it is appeared that I had again a lot of issues.

Among them: missing Ruby certificate, issues with handling spaces in the paths under Windows, selecting between gems mysql and mysql2 and finding version and platform of mysql2 which works with Windows, gem nokogiri can be built only as native component. I find video which helped me to obtain working rails and avoid pitfalls: How to install Ruby on Rails on Windows 7 – Part 4, Ruby on Rails.

Continue reading…

Using Git with SVN repository – simple case howto and benefits

Introduction

If you use Apache Subversion repository you may want to use some benefits of Git source control managment system. But you may not have possibilities to switch from SVN repository to Git completely.

One of the large benefits of Git over Subversion is possibility to commit when you don’t have internet connection. Another one is availablility of commit history when there is no internet connection as well.

You may achieve mentioned benefits with Git-SVN functionality described at Git Book chapter “Git and Other Systems – Git and Subversion. There is also git svn man page available.

You will find below how to set up and use some Git benefits when you still continue to work with SVN centralized repository.

It is expected you have some basic knowledge about Subversion and Git before setting up communication between them.

Continue reading…

Знакомство с андройдом как разработчика

Вступление

В связи с популярностью Андройда, захотелось мне попробовать что-то написать под него.
Знакомство состоялось.
До знакомство сложно было представить, что это ткое.
С одной стороны у меня по положительному шуму в интернете сложилось впечатление, что на Андройде классно приятно писать, что также явилось одной из причин, почему захотелось глянуть глубже.
С другой стороны, на данный момент знакомсто с Анрдойдом как пользователем закончилось, завершающая фаза освещена на странице “Not enough storage on android device” в вопросах, ответах и комментариях.

Знакомство

Приятно то, что в Android используется язык Java, и если есть опыт разработки с использованием Java, то все довольно просто.Google рекомендует использовать Eclipse, но я пробовал в IDEA, тем более есть приятный опыт разработки на Java именно в IDEA.

Во время экспериментов, в голове сидел iOS, с которым часто сравнивал. Поэтому буду часто упоминать и в посте.

Сразу бросилось в глаза то, что очень много приведений типов использовалось, когда взаимодействие осуществялось через вездесущий класс Intent. Соответственно ошибки неверно использованных типов могут отлавливаться только во время исполнения.

Страницы с элементами управления делаются с использованием класса android.app.Activity (логика) и xml-разметки (визуальное представление). Но вся связь между ними пишется вручную.
В iOS к примеру связи делаются перетаскиванием мышью, при этом генерируются новые классы с членами, что дает возможность проверять несоответствие типов во время компиляции.
Видимо в Андройд тоже можно такой подход использовать, но это не является распространенной практикой, да и было бы более громоздко писать, поскольку нет аналогов XCode для iOS, который делает большую часть работы для разработчика.

Понравилось, как реализована совместимость. Если коротко, то есть так называемые Support libraries. И если нужно, чтобы приложение для более новой версии Анрдойда работало на более старой, то поставляется с библиотеками, которые похожи на кусок новой части Анрдойда, которой не хватает в более старой версии.

Для анимации нужно указывать названия переменных как строки, используется рефлексия – еще один источних ошибок.
В iOS видимо тоже используется рефлексия, но она скрыта от разработчика приложений.
Аналогичная ситуация в WPF от Microsoft (хотя это нельзя отнести к mobile development, но думаю, аналоги будут, а может и уже есть, на гаджетах от Microsoft) – для этого разработан механизм Dependency Property, в случае необходимости их создания в своей компоненте очень поможет помощь Visual Studio – опять натыкаемся на то, что среда разработки сильно помогает.

Для отображения списков данных используется класс ArrayAdapter.
Сначала было бы логично подумать, что он используется только для хранения данных. Но оказывается, что он также и связан с графическим представлением – нет четкого разделения на представления и данные. До конца не понял, как у них реализован MVC или его аналог, неочевидное разделение ответственностей. От Google-а ожидал чего-то более качественного.

При запуске приложения выводится множество ошибок самой системы Android.
Если кто привык писать так, чтобы исправлять все ошибки и предупреждения, которые заметил, то с андройдом лучше об этом забыть.

Эмуляторов различных устройств очень много. Но их так реализовали, что даже время запуска такое же длинное каки и самих устройств. Вот здесь все таки хотелось бы, чтобы время разработчика не тратилось на ожидание.
Проблема решается покупкой реального устройста, так же поможет избежать необходимости исправления многих ошибок методом “выйти и зайти”, “перезапустить”.

Да, что действильно понравилось, так это увидеть такое большое количество поддерживаемых устройств и ощутить, какое количество желизяк есть на рынке.
Вот это таки действительно сильная сторона Андройда!

Выводы

Андройд сильно молодой и это видно.
В архитектурном плане ему еще очень далеко до технологий Apple или Microsoft.
Я не вижу, как Google приблизится к ним, не выпустив собственной среды разработки, но она сразу не появится.

Андройд очевидно будет развиваться и использоваться на все большем количестве устройств. Мне правда не видно, как эти устройства могут стать лучшими среди конкурирующих. Универсальному редко удается стать лучшим в конкретной нише.

Думаю, будут компании, если они еще не появились, которые будут заниматься кастомизацией Андройда – приходит аналогия с различными коммерческими дистрибутивами Линукса.
А сам Гугл пока зарабатывает на том, что вендорам гаджетов продает свои приложения, хотя сам андройд и бесплатен.

Поскольку это мое первое знакомство с Андройдом, буду рад услышать в комментариях об ошибках, неточностях, заблуждениях.

Первое iPhone приложение в ожидании review в AppStore

Отправил свое первое (пробное) приложение на review в AppStore.

Самые интересные запреты

В списке запретов замым интересным показалось следующие пункты:

  • Apps that duplicate apps already in the App Store may be rejected, particularly if there are many of them, such as fart, burp, flashlight, and Kama Sutra apps. (свистелки и перделки больше не принимаются 🙂 )
  • Apps that link to external mechanisms for purchases or subscriptions to be used in the app, such as a “buy” button that goes to a web site to purchase a digital book, will be rejected (все продажи только через Apple)
  • Any app that is defamatory, offensive, mean-spirited, or likely to place the targeted individual or group in harms way will be rejected. Professional political satirists and humorists are exempt from the ban on offensive or mean-spirited commentary (политики – козлы отпущения, хотя раньше банили такие приложения. Хорошая статья с 9-тью кейсами бана приложение доступна здесь.)
  • Apps portraying realistic images of people or animals being killed or maimed, shot, stabbed, tortured or injured will be rejected (“Лики смерти” не пропустят)
  • Apps that include games of Russian roulette will be rejected (Джодж Карлин видимо думает иначе :))
  • Apps containing pornographic material, defined by Webster’s Dictionary as “explicit descriptions or displays of sexual organs or activities intended to stimulate erotic rather than aesthetic or emotional feelings”, will be rejected (различают порнографию и творчество – приятно)
  • Apps that include the ability to make donations to recognized charitable organizations must be free

Полезные ссылки

Для меня полезными оказались следующие ссылки:

App store Approval Process (одна из родных страниц)
https://developer.apple.com/appstore/resources/approval/index.html

How to import a developer profile into Xcode?
http://forums.gamesalad.com/discussion/40223/how-to-import-a-developer-profile-into-xcode

How to upload an app to the App Store with XCode 4
http://www.touch-code-magazine.com/how-to-upload-an-app-to-the-app-store-with-xcode-4/

Prepare for App Submission
https://developer.apple.com/appstore/resources/submission/index.html

How to upload an app to the App Store with XCode 4
http://www.touch-code-magazine.com/how-to-upload-an-app-to-the-app-store-with-xcode-4/

Error: “No identities are available for signing” Xcode 4.3.1
http://stackoverflow.com/questions/9635939/error-no-identities-are-available-for-signing-xcode-4-3-1

Устанавливаем Git под Mac OS X / XCode

Когда начал писать под Mac OS X в XCode, то увидел, что в нем есть поддержка Git.
Решил его и использовать.

Знакомство с git

Если с Git-ом не сталкивались, то може быть полезным сайт git – fast-version-control (есть русский перевод).

Для тех, кто знаком с SVN, может быть полезной статья Git Svn Crash Course. Пользователям Subversion по началу Git может показаться слегка наркоманским 🙂

Поддержка Git в XCode 

Установить Git можно, начиная со страницы git-osx-installer


Если появилось желание существующий XCode проект посадить под Git, то могут быть полезными следующий ссылки:
1. Using Git with an existing XCode project
2. Setting up a git repository in XCode for a pre-existing project

Клиент с графическим интерфейсом можно найти на странице gitx.
Клиент очень удобный, но, похоже, уже 2 года не поддерживается.
Последний раз я скачивал его со страницы http://gitx.frim.nl.
OpenInGitX позволяет добавить кнопку в панель инструментов Finder-а, чтобы можно было открывать GitX, нажимая на нее, если вы находитесь в репозитории git.

Напомню, чтобы увидеть служебные файлы Git, нужно включить отображений скрытых файлов.

Есть также еще один клиент с графическим интерфейсом gitk, но я его не использовал.

Далее используем в XCode c помощью команды File -> Source control -> Commit… и близ-лежащих.

Некоторые полезные операции

Git ignore file for Xcode projects describe at :

Checkout the revision you want to work with.
$ git reset --hard abcd93

More info: http://stackoverflow.com/a/890006/13441

To follow history after file renamed:
git log --follow
More info: http://stackoverflow.com/a/1321962/13441

Revert changes:
git checkout path/to/file/to/revert
git checkout -- .
More info: http://stackoverflow.com/a/52713/13441

Сommit all deleted files to Git
git add -u
This tells git to automatically stage tracked files – including deleting the previously tracked files.
More info: http://stackoverflow.com/a/1402793/13441

Find children revisions (commits)
git log -g
More info: http://www.kernel.org/pub/software/scm/git/docs/git-log.html

Rename project in XCode:
1. Rename project itself: http://stackoverflow.com/q/5416677/13441
2. Rename folder with sources with git to preserve history with git mv
3. Fix XCode project: http://stackoverflow.com/q/8262613/13441