Как стать автором
Обновить
1343
Карма
270
Рейтинг

Переводчик-фрилансер

Я два года выпускаю крошечные проекты

Разработка веб-сайтов *Управление проектами *Монетизация веб-сервисов *
Перевод

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

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

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

В этом посте мне хочется рассказать о запущенных проектах и поделиться тем, чему научился в процессе создания этих крошечных Интернет-проектов.
Читать дальше →
Всего голосов 98: ↑98 и ↓0 +98
Просмотры 29K
Комментарии 93

Почему я больше не рекомендую Julia

Программирование *Визуализация данных Julia *
Перевод

Много лет я пользовался языком программирования Julia для преобразования, очистки, анализа и визуализации данных, расчёта статистики и выполнения симуляций.

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

Какое-то время назад я перестал пользоваться Julia, но иногда мне задают о нём вопросы. Когда люди спрашивают меня, я отвечаю, что больше не рекомендую его. Мне подумалось, что стоит написать, почему.
Читать дальше →
Всего голосов 38: ↑37 и ↓1 +36
Просмотры 13K
Комментарии 30

Беспроводные технологии - это ловушка

Сетевые технологии *Беспроводные технологии *Компьютерное железо
Перевод

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

Например, большинство людей при торможении видеозвонков винят в этом провайдера Интернета. И это понятно, ведь большинство провайдеров — это олигополисты с дикими ценами, почти неработающим ПО и ужасной техподдержкой. Однако каждый раз, когда я помогал кому-то разобраться в источнике его проблем со связью, виновником оказывался его WiFi. И часто проще всего было решить проблему, проложив кабель.
Читать дальше →
Всего голосов 96: ↑94 и ↓2 +92
Просмотры 40K
Комментарии 165

Видеоускоритель Apple и невозможный баг

Работа с 3D-графикой *Отладка *Реверс-инжиниринг *Видеокарты Процессоры
Перевод
В конце 2020 года компания Apple выпустила M1 — первого представителя собственной архитектуры GPU под названием AGX, по слухам, созданной на основе серии Imagination PowerVR. С тех пор мы занимались реверс-инжинирингом AGX и созданием опенсорсных графических драйверов. В январе прошлого года я отрендерила треугольник при помощи своего собственного кода, но с тех пор нас продолжал преследовать ужасный баг:

Драйвер не справлялся с рендерингом больших количеств геометрии.

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


Частично отрендеренный по Фонгу кролик

Сложно было определить, какой объём мы можем рендерить без сбоев. Это зависело не только от сложности геометрии. Одна и та же геометрия могла рендериться с простыми шейдерами, но давать сбой со сложными.
Читать дальше →
Всего голосов 52: ↑52 и ↓0 +52
Просмотры 9.6K
Комментарии 14

Почему я ушла из команды Google WebAssembly

Управление разработкой *Управление проектами *Карьера в IT-индустрии WebAssembly *
Перевод

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

На момент присоединения к команде V8 я уже несколько лет занималась поддержкой транспилятора, преобразующего приложения .NET в эффективный JavaScript. Проект начался в одно время с Emscripten — приложением, превратившимся в стандарт и ставшим источником вдохновения для создания WebAssembly. В то время мне удалось поработать с создателем asm.js Алоном Закаем и я многому у него научилась. Благодаря этому опыту я стала подходящим кандидатом для команды WebAssembly.
Читать дальше →
Всего голосов 27: ↑24 и ↓3 +21
Просмотры 12K
Комментарии 10

Рекомендации по созданию RSS-фидов

HTML *Usability *Поисковая оптимизация
Перевод

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

Форматы


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

Вам нужно использовать RSS 2 или Atom. Эти форматы имеют очень широкую поддержку. Среди других популярных форматов более старые стандарты RSS и JSON Feed или Microformats h-feed. Я буду избегать использовать их или менее популярные форматы, потому что их поддержка не так широка.
Читать дальше →
Всего голосов 23: ↑23 и ↓0 +23
Просмотры 1.7K
Комментарии 0

Сколько цветов может выдержать Windows Terminal?

Клиентская оптимизация *Обработка изображений *Разработка под Windows *
Перевод
Группа пользователей хотела реализовать простую видеоигру в терминале, но оказалось, что её производительность в Windows Terminal совершенно не подходит для такой задачи. Проблему с производительностью можно воспроизвести, многократно отрисовывая «радугу» и замеряя количество кадров в секунду (FPS). Показанная на рисунке радуга, состоящая из 20 цветов, на моём Surface Book с Intel i7-6700HQ отрисовывается с частотой 30 FPS. Однако если отрисовывать ту же радугу из 21 или более цветов, то частота упадёт ниже 10 FPS. Такое падение стабильно и ситуация не ухудшается даже при тысячах разных цветов.

