• Переписываем домашний проект на микросервисы (Java, Spring Boot, Gradle)

    Введение


    Image


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


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


    Всё это было реализовано в виде прототипа — были пользователи, один урок и одна задача для него, возможность отправить код, который компилировался и исполнялся. Кое-какой фронтенд, но в статье о нём речи не будет. Технологии — Spring Boot, Spring Data, Gradle.


    В статье будет реализован такой же прототип, но уже на микросервисах. Реализация будет наиболее простым путём (точнее наиболее простым, из известных мне). Реализация будет доступна любому, кто знаком со Spring.

    Читать дальше →
  • Классификация текста с помощью нейронной сети на Java

    • Tutorial
    – Наша Лена уходит в декрет, – сообщил начальник, – поэтому нам надо искать замену на время ее отсутствия. Часть задач мы распределим, а вот как быть с задачей перенаправления обращений пользователей?

    Лена – это наш сотрудник технической поддержки. Одна из ее обязанностей – распределение поступающих на электронную почту обращений между специалистами. Она анализирует обращение и определяет ряд характеристик. Например, «Тип обращения»: ошибка системы, пользователю просто нужна консультация, пользователь хочет какую-то новую функциональность. Определяет «Функциональный модуль системы»: модуль бухгалтерии, модуль паспортизации оборудования и т.д. Проставив все эти характеристики, она перенаправляет обращение соответствующему специалисту.

    – Давай я напишу программу, которая это будет делать автоматически! – ответил я.

    На этом увлекательный роман заканчиваем и переходим к технической части.

    Читать дальше →
  • Не было бы счастья, да спортивное программирование помогло

    Месяц назад завершился очередной Чемпионат мира по программированию ACM-ICPC (результаты), на котором блестяще выступили команды Санкт-Петербурга и Екатеринбурга. Чуть хуже показали себя команды из Москвы, Перми, Новосибирска, Саратова и Самары. Прекрасный результат у команды из Томска, один лишь выход в финал которой для многих уже стал неожиданностью. Заметьте, что почти все города — миллионники, они располагают крупными вузами и интересными компаниями для работы. А теперь представьте, что вы всё детство живете в городе с населением 50 тыс. человек, затем переезжаете в соседний город с небольшим вузом с сомнительным качеством образования, и впереди маячит перспектива работать на заводе за 20 тыс. рублей в месяц. Эффективные способы сойти с этого мрачного пути есть, и один из них — ACM-ICPC. Я хочу поделиться своей историей, рассказать, как помогает опыт ACM-ICPC в повседневной работе и как эти соревнования стали моей путевкой в жизнь. Если вы студент первого-второго курса и выбираете между скорым заработком и подготовкой к турнирам по программированию, то, я надеюсь, эта статья поможет вам определиться.


    Фото icpcnews icpcnews / CC
    Читать дальше →
  • Каково это — быть разработчиком в России, когда тебе сорок

      Привет всем, я — сорокалетний программист-самоучка, а это моя история.

      Пару недель назад я наткнулся на график распределения людей, интересующихся технологиями, ИТ и программированием. И он заставил меня задуматься о моей карьере.



      Через каких-то 20 лет мне стукнет 60. И вероятность того, что я еще смогу заниматься тем, для чего был создан, составляет очень крошечную величину. Эти размышления привели меня туда, откуда все начиналось.

      Я дебютировал в роли разработчика программного обеспечения в 1990 году, через год после того, как мне на 14-тилетие родители подарили ПЭВМ «Микроша».
      Читать дальше →
    • Kerio VPN Client для Debian/Ubuntu Linux

        image

        Kerio VPN Client представляет собой инструмент для соединение с vpn сетью
        работающей на шлюзе Kerio WinRoute Firewall. Не так давно появился клиент и под Linux.
        Предлагаю небольшую инструкцию по установке и использованию Kerio VPN Client для Debian/Ubuntu Linux


        Подготовка к установке

        Поддерживаются 32-битные Debian / Ubuntu дистрибутивы:
        Debian 5.0, Ubuntu 8.04, Ubuntu 8.10 и выше.

        Перед тем как начать установку с Kerio VPN Client, убедитесь, что
        'Debconf «и» пакеты OpenSSL' установлены на вашей системе.

        # apt-get install debconf openssl

        Установка

        Для установки Kerio VPN Client, выполните следующие команды:

        # dpkg -i kerio-kvc_###_i386.deb

        Так же можно загрузить deb пакет с официального сайта www.kerio.ru/ru/firewall/download

        Конфигурация

        Kerio VPN Client для Linux поддерживает одновременно только одно VPN соединение.
        Во время установки пакета мастер конфигурации запускается автоматически.
        Мастер запросит имя сервера / адрес, имя пользователя, пароль и предлагает автоматическое обнаружение сервера,
        получение сертификата (для сервера проверки идентификации).
        Кроме того, он может быть введён вручную.

        Если вы хотите изменить конфигурацию позже, запустите мастер снова следующей командой:

        # dpkg-reconfigure kerio-kvc

        Альтернативный вариант, править файл конфигурации:

        /etc/kerio-kvc.conf

        После любых изменений потребуется перезапуск службы:

        # /etc/init.d/kerio-kvc reload

        Запуск / остановка

        Kerio VPN Client будут автоматически запускаться после установки
        и перезапуска после реконфигурации.
        Вы можете запускать / останавливать его вручную, путем вызова команды:

        # /etc/init.d/kerio-kvc {start|stop|restart}

        Устранение проблем

        Kerio VPN Client создает log файлы в директории

        /var/log/kerio-kvc directory:

        init.log — информация о старте или остановке демона

        error.log — информация о критических ошибках

        debug.log — детальная информация и статус соединения

        Ну вот VPN сеть настроена, мной лично опробовано, работает стабильно.
      • Kerio vpn client для Gentoo

          Очень долгое время, для того чтобы пользоваться интернетом, который мне раздается через этот самый kerio vpn client мне нужно было держать отдельный компьютер, с windows на борту, в качестве прокси. Это была единственная машина, за которой приходилось тщательно следить, обновлять антивирусы и т.д. Почему windows? Да потому что вышеупомянутая софтина была только под эту ОС. Почему прокси? Да потому что, kvc как-то странно устанавливает сетевое соединение, что в инет могли выходить только локально установленные приложения… Так или иначе настроить из этой винды шлюз не получалось.
          Но недавно узнал, что появился выход для меня (а может быть и еще для кого-то, кто прочтет эту статью)
          Читать дальше →
        • Сервер дома — AMD, Debian x64, Bind9, Apache 2, PHP5, MySQL5, Trac, Subversion и море удовольствия

            Шило в известном месте всё никак не даёт мне покоя.
            И решил я поэкспериментировать с установкой сервера дома.

            Итак, дано:

            1. Домашний интернет с внешним ip на роутере, канал туда/обратно — 8 мбит, провайдер — QWERTY *
            2. Бюджет не больше 10 тысяч рублей — чем меньше, тем лучше. **
            3. Жгучее желание экспериментов и чего-нибудь эдакого ***

            * К сожалению, мой дом не подключает Корбина, у которой более широкие каналы. Приходится довольствоваться тем, что есть
            ** Получилось путём более-менее реального подсчёта стоимости комплектующих на среднестатический компьютер
            *** Для тех, кто хмыкнет и скажет — «эка невидаль, я такое регулярно делаю» — я не так часто что-то настраиваю, больше пишу под уже настроенное, и для меня это чистой воды развлечение — что-то сделать своими руками=)

            Ну, все процедуры тут, под катом.

            Сразу хочу сказать, что у меня это работает — так, как есть. Дополнительно с бубном я не плясал — но тут вытяжки из моих гуглений и мануалокурений.

            Вероятно, что-то можно настроить более гибко или качественно, и я крайне буду рад советам или решениям=)


            Читать дальше →
          • Почему будущее за удалённой работой (часть 1)

              image

              В последнее время тема удалённой работы стала особенно актуальной — достаточно вспомнить этот недавний пост на хабре, выход книги Remote от Джейсона Фрайда и приуроченный к запуску книги старт биржи поиска удалённых сотрудников от 37 Signals.
              Сторонников у неё более чем достаточно, особенно среди работников, уставших изо дня в день добираться до офиса по сумасшедшим городским пробкам. Противников также немало и в первую очередь среди работодателей. Здесь я постараюсь объяснить, почему, несмотря на все минусы (многие из которых, к слову, либо временные, либо вымышленные), удалённая работа — это наше будущее, и будущее весьма близкое. Как человек из IT-индустрии, я конечно имею в виду в первую очередь её, но значительная часть этих наблюдений носит универсальный характер.
              Сразу оговорюсь, я не хочу сказать, что работа в офисе уйдёт в небытие, она лишь превратится из единственного возможного способа в инструмент, решающий определённый спектр задач. Под катом список основных плюсов удалёнки для работника и работодателя, а в следующей части я постараюсь опровергнуть основные мифы, к которым часто апеллируют её противники.
              Читать дальше →
            • Делаем свой персональный Skype, пошаговая инструкция создания WebRTC приложения

                WebRTC

                WebRTC позволяет реализовать real-time аудио/видео связь через браузер (firefox и chrome).

                В этом топике я расскажу как реализовать простейшее WebRTC приложение.
                Читать дальше →
              • Алгоритм Х или что общего между деревянной головоломкой и танцующим Линком?



                Предисловие


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

                Не можешь сам — заставь компьютер. Сказано — сделано. В результате написанному по наитию алгоритму пришлось работать всю ночь, чтобы найти все 4 уникальных решения. В процессе гугления решений для сравнения, я нашёл программу Burr Tools, которая справилась с этой задачей за 3 минуты на моём ноутбуке.

                Такая разница в скорости заставила меня разобраться, как решается эта задача и ещё целый класс подобных.

                Так как же решается эта задача и ещё целый класс подобных?
              • Легальный вывод денег из oDesk в РФ

                  Здравствуйте!

                  Вопросы, связанные с получением денег от зарубежных заказчиков многократно освещались на различных порталах. Мы давно используем oDesk для работы, и коллеги из других компаний не раз спрашивали о деталях оформления процесса вывода средств со счёта oDesk на официальный расчётный счёт в банке, будь то ООО или ИП. В этой статье я опишу шаги и опубликую перевод договора, который необходимо предоставить в банк.

                  Читать дальше →
                • Солнечная система на LibCanvas



                    Вчера был отличный топик, "История одного хабраспора", о создании «галактики» на HTML5 Canvas, который сам по себе да своими комментариями вдохновил меня на ответный код. Думал, до окончания документации, не писать новых вещей на Хабру, но, как видите, сорвался) Спасибо kibizoidus за это.

                    В топике вы увидите описание процесс создания звёздной системы на последней версии LibCanvas. Быстро, оптимизированно, кратко.
                    Читать дальше →
                  • История одного хабраспора



                          Не так давно, просматривая глубокой ночью достаточно интересную заметку о игре на основе JS/Canvas (со своими ошибками и заблуждениями, которые были и у меня, что уж греха таить, понастальгировал всласть), я наткнулся на очередную порцию откровенно холиварных комментариев, после прочтения которых мир за окном стал серым и безрадостным, еда потеряла вкус, а любимый чай оказался несладким. И в тот момент то ли звезды сошлись, то ли срочных и важных багов и фич на вчера стало немного меньше, но я решил ввязаться в спор с достаточно резкими тезисами и вступиться за любимую технологию, которую так откровенно поливали непонятно чем. Так бы и осталось все это на уровне беспредметного перебрасывания пакетов с доводами через забор, если бы в ту же ветку не решил написать RussianSpy, и не об абстрактных попугаях, которых легче переписать в 3D, а о вполне конкретной задаче. И промелькнувшая фраза «Могу прислать ТЗ...» плавно намекнула на то, что вечер обещает быть интересным.

                      Что из всего этого вышло...
                    • Эмулятор Bluestacks + Eclipse: ускоряем отладку и тестирование Android-приложений

                      • Tutorial
                      Об эмуляторе Android под названием Bluestacks на Хабре уже писали. Но писали или в общем, или мало, или сухо. Тем временем проект подрос и ныне вполне пригоден для использования при тестировании и отладке приложений под Android. Зачем это делать? А затем, что Bluestacks работает намного, нет, даже намного-намного быстрее стандартного эмулятора из Android SDK. Под катом я расскажу о нюансах использования Bluestacks, настройке отладки из-под Eclipse, приведу пару замеров скорости работы и расскажу о нескольких ложках дёгтя в бочке мёда.
                      Читать дальше →
                    • Миллион загрузок в месяц или как сделать хороший старт на Google Play

                        Всем привет,



                        Сначала хотел озаглавить топик «Миллион загрузок в месяц или как сделать хороший старт на Google Play на примере одной игры», но потом решил, что это слишком длинно. Тем не менее, сегодня я буду говорить о своей последней игре. Не только потому, что мне хочется немного ее прорекламировать (хотя и это тоже, чего скрывать), но и потому что каждый запуск новой игры индивидуален и без «привязки к местности» рассказывать, наверное, было бы не совсем правильно.
                        Читать дальше →
                      • Как написать игру в стиле Tower Defense

                        Жанр Tower Defence один из самых популярных жанров игр на iOS. Причиной тому веселое времяпрепровождение, сдобренное постройкой башен для создания последней точки обороны против орд монстров, пытающихся эту самую оборону прорвать.
                        Представляю вашему вниманию перевод статьи, написанной Pablo Ruiz, и найденной мной на сайте raywenderlich.com.
                        В этом уроке будет показано, как создать игру Tower Defense с нуля, с помощью Cocos2D.
                        В процессе вы выучите следующее:
                        • Как создавать волны врагов и настраивать время их появления.
                        • Как заставить этих врагов двигаться по заданным точкам(waypoint'ам).
                        • Как строить башни на специально отведенных местах на карте.
                        • Как заставить башни стрелять во врагов.
                        • Как визуально представить waypoint'ы и радиусы атак башен.

                        В конце урока, у вас будет свой фрэймворк для создания игр такого типа, который вы сможете расширять, добавляя новые типы врагов, башен и карт.
                        Для понимания этого урока, вам нужно базовое понимание Cocos2D. Если вы новичок, то можете взглянуть на более легкие уроки на сайте Рэя.
                        Читать дальше →
                      • Переводим книги с помощью Яндекс.API

                        Зачем это надо


                        Однажды мне пришло в голову прочитать одну книгу на родном языке автора, английском. После прочтения нескольких страниц стало понятно, что читать придется долго, так как за каждым незнакомым словом приходилось тянуться за словарем, искать нужную страницу, ломать глаза о множество других слов, похожих на искомое… Да еще и таскать с собой лишних полтысячи страниц. Вот и вздумалось собрать небольшой словарик, именно под эту книгу, в который можно было бы заглянуть в любой ситуации — даже когда нет доступа в Интернет.

                        Что из этого получится


                        На выходе мы получим самый обычный .txt — файл, в котором на каждой строчке по алфавиту будут размещены редкие слова из книги и их перевод. Такой словарик можно легко встроить, например, в MIDlet для мобильного телефона, или же непосредственно на сайт.
                        Читать дальше →
                      • Онлайн-инструменты для кодеров

                          Онлайн-сервисы становятся все популярнее, постепенно усложняя функционал и улучшая интерфейсы. В этой подборке представлены онлайн-инструменты для кодеров.

                          Cloud9


                          «Это Google Docs, только для кода» — так говорят о проекте. Облачный сервис вырос из Mozilla Bespin. Основные фишки: SSH, drag-and-drop и возможность разработки оффлайн.

                          Читать дальше →
                        • Пишем плагин для jQuery

                          • Translation
                          • Tutorial
                          Эта статья призвана дать представление об основных правилах, подходах, дающих наилучшие результаты, и распространённых ошибках, на которые стоит обратить внимание при разработке плагинов для jQuery.
                          Читать дальше →
                        • CSS спрайты: основные техники и полезные инструменты

                          • Tutorial
                          Использование CSS-спрайтов на сайте позволяет повысить производительность и грамотно организовать элементы интерфейса.



                          Sprite Sheet — это одно большое изображение мелких графических элементов сайта, например иконок или кнопок. И благодаря CSS можно отображать каждый элемент отдельно.
                          Читать дальше →