Pull to refresh
38
0
Никита Зубков @Zubchick

разработчик

Send message

Оптимизация кода: процессор

Reading time18 min
Views115K
Все программы должны быть правильными, но некоторые программы должны быть быстрыми. Если программа обрабатывает видео-фреймы или сетевые пакеты в реальном времени, производительность является ключевым фактором. Недостаточно использовать эффективные алгоритмы и структуры данных. Нужно писать такой код, который компилятор легко оптимизирует и транслирует в быстрый исполняемый код.

image

В этой статье мы рассмотрим базовые техники оптимизации кода, которые могут увеличить производительность вашей программы во много раз. Мы также коснёмся устройства процессора. Понимание как работает процессор необходимо для написания эффективных программ.
Читать дальше →
Total votes 107: ↑102 and ↓5+97
Comments142

Переговоры о зарплате — как не прогореть

Reading time8 min
Views127K
image
Все фотографии в этой статье взяты из трилогии Кристофера Нолана «Тёмный рыцарь». Это всё же Бэтмен!

Давайте сыграем!

При подготовке вы хорошо поработали с телефоном. Интервью в офисе этим утром проходили занятно. После общего обеда сотрудник отдела кадров сел за стол напротив вас. Он спросил: «Какую зарплату вы бы хотели?».

Что вам делать? Что же вам делать?!


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

Или, возможно, он попробует другой подход, чтобы подтолкнуть вас назвать цифру: «Какая зарплата у вас сейчас?».

Этот вопрос звучит вполне резонно. Разве не надо отвечать на этот вопрос?
Читать дальше →
Total votes 81: ↑67 and ↓14+53
Comments392

Использование DPDK для обеспечения высокой производительности прикладных решений (часть 0)

Reading time14 min
Views20K

Kernel is the root of all evil ⊙.☉


Сейчас вряд ли кого-то удивить использованием epoll()/kqueue() в поллерах событий. Для решения проблемы C10K cуществует довольно много разнообразных решений (libevent/libev/libuv), с разной производительностью и довольно высокими накладными расходами. В статье рассматривается использование DPDK для решения задачи обработки 10 миллионов соединений (С10M), и достижение максимального прироста производительности при обработке сетевых запросов в распространённых прикладных решениях. Главной особенностью подобной задачи является делегирование ответственности обработки трафика с ядра ОС в пользовательское пространство (userspace), точный контроль обработки прерываний и каналов DMA, использование VFIO, и много других не очень понятных слов. В качестве целевого прикладного окружения было выбрано Java Netty с использованием Disruptor паттерна и offheap кэширования.



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

В статье очень детально рассмотрены вопросы установки, настройки, использования, отладки, профилирования и разворачивания DPDK для построения высокопроизводительных решений.

Welcome to the dark side!
Rating0
Comments31

Как устроен GIL в Python

Reading time6 min
Views125K
Почему после распараллеливания выполнение вашей программы может замедлиться вдвое?
Почему после создания потока перестает работать Ctrl-C?
Представляю вашему вниманию перевод статьи David Beazley «Inside the Python GIL». В ней рассматриваются некоторые тонкости работы потоков и обработки сигналов в Python.

GIL
Читать дальше →
Total votes 67: ↑65 and ↓2+63
Comments28

Отчёт с Moscow Python Meetup 18 марта

Reading time1 min
Views9.7K


18 марта в московском офисе Mail.Ru Group прошла очередная встреча «питонистов» — Moscow Python Meetup. В рамках традиционного однодневного формата было три выступления, с видеозаписями и презентациями которых вы теперь можете ознакомиться.
Читать дальше →
Total votes 29: ↑27 and ↓2+25
Comments4

Список ресурсов по машинному обучению. Часть 2

Reading time11 min
Views48K


Продолжим (1, 2) рассматривать тему машинного обучения. Вашему вниманию вторая часть (первая тут) адаптированной подборки полезных материалов.
Читать дальше →
Total votes 26: ↑24 and ↓2+22
Comments0

Алгоритм TILT или нестандартное использование ранга матрицы

Reading time3 min
Views28K
Сегодня мы рассмотрим алгоритм TILT (Transform Invariant Low-rank Texture) и множество его методов применения в области Computer Vision. Статья будет нести несколько обзорный характер, без плотного углубления в математические дебри.

Читать дальше →
Total votes 71: ↑71 and ↓0+71
Comments9

Мой топ-100 книг по Программированию, Компьютерам и Науке: часть 1

