• Слежка на экзаменах: программа ExamCookie

    • Translation
    Мне стало известно, что датское правительство не просто приостановило действие программы Digital Exam Monitor, которую мы проанализировали и полностью обошли в предыдущей статье, а, возможно, полностью закрыло эту систему через неделю после того, как мы сообщили им способ взлома. Не хочу думать, что чисто из-за нас датское правительство отказалось от идеи мониторинга экзаменов, но нашу работу явно заметили.

    В этой статье мы изложим технические детали, как работает другой инструмент слежки за школьниками: ExamCookie. Если вас интересует только обход системы, пролистайте вниз до соответствующего раздела.
    Читать дальше →
    • +23
    • 8.3k
    • 3
  • Десять лет на удалёнке

    • Translation
    Ещё во время учёбы в колледже (вперёд, Бронкос!) мы с Алеком запустили стартап. Мы были молоды, неопытны и наивны. Наш первый проект назывался YippieMail: агрегатор электронной почты. Проще говоря, YippieMail отображает все ваши почтовые ящики (например, Hotmail, Yahoo, Gmail и т. д.) в одном веб-интерфейсе. Это было до того, как большинство провайдеров внедрили IMAP, поэтому вы не могли использовать почтовый клиент. Оглядываясь назад, YippieMail кажется довольно глупой идеей, но благодаря ей мы познакомились с венчурными инвесторами из Sequoia Capital и других фондов. Имейте в виду, что примерно в то время Meebo привлёк много миллионов от Sequia и DFJ, реализовав точно такую же идею для IM-мессенджеров. Так что в то время стартап выглядел перспективным.

    В первые дни YippieMail (позже переименован в YippieMove, RIP 2008−2019) начался мой десятилетний опыт удалённой работы, иногда я жил как цифровой кочевник.
    Читать дальше →
    • +15
    • 6.7k
    • 8
  • Технический долг

    • Translation
    Программные системы склонны к накоплению мусора — внутренних недоработок, которые затрудняют дальнейшее изменение и расширение системы по сравнению с идеальным кодом. Технический долг — это метафора, придуманная Уордом Каннингемом. Она объясняет, как воспринимать этот мусор, по аналогии с финансовым кредитом. Дополнительные усилия, необходимые для добавления новых функций, — это проценты по кредиту.


    Читать дальше →
    • +19
    • 5.3k
    • 2
  • Контейнеры, микросервисы и сервис-меши

    • Translation
    В интернете куча статей о сервис-мешах (service mesh), и вот ещё одна. Ура! Но зачем? Затем, что я хочу изложить своё мнение, что лучше бы сервис-меши появились 10 лет назад, до появления контейнерных платформ, таких как Docker и Kubernetes. Я не утверждаю, что моя точка зрения лучше или хуже других, но поскольку сервис-меши — довольно сложные животные, множественность точек зрения поможет лучше их понять.

    Я расскажу о платформе dotCloud, которая была построена на более чем сотне микросервисах и поддерживала тысячи приложений в контейнерах. Я объясню проблемы, с которыми мы столкнулись при её разработке и запуске, и как сервис-меши могли бы помочь (или не могли).
    Читать дальше →
  • Я не знал, как работают процессоры, поэтому написал программный симулятор

    • Translation

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

    Я прочитал книгу «Но откуда он знает?» Кларка Скотта с детальным описанием простого 8-битного компьютера: начиная с логических вентилей, ОЗУ, транзисторов процессора, заканчивая арифметико-логическим устройством и операциями ввода-вывода. И мне захотелось реализовать всё это в коде.

    Хотя я не настолько интересуюсь физикой микросхем, но книга просто скользит по волнам и красиво объясняет электросхемы и как биты перемещаются по системе — от читателя не требуется знание электротехники. Но мне недостаточно текстового описания. Я должен видеть вещи в действии и учиться на своих неизбежных ошибках. Так я начал реализацию схем в коде. Путь оказался тернист, но поучителен.
    Читать дальше →
  • 3D-интерфейсы обычно хуже, чем 2D-интерфейсы

    • Translation
    Автор статьи — Джон Кармак, инженер в областях информатики, аэрокосмической техники и виртуальной реальности, соучредитель и совладелец id Software. С августа 2013 года — технический директор Oculus VR.


    Эту заметку я разослал сотрудникам в 2017 году, но моя позиция только укрепилась в последующие годы.

    В прошлом году я говорил, что цилиндрические панели оказались на удивление эффективными, и их нужно внедрить в интерфейс VR Shell [браузерная оболочка VR для просмотра веба — прим. пер.]. Многие были против того, чтобы отказаться от свободного размещения 3D-интерфейсов и ещё большего сокращения использования 3D-интерфейсов в будущем, но объективно более высокое качество нативной проекции слоя TimeWarp — это не просто абстрактный вопрос дизайна.
    Читать дальше →
    • +13
    • 8.3k
    • 3
  • Гибкие таблицы на CSS Grid

    • Translation

    Просмотр списка лидов («холодных» контактов)

    Поскольку мы уже запустились, я, наконец, могу рассказать о секретном проекте, над которым работал последние два года. Одна из интересных функций Teamwork CRM — просмотр списка (list view).

    Это мощный компонент, который встречается в приложении семь раз. По сути, таблица на стероидах. Я мог бы много рассказать, но не хочу вас утомлять. Сосредоточусь на том, как мы реализовали подобную гибкость с помощью всего нескольких строк CSS (Grid). А именно, как мы выкладываем тяжёлые таблицы данных, как поддерживаем изменение размера столбцов и многое другое.

    Во-первых, нужно объяснить контекст, начиная с цели и задачи дизайна этих таблиц. Если это не интересует, не стесняйтесь перейти сразу к технической реализации.
    Читать дальше →
    • +19
    • 11.1k
    • 4
  • Я получил от Кнута чек на 0x$3,00

    • Translation
    Дональд Кнут — учёный в области информатики, который настолько заботится о правильности своих книг, что предлагает один шестнадцатеричный доллар ($2,56, 0x$1,00) за любую найденную «ошибку», где ошибкой считается всё, что «технически, исторически, типографически или политически неправильно». Я очень хотел получить чек от Кнута, поэтому решил поискать ошибки в его выдающемся труде «Искусство программирования» (TAOCP). Удалось найти три. Верный слову, Кнут прислал чек на 0x$3,00.



    Как видите, это не настоящий чек. Раньше Кнут отправлял реальные чеки, но прекратил в 2008 году из-за безудержного мошенничества. Теперь он рассылает «личные депозитные сертификаты» в банке Сан-Серрифф (BoSS). Он говорит, что готов выслать реальные деньги в случае необходимости, но, похоже, это слишком хлопотно.
    Читать дальше →
  • Н.М.Д. (Не Моё Дело)

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

    Установка


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

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

    И всё же, несмотря на эти сильные стороны, часто вы чувствуете разочарование. Вы видите вокруг так много проблем, а когда указываете на них, люди иногда злятся. Они плохо воспринимают ваши отзывы. Они не хотят вашей помощи в исправлении ситуации. Коллеги игнорируют замечания, менеджер не слушает, менеджер вашего менеджера сочувственно кивает, а затем продолжает ничего не делать.
    Читать дальше →
    • +16
    • 4.9k
    • 5
  • Автоматический перенос приложений iOS (ARM) на macOS (x86) с помощью Bitcode

    • Translation
    Когда Apple представила технологию Bitcode и сделала её обязательной для watchOS и tvOS, компания словно отмахнулись от вопросов, зачем она вообще нужна. Лишь туманно сказала, что она помогает настраивать двоичные файлы и использует последние улучшения компилятора.

    С тех пор Bitcode сыграл важную роль в плавном переходе watchOS на 64 бит, где разработчикам даже не пришлось перекомпилировать свои приложения в каталоге. Сама Apple сделала это автоматически: все приложения начали работать на Apple Watch Series 4. Вероятно, вы даже не заметили, что произошла миграция.

    Что такое Bitcode? Ну, bitcode с маленькой b — это специфичное для архитектуры промежуточное представление, используемое LLVM, а Bitcode с большой B относится к набору функций, позволяющих встроить это представление в ваш двоичный файл Mach-O, и механизмы, с помощью которых вы можете отдать этот файл в App Store.
    Читать дальше →
  • Я выставил счёт $18 000 за статичную веб-страничку… и мне это сошло с рук

    • Translation
    Не так давно я работал контрактником, перескакивая с одного проекта на другой. С некоторыми краткосрочными проектами справлялся за неделю. Другие длились пару месяцев. Они приносили достаточно денег, чтобы взять отпуск. Но я предпочитал короткие, потому что там можно было установить бóльшую часовую ставку. Я не только сам себе хозяин, но и не приходилось слишком много работать, чтобы зарабатывать на жизнь. Даже мои самые высокие ставки были вполне разумными, и я всегда обеспечивал высокое качество обслуживания. Так было до тех пор, пока мне не предложили контракт в большой компании.

    Эта компания связалась со мной в срочном порядке, и менеджер сказал, что им нужен человек прямо сейчас. Сотрудник, который обеспечит максимальную производительность после минимального тренинга. Хорошо это или плохо, но таков был мой девиз. Проект мне очень нравился. Он был маленьким, быстрым и хорошо оплачивался.
    Читать дальше →
  • Введение в геномику для программистов

    • Translation
    Об авторе. Энди Томасон — ведущий программист Genomics PLC. Он с 70-х годов занимается графическими системами, играми и компиляторами; специализация — производительность кода.

    Гены: краткое введение


    Геном человека состоит из двух копий примерно по 3 миллиарда пар оснований ДНК, для кодирования которых используются буквы A, C, G и T. Это около двух бит на каждую пару оснований:

    3 000 000 000 × 2 × 2 / 8 = 1 500 000 000 или около 1,5 ГБ данных.

    На самом деле эти копии очень похожи, и ДНК всех людей практически одинаков: от торговцев с Уолл-Стрит до австралийских аборигенов.

    Существует ряд «референсных геномов», таких как файлы Ensembl Fasta. Эталонные геномы помогают построить карту с конкретными характеристикам, которые присутствуют в ДНК человека, но не уникальны для конкретных людей.
    Читать дальше →
  • Заблуждения программистов о Unix-времени

    • Translation
    Приношу извинения Патрику МакКензи.

    Вчера Дэнни поинтересовался любопытными фактами о Unix-времени, а я вспомнил, что иногда оно работает совершенно неинтуитивно.

    Вот эти три факта кажутся в высшей степени разумными и логичными, не так ли?

    1. Время Unix — это количество секунд с 1 января 1970 года 00:00:00 UTC.
    2. Если подождать ровно одну секунду, то время Unix изменится ровно на одну секунду.
    3. Время Unix никогда не двигается назад.

    Всё это неправда.
    Читать дальше →
  • Восемь малоизвестных опций Bash

    • Translation
    • Tutorial
    Некоторые опции Bash хорошо известны и часто используются. Например, многие в начале скрипта пишут

    set -o xtrace

    для отладки,

    set -o errexit

    для выхода по ошибке или

    set -o errunset

    для выхода, если вызванная переменная не установлена.

    Но есть много других опций. Иногда они слишком путано описаны в манах, поэтому я собрал здесь некоторые из наиболее полезных, с объяснением.
    Читать дальше →
  • Запуск Bash в деталях

    • Translation
    • Tutorial
    Если вы нашли эту страницу в поиске, то наверняка пытаетесь решить какую-то проблему с запуском bash.

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

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

    Диаграмма


    Эта блок-схема обобщает все процессы при запуске bash.



    Теперь подробнее рассмотрим каждую часть.
    Читать дальше →
    • +23
    • 13.7k
    • 5
  • Трудно быть мейнтейнером проекта Open Source

    • Translation
    Автор — Сальваторе Санфилиппо, разработчик и мейнтейнер свободной СУБД Redis

    Несколько месяцев назад мне написал мейнтейнер одного системного open source проекта с довольно большим и активным сообществом. Он написал, что много лет изо всех сил пытается поддерживать свой проект, но испытывает серьёзную психологическую нагрузку. Просил совета. Я ответил, что вряд ли в состоянии дать совет, но пообещал написать пост в блоге о том, что думаю по этому поводу.

    Прошло несколько недель, я несколько раз начинал писать этот пост и останавливался, потому что не было времени хорошенько всё обдумать. Теперь, кажется, я завершил самоанализ своих слабостей, трудностей и желания свободы. Эти чувства неизбежно охватывают человеческий разум, когда он концентрируется на какой-то задаче, а в течение длительного времени проявляется негативный аспект. Безусловно, поддержка проекта Open Source также приносит много радости и удовольствия. Последние десять лет моей профессиональной жизни, безусловно, запомнятся надолго. Это хорошие годы, хотя и не самые лучшие (ещё веселее было во время запуска). Но здесь я сосредоточусь на негативной стороне. Просто имейте в виду, что есть и положительные моменты.
    Читать дальше →
  • Реверс-инжиниринг клиента Dropbox

    • Translation
    TL;DR. В статье рассказывается об обратной разработке клиента Dropbox, взломе механизмов обфускации и декомпиляции клиента на Python, а также изменении программы для активации функций отладки, которые скрыты в обычном режиме. Если вас интересует только соответствующий код и инструкции, пролистайте до конца. На момент написания статьи код совместим с последними версиями Dropbox, основанными на интерпретаторе CPython 3.6.

    Введение


    Dropbox очаровал меня сразу с момента своего появления. Концепция по-прежнему обманчиво проста. Вот папка. Кладёшь туда файлы. Он синхронизируется. Переходишь к другому устройству. Он опять синхронизируется. Папка и файлы теперь появились и там!

    Объём скрытой фоновой работы на самом деле поражает. Во-первых, никуда не исчезают все проблемы, с которыми приходится иметь дело при создании и обслуживании кросс-платформенного приложения для основных десктопных операционных систем (OS X, Linux, Windows). Добавьте к этому поддержку различных веб-браузеров, различных мобильных операционных систем. И мы говорим только о клиентской части. Меня интересует также бэкенд Dropbox, который позволил достичь такой масштабируемости и низкой задержки с безумно тяжёлой рабочей нагрузкой, которую создают полмиллиарда пользователей.
    Читать дальше →
    • +39
    • 7.4k
    • 1
  • Сложные системы. Выход на критический уровень

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

    Или рассмотрим эту статью, которую вы читаете. Вероятно, вы нашли её в социальной сети, скачали из компьютерной сети и в настоящее время расшифровываете смысл с помощью своей нейронной сети.

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

    Это наша тема на сегодня: как, насколько хаотично всё движется и распространяется. Некоторые примеры, чтобы подогреть аппетит:

    • Инфекционные заболевания, переходящие от носителя к носителю внутри популяции.
    • Мемы, распространяющиеся по графу фоловеров в социальных сетях.
    • Лесной пожар.
    • Идеи и практики, проникающие в культуру.
    • Каскад нейтронов в обогащённом уране.
    Читать дальше →
    • +37
    • 5.9k
    • 6
  • Почему WhatsApp никогда не станет безопасным

    • Translation
    Автор колонки — Павел Дуров, основатель мессенджера Telegram



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

    Однако эта новость меня не удивила. В прошлом году WhatsApp пришлось признать очень похожую проблему — хакер мог получить доступ ко всем данным вашего телефона через один видеозвонок.
    Читать дальше →
  • Лучшая приоритизация HTTP/2 для ускорения веба

    • Translation

    HTTP/2 обещал заметно ускорить веб, и Cloudflare давным-давно развернула доступ по HTTP/2 для всех клиентов. Но одна особенность HTTP/2, приоритизация, не соответствовала ожиданиям. Не потому, что она принципиально сломана, а из-за реализации в браузерах.

    Сегодня Cloudflare предлагает изменить приоритизацию HTTP/2, что даёт нашим серверам контроль над решениями о приоритизации, которые действительно заметно ускоряют интернет.

    Исторически именно браузер контролирует, как и когда загружать веб-контент. Сегодня для всех платных планов мы вносим радикальные изменения в эту модель. Они передают контроль напрямую владельцу сайта. На вкладке «Скорость» в панели мониторинга Cloudflare клиенты могут включить «Расширенную приоритизацию HTTP/2»: она переопределяет настройки браузера по умолчанию на улучшенную схему планирования, что значительно ускоряет доступ для посетителей (в некоторых случаях мы видели ускорение на 50%). С воркерами Cloudflare владельцы сайтов могут пойти ещё дальше и полностью подобрать настройки под свои конкретные нужды.
    Читать дальше →
    • +18
    • 6.3k
    • 7