Читать дальше →
Всего голосов 36: ↑35 и ↓1 +34
Просмотры 11K
Комментарии 7

Чтобы найти хороших разработчиков, заставьте их читать чужой код

Программирование *Управление персоналом *Карьера в IT-индустрии
Перевод
При найме разработчиков можно смотреть на различные навыки, но за годы работы я выяснил, что самое важное — простая способность кодить, и этот навык сильно опережает по важности все остальные. Я могу быстро обучить человека, чтобы он получил знания в определённой области, но никогда не видел, чтобы простая способность кодить исходила из чего-то иного, кроме как из личного стремления к упорной и глубокой практике. Благодаря этому я выяснил, что одни способы лучше подходят для выявления талантов, чем другие.
Читать дальше →
Всего голосов 96: ↑96 и ↓0 +96
Просмотры 34K
Комментарии 65

Портирование движка Zelda Classic в веб

Разработка игр *Игры и игровые консоли
Перевод

Скриншот пользователя Mitchfork, победивший в соревнованиях 2021 Screenshot of the Year

Я портировал Zelda Classic (игровой движок, основанный на первой части Zelda) в веб. В него можно поиграть здесь, хватайте геймпад, если он у вас есть!

Это приложение PWA, так что можно его даже установить.
Читать дальше →
Всего голосов 11: ↑11 и ↓0 +11
Просмотры 3.2K
Комментарии 1

Как мы теряли игроков из-за того, что они платили за игру

Разработка игр *Отладка *C# *Unity *
Перевод
image

Представьте, каково это — найти серьёзный баг в продакшене сразу после выпуска игры. Представьте, что этот баг вредит только платным пользователям. Представьте, что игра зависает сразу после того, как игроки завершают внутриигровую покупку. Представьте, что когда игрок перезапускает игру, она зависает при запуске. Представьте, что игроку так и не удаётся запустить игру и приходится её удалять. Представьте, что ваше приложение в этот момент находится в рекомендованных Apple Store. Эта статья — рассказ о таком баге, худшем из всех, что я видел за тридцать лет программирования. Это история о том, как мы его выявили и совместно с разработчиками Unity работали над его устранением.
Читать дальше →
Всего голосов 65: ↑61 и ↓4 +57
Просмотры 36K
Комментарии 11

Типографика фильма «Бегущий по лезвию»

Графический дизайн *Дизайн Научная фантастика
Перевод

После подробного исследования фильма «Чужой» настало время взглянуть на типографику и дизайн ещё одного классического научно-фантастического фильма Ридли Скотта«Бегущий по лезвию» (Blade Runner). Эта лента, снятая по мотивам романа Филипа К. Дика «Мечтают ли андроиды об электроовцах?», упрочила репутацию Скотта как автора красивой, умной научной фантастики в жанре tech noir.

(Должен заранее сообщить, что в статье есть множество спойлеров о фильме. Если вы не хотите знать, когда в «Бегущем по лезвию» единственный раз мелькает шрифт Eurostile Bold Extended, то отложите чтение.)
Читать дальше →
Всего голосов 73: ↑73 и ↓0 +73
Просмотры 18K
Комментарии 5

Почему свет и темнота на фотографии — это сложно

Обработка изображений *Фототехника
Перевод
HDR imagery on Flickr

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

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

Эта статья, наряду с моим предыдущим постом о перспективе, является частью более обширной темы зависимости картин и фотографий от художественных и технических решений. Фотографии — это не объективная фиксация реальности, как и картины — не точные отображения воспринимаемого художником. Подробнее я расскажу об этом в своём следующем посте.
Читать дальше →
Всего голосов 30: ↑30 и ↓0 +30
Просмотры 13K
Комментарии 9

Меняем std::sort для Google

C++ *Компиляторы *
Перевод
image

Мы меняем std::sort в библиотеке libcxx проекта LLVM. В этой статье мы подробно расскажем о том, как мы пришли к этому решению и какими будут возможные последствия, о багах, с которыми вы можете столкнуться в примерах из open source. Мы покажем несколько бенчмарков, объясним, почему вообще это сделали и чего это нам стоило, на примерах закона Хайрама и обучения с подкреплением. Все изменения выложены в open source, поэтому я свободно могу о них рассказывать.

Эта статья разделена на три части. Первая — это подробная история недавнего прошлого сортировки в стандартных библиотеках C++. Вторая расскажет об усилиях, необходимых для перехода от одного алгоритма сортировки к другому с различными багами. В третьей мы объясним выбранную нами реализацию и все внесённые нами оптимизации.
Читать дальше →
Всего голосов 44: ↑44 и ↓0 +44
Просмотры 7.7K
Комментарии 6

