Kotlin Standard Library & Kotlin.test

1) Kotlin Standard Library — Библиотека с различным функционалом и плюшками (kotlin-stdlib)
Описание: http://kotlinlang.org/api/latest/jvm/stdlib/

2) kotlin.test — библиотека для функционала тестирования
Описание: http://kotlinlang.org/api/latest/kotlin.test/index.html

How to work with excel files in Kotlin using Apache POI

Вспомнить про Apacha POI
https://www.callicoder.com/java-write-excel-file-apache-poi/

Использую Kotlin
https://www.callicoder.com/java-read-excel-file-apache-poi/#apache-poi-terminologies
https://developersoapbox.com/basic-read-and-write-excel-using-kotlin/

Понравился подход:
https://gist.github.com/kuwalab/c5a41b6942939e09982a

Горячие клавиши Win7

Предлагаю вашему вниманию список хоткеев, использование которых делает работу с Windows 7 ещё более удобной (в скобках — альтернативный способ сделать то же самое):

Управление окнами

Win+Home: Свернуть/развернуть все окна, кроме активного. («Потрясти» окно)
Win+Space: Сделать все окна прозрачными. (Задержать курсор над небольшой кнопкой в правом нижнем углу экрана.)
Win+Up: Развернуть активное окно на весь экран. (Перетащить окно вверх до упора, или дважды кликнуть по верхней рамке)
Win+Down: Свернуть активное окно или восстановить размер, если оно развёрнуто на весь экран
Shift+Win+Up: Развернуть окно по высоте (Перетащить нижнюю границу окна до таскбара)
Win+Left/Right: Занять окном левую/правую половину монитора, или восстановить размер (Перетащить окно влево/вправо до упора)

Таскбар

Win+цифра: Запустить программу под этим номером или переключиться на неё
Shift+Win+цифра: Запустить новую копию программы под этим номером (кликнуть колёсиком по иконке)
Ctrl+Win+цифра: Переключиться на следующее окно программы под этим номером (кликнуть, зажав Ctrl)
Alt+Win+цифра: Открыть джамплист программы под этим номером
Win+T(+Shift): Переключаться между всеми открытыми окнами с превьюшками над таскбаром в прямом (обратном) порядке
Win+B: Фокус на трэй
Ctrl+Shift+Click: Запустить программу от имени Администратора
Shift+Right-click: Показать меню окна / группы

Проводник (и Десктоп)

Ctrl+Shift+N: Создать новую папку
Alt+Up: Подняться на уровень выше по папкам
Alt+P: Включить панель просмотра файлов
Shift+Right-Click (по файлу): Добавляет в контекстное меню пункт «Скопировать путь» и много дополнительных пунктов в подменю «Отправить»
Shift+Right-Click (по папке): Добавляет в контекстное меню пункт, позволяющий открыть командную строку из этой папки

Другое

Win+P: Открыть меню настройки режима презентации (второй монитор — проектор)
Win+(+/-): увеличить / уменьшить изображение (вызывает экранную лупу)
Win+G: Переключаться между запущенными гаджетами

Взял тут

Convert java project to gradle project

just add:

build.gradle

in your root project folder, and use plugin for example:

apply plugin: ‘idea’
//and standard one
apply plugin: ‘java’

and with this fire from command line:

gradle cleanIdea

and after that:

gradle idea

After that everything should work

===
gradle init —type java-library

this will generate a bunch of files:

.
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── settings.gradle
└── src
├── main
│ └── java
│ └── Library.java
└── test
└── java
└── LibraryTest.java

7 directories, 8 files

run git init, add a simple .gitignore

.gradle
/build

Joker 2016 — Причуды Stream API

Посмотрел доклад Тагира, интересные бенчмарк тесты для стримов. Много тонкостей по перфомансу со стримами.
Рекомендую смотреть для тех кто заботится о скорости работы стримов в своем приложении.

Контакты:
https://github.com/amaembo
https://habrahabr.ru/users/lany/posts/

Мутационное тестирование

Мутационное тестирование — альтернативный подход к измерению качества модульных тестов. Вместо того, чтобы считать банальный code coverage, используется более разумный механизм. В байт-код ваших классов внедряются случайные изменения, иначе называемые мутациями. Если после такой мутации не упал ни один тест, который покрывает внесённые изменения, то велика вероятность того, что с тестами у вас не особо-то и хорошо.
Пример возможной мутации:

Было:

if(somevalue <   threshold) {
doSomething();
}

Стало:

if(somevalue >=   threshold) {
doSomething();
}

При проведении мутационного тестирования используется библиотека Pitest. С документацией можно ознакомиться на сайте http://pitest.org

