• Профессиональная иммиграция в Нидерланды: как это было

    image

    Прошлым летом я инициировал, а несколько месяцев назад успешно завершил процесс смены работы, приведший меня к релокации в Нидерланды. Хотите узнать, как это было? Добро пожаловать под кат. Осторожно — очень длиннопост.
    Читать дальше →
  • Лекции Технополиса. Проектирование высоконагруженных систем (осень 2017)



      Мы начинаем публиковать курсы лекций Технополиса — образовательного проекта команды Одноклассников в Санкт-Петербургском Политехническом университете Петра Великого. Создание высоконагруженных приложений — это не только проектирование и написание кода, но и огромное количество других аспектов на всём протяжении жизненного цикла продукта. Мы пройдём по всему процессу создания и использования высоконагруженной системы. Особое внимание будет уделено особенностям эксплуатации, сетям, балансировке нагрузки, иерархии памяти, повседневным инструментам. Также поговорим о мониторинге, аудите и многом другом. Лекции курса читает команда экспертов под руководством ведущего разработчика в Одноклассниках Вадима Цесько.

      Список лекций:

      1. Введение (Вадим Цесько)
      2. Типовые архитектуры (Александр Христофоров)
      3. Эксплуатация (Илья Щаников)
      4. Сетевой стек (Дмитрий Самсонов dmitrysamsonov)
      5. Балансировка (Андрей Домась)
      6. Процессоры и память (Алексей Горбов)
      7. Хранилища данных (Сергей Егоричев)
      8. JVM (Андрей Паньгин apangin)
      9. Мониторинг (Сергей Шарапов Sharapoff)
      10. Облака (Леонид Талалаев)

      Читать дальше →
    • Как устроен dtraceasm в JMH

        В последней версии Java Microbenchmark Harness (JMH) появился новый профайлер — dtraceasm, долгожданный порт perfasm на Mac OS X, который умеет показывать ассемблерный профиль Java-бенчмарка.


        Блиц-опрос показал, что не всем понятно, как в принципе возможно, получив на входе Java-метод, на выходе показать ассемблерный листинг скомпилированного метода с самыми горячими инструкциями, их распределением и небольшим профилем вида "А еще 5% времени виртуальная машина провела в методе Symbol::as_C_string(char*, int)".


        В процессе портирования perfasm выяснилось, что на самом деле™ все не очень сложно и появилось желание рассказать, как такой профайлер устроен.


        Для понимания статьи крайне желательно ознакомиться с JMH, например, посмотрев на примеры его использования.

        Читать дальше →
        • +32
        • 3,5k
        • 4
      • Как я чинил интерактивный логин, или Что там в кишках у //chrome/test/ChromeDriver?

          Эта статья возникла из-за одной моей ошибки и двух багов — по одному в Chromium Headless и ChromeDriver. В результате пришлось собрать всё это из исходников (в статье есть подробнейшая инструкция), отладить цепочку взаимодействия Selenium<->ChromeDriver<->Chromium в отладчике IntelliJ IDEA и Microsoft Visual Studio, покопаться в Java, C++ и JS.


          Статья будет интересна тем, кто хочет понять, чем им грозит переход на Selenium + Headless Chrome и как с этим жить. А также всем, кто просто хочет немного поглумиться над несчастным быдлокодером.


          Под катом есть пачка скриншотов (трафик!).




          Кстати, всё это можно было бы сделать скринкастом — но нельзя, потому что время компиляции C++ необычайно долгое. Вместо этого тут будут скриншоты для привлечения внимания.


          Вначале напомню названия участвующих продуктов. Их три штуки:


          • Chromium — это браузер. Небрендированная версия Google Chrome, без автообновлений, анальных следящих зондов, но и без несвободных компонентов типа кодеков.
          • Chromium ChromeDriver — это часть Chromium, которая отвечает за управление им с помощью внешних инструментов. Это standalone фронт-сервер (отдельный exe-файл), реализует стандарт W3C WebDriver и использует в качестве бэкенда Chrome DevTools.
          • Selenium и его Selenium Chrome Driver — эта штука предоставляет Java API для управления Хромиумом. Джава тут не принципиальна, на JavaScript и jWebDriver было бы то же самое (а на Puppeteer — возможно, нет, ибо он использует DevTools напрямую).

          Всё вместе даёт нам в руки браузер, управляемый с помощью API на Java, JavaScript и так далее.


          Вспомнили? Поехали дальше.

          Читать дальше →
          • +64
          • 10,1k
          • 7
        • Как вернуть украденный домен через арбитраж WIPO. Пошаговая инструкция

          Итак, у вас украли домен. Вы обнаружили это или утром, когда проверяли почту на смартфоне, или вечером, когда увидели на своем сайте чужую рекламу, потом зашли в админку, решив, что сайт взломали, но рекламного кода там не оказалось, и вы поняли, что DNS переписаны на другой сервер…

          Вы испытываете целую гамму чувств. Ярость, потому что собираетесь немедленно наказать мошенников. Страх, потому что за те несколько часов, которые, как вы думаете, сайт пробудет в их руках, они могут наполнить его хламом, который попадет в индекс поисковых систем. Недоумение, потому что не понимаете, как им удалось это сделать.


          Вы сразу пишите в техпродержку регистратора и получаете ответ, что жалоба получена и будет рассмотрена в установленные сроки.
          Читать дальше →
        • Как обучть мдль пнмть упртые скрщня

            Недавно я натолкнулся на вопрос на Stackoverflow, как восстанавливать исходные слова из сокращений: например, из wtrbtl получать water bottle, а из bsktballbasketball. В вопросе было дополнительное усложнение: полного словаря всех возможных исходных слов нет, т.е. алгоритм должен быть в состоянии придумывать новые слова.


            Вопрос меня заинтриговал, и я полез разбираться, какие алгоритмы и математика лежат в основе современных опечаточников (spell-checkers). Оказалось, что хороший опечаточник можно собрать из n-граммной языковой модели, модели вероятности искажений слов, и жадного алгоритма поиска по лучу (beam search). Вся конструкция вместе называется модель зашумлённого канала (noisy channel).


            Вооружившись этими знаниями и Питоном, я за вечер создал с нуля модельку, способную, обучившись на тексте "Властелина колец" (!), распознавать сокращения вполне современных спортивных терминов.


            Читать дальше →
          • Рассказ о том, как я ворую номера кредиток и пароли у посетителей ваших сайтов

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


            То, о чём я хочу рассказать, было на самом деле. Или, может быть, моя история лишь основана на реальных событиях. А возможно всё это — выдумка.

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

            В результате, скрепя сердце, я решил выложить всё начистоту и рассказать всему миру о том, как я в последние несколько лет воровал имена пользователей, пароли и номера кредитных карт с самых разных сайтов. Возможно, вы — администратор или разработчик одного из них.
            Читать дальше →
          • Шпаргалки Java программиста 9: Java SE — Шпаргалка для собеседований и повторений

            • Tutorial
            Данная статья в первую очередь предназначена для подготовки к собеседованиям на позицию Java разработчика (на самом деле, это шпаргалка, которую я писал для себя в течении многих лет, и повторяю при каждом новом поиске работы).

            Предполагается. что вы знакомы с многими функциями из Java SE, поэтому в основном информация дается кратко. Конечно, можно использовать эту статью и просто для обучения основам Java SE платформы (но в этом случае, после чтения статьи вам скорее всего придется обратиться к другим источникам).

            image

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

            Внимание: я не буду касаться вопросов по самому языку Java (вроде для чего нужно слово final или чем overriding отличается от overloading), это потребует отдельной статьи, это вопросы именно по Java SE (6-9) платформе.
            Читать дальше →
          • Scrum внедрили, agile — забыли

              Недавно мне посчастливилось начать работу с одной относительно немаленькой компанией (~100 человек), где, как выразился наниматель, “по-отдельности все хорошие специалисты, а вместе работать не получается”. Ну, думаю, я как раз специализируюсь на создании команд, дай, думаю, помогу чем смогу. Пообщались на собеседовании на тему общего понимания цели компании, об условиях, в которых возможна успешная совместная работа, о максимальном использовании компетенций сотрудников и о вовлечении в общее дело. Казалось бы, мысли у нас с нанимателем сходятся, но сам держу ухо востро — знаю о негативной репутации компании у потенциальных соискателей в городе. Ну что же, тем интереснее будет задача!

              image
              Читать дальше →
            • AlphaGo Zero совсем на пальцах

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

                19 октября 2017 года команда Deepmind опубликовала в Nature статью, краткая суть которой сводится к тому, что их новая модель AlphaGo Zero не только разгромно обыгрывает прошлые версии сети, но ещё и не требует никакого человеческого участия в процессе тренировки. Естественно, это заявление произвело в AI-коммьюнити эффект разорвавшейся бомбы, и всем тут же стало интересно, за счёт чего удалось добиться такого успеха.

                По мотивам материалов, находящихся в открытом доступе, Семён sim0nsays записал отличный стрим:


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

                Сразу хочу отметить, что стрим и статья собирались в значительной степени по мотивам дискуссий на closedcircles.com, отсюда и спектр рассмотренных вопросов, и специфическая манера повествования.

                Ну, поехали.
                Читать дальше →