Tuesday, February 26, 2013

GSoC 2013 notes


Very useful book for organization/mentors that try to participate in GSoC: http://en.flossmanuals.net/GSoCMentoring/

My Questions to GSoC:

1) can one person be administrator and mentor in same time in one organization?.

2) Can one person propose two organizations(project) to GSoC ?


Steps in registering
0) Creating mailing list and registering IRC channel, both are required at step 4 but you need MAIN mail-list and IRC, so all projects will share same, as in registration you do not have place to put mail-list for each project.
1) Ideas page should be complete
2) Projects pages are polished.
3) register as Organization Administrator https://google-melange.appspot.com/gsoc/profile/org_admin/google/gsoc2013
3.1) Ask to register back-up admin too, as his username will be required in step 4.
4) register as Organization http://www.google-melange.com/gsoc/org/application/google/gsoc2013

registration keeps 2 weeks ... Links to edit at Google Melange site - administrator info, organization info.

Good example of Organization Application:

Comparison organization participants of Google Summer of Code 2012 and 2013 - here.

Optimization for SqlDeveloper

Update file:
<sqldeveloper folder>/sqldeveloper/bin/sqldeveloper.conf

With content:
# from https://forums.oracle.com/forums/thread.jspa?messageID=9773884
AddVMOption -XX:PermSize=128M
AddVMOption -XX:MaxGCPauseMillis=50
AddVMOption -XX:GCPauseIntervalMillis=200
AddVMOption -Xms50M
AddVMOption -Xmx300M
AddVMOption -XX:MinHeapFreeRatio=10
AddVMOption -XX:MaxHeapFreeRatio=10

AddVMOption -XX:+AggressiveOpts
AddVMOption -XX:+UseStringCache
AddVMOption -XX:+OptimizeStringConcat
AddVMOption -XX:+ScavengeBeforeFullGC
AddVMOption -XX:+UseConcMarkSweepGC
AddVMOption -XX:+UseCompressedOops

# from https://blogs.oracle.com/angelo/entry/improving_the_performance_of_jdeveloper
AddVMOption -XX:+UseGCOverheadLimit

Work experience should be better.

Spring examples from Spring engineer

Friday, February 22, 2013

Refactoring of plus sign of huge string concatenations

2 Find/Replace for huge build in SQL string with "+" at the end of the line - to do it in 5 seconds.

"\+$" --> ""
"\t"" --> "\t+ ""

value = "string1 " +
"string2 ";

value = "string1 "
+ "string2 ";

Thursday, February 21, 2013

VirtualBox license for work PC

According to this article https://www.virtualbox.org/wiki/Licensing_FAQ

it is legal to install VirtualBox (non GPL version) at work PC and use it for work purposes:

  1. What exactly do you mean by personal use and academic use in the Personal Use and Evaluation License?
Personal use is when you install the product on one or more PCs yourself and you make use of it (or even your friend, sister and grandmother). It doesn't matter whether you just use it for fun or run your multi-million euro business with it. Also, if you install it on your work PC at some large company, this is still personal use. However, if you are an administrator and want to deploy it to the 500 desktops in your company, this would no longer qualify as personal use. Well, you could ask each of your 500 employees to install VirtualBox but don't you think we deserve some money in this case? We'd even assist you with any issue you might have.
Use at academic institutions such as schools, colleges and universities by both teachers and students is covered. So in addition to the personal use which is always permitted, academic institutions may also choose to roll out the software in an automated way to make it available to its students and personnel

Wednesday, February 13, 2013

Connect Nexus4 to Ubuntu 12.04 by USB

UPDATE: just follow http://bernaerts.dyndns.org/linux/74-ubuntu/268-ubuntu-automount-any-mtp-device , at the end of article there is a script that do all that steps automatically.

Follow: http://www.webupd8.org/2012/12/how-to-mount-android-40-ubuntu-go-mtpfs.html
something similar is here too.

after installation it worked for me for few time (Ubuntu 12.04 64bit), but after that failed with error:
"nexus rdev.open failed: open: open returned nil"

to fix this follow all steps in  http://askubuntu.com/questions/87667/getting-mtp-to-work-with-a-galaxy-nexus/88630#88630 and do restart.

And now it works and could be used without terminal mount!!!!!

