четверг, 23 марта 2017 г.

English Intermediate в skyeng (done)

    Долго я вымучивал английский. Ещё со школы. И в институте. И потом ещё несколько разных попыток с учителями и школами. Поэтому пусть пока небольшой уровень, но всё-же добытый потом и кровью для меня чертовски важен.
    Курс изучил, экзамен сдал (не так хорошо, как хотелось, но всё по честному:)), сертификат получил:


    Кстати, мне недавно попался отличный сервис в сети https://www.italki.com/i/AcAbaB (это инвайт - по нему каждый получит плюс 10$ в копилку), где можно беседовать и учиться (за денежку) с носителями языка. По скайпу, разумеется. Но в отличие от школы, во-первых, там можно очень динамично формировать график занятий, во-вторых, общаться с разными людьми, а вот в-третьих (что не очень хорошо с точки зрения учёбы) у каждого преподавателя своя программа, так что иногда сложно ориентироваться. Но как возможность поработать над speaking - великолепно.

   НО! Для реальной работы мой текущий уровень мал. И надо отдать должное, я это прекрасно понимаю сам. Поэтому изучение продолжается. Впереди upper.


среда, 22 февраля 2017 г.

Java 8 example: two String arrays to one Set with Streams


Just an example


@Test
public void testArraysToStream() {
    String[] s1 = null;
    String[] s2 = null;
    Set<String> res = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)
                .collect(Collectors.toSet());
    Assert.assertNotNull(res);
    Assert.assertEquals(0,res.size());


    s1 = new String[]{"1","2"};
    Set<String> res2 = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)       // two arrays to one stream
                .collect(Collectors.toSet());
    Assert.assertNotNull(res2);
    Assert.assertEquals(2,res2.size());
    s2 = new String[]{"3","4"};
    Set<String> res3 = Stream.of(s1, s2)
                .filter(Objects::nonNull)  // <-- Filter out null values
                .flatMap(Stream::of)       // two arrays to one stream
                .collect(Collectors.toSet());
    Assert.assertNotNull(res3);
    Assert.assertEquals(4,res3.size());
    Assert.assertNotNull(res3.iterator().next());
}

вторник, 7 февраля 2017 г.

Что такое стратегия использования SVN

    На днях коллега поинтересовался - какая стратегия SVN используется у нас при работе с хранилищем. Ответить было нечего, так как это понятие начисто стёрлось у меня из памяти. Хотя как выяснилось при дальнейшем поиске информации, я об этом когда-то читал.
    Смысл термина "стратегия использования SVN" в том, как именно в хранилище sVN именуются каталоги(branches и tags) проекта, а также когда и куда сливаются(merge) ветки.

    Описание типового шаблона из руководства svn: SVN.Ветвление и слияние.Типовые примеры
    Хорошее простое изложение с примерами можно посмотреть тут: Стратегии использования SVN

    Я для себя сформулировал смысл так:

    Простой случай (то, что используется у нас):
- для ошибок и фич создаётся branch, и потом эта ветка сливается в trunk;
- при фиксации, создаётся tag.

    Более сложный случай (как-раз описан в руководстве svn):
- для релиза создаётся branch (1.x-stable);
   -- здесь правятся ошибки этого релиза
   -- для каждой передачи всё фиксируется в tags (1.x.1, 1.x.2)
   -- всё сливается в trunk
- для новых фич создаётся новая ветка (1.(x+1))
   -- здесь ведётся разработка новой функциональности
   -- сюда сливается всё из trunk (чтобы попали исправления ошибок из релизов)
   -- в конце эта ветка сливается в trunk
   -- на основе trunk после этого создаётся новый tags/1.(x+1)
 
Для себя сделал ещё напоминающую табличку:


вторник, 10 января 2017 г.

Free books from O’Reilly. 2016

Отличная подборка бесплатных книг от издательства O’Reilly за 2016 год

https://lifehacker.ru/2017/01/09/free-oreilly-ebooks/  (ссылки на тематические подборки)

Прямая ссылка на раздел с книгами о разработке ПО

http://www.oreilly.com/programming/free/

Архив бесплатных книг за предыдущие годы

http://www.oreilly.com/data/free/archive.html