Pull to refresh
1299
0
Анатолий Ализар @m1rko

автор, переводчик, редактор

Send message

Планка найма для инженеров: что это за зверь?

Reading time19 min
Views28K
Последние пять лет Рекурсивный Кактус трудился фулстек-разработчиком в топовой технологической компании, но сейчас решил сменить работу.

За последние полгода Рекурсивный Кактус (так он представился при регистрации на нашем сайте) готовился к будущим собеседованиям, выделяя каждую неделю минимум 20-30 часов на упражнения LeetCode, учебники по алгоритмам и, конечно, практику интервью на нашей платформе для оценки своего прогресса.

Типичный рабочий день Рекурсивного Кактуса:


Время Занятие
6:30 – 7:00 Подъём
7:00 – 7:30 Медитация
7:30 – 9:30 Решение задач по алгоритмам
9:30 – 10:00 Путь на работу
10:00 – 18:30 Работа
18:30 – 19:00 Путь с работы
19:00 – 19:30 Общение с женой
19:30 – 20:00 Медитация
20:00 – 22:00 Решение задач по алгоритмам
Total votes 42: ↑40 and ↓2+38
Comments105

Как освободить умные часы Garmin от облачных сервисов, которые не работают из-за атаки

Reading time5 min
Views11K
Автор статьи — известный хакер Эндрю Хван (bunnie)

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

На момент написания этой статьи Garmin страдает от массированной атаки зловреда-вымогателя. Это повлияло на меня, потому что у меня есть часы Garmin Instinct. Я очень доволен ими, и во многих отношениях они просто волшебны, так много возможностей упаковано в такой крошечный гаджет.

Кроме того, у меня есть хобби — гребля на аутриггере [каноэ с выносными опорами — прим. пер.]

Я считаю, что GPS-часы — незаменимый элемент безопасности, особенно в навигации, потому что трудно судить о скорости воды, когда вы находитесь более чем в нескольких сотнях метров от земли. Если вы попали в плохое течение, без понимания ситуации вас рискует выбросить в море или того хуже.
Читать дальше →
Total votes 29: ↑29 and ↓0+29
Comments8

Собираешься работать в кибербезопасности? Прочитай это

Reading time6 min
Views37K
Автор статьи — Брайан Кребс, известный журналист в сфере информационной безопасности.

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



Практически каждую неделю мне приходит минимум одно письмо от читателя, который просит совета, как начать карьеру в сфере ИБ. В большинстве случаев соискатели спрашивают, какие сертификаты им следует получить или у какой специализации самое светлое будущее.
Читать дальше →
Total votes 24: ↑21 and ↓3+18
Comments6

Алгоритм сортировки quadsort

Reading time11 min
Views9.4K

Вступление


Эта статья описывает стабильный нерекурсивный адаптивный алгоритм сортировки слиянием под названием quadsort.

Четверной обмен


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

    if (val[0] > val[1])
    {
        tmp[0] = val[0];
        val[0] = val[1];
        val[1] = tmp[0];
    }

В четверном обмене происходит сортировка с помощью четырёх подменных переменных (своп). На первом этапе четыре переменные частично сортируются в четыре своп-переменные, на втором этапе они полностью сортируются обратно в четыре исходные переменные.


Этот процесс показан на диаграмме выше.
Читать дальше →
Total votes 30: ↑30 and ↓0+30
Comments2

Пугающая антиутопия интервью для программистов

Reading time14 min
Views57K

Эксперименты


У меня зазвонил телефон.

— Алло, это Джаред.

— Здравствуйте. Я звоню вам насчёт телефонного собеседования в Гигантской Поисковой и Рекламной Компании [очевидно, это Google — прим. пер].

— Да! С нетерпением ждал вашего звонка!

— Хорошо. Можете написать алгоритм для поиска K-го самого большого значения в двоичном дереве?

Я замолкаю. Полностью отключаюсь. Никогда не попадал в такую ситуацию. Пустой документ Google смотрит на меня, а курсор мигает как в замедленной съёмке. Я кое-что набрасываю в качестве первого прохода.

— Можете написать тестовый пример для этого алгоритма?
Читать дальше →
Total votes 73: ↑65 and ↓8+57
Comments124

Чего я не знал о CSS

Reading time6 min
Views33K
Рисовать сайты я учился по старинке: глядя на исходный код и пытаясь воспроизвести увиденное. Плюс взял странную книгу для невидимых вещей (типа PHP/MySQL) — и вперёд.

Это ещё в 1999 году, когда мы писали <font size="4" color="#000000"> и т. д., а DHTML был модным.

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

Вот некоторые вещи, которых я не знал, но хотел бы узнать раньше.
Читать дальше →
Total votes 39: ↑33 and ↓6+27
Comments30

Крутые URI не изменяются

Reading time10 min
Views8.1K
Автор — сэр Тим Бернерс-Ли, изобретатель URI, URL, HTTP, HTML и Всемирной паутины, действующий глава W3C. Статья написана в 1998 году

Какой URI можно считать «крутым»?
Такой, который не изменяется.
Как изменяются URI?
URI не изменяются: их изменяют люди.