Порядок проведения мутационного тестирования:
1. Сборку разместить в проектной области Jenkins “ссылка на проектную область Jenkins”. Сборка проекта (например: clean install -Ptest)
2. Создать отдельну ветку pitest и подключить в ней pitest-maven plugin

<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.2.0</version>
</plugin>
…
<reporting>
<plugins>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>1.2.0</version>
<reportSets>
<reportSet>
<reports>
<report>report</report>
</reports>
</reportSet>
</reportSets>
</plugin>
</plugins>
</reporting>

3. Cоздаём сборку «название репозитория в bitbucket»-pitest в проектной области Jenkins. Сборка настраивается на ветку pitest и в целях Maven верхнего уровня к командам из заявки добавляется org.pitest:pitest-maven:1.2.0:mutationCoverage site
4. После успешного выполнения сборки отчёт будет находиться в сборочной директории в папке target/pit-reports
5. Все последующие сборки разработчики запускают самостоятельно, предварительно внеся последние изменения из ветки develop в ветку pitest.

Сборщик мусора (GC) в Java

Память JVm состоит из Heap и Permanent Generation. Второй служит для хранения необходимых данных JVM, а так же сохраняет метаданные о созданных объектах. При каждом создании объекта JVM кладет некоторый объем данных в Permanent Generation.
Размер PG можно задать двумя параметрами JVM: -XX:PermSize – задаёт минимальный, или изначальный, размер PG, и -XX:MaxPermSize

Heap — это основной сегмент памяти, где хранятся наши созданные объекты. Он делятся на два подсегмента (Old Generation) и (New Generation). New Generation в свою очередь делится на Eden и два сегмента Survivor.

Новые объекты создаются в сегменте Eden.

Чем больше памяти даем GC тем ему лучше, но опять же смотрим на объем физической памяти.  Если хотим оптимизировать характеристики GC, то лучше определить 2 параметра из трех.  Универсального GC не будет, что хочется получить и чем мы готовы пожертвовать.

Пользователям доступны 4 сборщика мусора:

  1. SerialGC

Работа GC:
1) Copy Collection — Помечает какие объекты не нужны, какие нужны и далее происходит копирование в область Survivor. Этот алгоритм создает эффект «Мир остановился», когда происходит копирование, то все threadы переводятся в состояние паузы. Copy Collection же работает хорошо в том случае, если у нас много мусора и мало полезных объектов.

2) Mark-Sweep-Compact Collection — Маркируются объекты, дальше они удаляются из памяти и новые объекты размещаются на местах старых.

3) Parallel GC

3) G1 Garbage Collector

Аргументы для jvm:
java -Xms512m -Xmx512m -XX:NewRatio=3
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails
-Xloggc:gc.log -classpath
com.redstack.App

При этом:
-Xms определяем исходный/минимальный размер heap в 512 мб
-Xmx определяем максимальный размер heap в 512 мб
-XX:NewRatio определяем размер old generation большим в три раза чем размер new generation
-XX:+PrintGCTimeStamps, -XX:+PrintGCDetails и -Xloggc:gc.log JVM печатает дополнительную информацию касаемо garbage collection в файл gc.log
-classpath определяем classpath
com.redstack.App main класс

OutOfMemoryException — Вы уже могли сталкиваться с подобным поведением и думать, почему же это произошло – особенно, если у вас большой объем физической памяти на компьютере и вы удивлялись, как такое вообще могло произойти, что не хватает памяти – теперь вы знаете, почему. Если так случится, что Permanent Generation заполнится (довольно сложно в случае нашего примера добиться этого), у вас будет брошено другое исключение, сообщающее, что PermGen заполнен.

Статейки:
https://habrahabr.ru/post/112676/

Вызов параметризованной задачи Jenkins через cURL/IDEA REST

Для вызова задачи с передачей параметров (JSON), необходимо использовать команды
Windows

curl -k -u %USER%:%PASSWORD% -X POST https://URL/jenkins/job/TestProject/job/TestJob/build --data-urlencode json={\"parameter\":[{\"name\":\"ParamName\",\"value\":\"ParamValue\"}]}

Linux

curl -k -u %USER%:%PASSWORD% -X POST https://URL/jenkins/job/TestProject/job/TestJob/build --data-urlencode 'json={"parameter":[{"name":"ParamName","value":"ParamValue"}]}'

Так же вызывать Jobы можно с помощью IDEA.

IntelliJ IDEA содержит инструмент, позволяющий взаимодейтсвовать с REST сервисами, отправляя и получая запросы.
Данный интсрумент называется «Test RESTful Web Service» и доступен только в Ultimate версии.

Для того, чтобы открыть его нажимаем на вкладку меню Tools -> Test RESTful Web Service

После этого, в нижней части мы увидим окно инструмента «REST Client»