Как ИИ помогает улучшать чипы: отчёт Nvidia

Производство и разработка электроники *Научно-популярное Искусственный интеллект Видеокарты Процессоры
Перевод

Для весенней конференции GTC стал доброй традицией рассказ об исследованиях и разработках Nvidia главного научного сотрудника и старшего вице-президента по исследованиям Билла Дэлли. Он поделился тем, как устроен отдел исследований и разработок Nvidia, а также немного рассказал о текущих приоритетах. В этом году Дэлли в основном занимался AI-инструментами, которые Nvidia и разрабатывает, и использует для совершенствования собственных продуктов. Например, Nvidia начала использовать ИИ для эффективного улучшения и совершенствования процесса проектирования GPU.
Читать дальше →
Всего голосов 10: ↑10 и ↓0 +10
Просмотры 3.1K
Комментарии 2

Миллион одновременных соединений

Серверная оптимизация *Сетевые технологии *Серверное администрирование *
Перевод

Я слышал ошибочные утверждения о том, что сервер может принять только 65 тысяч соединений или что сервер всегда использует по одному порту на каждое принятое подключение. Вот как они примерно выглядят:

Адрес TCP/IP поддерживает только 65000 подключений, поэтому придётся назначить этому серверу примерно 30000 IP-адресов.

Существует 65535 номеров TCP-портов, значит ли это, что к TCP-серверу может подключиться не более 65535 клиентов? Можно решить, что это накладывает строгое ограничение на количество клиентов, которые может поддерживать один компьютер/приложение.

Если есть ограничение на количество портов, которые может иметь одна машина, а сокет можно привязать только к неиспользуемому номеру порта, как с этим справляются серверы, имеющие чрезвычайно большое количество запросов (больше, чем максимальное количество портов)? Эта проблема решается распределением системы, то есть кучей серверов на множестве машин?

Поэтому я написал эту статью, чтобы развеять данный миф с трёх сторон:

  1. Мессенджер WhatsApp и веб-фреймворк Phoenix, построенный на основе Elixir, уже продемонстрировали миллионы подключений, прослушивающих один порт.
  2. Теоретические возможности на основе протокола TCP/IP.
  3. Простой эксперимент с Java, который может провести на своей машине любой, если его всё ещё не убедили мои слова.

Если вы не хотите изучать подробности, то перейдите в раздел «Итоги» в конце статьи.
Читать дальше →
Всего голосов 103: ↑101 и ↓2 +99
Просмотры 40K
Комментарии 26

Вымышленные языки как способ построения мира игры

Разработка игр *Дизайн игр *
Перевод
image

Каждый серьёзный разработчик игр знает, что построение мира — неотъемлемая часть процесса, создающая геймплей с истинным погружением. Для его реализации есть множество разных техник: от изложения предыстория игрока стеной текста, до продуманных трюков с дизайном уровней, называемых environmental storytelling («повествование через окружение»). Второй вариант часто предпочтительнее. Распутывание лора мира по нескольким намёкам, разбросанным по уровням, де факто является игрой внутри игры. И хотя большинство игроков может их игнорировать, прочие смогут получить большое удовольствие от разгадывания этой мета-головоломки.

Игры наподобие Dark Souls известны своим богатым и довольно загадочным лором, который можно воссоздать благодаря продуманному environmental storytelling и различным подсказкам, скрытым в описаниях предметов. Некоторые другие игры заходят ещё дальше и создают для своих выдуманных цивилизаций совершенно новые языки.
Читать дальше →
Всего голосов 27: ↑27 и ↓0 +27
Просмотры 5.9K
Комментарии 7

Атрибуты HTML, которыми вы никогда не пользовались

CSS *HTML *
Перевод

В январе этого года Мэдисон Канна спросила у своих подписчиков в Twitter:

Какие языки/технологии вам бы хотелось изучить или узнать глубже в этом году?

Мой выбор: typescript, next.js, react, graphql, solidity, node — Мэдисон Канна (@Madisonkanna) January 3, 2022

Мой ответ был очень простым: HTML. И я ни в коей мере не был саркастичным или насмешливым. Разумеется, я неплохо знаю, какие теги использовать в каких случаях и как обеспечивать семантику и доступность моего HTML.