По идее, у людей нет никаких причин изменять URI (или прекращать поддерживать документы), но на практике их миллионы.

Теоретически, номинальный владелец пространства доменных имён действительно владеет пространством доменных имен и, следовательно, всеми URI в нём. Кроме неплатёжеспособности, ничто не мешает владельцу доменного имени сохранить это имя. И теоретически, пространство URI под вашим доменным именем полностью находится под вашим контролем, так что вы можете сделать его таким стабильным, как вам нравится. В значительной степени единственная веская причина для исчезновения документа из интернета заключается в том, что компания, которой принадлежало доменное имя, вышла из бизнеса или больше не может позволить себе поддерживать работу сервера. Тогда почему в мире так много пропавших ссылок? Отчасти это просто недостаток предусмотрительности. Вот некоторые причины, которые можно услышать:
Читать дальше →
Total votes 28: ↑24 and ↓4+20
Comments35

Как переписать код на Rust

Reading time39 min
Views8.7K
В предыдущей статье мы говорили о том, как избежать переписывания библиотеки на Rust, когда вам это не нужно. Но как насчёт тех случаев, когда это действительно необходимо?

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

Однако у Rust есть убийственная особенность, когда речь заходит о таких вещах. Он может вызывать код на языке С без накладных расходов (т. е. среда P/Invoke в C#), и он выставляет функции, которые можно использовать в C так же, как и любые другие функции на языке С. Это открывает дверь для альтернативного подхода:

Портировать библиотеки на Rust по одной функции.
Читать дальше →
Total votes 23: ↑22 and ↓1+21
Comments16

Трюки с переменными среды

Reading time8 min
Views7.6K
Интересные переменные среды для загрузки в интерпретаторы скриптовых языков

Вступление


В недавнем хакерском проекте мы получили возможность указывать переменные среды, но не выполняемый процесс. Мы также не могли контролировать содержимое файла на диске, а брутфорс идентификаторов процессов (PID) и файловых дескрипторов не дал интересных результатов, исключив удалённые эксплоиты LD_PRELOAD. К счастью, исполнялся интерпретатор скриптового языка, который позволял нам выполнять произвольные команды, задавая определённые переменные среды. В этом блоге обсуждается, как произвольные команды могут выполняться рядом интерпретаторов скриптового языка при вредоносных переменных среды.
Читать дальше →
Total votes 24: ↑23 and ↓1+22
Comments0

Ты добавил всего две строчки. Почему на это ушло два дня?

Reading time3 min
Views63K
На первый взгляд вопрос кажется разумным, но он делает некоторые ужасные предположения:

  • строки кода = усилие
  • строки кода = значение
  • все строки кода равны

Ничто из этого не является истинным.

Почему исправление, которое кажется таким простым, заняло два дня?
Читать дальше →
Total votes 157: ↑152 and ↓5+147
Comments225

Когда ваши данные грязные

Reading time4 min
Views7.1K
История ниже — прекрасная иллюстрация того, как ИИ получает неверное представление о проблеме, которую мы просим решить:

Исследователи из Тюбингенского университета обучили нейронную сеть распознавать изображения, а затем попросили указать, какие части изображений наиболее важны для принятия решения. Когда они попросили нейросеть выделить наиболее важные пиксели для категории «линь» (разновидность рыбы), вот что она выделила:



Розовые человеческие пальцы на зелёном фоне.

Человеческие пальцы на зелёном фоне!
Читать дальше →
Total votes 12: ↑11 and ↓1+10
Comments3

Самый ужасный день в компании Slack

Reading time6 min
Views19K


Эта статья описывает технические детали проблем, из-за которых Slack упал 12 мая 2020 года. Больше о процессе реагирования на тот инцидент см. хронологию Райана Каткова «Обе руки на пульте».

12 мая 2020 года у Slack произошел первый значительный сбой за долгое время. Вскоре мы опубликовали краткое изложение инцидента, но это довольно интересная история, поэтому хотели бы подробнее остановиться на технических деталях.
Читать дальше →
Total votes 23: ↑14 and ↓9+5
Comments15

Загружаем последнее ядро Linux с дискеты на 486-м компьютере

Reading time4 min
Views13K

Ещё в августе 2019 года я проводил конкурс Sing-Along Week по синхронизации MIDI-файла с речевым синтезатором, который поёт песню. На своём складе я нашел MIDI-карту MQX-32M (клон Roland MPU-401), которую хотел использовать для преобразования MIDI-сигналов в интерфейс Apple II+ с синтезатором речи Echo II, но в конечном итоге использовал ноутбук с интерфейсом USB MIDI. Другой конкурс Pizza Week сподвиг меня заинтересоваться поиском компьютера 486, который бы поместился в коробку для пиццы, и вот предоставился подходящий случай.
Total votes 35: ↑31 and ↓4+27
Comments12

Как я написал интро 4K на Rust — и оно победило

Reading time7 min
Views12K
Недавно я написал своё первое интро 4K на Rust и представил его на Nova 2020, где оно заняло первое место в конкурсе New School Intro Competition. Написать интро 4K довольно сложно. Это требует знания многих различных областей. Здесь я сосредоточусь на методах, как максимально сократить код Rust.


Можете просмотреть демо-версию на Youtube, скачать исполняемый файл на Pouet или получить исходный код с Github.
Total votes 41: ↑41 and ↓0+41
Comments27

В сообществе машинного обучения есть проблема токсичности

Reading time3 min
Views13K
Токсичность везде.

Во-первых, нарушен процесс независимой экспертизы (peer review). Четверть работ с конференции NeurIPS выкладывается на arXiv. В DeepMind есть исследователи, которые публично преследуют рецензентов, критикующих их представление ICLR. Кроме того, статьи известных институтов с arXiv принимаются на ведущих конференциях, даже если рецензенты решают отклонить работу. И наоборот, некоторые статьи с большинством положительных отзывов отклоняются (не хочу называть никаких имён, просто взгляните на страницу openreview ICRL этого года).
Читать дальше →
Total votes 56: ↑39 and ↓17+22
Comments34

Как устроен Apple Lightning

Reading time9 min
Views87K


Это моя маленькая статья с описанием (почти) всего, что я знаю об интерфейсе Apple Lightning и связанных с ним технологиях: Tristar, Hydra, HiFive, SDQ, IDBUS и др. Но сначала маленькое предупреждение…

Читайте эту статью на свой страх и риск! Информация основана на большом количестве внутренних материалов AppleInternal (утечка данных, схем, исходных кодов), которые я прочёл по диагонали. И, конечно, на моих собственных исследованиях. Должен предупредить, что я никогда раньше не проводил подобных исследований. Таким образом, эта статья может использовать неправильные или просто странные термины и оказаться частично или полностью неправильной!
Total votes 45: ↑45 and ↓0+45
Comments115

Вероятно, хватит рекомендовать «Чистый код»

Reading time13 min
Views175K
Возможно, мы никогда не сможем прийти к эмпирическому определению «хорошего кода» или «чистого кода». Это означает, что мнение одного человека о мнении другого человека о «чистом коде» обязательно очень субъективно. Я не могу рассматривать книгу Роберта Мартина «Чистый код» 2008 года с чужой точки зрения, только со своей.

Тем не менее, для меня главная проблема этой книги заключается в том, что многие примеры кода в ней просто ужасны.
Читать дальше →
Total votes 157: ↑147 and ↓10+137
Comments427

Пора обновить ваш монитор

Reading time16 min
Views174K

Иллюстрация: Юлия Прокопова

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

Поэтому я оптимизирую настройки, чтобы показывать действительно, действительно хорошие буквы. Для этого необходим хороший монитор. Не просто нужен, а ОБЯЗАТЕЛЕН. А под «хорошим» я имею в виду настолько хороший, насколько это возможно. Это мои мысли, основанные на моём собственном опыте того, какие мониторы лучше подходят для программирования.
Читать дальше →
Total votes 181: ↑148 and ↓33+115
Comments991

Немного простого Javascript способно на многое

Reading time4 min
Views7.4K
Я никогда не работала профессиональным фронтенд-разработчиком, и хотя уже 15 лет пишу HTML/CSS/JS для небольших побочных проектов, но все проекты были довольно маленькими. Бывает, что я не пишу на Javascript в течение многих лет между этими проектами, и часто не уверена в том, что всё делаю правильно.

Отчасти поэтому я часто использовала библиотеки! Десять лет назад я использовала jQuery, а где-то с 2017 года для моих маленьких проектов много использую vue.js (можете посмотреть небольшую игру типа «сапёр», которую я сделала в качестве вступления к Vue).

Но на прошлой неделе, впервые за долгое время, я написала простой Javascript без библиотеки, и это было весело, поэтому я хотела немного поговорить об этом!
Читать дальше →
Total votes 14: ↑7 and ↓70
Comments6

Измеряем задержку от клавиатуры до фотона с помощью оптического датчика

Reading time10 min
Views5.1K
Для измерения времени отклика или задержки (latency) на компьютерах и в интерфейсах я давным-давно использую приложение Is It Snappy с высокоскоростной камерой iPhone для подсчёта кадров между нажатием клавиши и изменением экрана. Однако проблема заключается в определении на глаз точных кадров для тайминга, что раздражает при выполнении множества тестов. Это также затрудняет измерение вариабельности результатов. Я уже упростил эти тесты, добавив в прошивку клавиатуры режим, который изменяет цвет светодиода после отправки события по USB, но это лишь немного повышает скорость и точность. Хотелось бы чего-то получше.

Поэтому я пошел по стопам моего друга Рафа и сделал аппаратный тестер задержки, который посылает события клавиатуры, а затем с помощью оптического датчика измеряет время изменения экрана! Это было довольно легко, и в этой статье я расскажу о некоторых результатах, а также о сложностях качественного тестирования задержки и как сделать собственный тестер.
Читать дальше →
Total votes 17: ↑17 and ↓0+17
Comments6

Information

Rating
Does not participate
Registered
Activity