• Ненавидим и затравлен: опасная жизнь взломщика вирусов, наживающего себе могущественных врагов

    • Translation


    Фабиан известен тем, что уничтожает программы-вымогатели – вирусы, которые криминальные группировки рассылают с целью вымогания денег. Из-за этого ему приходится вести уединённый образ жизни, и всегда на один шаг опережать киберпреступников. По окончанию нашего интервью он переехал в неизвестное мне место.



    Для фотографа из британского Йоркшира ситуация была катастрофической. Поздно ночью он наносил финальные штрихи на свой последний набор свадебных фотографий, которые нужно было отправить радостным клиентам-молодожёнам. А затем на экране компьютера всё поменялось. Не только папка с изображениями, но и вся работа, вся почта и все чеки исчезли.
    Читать дальше →
  • Как я получил работу с зарплатой 300 000 долларов в Кремниевой долине

    • Translation
    В конце января мы публиковали перевод на тему «Как я успешно прошел шесть собеседований в Кремниевой долине». Пришло время поделиться продолжением, где речь пойдет о более животрепещущей теме — о деньгах и о том, как получить больше.

    «В течение недели мне предложили должность инженера-программиста в Google, Facebook, Amazon, Apple, LinkedIn и Yelp. Вот как я проходил у них собеседование.


    Что если я скажу вам… что собеседования не так страшны, как кажется?
    Читать дальше →
  • Как я успешно прошел шесть собеседований в Силиконовой долине

    • Translation
    За шесть дней, в период с 13 по 20 августа 2018 года, я прошел собеседования в шести компаниях Силиконовой долины (LinkedIn, Yelp, Apple, Amazon, Facebook и Google) и получил от каждой предложение о работе.



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

    Надеюсь, моя история вдохновит кого-нибудь, кто сейчас в том же положении (не совсем доволен текущей работой, мечтает переехать в область залива, но несколько недотягивает в плане подготовки), дерзнуть — кто знает, что готовит для них будущее.
    Читать дальше →
  • Причины возникновения ANR и как этого избежать

      ANR (Application Not Responding) — ошибка, которая возникает, когда приложение не отвечает. В итоге открывается диалоговое окно, предлагающее пользователю подождать или закрыть приложение.
      image alt

      Условия возникновения ANR


      • Входные события (кнопки и сенсорные события) не обрабатываются в течение 5 секунд;
      • BroadcastReceiver (onRecieve()) не был обработан в течение указанного времени (foreground — 10 с, background — 60 с);
      • ContentProvider не завершен в течение 10 секунд.

      Обычно основной поток блокируется.

      Если вы читали мои статьи, то наверно уже привыкли к тому, что мы лезет в исходный код. Так что давайте посмотрим как выглядит ANR под капотом.

      Класс AppErrors занимается обработкой не только ANR, но и других ошибок, которые могут возникнуть в приложении, включая crash. Метод handleShowAnrUi() как раз и открывает это страшное для многих разработчиков и пользователей окно, отображающее ANR.
      Читать дальше →
    • Как мы создали рекомендательный сервис по подбору одежды на нейронных сетях

      image

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

      Как и большинство современных IT-решений, можно сравнить разработку нашей системы со сборкой конструктора Lego, когда мы берем много маленьких деталек, инструкцию и создаем из этого готовую модель. Вот такую инструкцию: какие детали взять и как их применить для того, чтобы ваша GPU смогла подбирать похожие товары по фотографии, — вы и найдете в этой статье.

      Из каких деталей построена наша система:

      • детектор и классификатор одежды, обуви и сумок на изображениях;
      • краулер, индексатор или модуль работы с электронными каталогами магазинов;
      • модуль поиска похожих изображений;
      • JSON-API для удобного взаимодействия с любым устройством и сервисом;
      • веб-интерфейс или мобильное приложение для просмотра результатов.

      В конце статьи будут описаны все “грабли”, на которые мы наступили во время разработки и рекомендации, как их нейтрализовать.

      Постановка задачи и создание рубрикатора


      Задача и основной use-case системы звучит довольно просто и понятно:

      • пользователь подает на вход (например, посредством мобильного приложения) фотографию, на которой присутствуют предметы одежды и/или сумки и/или обувь;
      • система определяет (детектирует) все эти предметы;
      • находит к каждому из них максимально похожие (релевантные) товары в реальных интернет-магазинах;
      • выдает пользователю товары с возможностью перейти на конкретную страницу товара для покупки.

      Говоря проще, цель нашей системы — ответить на знаменитый вопрос: “А у вас нет такого же, только с перламутровыми пуговицами?”
      Читать дальше →
    • 42 оператора расширенного поиска Google (полный список)

      • Translation
      • Tutorial
      Те, кто давно занимается поисковой оптимизацией, хорошо знают об операторах расширенного поиска Google. Например, почти все знают об операторе site:, который ограничивает поисковую выдачу одним сайтом.

      Большинство операторов легко запомнить, это короткие команды. Но уметь эффективно их использовать — совсем другая история. Многие специалисты знают основы, но немногие по-настоящему овладели этими командами.

      В этой статье я поделюсь советами, которые помогут освоить поисковые операторы для 15 конкретных задач.
      Читать дальше →
      • +121
      • 84.8k
      • 40
    • Анализ изменений в игре

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

        Еще до сборки нового продакшен-билда мы должны понимать, на какие показатели повлияет нововведение. Ведь в новых версиях игры может быть множество изменений баланса. Без предварительного планирования неизбежно возникнет один из таких вопросов: «Что же повысило ARPU в Канаде — локальные мероприятия в честь национального праздника или общее повышение сложности группы каких-то уровней; а может, просто звезды так совпали?». Безусловно, и после выхода апдейта выполняется всесторонний анализ результатов, но понимать характер изменений нужно заранее.

        Читать дальше →
        • +13
        • 14.2k
        • 3
      • Mind map вместо тест-кейса, или Как визуализация позволяет тестировать приложение быстрее


          Привет! Меня зовут Катя, и я работаю тестировщиком мобильных приложений более пяти лет. Последние три года я тружусь в iOS-команде Badoo, и еженедельно мы релизим от трёх до семи новых фич, от трёх до пяти технических тасков и от пяти до 13 багфиксов. Как вы понимаете, приложение меняется с такой скоростью, что поддерживать классическую тестовую документацию (test cases) неэффективно: почти всегда она будет устаревшей.

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

          В этом случае визуализация позволяет сэкономить кучу времени, поэтому мы решили попробовать использовать mind maps (или «ментальные карты»), которые так же удобны в использовании, как чек-листы, но более наглядны за счёт визуального формата.

          Сегодня мы подробненько разберём созданную мной mind map для тестирования iOS-приложения (далее именуемую «моя прелесть»), а также пройдёмся по ресурсам, которые можно использовать при построении mind map для мобильного приложения, чтобы покрыть максимальное количество важных сценариев.
          Читать дальше →
        • Почему мне посреди ночи позвонили из АНБ и попросили исходники

          • Translation
          История моей сверхсекретной чашки для кофе



          «Пожалуйста, слушайте внимательно и не вешайте трубку». Это первые слова, которые неизвестный мужчина произнёс по телефону, когда брат передал мне трубку.

          Были выходные на праздник 4 июля 2000 года, плюс-минус день, и мистер Икс знал: нужно начать именно с этих слов, потому что он звонил за полночь на домашний телефон моего брата в Коннектикуте. Это было особенно жутко, потому что я жил в Калифорнии, и никто не знал, что я в Коннектикуте, за исключением моих ближайших родственников, которые все были там в доме со мной. Я приехал накануне, как обычно делаю во время нашего ежегодного семейного пикника на День независимости.

          Зачем он звонил?

          Это был вопрос национальной безопасности.
          Читать дальше →
        • Курс MIT «Безопасность компьютерных систем». Лекция 13: «Сетевые протоколы», часть 2

          • Translation
          • Tutorial

          Массачусетский Технологический институт. Курс лекций #6.858. «Безопасность компьютерных систем». Николай Зельдович, Джеймс Микенс. 2014 год


          Computer Systems Security — это курс о разработке и внедрении защищенных компьютерных систем. Лекции охватывают модели угроз, атаки, которые ставят под угрозу безопасность, и методы обеспечения безопасности на основе последних научных работ. Темы включают в себя безопасность операционной системы (ОС), возможности, управление потоками информации, языковую безопасность, сетевые протоколы, аппаратную защиту и безопасность в веб-приложениях.

          Лекция 1: «Вступление: модели угроз» Часть 1 / Часть 2 / Часть 3
          Лекция 2: «Контроль хакерских атак» Часть 1 / Часть 2 / Часть 3
          Лекция 3: «Переполнение буфера: эксплойты и защита» Часть 1 / Часть 2 / Часть 3
          Лекция 4: «Разделение привилегий» Часть 1 / Часть 2 / Часть 3
          Лекция 5: «Откуда берутся ошибки систем безопасности» Часть 1 / Часть 2
          Лекция 6: «Возможности» Часть 1 / Часть 2 / Часть 3
          Лекция 7: «Песочница Native Client» Часть 1 / Часть 2 / Часть 3
          Лекция 8: «Модель сетевой безопасности» Часть 1 / Часть 2 / Часть 3
          Лекция 9: «Безопасность Web-приложений» Часть 1 / Часть 2 / Часть 3
          Лекция 10: «Символьное выполнение» Часть 1 / Часть 2 / Часть 3
          Лекция 11: «Язык программирования Ur/Web» Часть 1 / Часть 2 / Часть 3
          Лекция 12: «Сетевая безопасность» Часть 1 / Часть 2 / Часть 3
          Лекция 13: «Сетевые протоколы» Часть 1 / Часть 2 / Часть 3
          Читать дальше →
        • Потрачено, или Почему локализаторы хреново переводят игры

          • Tutorial
          Индустрия компьютерных игр уже давно стала международной. Хорошие игры ценят во всех уголках мира, поэтому их локализация уже давно превратилась из «пиратского хлеба» в полноценную отрасль игрового производства.

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

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

          Давайте разберемся, почему так происходит. Почему нельзя все игры локализовать на высшем уровне?
          Читать дальше →
        • Думай как программист. Урок по решению задач

          • Translation
          image

          Если вы интересуетесь программированием, то возможно слышали фразу:
          «Каждый должен учиться программированию, потому что оно учит думать.»

          — Стив Джобс

          Наверное вы тоже задавались вопросом, что значит думать как программист?

          По сути, речь идет о более эффективном способе решения задач.

          Данный пост ставит целью научить вас этому.

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

          • Tutorial

          1. Введение


          Этот текст — небольшое обобщение моего опыта подачи заявок на Computer Science PhD с уклоном в machine learning в Северной Америке. Я постарался собрать в этом гайде свои просчеты (учиться лучше на чужих ошибках) и более-менее универсальные вещи, полезные всем. Но все равно нужно понимать, что это довольно индивидуальный опыт, поэтому ваша личная стратегия может отличаться. Например, в случае выбора вузов/научных руководителей или в написании statement of purpose. Ну или вы находитесь в других стартовых условиях по сравнению со мной (оценки, статьи, рекомендации).


          Имейте в виду, что основная часть гайда писалась до получения результатов, потому что мне хотелось избежать «ошибки выживших» (survivorship bias) и проанализировать свой опыт безотносительно того, поступил я или нет. В конце руководства есть мои результаты: я поступил в 2 из 11 вузов, в которые подавался. На мой взгляд, все равно стоит избегать ошибок, которые я здесь буду описывать. Ну и нужно понимать, что в процессе подачи на ML PhD очень много шума, поэтому можно сделать все хорошо и пролететь и наверное даже наоборот.


          image
          Читать дальше →
        • Нейронные сети с нуля. Обзор курсов и статей на русском языке, бесплатно и без регистрации

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

            В этом обзоре в основном присутствуют только ссылки на статьи на хабре, а ссылки на другие ресурсы в качестве дополнения (информация на них на русском языке и не нужно регистрироваться). Все рекомендованные мною статьи и материалы я прочитал лично. Я попробовал каждый видеокурс, чтобы выбрать что понравится мне и помочь с выбором остальным. Большинство статей мною были прочитаны ранее, но есть и те на которые я наткнулся во время написания этого обзора.

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


            Читать дальше →
          • Задача с небоскрёбом и яйцами — не бином Ньютона?

            На самом деле, он самый. Но обо всём по порядку.

            Постановка задачи


            Осваиваю питон, решаю всякое на Codewars. Сталкиваюсь с известной задачей про небоскрёб и яйца. Разница лишь в том, что исходные данные — не 100 этажей и 2 яйца, а чуть побольше.
            Дано: N яиц, M попыток их бросить, бесконечный небоскрёб.

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

            0 <= N, M <= 20000.
            Время прогона двух десятков тестов — 12 секунд.
            Читать дальше →
          • Два скилла, которые помогут стать отличным разработчиком

              image

              От переводчика: эта статья — перевод оригинальной статьи Бара Франека, специалиста по JavaScript. В новом своем материале он решил рассказать, какие навыки помогают разработчику в его ежедневном труде. Но речь не о программных инструментах, а, скорее, ментальных.

              Без разницы, работаете вы программистом много лет или только начали свой путь. Без разницы, какую должность занимаете, работаете в офисе или же занимаетесь фрилансом. Если вы программист, то ваш успех обусловлен двумя крайне важными умениями: фокусироваться на деле и концентрироваться.
              Читать дальше →
            • Где и как изучать машинное обучение?

              • Tutorial

              Всем привет!


              Ни для кого не секрет, что интерес к машинному обучению и искусственному интеллекту растет в лучшем случае по экспоненте. Тем временем мой Яндекс Диск превратился в огромную свалку пейперс, а закладки в Google Chrome превратились в список, длина которого стремится к бесконечности с каждым днем. Таким образом, дабы упростить жизнь себе и вам, решил структурировать информацию и дать множество ссылок на интересные ресурсы, которые изучал я и которые рекомендую изучать вам, если вы только вначале пути (буду пополнять список постоянно).

              Путь для развития новичка я вижу примерно так:

              Untitled_presentation
              Читать дальше →
            • Обучение без учителя. Как стать профессионалом, не имея наставника

                image


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


                В этой статье я поделюсь правилами, которые помогают мне постоянно развиваться как специалист, поддерживать себя в конкурентноспособной форме, и расскажу историю подъема от pre-junior до senior.


                БОНУС: подборка забавных и удручающих случаев с собеседований.

                Читать дальше →
              • Притворитесь умным

                  Лучший способ научиться чему-то — это научить другого.

                  Наступил январь, студенты начинают сдавать экзамены. И часто самым сложным экзаменом оказывается математика. Мой хороший друг спросил у меня: «Что такое теорема Лагранжа, как её доказать и понять?»

                  Я знаю определение и доказательство этой теоремы, но понять её я смог только после объяснения другу.

                  И я вспомнил, что такое случается постоянно. Лучше всего я играю в шахматы, когда вслух озвучиваю, что происходит на доске (я играю по интернету), лучше всего пишу код, когда вслух объясняю себе, что я хочу, и как это получить. И понимаю материал с лекций, когда объясняю его другим.



                  Мы всегда даём хорошие советы, но, как Алиса в стране чудес, следуем им нечасто. Это происходит, потому что мы торопимся, мы создали себе шаблоны поведения, и не задумываемся над тем, чем мы занимаемся.

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


                  Подумайте, как решить эту задачу? Как бы эту задачу решил умный человек?
                  Читать дальше →
                • Как подготовиться к собеседованию в Google и не пройти его. Дважды



                    Заголовок статьи звучит как epic fail, но на самом деле все не так однозначно. Да и в общем и целом эта история закончилась весьма позитивно, хоть и не в Google. Но это уже тема для другой статьи. В этой же статье я расскажу о трех вещах: каким образом проходил мой процесс подготовки, каким образом проходили интервью в Google и почему же на мой взгляд все не так однозначно, как может показаться.
                    Кому интересно, прошу под кат.