I also tried gMTP but it does not work to copy folders - works only for files :( .
AirDroid, looks interesting, but it only for wifi connection.

Friday, February 8, 2013

Filter out all Oracle system schema from SqlDeveloper


grep "<h2" known_schemas.html | cut -d '<' -f 2 | cut -d '>' -f 2
+ few schemas see at tail of list (link).

#!/usr/bin/env groovy

def stringList = [ "anonymous", "apex_public_user", "apex_030200", "appqossys", "bi", "ctxsys", "dbsnmp", "dip", "dmsys", "exfsys", "flows_XXXXXX", "hr", "ix", "lbacsys", "mddata", "mdsys", "mgmt_view", "odm", "odm_mtr", "oe", "olapsys", "oracle_ocm", "orddata", "ordplugins", "ordsys", "outln", "pm", "scott", "sh", "si_informtn_schema", "spatial_csw_admin_usr", "spatial_wfs_admin_usr", "sys", "sysman", "system", "tracesrv", "mtssys", "oaspublic", "olapsys", "owbsys", "owbsys_audit", "websys", "wk_proxy", "wksys", "wk_test", "wmsys", "xdb", "OSE\$HTTP\$ADMIN", "AURORA\$JIS\$UTILITY\$", "AURORA\$ORB\$UNAUTHENTICATED", "XS$NULL", "TRACESVR", "PERFSTAT" ];
stringList.each() { print """          <hash>
            <value n="ARG_CASE" v="false"/>
            <value n="ARG_NAME" v="USERNAME"/>
            <value n="ARG_PRED" v="NOT_LIKE"/>
            <list n="ARG_VALS">
               <string v="${it}"/>
""" }; println "";

Result search in file:///home/USER/.sqldeveloper/system3.2.09.30/o.sqldeveloper.

and substitute block

Jps and jstack for java process management

Get process id:
/usr/java/bin/jps -v | grep my_app
16831 ......

Show stack of execution in process to define place of hang:
/usr/java/bin/jstack 16831

You can kill that process:
kill 16831

Wednesday, February 6, 2013

Как студенту может помочь участие в Open-source проекте

Автор статьи: Илья Дубинин
Редакция: Даниил Ярославцев, Роман Иванов

статья была отклонена на Хабрахабре, а жаль, она бы многим студентам помогла, .... с разрешения автора разместил ее тут.

Как студенту может помочь участие в Open-source проекте

Перед современными выпускниками ВУЗов стоит актуальная проблема: без опыта работы сложно найти работу для получения того самого опыта. Для программистов есть путь выйти из этого круга - участие в небольшом open-source (далее просто OS) проекте.
Я не буду заниматься изобретением совершенно нового велосипеда о том как получить опыт, просто покажу, что это не сложно на своем опыте.
Итак, как участие в OS проекте помогло мне в изучении java и принципов программирования вообще.
Как известно в OS проектах приветствуется (а в данном случае строго приветствуется) качество кода, его читабельность, автоматическое тестирование и написание документации. Это происходит по вполне очевидным причинам.
Конечно, Вы можете все это включить в свои лабораторные работы или курсовой, но будет ли это оценено? Курсовой или диплом кинут пылиться на полку, на чем его жизненный цикл, в большинстве случаев, и закончится.
Рассмотрим же полезность данного метода само(хотя и не совсем)-обучения.


1) Критика

Первым пунктом опишем постоянную процедуру code-review. Это, понятное дело, стимулирует писать более приемлемый код (в университете, при выполнении курсовых и лабораторных работ, к сожалению, всем глубоко наплевать на то, какой код Вы пишете), так как данная процедура предполагает постоянную критику (которая, разумеется, полезна) и всегда хочется писать лучше и лучше, и получать её всё меньше и меньше. Следовательно человек запоминает уже изученные грабли и перестает на них наступать. Со временем.

2) Не хочется выглядеть глупым

OS сам собой предполагает, что Ваш код будут видеть люди. Возможно один человек, а может быть и тысячи. Кто знает, чего Вы добьетесь (и, соответственно, каким будет размер вашей “аудитории”). Сомневаюсь, что хоть кому-то хочется выглядеть глупым и показывать своё непонимание некоторых методов решения проблемы. Приходится лезть в книжки, разбираться более глубоко в используемых средствах, особенностях языка и способах применения того или иного инструмента.

3) Мотивация
Конечно, большинству людей хочется чего-то добиться. Участие в OS проекте дает Вам возможность попасть в список разработчиков того или иного проекта. Пусть это будет мотивировано тем, что Вы сможете предъявить на дальнейшем собеседовании в приличную фирму, желанием похвастаться перед друзьями, или просто удовольствием от того, что Вы чего-то уже добились - в любом из случаев это располагает к участию в проекте. Также (особенно для тех, кто сейчас возможно приготовил камень и прицелился, так как программированием занимается ТОЛЬКО ради удовольствия) нельзя забывать о том чувстве, которое по-началу возникает, когда принимают Ваш  pull-request.