Однако существует целая куча малоиспользуемых атрибутов, о которых я забыл, и, вероятно, целая куча атрибутов, о существовании которых я и не знал. Этот пост стал результатом моих исследований, и я надеюсь, что он окажется для вас полезным при создании страниц на HTML.
Читать дальше →
Всего голосов 75: ↑75 и ↓0 +75
Просмотры 23K
Комментарии 9

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

Криптография *Математика *Научно-популярное
Перевод

В 1868 году математик Чарльз Доджсон (более известный как Льюис Кэрролл) заявил, что схема шифрования под названием «шифр Виженера» является «невзламываемой». У него не было доказательств, однако имелись убедительные подтверждения этой веры: математики безуспешно пытались его взломать более трёх сотен лет.

Была лишь одна небольшая проблема: на самом деле, пятью годами ранее её взломал немецкий пехотный офицер Фридрих Касиски, описав решение в книге, привлёкшей на тот момент мало внимания.

Криптографы играли в эти «кошки-мышки», создавая и взламывая шифры, ещё с тех пор, как люди впервые начали передавать секретную информацию. «Тысячи лет люди пытались найти ответ на вопрос: сможем ли мы разорвать этот круг?», — рассказывает криптограф Рафаэль Пасс из Cornell Tech и Корнеллского университета.

Пять десятилетий назад криптографы сделали широкий шаг в этом направлении. Они продемонстрировали, что можно создавать доказуемо защищённые шифры, если есть доступ к единственному ингредиенту — односторонней функции, которую легко вычислить, но сложно обратить. С тех пор исследователи придумали широкий спектр вариантов односторонних функций, от одиночных операций, основанных на умножении, до более сложных геометрических или логарифмических процедур.
Читать дальше →
Всего голосов 68: ↑68 и ↓0 +68
Просмотры 24K
Комментарии 46

Полмегабайта пустоты в каждом файле Apple Music

Разработка под iOS *Хранение данных *Звук
Перевод

Вы когда-нибудь докупали расширенный объём хранилища для iPod, iPhone или Mac, чтобы иметь больше места для своей цифровой коллекции музыки Apple Music (iTunes)? Возможно, вы заполняли его гигабайтами пустого пространства.

Музыкальные файлы, которые вы покупаете в Apple Music Store (AMS; ранее назывался iTunes Music Store) содержат приблизительно 6% цифрового аналога пустоты. Я говорю не о тишине, а о сплошных блоках пустого пространства, находящихся внутри файлов. Они нужны только для того, чтобы заполнять файлы, делая их на 0,5 МБ больше. Так зачем же Apple делает музыкальные файлы излишне большими? И как вернуть впустую занимаемое пространство?
Читать дальше →
Всего голосов 82: ↑82 и ↓0 +82
Просмотры 50K
Комментарии 49

Почему мьютексы в Rust реализованы именно так

Программирование *Параллельное программирование *Rust *
Перевод

Я часто слышу от пробующих работать с Rust системных программистов жалобы на мьютексы и особенно на Rust Mutex API. Жалобы обычно выглядят так:

  • Они не хотят, чтобы мьютекс содержал данные, только блокировку.
  • Они не хотят управлять «защитным» значением, разблокирующим мьютекс при сбросе, в частности, они просто хотят вызывать операцию unlock, потому что им кажется, что это более явное действие.

Такие изменения превратили бы Rust mutex API в эквивалент C/Posix mutex API. Однажды я даже видел, как один разработчик пытался использовать Mutex<()> и разные хитрости, чтобы его имитировать.

Однако у такого стремления есть проблема: эти два аспекта Mutex неразрывно связаны друг с другом, а также с гарантиями безопасности Rust в целом — изменение одного из них или обоих откроет возможности для возникновения незаметных багов и повреждений из-за гонок данных.

Использование API мьютексов в стиле C, состоящего из набора косвенно защищаемых данных и из функций lock и unlock было бы опрометчивым в Rust, потому что это позволяет безопасному коду легко вносить ошибки, нарушающие безопасность памяти и вызывающие гонки данных.

Прозвучит спорно, но я утверждаю, что это справедливо и для C. Просто в Rust это более очевидно, поскольку Rust тщательно разделяет понятия «безопасного» кода, в который невозможно внести подобные ошибки, и «небезопасного» кода, в который можно вносить такие ошибки. В C такого разделения нет, и в результате этого использующий мьютексы код на C может тривиальным образом создавать серьёзные баги, которые потенциально можно подвергать эксплойтам.

В этом посте я разберу типичный C mutex API, сравню его с типичным Rust mutex API, и расскажу о том, что произойдёт, если мы изменим Rust API так, чтобы он напоминал C.
Читать дальше →
Всего голосов 60: ↑60 и ↓0 +60
Просмотры 9.7K
Комментарии 26

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность