• Как я искал работу в Берлине

    Обычно рассказывают про уже свершившиеся истории о том как кто-то уже нашел работу и переехал. Я все еще в процессе, так что расскажу с чем сталкивался и к каким выводам пришел. Советы будут в самом конце.

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

    Читать дальше
  • Continuous integration в Яндексе

      Поддержка огромной кодовой базы с одновременным обеспечением высокой производительности большого числа разработчиков — это серьезный вызов. В течение последних 5 лет в Яндексе идет разработка особой системы непрерывной интеграции. В данной статье мы расскажем про масштаб кодовой базы Яндекса, про перенос разработки в единый репозиторий с trunk-based подходом к разработке, про то, какие задачи должна решать система непрерывной интеграции для эффективной работы в таких условиях.



      Много лет назад в Яндексе никаких особенных правил в разработке сервисов не было: каждый отдел мог использовать любые языки, любые технологии, любые системы деплоя. И как показала практика, такая свобода не всегда помогала двигаться вперед быстрее. В то время для решения одних и тех же задач часто существовало несколько собственных или open-source разработок. С ростом компании такая экосистема работала всё хуже. При этом мы хотели остаться одним большим Яндексом, а не разделиться на множество независимых компаний, потому что это дает массу преимуществ: много людей делают одни похожие задачи, результаты их труда можно использовать повторно. Начиная от разнообразных структур данных, типа распределённых хеш-таблиц и lock-free очередей, и заканчивая множеством разного специализированного кода, который мы написали за 20 лет.

      Читать дальше →
    • Вам не следует проводить собеседования, потому что… [спойлер — вы сами не ходите на собеседования]

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


        Более того, вы сами это прекрасно знаете, сознательно или подсознательно, однако корпоративная этика мешает заявить прямо о своих сомнениях.


        Для привлечения внимания покажем картинку и продолжим.


        Народ нарывается на ЯРОСТЬ


        Читать дальше →
      • Упрощение кода с помощью if constexpr в C++17

        • Translation
        • Tutorial

        Несколько новых возможностей C++17 позволяют написать более компактный и ясный код. Это особенно важно при шаблонном мета-программировании, результат которого часто выглядит жутко…


        Например если вы хотите выразить if, который вычисляется во время компиляции, вы будете вынуждены написать код используя приём SFINAE (например enable_if) или статическую диспетчеризацию (tag dispatching). Такие выражения тяжело понять, и они выглядят как магия для разработчиков, незнакомых с продвинутыми шаблонами мета-программирования.


        К счастью, с появлением C++17 мы получаем if constexpr. Теперь большинство приёмов SFINAE и статической диспетчеризации отпадает, и код уменьшается, становится похожим на "обычный" if.


        Эта статься демонстрирует несколько приёмов использования if constexpr.

        Читать дальше →
      • Как разделить окружение для сборки и запуска сервиса в Docker сегодня и как это cделать завтра

          image


          Большинство из нас уже давно научилось готовить Docker и используют его на локальных машинах, на тестовых стендах и на боевых серверах. Docker, который недавно превратился в Moby, прочно вошел в процессы доставки кода до пользователя. Но best practice работы с контейнерной виртуализацией и, в частности, с Docker вырабатываются до сих пор.


          Как это было


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

          Читать дальше →
        • Многоэтапные (multi-stage builds) сборки в Docker

          • Tutorial
          Docker начиная с версии 17.05 и выше стал поддерживать многоэтапные сборки (multi-stage builds). С удивлением обнаружил, что никто еще не написал об этом на хабре. Поэтому давайте исправим этот пробел.
          Читать дальше →
        • VPN-сервисы и анонимайзеры благополучно игнорируют закон о блокировке сайтов. Роскомнадзор бессилен

            Говорят, что суровость законов в России компенсируется необязательностью их исполнения. Представитель пресс-службы Роскомнадзора сообщил РБК, что до сих пор ведомство не направило ни одному VPN-сервису или анонимайзеру требования заблокировать доступ к сайтам, внесённым в реестр запрещенной информации. Роскомнадзор обязан высылать такие требования по инициативе ФСБ или другого органа, осуществляющего оперативно-разыскную деятельность и госбезопасность. Но за прошедшие четыре месяца с момента вступления в силу закона ни одного обращения со стороны правоохранительных органов не поступило.

            По оценкам специалистов, сейчас около 25% российских пользователей используют анонимайзеры и VPN-сервисы, в том числе встроенные в браузеры, чтобы обойти установленные государством запреты и получить полноценный доступ в Сеть. При этом количество сервисов VPN постоянно растёт.
            Читать дальше →
          • Взаимодействие C# и C++ кроссплатформенно

            • Tutorial
            Вам приходилось сталкиваться с необходимостью взаимодействия кода на C# и native-C++ (или скорее С)? Причины могли быть разными: библиотека уже есть, на С/С++ написать проще, разработка частей приложения ведётся разными командами, _______________ (нужное вписать).

            Известно, что языки базируются на совершенно разных наборах аксиом.

            В С# (CLR, если точнее) вы имеете дело с типами фиксированных размеров (за редкими оговорками), код может быть скомпилирован JIT-компилятором под любую из поддерживаемых целевых платформ (если явно не оговорено иное).

            В мире C++ всё совсем иначе: одни и те же типы могут иметь разные размеры при компиляции на разные платформы (привет, size_t), код генерируется по-разному для разных платформ, операционных систем и прочих прелестей.

            Под катом будем пробовать их подружить с учётом указанных особенностей.
            Читать дальше →
          • Первый контакт с «var» в Java 10

            Представляю вашему вниманию перевод статьи First Contact With ‘var’ In Java 10 автора Nicolai Parlog.

            image

            Java 10 будет выпущен 20 марта 2018 года, и все фичи, которые должны быть в этом релизе, уже объединены в основную ветку разработки. Одним из самых интересных нововведений Java 10 безусловно является вывод типа локальной переменной (JEP 286). Это дает вам возможность сократить объявления переменных используя новое ключевое слово var:

            var users = new ArrayList<User>();

            И это все, спасибо за внимание!

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

            • Tutorial

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

            • Translation
            Всем доброго! Вот мы и добрались до тематики С++ на наших курсах и по нашей старой доброй традиции делимся тем, что мы нашли достаточно интересным при подготовке программы и то, что будем затрагивать во время обучения.

            Инфографика:



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

            • Translation
            • Tutorial
            Несколько вещей гарантированно будут увеличиваться со временем: расстояния между звёздами, энтропия вселенной и бизнес-требования к ПО. Многие статьи пишут «Не усложняйте!», но не пишут почему или как это сделать. Вот вам 10 ясных примеров.

            1. Инженерам виднее

            Мы, инженеры, считаем себя умнейшими людьми. Ну, поскольку мы создаём разные штуки. И эта ошибка часто приводит к оверинжинирингу. Если вы спланировали и построили 100 модулей — Бизнес всегда попросит у вас 101-ый, о котором вы никогда не задумывались. Если вы соберётесь с силами и решите 1000 проблем — они придут к вам и выложат на стол 10 000 новых. Вы считаете, что у вас всё под контролем, а на самом деле вы даже не представляете, в каком направлении вас завтра поведёт дорога.

            image

            За мои 15 лет работы программистом я ещё ни разу не видел, чтобы Бизнес выдал законченные и стабильные раз и навсегда требования к ПО. Они всегда меняются, расширяются. И это природа бизнеса, а не ошибки людей, управляющих им.

            Мораль: Казино (бизнес) всегда побеждает.
            Читать дальше →
          • Руководство по работе с Redux

            • Translation
            • Tutorial
            Сегодня Redux — это одно из наиболее интересных явлений мира JavaScript. Он выделяется из сотни библиотек и фреймворков тем, что грамотно решает множество разных вопросов путем введения простой и предсказуемой модели состояний, уклоне на функциональное программирование и неизменяемые данные, предоставления компактного API. Что ещё нужно для счастья? Redux — библиотека очень маленькая, и выучить её API не сложно. Но у многих людей происходит своеобразный разрыв шаблона — небольшое количество компонентов и добровольные ограничения чистых функций и неизменяемых данных могут показаться неоправданным принуждением. Каким именно образом работать в таких условиях?

            В этом руководстве мы рассмотрим создание с нуля full-stack приложения с использованием Redux и Immutable-js. Применив подход TDD, пройдём все этапы конструирования Node+Redux бэкенда и React+Redux фронтенда приложения. Помимо этого мы будем использовать такие инструменты, как ES6, Babel, Socket.io, Webpack и Mocha. Набор весьма любопытный, и вы мигом его освоите!
            Читать дальше →
          • «Й» вам не «и» краткое! О важности нормализации Unicode

              й

              За последние полгода интернет просто наводнила «буква» «й». Я встречал ее на новостных сайтах, в мессенджерах, на хабрахабре и geektimes. «О чем вообще речь?» — спросите вы — «Я вижу обычную букву й!». Вам повезло. Я вижу ее так:
              image
              image
              image
              image
              image
              Если вы из тех счастливчиков, у кого буква «й» выглядит так же, как и «настоящая» «й», вот вам фокус: скопируйте ее (букву «й») в блокнот, поставьте курсор в конец буквы и нажмите backspace. Магия, отвал башки просто!
              Как же так получается?

              Графемы, глифы, code points, компоновка и байты

              Очень краткое введение:
              Графема — то, что мы привыкли называть буквой в смысле единицы текста. Глиф является единицей графики, и может графически представлять саму графему или же ее часть (например, различные диакритические знаки: ударения, умляуты, надстрочное двоеточие у буквы ё и т.д.).
              Code Point — то, как записывается текст в представлении Unicode. Одна графема может записываться разными code points.
              Code Points кодируются различным байтовым представлением в зависимости от стандарта: UTF-8, UTF-16, UTF-32, BE, LE…
              Языки программирования, как правило, работают с code points; для нас, людей, привычно мыслить глифами.

              Давайте же наконец разберемся с нашей буквой й. Что же в ней такого особенного?
              Эта буква представляет из себя одну графему («и» краткое), но записана она двумя code points:
              U+000438 CYRILLIC SMALL LETTER I
              U+000306 COMBINING BREVE

              Если вы проделали фокус с нажатием backspace, вы как раз и стерли COMBINING BREVE, или, говоря полиграфическим языком, значок краткости над гласной.

              Обычная буква «и» краткое, которую мы все с вами привыкли набирать клавиатурой, представляет из себя композитный символ, который записывается одним code point:
              U+000439 CYRILLIC SMALL LETTER SHORT I
              Читать дальше →
            • Видео стыковки «Союза» с МКС: лучше, чем «Гравитация»



                Фильм «Гравитация» с Джорджем Клуни и Сандрой Баллок получил весьма хвалебные отзывы зрителей и многих критиков. Конечно, физики, астрономы, инженеры и многие другие специалисты критиковали фильм за многочисленные несоответствия положениям науки и просто здравого смысла. Но «Гравитация» получилась зрелищной, и зрителям фильм понравился. Во многом, это обусловлено красивейшими видами космоса и Земли.

                На днях в Сети появилось видео реальной работы космонавтов в космосе — в данном случае речь идет о стыковке «Союза» с МКС. Операция была проведена 27 марта этого года. Кстати, запуск «Союза» с последующей стыковой ознаменовал старт миссии «One Year», в ходе которой исследуется долгосрочное воздействие микрогравитации на организм человека.
                Читать дальше →
              • На какие языки лучше переводить свой продукт?

                  Какие языки лучше выбрать для локализации своего продукта? Этот вопрос часто ставит разработчиков в тупик. А от правильного ответа на него могут зависеть самые важные показатели – величина прибыли, количество скачиваний или посетителей. Что ж, спешим поделиться с вами любопытной статистикой на эту тему.

                  Читать дальше →