Reading time3 min
Views133K
Недавно сайт Fog Creek взял у меня интервью, и один из вопросов был связан с моими любимыми книгами по программированию, кодированию и разработке программ. Мне этот вопрос запомнился потому, что я давно себя считаю заядлым книжным ботаником. Книжный ботаник я потому, что безумно люблю книги о науке, компьютерах и программировании. Каждые несколько месяцев я уделяю день или два исследованию недавно изданной литературы и покупке наиболее понравившихся экземпляров. Я мог бы вечно разговаривать о своих любимых книгах. Ведь у меня их так много.

Меня настолько заинтересовал вопрос о книгах, что я решил начать новую серию статей на своём сайте catonmat о моих топ-100 книгах о программировании, программном обеспечении, науке, физике, математике и компьютерах. В каждой статье я буду размещать по пять книг, ведь разбивать огромное задачи на маленькие подзадачи — это самый простой способ их решать (GTD — get things done).

Взгляните на мою книжную полку, чтобы убедиться, что я настоящий ботаник:

image
Читать дальше →
Total votes 32: ↑27 and ↓5+22
Comments26

Заглавные и строчные буквы

Reading time3 min
Views47K
Я собрал здесь некоторые не очень очевидные факты о заглавных и строчных буквах, с которыми может столкнуться программист в работе. Многие из вас переводили строки во «все заглавные» (uppercase), «все строчные» (lowercase), «первую заглавную, а остальные строчные» (titlecase). Ещё более популярна операция сравнения без учёта регистра. В мировом масштабе такие операции могут быть весьма нетривиальны. Пост построен в виде «сборника заблуждений» с контрпримерами.

1. Если я переведу строку в uppercase или lowercase, число Unicode-символов не изменится.

Нет. В тексте могут попасться строчные лигатуры, которым не соответствует один символ в верхнем регистре. Например, при переводе в uppercase: fi (U+FB00) -> FI (U+0046, U+0049)

2. Лигатуры — изврат, ими никто не пользуется. Если их не учитывать, то я прав.

Нет. Некоторым буквам с диакритикой нет точного соответствия в другом регистре, поэтому приходится использовать комбинированный символ. Скажем, в языке африкаанс есть буква ʼn (U+0149). В верхнем регистре ей соответствует комбинация из двух символов: ʼN (U+02BC, U+004E). Если вам попадётся транслитерация арабского текста, вы можете столкнуться с (U+1E96), которой в верхнем регистре также нет односимвольного соответствия, поэтому придётся заменять на (U+0048, U+0331). В ваханском языке есть буква (U+01F0) с аналогичной проблемой. Вы можете возразить, что это экзотика, однако на африкаанс в википедии 23000 статей.

3. Ну хорошо, но давайте считать комбинированный символ (с участием modifying или combining code points) одним символом. Тогда длина всё же сохранится.

Нет. Есть, например, в немецком языке буква «эсцет» ß (U+00DF). При переводе в верхний регистр, она превращается в два символа SS (U+0053, U+0053).
Читать дальше →
Total votes 171: ↑169 and ↓2+167
Comments66

Сделай сам: MSc Computer Science на уровне топ американских университетов из дома

Reading time12 min
Views162K

Вступление


Давно хотел написать статью про образование в Computer Science, но руки не доходили. Решил все-таки это наконец сделать. Итак, о чем пойдет речь? Речь о том, что из себя представляет диплом MSc Computer Science топовых университетов США (во всех подробностях, включая основные курсы, книги и проекты) и как ему соответствовать.

Почему именно MSc? Это — некая развилка: с одной стороны после MSc — вы уже готовый к жизни инженер (да, речь идет о инженерной подготовке, как мне кажется это самое больное место в нашей системе образования), с другой — можно спокойно идти по пути PhD. Как известно, в PhD программу можно попасть и не особо умея программировать — особенно это касается теоретического Computer Science. С другой стороны найти работу программиста тоже дело не очень сложное, и часто не требует мощного образования. Но достигнув уровня MSc — вы получаете возможность разбираться как во всех новый идеях в Computer Science, так и возможность их воплотить в практику. То есть с одной стороны круто разобраться в каком-нибудь deep learning и сделать в нем что-то новое, а также взять и написать свою операционную систему (кто так сделал?). Причем вы не зажаты в рамки узкой специализации (если конечно продолжаете учиться). То есть вы теперь — универсальный солдат, готовый на все.

