• Почему SQLite не использует Git

    • Перевод

    1. Введение


    SQLite не использует Git. Вместо этого у нас работает система управления версиями Fossil, специально разработанная и написанная для поддержки SQLite.

    Люди иногда спрашивают, почему SQLite не использует Git, как все остальные. В статье мы попробуем ответить на этот вопрос. Кроме того, в третьем разделе приводятся советы для пользователей Git, как легко получить доступ к исходному коду SQLite.
    Читать дальше →
  • Цвет: от шестнадцатеричных кодов до глаза

    • Перевод


    Почему мы воспринимаем background-color: #9B51E0 как этот конкретный фиолетовый цвет?



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

    • Перевод
    За последнее десятилетие я реализовал много проектов, связанных с агрегацией и анализом контента. Часто агрегация включает в себя снятие данных со сторонних сайтов, то есть скрапинг. Хотя я стараюсь избегать этого термина. Он превратился в некий ярлык, с которым связано много заблуждений. Основное заблуждение в том, что веб-скрапинг можно заблокировать с помощью X, Y, Z.

    tl; dr; Нельзя.

    С точки зрения бизнеса


    На прошлой неделе я встретился с высокопоставленным руководителем из отрасли, в которой развиваю свой бизнес GO2CINEMA. Без сомнения, это один из самых умных и знающих людей в киноиндустрии.

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

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

    Да, тщательное исследование. Но всё-таки есть способы, чтобы тебя заблокировать. *ухмыляется*

    Нет, парень, нет таких способов.
    Читать дальше →
  • Насколько быстр AMP на самом деле?

    • Перевод
    Проект Accelerated Mobile Pages (AMP) от Google вызвал определённый переполох по идеологическим причинам, но саму технологию так и не разобрали подробно. Несколько недель назад Ферди Кристант писал про несправедливое преимущество, которое получает контент AMP за счёт предзагрузки. Это заставило меня задуматься: насколько хорошо AMP работает на самом деле? Я видел тесты как у Ферди, когда сравнивались одна или две страницы, но ещё не встречал всесторонних объективных тестов.

    Оценить производительность AMP на самом деле не так просто, чем кажется. Нужно рассмотреть по крайней мере четыре контекста:

    1. Насколько хорошо работает AMP в контексте поиска Google?
    2. Насколько хорошо работает библиотека AMP как автономный фреймворк?
    3. Насколько хорошо работает AMP при загрузке из кэша?
    4. Насколько хорошо работает AMP по сравнению с каноническим документом?
    Читать дальше →
    • +14
    • 5,5k
    • 2
  • Отчаянный поиск квадрокруга

    • Перевод

    Поиск таинственной математики, на которой основана фигура в iOS




    Это история о том, как один инженер Figma искал идеальный ответ на программистскую задачу.



    В знаменитом интервью 1972 года Чарльз Имз кратко ответил на несколько фундаментальных вопросов о природе дизайна. Отвечая на первый вопрос, он определил дизайн как «план компоновки элементов для достижения определённой цели».

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

    Хотя я не дизайнер по профессии — я разработчик Figma, веб-инструмента совместного проектирования — несложно заметить, что замечания Имза относятся и к моей работе. Вместо элементов UI я компоную выраженные в коде математические концепции для создания инструментов и функций. И ограничения времени, простоты, поддержки и даже эстетики играют похожую доминирующую роль в моей работе.
    Читать дальше →
  • Осторожнее с копипастом: фингерпринтинг текста непечатаемыми символами

    • Перевод
    Не хотите читать? Посмотрите демо.

    Символы нулевой ширины — это непечатаемые управляющие символы, которые не отображаются большинством приложений. Н​апример, в э​то пред​ложение я вст​авил де​сять про​​белов н​улевой ширины, вы эт​о замет​или? (Подсказка: вставьте предложение в Diff Checker, чтобы увидеть местоположение символов!). Эти символы можно использовать как уникальные «отпечатки» текста для идентификации пользователей.


    Безусловно, он может здесь быть. И вы никогда не догадаетесь

    Зачем?


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

    • Перевод
    После университета я устроился в IT-отдел компании по обработке платежей и взысканию долгов. Мой стол стоял рядом с колл-центром: я целыми днями выслушивал, как люди на пособии делают покупки не по карману и влазят в долги. Когда несколько продажников ушли и начали собственный бизнес, прихватив с собой клиентов, компания предприняла меры. Она заставила всех в офисе, от сотрудников на вводе данных до операторов поддержки, подписать соглашения о неконкуренции. Это было первое соглашение о неконкуренции, которое я отказался подписать. В течение следующих пятнадцати лет меня ещё несколько раз попросят подписать такие бумаги, всегда перед приёмом на работу. Я всегда отказывался, и до недавнего времени это никогда не становилось препятствием для приёма на должность.

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

    В 2017 году Иллинойс принял закон, запрещающий такие соглашения для низкооплачиваемых работников, обычно со ставкой ниже $13 в час. Даже в штатах, где подобные контракты не запретили, их часто признают не имеющими законной силы. С чисто этической точки зрения они ограничивают одну из самых основных предпосылок капитализма: свободу выбора, на кого работать. Это соглашение фактически ставит работника в положение должника по отношению к нынешнему работодателю, хотя долг не финансовый.
    Читать дальше →
  • Реальность повторного использования

    • Перевод
    Говорят, что не нужно изобретать велосипед. На первый взгляд это кажется очевидным. Если вы потратили время на разработку, то зачем делать это снова, можно ведь повторно использовать старое решение? Казалось бы, со всех сторон хороший вариант. Но не всё так просто. Как старый «седой» программист, я видел, как организации снова и снова становятся жертвами этого заблуждения, вкладываясь в предварительный дизайн и разработку, но никогда не достигая обещанного массивного ROI благодаря повторному использованию. На самом деле я считаю, что наша чрезмерно оптимистичная оценка пользы и простоты повторного использования — одна из самых распространённых и опасных ловушек в разработке ПО.

    Я считаю корнем проблемы то, что Даниел Канеман сформулировал как правило «Что видишь, то и есть». Оно в двух словах объясняет жёсткие ограничения человека на быстрое принятие решений, используя только имеющиеся данные и некоторые базовые эвристики. Замедление мышления требует времени и дисциплины — так что вместо этого мы пытаемся заменить сложные проблемы, которые не полностью понимаем, простыми.
    Читать дальше →
  • Адский проект

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

    Масштаб


    • Разработка программного обеспечения для государственного агентства.
    • Сложность низкая, с несколькими вывертами.

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

    7 лет спустя проект ещё не оформился. Набегают штрафы по несколько тысяч евро в сутки. Руководство решает сократить расходы и производит увольнения опытных сотрудников, нанимая людей с небольшим или нулевым опытом работы.

    10 лет спустя, учитывая катастрофическое состояние проекта, менеджмент среднего звена решает нанять некоторых людей с опытом разработки, чтобы вернуться в график. Средняя текучка среди новичков: три месяца. Это минимальный срок, чтобы иметь право уволиться во Франции.
    Читать дальше →
  • Слухи об отмене теоремы Котельникова сильно преувеличены

    • Перевод

    tl;dr:


    Учёные из Колумбийского университета во главе с Кеном Шепардом и Рафой Юсте заявили, что обошли столетнюю теорему отсчётов (теорема Найквиста — Шеннона, теорема дискретизации, в русскоязычной литературе — теорема Котельникова): 1, 2. Теперь фильтры защиты от наложения стали необязательными, ведь шум от наложения спектров можно восстановить после дискретизации. Звучит безумно? Да. Я предлагаю $1000 первому, кто докажет, что это не безумие. Чтобы получить награду, обязательно прочтите до конца.

    «Фильтруй перед дискретизацией!»


    Эта мантра насмерть вбита в головы поколений студентов-инженеров. Здесь под «дискретизацией» подразумевается преобразование непрерывной функции времени в серию дискретных значений. Такой процесс происходит везде, где компьютер оцифровывает сигнал из реального аналогового мира. «Фильтровать» — значит удалять из сигнала высокочастотные составляющие. Поскольку этот процесс происходит в аналоговом мире, то требует реального аналогового оборудования: цепей из резисторов, конденсаторов и усилителей. Создание такой цепи может стать утомительным и трудоёмким процессом, например, если на электронных микросхемах не хватает места. Научная группа Шепарда рассмотрела это ограничение в контексте устройства для записи сигналов от нервных клеток.

    Теперь авторы заявляют, что изобрели «парадигму сбора данных, которая не требует фильтров для защиты от наложения для каждого канала, тем самым преодолевая ограничения масштабирования существующих систем». По сути они говорят, что вместо аппаратных цепей можно использовать программное обеспечение, которое работает на цифровой стороне уже после дискретизации. «Ещё одним преимуществом такого подхода к сбору данных является то, что все шаги обработки сигнала (разделение каналов и удаление) реализованы в цифровом виде», сказано в научной работе.
    Читать дальше →