4) Изучение технологий
При работе над каким либо проектом легко столкнуться с использованием различных повсеместно используемых систем, таких как различные системы контроля версий, системы автоматической сборки пакета, unit тестирование и прочие технологии, облегчающие жизнь разработчикам. Если вдруг до начала проекта Вы ни разу не сталкивались ни с чем подобным - это будет полезным опытом.

5) полученный опыт в практике написания кода
При участии в проекте Вы получаете личный драгоценный опыт. Вы постоянно пишете свой и читаете чужой код, что позволяет Вам развиваться. В случае работы над Checkstyle я получаю опыт не только в ходе самого написания несложных проверок.  Мне также необходимо понимать суть каждой проверки после получения задания. Необходимо понимание причин её написания и нюансов той проблемы, которая решается в каждом конкретном случае. Это вынуждает стараться разбирать материал более глубоко.

6) Работа в команде
В каждом, даже самом простом open-source проекте обязательно присутствует такой полезный фактор, как работа в команде. Полезный по нескольким причинам:
Во-первых, работа в команде помогает научиться грамотнее объяснять свои действия (либо помогает научиться писать такой код, чтобы он был понятен без необходимости вообще что-либо объяснять)
Во-вторых, только при командной работе можно по-настоящему научиться использовать и “прочувствовать в работе” различные средства облегчения совместного труда разработчиков: системы сборки / контроля версий / анализа кода и т.д.
Если работать приходится в OS проекте, то и средства для его разработки приходится выбирать open-source-ные (ну, или, хотя бы, просто бесплатные).
Благо, что OS сообществом для “бесплатного” программирования предоставляется уйма полезных систем, таких как, например, Maven и VCS. Поэтому остается только получить опыт командной OS разработки для того, чтобы стать первоклассным, и, что самое главное - “бесплатным” (по части используемых технологий) специалистом. 

Знание и умение применять любые средства и технологий в жизни программиста приходит ТОЛЬКО с личным опытом, причем, намного быстрее - с КОМАНДНЫМ опытом. Опыт работы в команде, таким, каким он должен быть, не даст ни один современный  университет. Поэтому возможность получить такой опыт дорогого стоит, особенно, если ты студент )

7) Учимся читать чужой код и работать с ним
Немаловажным плюсом является возможность изучать чужой код, знакомиться с решением проблемы различными способами, предложенными людьми, которые имеют больше опыта. Также доступ к коду всего проекта дает возможность разобраться в его работе, пошагово просмотрев его выполнение (ну у или не всего проекта, а какой-нибудь его части, работу которой Вам интересно было бы разобрать глубже) даже если вы пишете маленький и очевидный модуль к большому проекту.

Итак, что же можно получить (что получил я) от работы с OS проектом:
- я являюсь автором моего кода, моё имя в javadoc
- проект простой, отличный старт для начинающих
- понимание и практика VCS (git)
- опыт работы в команде, несколько студентов делают изменения в одно время
- всё это я могу делать в удобное для меня время не мешая учебе и личной жизни
- работу с куратором проекта
- code-review и ответы на вопросы “почему надо именно так?” в skype/mail
- UTesting (100% покрытие кода тестами) и ручное тестирование на реальных проектах (Spring, Hibernate, ...)
- изменение wiki страничек проекта для помощи новым членам команды
- получение опыта вклада в проект
- работа с issue tracking system (SourceForge, GitHub)
- работа полностью осуществляется под Linux (Ubuntu), куратор, при необходимости, помогает с возникшими при миграции с Windows вопросами. Дополнительно возможны советы по использованию Eclipse
- теперь у меня есть что приложить к моему резюме(CV). Я не боюсь показать мой код для оценки стиля написания и моего опыта (доказательство, глава "Код, Блог, Статьи, Книги ")
- я начинал с начального уровня знаний Java, руководитель проекта помог мне сфокусироваться на нужных книгах, статьях. Я могу задавать вопросы на интересующие меня темы. Также руководитель может задавать интересные вопросы, чтобы копнуть глубже
- мой код не применяют к общему репозиторию, пока руководитель видит его неидеальным - всё просто
- Во время автоматизации я запомнил на всю жизнь (как на доске в 3-м классе прописать одно предложение много много раз) как не надо писать код, но теперь я помогу себе, как и другим людям не делать ошибки. Надеюсь эта работа не пропадет зря.
- я могу использовать свои наработки в других проектах - код открыт
- моя работа используется дальше, а следовательно время потрачено не зря
- надеюсь я могу гордиться моим кодом :)
- надеюсь, что это поможет мне легче пройти собеседование в хорошие компании, так как я узнаю много нюансы Java (вопросы по которым могут быть заданы на собеседовании любому разработчику)
- работа с утилитой статического анализа кода поможет мне избежать “Хорошо известных” проблем, знания о которых я мог бы получить за 3-5 лет опыта
- в моем случае стало возможным работать на проекте во время летней практики университета в офисе с разработчиками компании Reveredata. Это увеличивало скорость решения проблем и ответов на вопросы....пример
- это дало мне материал для написания данной статьи на Habrahabr для получения доступа к ценному ресурсу.

Небольшое описание тех немногочисленных чеков, которые сделал я:
AvoidDefaultSerializableInInnerClasses - предостерегает Вас от реализации интерфейса Serializable во внутренних нестатических классах без переопределения в них методов readObject() и writeObject().

LogicConditionNeedOptimization - уведомляет Вас о том, что можно оптимизировать написанное вами логическое выражение перемещением вызова метода после проверки всех локальных переменных или полей, участвующих в выражении (вызов метода скорее более тяжеловесен, нежели проверка переменной и результат выражения может быть определен еще до вызова).

ForbidCCommentsInMethods - уведомляет при нахождении многострочного комментария в теле метода (большое количество текста внутри метода может отвлекать от чтения его сути, и зачастую показатель того, что метод не правильно структурирован, либо кто-то использует комментарии вместо GIT, пишет слишком много, что тоже может указывать на неполное понимание автором того, что он пишет).

В заключение хотелось бы сказать, что Open Source - это круто. Он помог мне в повышении моего уровня знаний и умений.  Не бойтесь участвовать и помогать развиваться проектам. Кто если не Вы? Наш проект - http://sevntu-checkstyle.github.com/sevntu.checkstyle/ . Если у вас нет опыта - не проблема, вашего желания должно хватить. Даже маленький модуль будет очень полезен - ваша помощь нужна. Хватит сомневаться и стесняться - выбери проект и сделай что то полезное!

Предыдущие статьи разработчиков нашего проекта: тут, тут, тут.

PS: прошу в комментариях не советовать посмотреть на  FindBug, PMD, Sonar, Eclipse (Java>Compiler>Error\Warnings) ... я умышленно опустил их упоминание, чтобы не раздувать статью. В добавок эти проекты не просты для понимания человеком без опыта, а мне как раз нужно было что-то простое.

Migration from gitolite v2 to v3

This is not perfect way to do it !! but nevertheless ...

So if you planing to migrate from gitolite v2 to gitolite v3, by creating new server and moving all repositories as files:

1) remove repo from git/gitolite-admin/conf/gitolite.conf
2) push

3) ssh to git server and tar repository
[rivanov@hydra git]$ cd /home/git/repositories/
sudo tar -cf /export/home/rivanov/testing.tar testing.git

4) create new repo on other git server by means of gitolite (gitolite.conf)

5) ssh to other-git
scp rivanov@git.reveredata.com:/home/rivanov/testing.tar .
tar -xvzf testing.tar
sudo mv testing.git /export/home/git/repositories

5) Files to keep during copy:
hooks - hooks are different so keep them from gitolite v3
gl-conf - here are permissions are stored (it is difference between gitolite v2 and v3)
git-daemon-export-ok - empty file , but let not touch it just in case.

I tried to do migration by means of "git pull" from one server and "git push" to new server (only one changes of url is required in ".git" folder) - but this approach does not transfer all branches - only master, so you need to do it manually - that is complicated if you have more then 50 repositories in more then 2 branches in each of them.

Get a column from output and then get unique values

log example :

[02/06 06:20:01:664] [Thread-0] [ExtractJob][INFO]: ExtractJob execute started.
[02/06 06:20:01:666] [Thread-0] [Extracter][INFO]: send request for: Universe=RVUS0; ...
[02/06 06:20:04:135] [Thread-0] [Extracter][INFO]: request failed for 20130206 ....
[02/06 06:20:04:135] [Thread-0] [Extracter][INFO]: send request for: Universe=RVUS0; we....
[02/06 06:20:23:593] [Thread-0] [Extracter][INFO]: Extracting file: 36827dba-e66f-444a-b730-7.csv

print events times rounded to minutes:

[user@server ~]$ grep "ERROR" /www/logs/my.app.log | cut -d ':' -f 1,2,3 | sort | uniq

[02/06 06:20:01
[02/06 06:20:04
[02/06 06:20:23
[02/06 06:20:24

My linked in profile