Надеюсь что эта статья будет полезна:
1. Студентам, которые хотят соответствовать высоким стандартам топ вузов США, или собирающиеся туда в аспирантуру по Computer Science
2. Профессионалам, которые хотят закрыть «дыры» и пробелы
3. Может кто-то из преподавателей возьмет на заметку для своих курсов.
4. Студентам, аспирантам американских вузов — хотелось бы тоже получить фидбэк, особенно касается последних трендов в образовании

Что же здесь будет написано? Минимум философии и общих мыслей: конкретная программа undergraduate и graduate курсов, конечно из дисциплин наиболее мне близких. Все курсы были лично прочувствованы на собственной шкуре, по этому и пишу. (Я пытался записаться на все интересные курсы, которые были, но мой основной упор — системное программирование, базы данных и искусственный интеллект. Отсюда конечно некий bias, но пытаюсь предложить более-менее универсальную программу).
Читать дальше →
Total votes 86: ↑81 and ↓5+76
Comments64

Что именно происходит, когда пользователь набирает в адресной строке google.com? Часть 2

Reading time5 min
Views45K
Часть 1

TLS handshake


Клиентский компьютер отправляет на сервер сообщение ClientHello, где указывает TLS-версию, список алгоритмов шифрования и доступные методы сжатия. Сервер отвечает сообщением ServerHello, содержащим такие же данные, плюс публичный сертификат сервера. Сертификат содержит публичный ключ, которым клиент зашифрует оставшуюся часть приветствия. Клиент проверяет, что сертификат подписан кем-либо из списка доверенных CA (Certificate Authority). Если проверка проходит, клиент создаёт последовательность псевдослучайных байтов и шифрует её с публичным ключом сервера. Эта последовательность используется для создания симметричного ключа.
Читать дальше →
Total votes 21: ↑16 and ↓5+11
Comments5

Что именно происходит, когда пользователь набирает в адресной строке google.com? Часть 1

Reading time7 min
Views132K
Перевод первой части материала с github, обстоятельно объясняющего работу интернета: что именно происходит, когда пользователь набирает в адресной строке google.com?

Кнопка «ввод» возвращается в исходное положение


Для начала отсчёта выберем момент, когда кнопка «ввод» утоплена. В этот момент замыкается контур, отвечающий за эту кнопку. Небольшой ток проходит по логическим контурам клавиатуры. Они сканируют состояние всех переключателей, гасят паразитные электрические импульсы, и преобразовывают нажатие в код клавиши 13. Контроллер кодирует код для передачи в компьютер. Теперь это почти всегда делается через USB или Bluetooth, а раньше в процессе участвовали PS/2 или ADB.
Читать дальше →
Total votes 83: ↑65 and ↓18+47
Comments44

Deep learning и Caffe на новогодних праздниках

Reading time9 min
Views55K

Мотивация


В данной статье вы познакомитесь c применением deep learning на практике. Будет использован фреймворк Caffe на датасете SVHN.

Deep Learning. Этот buzz word уже давно звенит в ушах, но попробовать его на практике никак не удавалось. Подвернулся удобный случай это исправить! На новогодние праздники был назначен контест на kaggle по распознаванию номеров домов в рамках курса по анализу изображений.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments11

Как работают ленивые вычисления

Reading time10 min
Views44K
Маленькая Лямбда решила, что уборку в комнате можно отложить и на потом.

Ленивые вычисления — часто используемая методика при исполнении компьютером программ на Haskell. Они делают наш код проще и модульнее, но могут вызвать и замешательство, особенно когда речь заходит об использовании памяти, становясь для новичков распространённой ловушкой. Например, безобидно выглядящее выражение
foldl (+) 0 [1..10^8]
потребует для своего вычисления гигабайты памяти.

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

Тема ленивых вычислений рассматривалась во многих учебниках (например, в книге Саймона Томпсона «Haskell — The Craft of Functional Programming»), но информацию о них, кажется, всё ещё проблематично найти в сети. Надеюсь, моё руководство посодействует решению этой проблемы.

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

Читать дальше →
Total votes 51: ↑49 and ↓2+47
Comments6

Закрываем ИП: как правильно свернуть бизнес

Reading time5 min
Views68K

Держать бездействующий статус ИП нет никакого смысла, это только добавляет вам лишних забот в виде обязательной отчетности и перечисления страховых взносов. Предприниматель без деятельности и дохода все равно обязан заплатить в ПФР 20 727,53 рублей за 2014 год. Если случилось так, что ваш бизнес не оправдал надежд или вы просто решили приостановить деятельность – закрывайте ИП. Когда понадобится, вы сможете очень быстро зарегистрироваться снова в любой момент.

Красивые и умные эксперты Эльбы подготовили для вас инструкцию, которая подскажет вам что и в какой срок нужно сделать, чтобы закрыть свое дело.
Читать прямо сейчас
Total votes 53: ↑50 and ↓3+47
Comments48

Особая ракетная магия Илона Маска

Reading time6 min
Views193K
Любое обсуждение российского ракетостроения, можно превратить в многостраничный холивар, если написать слово из четырех букв: «Маск». Тут же найдутся его сторонники, которые вспомнят, что с Байконура летают ракеты, разработанные еще в 60-е, а компания Маска SpaceX появилась всего 12 лет назад, и уже делает многоразовую ракету. В ответ можно будет услышать про «секту любителей Маска» и эксцентричного шарлатана, который решил бросить вызов формуле Циолковского. В любом случае, равнодушные быстро покинут обсуждение, а неравнодушные продолжат схватку за свои идеалы.



Что же это за человек такой Илон Маск, почему его появление вынудило Роскосмос говорить о «наступающих на пятки конкурентов», а его марсианские мечты вдохновляют энтузиастов космоса по обе стороны океана?
Читать дальше →
Total votes 265: ↑255 and ↓10+245
Comments174

Беззеркальная революция

Reading time10 min
Views44K
В понедельник 23 июля Canon последним из крупных фотопроизводителей анонсировала свою первую беззеркальную камеру EOS-M. На бумаге новая камера имеет неплохие характеристики, но речь пойдет не о ней, а беззеркалках вообще и о позволивших их создать технологиях в частности.

Мы наблюдаем очередную революцию в фотоделе. Первые беззеркалки появились меньше пяти лет назад, но уже успели существенно подвинуть традиционные зеркалки (в Азии так и вовсе их продажи сравнялись с продажами зеркалок), а заодно помогли камерафонам уничтожить рынок мыльниц (спад продаж только в прошлом году под 40%).

При этом крупицы адекватной технической информации в интернете погребены под толстым слоем маркетинговых манипуляций и дилетантских измышлений фотолюбителей. Так что желающих просветиться прошу
Читать дальше →
Total votes 222: ↑203 and ↓19+184
Comments365

Не тратьте своё время на дерьмовую работу в стартапе

Reading time21 min
Views73K
Под катом перевод огромной статьи, написанной Майклом Чёрчем и посвящённой стартапам. Статья вызвала необыкновенное бурление… мнений, скажем так, на разных сайтах и агрегаторах, поэтому я решил её перевести на русский и посмотреть на реакцию. Текст ОЧЕНЬ длинный, но также и очень интересный. И несколько пояснений перед чтением: в статье речь идёт об инженере в стартапе, именно с этой позиции всё рассматривать; некоторые финансово-экономические термины, возможно, не очень адекватно удались и я буду рад любым конструктивным поправкам.

То, о чём я хочу рассказать, справедливо для июля 2012 г. 15 лет назад необязательно было так же, и не факт, что будет справедливо через год. Но в данный момент это абсолютно верно для большинства людей в достаточной степени, так что я считаю обязанным высказаться. Нынешний мир ИК-стартапов (ИК=инвестиционный капитал / venture capital) — я его нежно называю ИК-стан — является, мягко говоря, тотально напрасной тратой времени для большинства вовлечённых людей.
Читать дальше →
Total votes 238: ↑221 and ↓17+204
Comments77

Устраиваемся программистом за рубежом

Reading time16 min
Views63K
Как часто вас посещала мысль о трудоустройстве за границей, будь то просто временная работа или переезд на постоянное место жительство? Какую страну выбрать? Возможно ли пройти собеседования за тысячи километров по телефону и получить джоб-офер? Как будет выглядеть переезд и жизнь в другой стране? В данной статье я бы хотел поделиться личным опытом и опытом многих моих друзей работающих за рубежом.
Читать дальше →
Total votes 208: ↑188 and ↓20+168
Comments160

Neural network in scheme

Level of difficultyMedium
Reading time12 min
Views16K
По скольку недавно опять поднималась тема нейронных сетей, решил показать небольшую реализацию НС, обучаемую методом обратного распространения ошибки, написанную на scheme. Заодно подробно расскажу, как это все работает, для новичков жанра. Будет рассмотрен только самый простой вид сетей, без зацикливаний и пропуска слоев.

Читать дальше →
Total votes 25: ↑18 and ↓7+11
Comments15
1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity