All streams
Search
Write a publication
Pull to refresh
1940
295.2

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

Send message

Я до последнего буду защищать сильную статическую типизацию

Level of difficultyMedium
Reading time8 min
Views25K

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

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

Читать далее

Вычитание функционально полное

Reading time5 min
Views4.8K

Если конкретнее, то функционально полно вычитание с плавающей точкой по IEEE-754 . Это значит, что можно создать любую двоичную схему на одном только вычитании с плавающей запятой.

Чтобы понять, как это сделать, нужно начать снизу. Цитата из раздела 6.3 стандарта IEEE 754-2019:

Читать далее

Когда начинает работать закон больших чисел

Level of difficultyEasy
Reading time6 min
Views19K

Большие числа != большим числам.

Число 100 большое? Зависит от ситуации. Сравниваем ли мы его с 0,001, или с 100000? Как и многое в жизни, понятие «большой» относительно.

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

Читать далее

Как у меня украли авторство патча

Level of difficultyMedium
Reading time5 min
Views27K

Примерно полтора года назад я попросил у своей бывшей компании разрешения поработать над проблемой, влиявшей на возможности отладки нашего проекта: gdbserver не мог отлаживать многопоточные приложения, работающие на архитектуре PowerPC32. Подключение к gdbserver было поломано, и он больше не мог контролировать сессию отладки. Разные люди исследовали эту проблему до меня, и у меня уже был неплохой фундамент, но мы всё равно не знали точно, в каком конкретно программном компоненте таится проблема: это мог быть тулчейн, gdbserver, ядро Linux или собственные патчи, которые мы устанавливали поверх дерева ядра. От нахождения первопричины мы находились довольно далеко.

Читать далее

Невидимая проблема текстовых редакторов на смартфонах

Level of difficultyEasy
Reading time15 min
Views25K

Когда я рассказываю о своих исследованиях редактирования текста на мобильных в Google, то обычно сталкиваюсь с непониманием и немного враждебным «Разве на телефонах нельзя редактировать тексты? В чём проблема?»

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

Читать далее

Почему распознавание краёв не объясняет линейного рисунка

Level of difficultyEasy
Reading time10 min
Views5.3K

Почему люди понимают линейные рисунки? Почему мы мгновенно узнаём объекты на линейных рисунках, хотя они не относятся к явлениям естественного мира? Многие исследования показывают, что люди, никогда ранее не видевшие такие изображения, могут их понимать; нам не нужно этому учиться.

Классический ответ на этот вопрос — та гипотеза, которую я буду называть Lines-As-Edges. Она гласит, что рисунки симулируют естественные образы, потому что признаки линий активируют рецепторы краёв в зрительной системе человека. Насколько я могу судить, такое убеждение широко распространено в среде исследователей зрения; многие люди вспоминают эту гипотезу, когда я говорю о восприятии рисунков, а также многие комментаторы под недавним постом в Twitter. Обобщением этой идеи становится то, что линии соответствуют некому внутреннему представлению, заставляющему нейроны реагировать на контуры объектов. Я называю эту гипотезу Line-As-Internal-Representation и расскажу о ней в этой статье.

Читать далее

Итак, вы решили перейти с Unity на Unreal Engine

Level of difficultyEasy
Reading time9 min
Views28K

Наверно, произошло что-то плохое, и теперь вы читаете эту статью. Сочувствую! Давайте начнём по порядку.

Меня зовут Джо Уинтергрин, я генералист Unreal Engine. Можете взглянуть на все мои ресурсы. В статье я приведу полезную информацию для новичков в Unreal, имевших опыт работы с Unity.

С чего начать?

• Прочитайте документацию по Gameplay Framework. Всю целиком! У Unreal есть Gameplay Framework. Прочитайте документацию и освойтесь в ней. Это правильное решение при разработке любого типа игры. Не пропускайте её. Держите её под рукой, чтобы перечитывать.

• Влейтесь в сообщество. Это учетверит вашу скорость обучения. Есть Discord для бывших Unity-разработчиков Алекса Роуза и есть мой Discord.

• Почитайте Epic Online Learning Library. Вот она. Делайте упор на статьи, написанные Epic Games.

• Скачайте последнюю версию Unreal Engine из Epic Games Launcher. На данный момент это 5.3. В общем случае всегда стоит начинать проект на самой новой версии. Кроме того, нет никаких причин больше пользоваться UE4 — UE5 лучше и имеет все возможности UE4.

• Изучите документацию «Unreal Engine for Unity Developers» компании Epic. Это хороший способ начать. Вот она.

• Прочитайте статью целиком. Я знаю, здесь много текста, но не ничего не пропускайте! Всё это очень важная и точная информация! В Интернете много некачественных сведений об Unreal, но не здесь. Здесь всё правильно.

Читать далее

Пишем компилятор C в 500 строках Python

Level of difficultyMedium
Reading time20 min
Views14K

Несколько месяцев назад, закончив пост об SDF-пончике, я поставил перед собой задачу написать компилятор C в 500 строках Python1. Насколько сложна эта задача? Оказалось, что довольно сложна, даже после отказа от достаточно большого количества возможностей. Но в то же время она была довольно интересной, а результат оказался на удивление функциональным и вполне простым для понимания!

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

Почему мой любимый API — это файл zip на сайте Европейского центрального банка

Level of difficultyEasy
Reading time7 min
Views31K

Когда был максимальный курс доллара к евро?

Вот небольшая программа, вычисляющая это:

curl -s https://www.ecb.europa.eu/stats/eurofxref/eurofxref-hist.zip \ | gunzip \ | sqlite3 -csv ':memory:' '.import /dev/stdin stdin' \ "select Date from stdin order by USD asc limit 1;"

Результат: 2000-10-26. (Можете попробовать запустить её самостоятельно.)

Читать далее

Линейный код более читаем

Level of difficultyMedium
Reading time3 min
Views20K

Бунтарём себя можно считать только тогда, когда люди на самом деле защищают противоположную вашей позицию. Я не согласен с одной из best practices, недавно представленной в Google Testing Blog . Обычно это очень хороший ресурс, ведь этот пост не случайно попал в мою читалку новостей!

Авторы представили две версии функции и спросили, какая из них более читаема.

Читать далее

Почему портятся приложения: тирания маржинального пользователя

Level of difficultyEasy
Reading time5 min
Views18K

Недавно мы с моим другом оплакивали странную смерть OKCupid. Семь лет назад, когда я впервые попробовал онлайн-знакомства, он работал следующим образом: нужно было написать длинный рассказ о себе и о том, что ты ищешь. Ты отвечал на сотни вопросов о своей личности, мечтах, о том, что хочешь увидеть в партнёре, о том, что для тебя недопустимо. Затем тебе показывали самых совместимых с тобой пользователей с «показателем соответствия» от 0 до 100%. Эти показатели работали пугающе хорошо. Почти каждый раз, когда я читал профиль пользователя с показателем соответствия 95% или выше, я как будто немного влюблялся. Каждое свидание было интересным; «химия» возникала не всегда, но мне казалось, что мы, по крайней мере, можем стать отличными друзьями.

Сегодня я достаточно скептически отношусь к количественным оценкам романтики и к идее о том, что схожесть обеспечивает хорошие отношения. Да и в то время я был довольно скептичен. Чего я не ожидал, так это того, что OKCupid образца 2016 года окажется лучшим, на что будут способны сервисы онлайн-знакомств. Что инструменты, при помощи которых люди будут пытаться искать самые важные отношения в своей жизни, будут становиться всё хуже, и хуже, и хуже. OKCupid, как и другие проекты, купленные Match.com, сегодня стал просто ещё одним клоном Tinder — видишь лицо, свайпаешь влево, видишь лицо, свайпаешь вправо. Цифровой ночной клуб. А я не хочу искать себе жену в ночном клубе.

И это касается не только приложений для знакомств. Почти все популярные потребительские приложения двигаются в сторону минимального участия пользователя, лент с бесконечным скроллингом и мусорного контента. Даже самое драгоценное в Интернете, поиск в Google, настолько испортился, что его нельзя использовать для сложных запросов. Reddit и Craigslist остаются невероятно полезными и ценными именно потому, что их ПО замерло в своём развитии. Как старые викторианские дома в Сан-Франциско, они стоят, защищённые причудами судьбы от ветров капитала, напоминая нам о более гуманной эпохе.

Читать далее

Любой достаточно продвинутый деинсталлятор неотличим от зловреда

Level of difficultyMedium
Reading time6 min
Views4.2K

У нас возник резкий рост количества вылетов Explorer из-за того, что указатель команд оказывался в пустоте.

0:000> r eax=00000001 ebx=008bf8aa ecx=77231cf3 edx=00000000 esi=008bf680 edi=008bf8a8 eip=7077c100 esp=008bf664 ebp=008bf678 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 7077c100 ?? ???

Возможно, нам о чём-то скажет адрес возврата.

0:000> u poi esp 008bf6d4 test eax,eax 008bf6d6 je 008bf6b9 008bf6d8 xor edi,edi 008bf6da cmp dword ptr [esi+430h],edi

Странно, что мы исполняем код из какого-то места, не имеющего имени. Если приглядеться, то можно увидеть, что мы исполняем код из стекаesp — это  008bf664, то есть вызывающий проблемы код находится в стеке.

Кто исполняет код из стека?

Конечно, зловреды.

Давайте посмотрим, что пытается сделать это зловредное ПО.

Читать далее

Взлом предка Sims для Amiga

Level of difficultyEasy
Reading time9 min
Views2.2K

В этом посте я расскажу о том, как выполнил частичный реверс-инжиниринг файлов данных Little Computer People, чтобы включить опции конфигурации, недоступные в оригинальной игре. Я написал и выпустил инструмент, работающий с LCP для Amiga, который можно скачать в конце поста.

Little Computer что?

В 1985 году на самых популярных 8-битных домашних компьютерных системах (и Atari ST) была выпущена «игра» под названием «Little Computer People», а через два года появилась версия и для Amiga. Сюжет игры заключается в том, что внутри вашего компьютера живёт маленький человечек, и это ПО позволяет вам следить за его действиями и взаимодействовать с ним. Если вы незнакомы с LCP, в Википедии есть хорошая статья о ней, которую стоит прочитать.

Уилл Райт (дизайнер The Sims) сказал, что игра в LCP и общение с одним из создателей LCP (Ричем Голдом) помогли ему в разработке концепций The Sims, и одно это делает LCP важной вехой в истории ПО.

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

Читать далее

Самый плохой программист, которого я знаю

Level of difficultyEasy
Reading time3 min
Views66K

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

Несколько лет назад я написал в Twitter/X заметку о лучшем программисте, которого я знаю, её стоит переписать в виде поста в блоге. Мне кажется справедливым, чтобы я рассказал и о самом плохом. Его зовут Тим Маккиннон. Я хочу, чтобы мир знал, насколько он измеряемо непродуктивен.

Читать далее

Как популярность DOS/4GW помогла играм в Windows 95

Level of difficultyEasy
Reading time3 min
Views8.2K

В начале 1990-х самым популярным расширителем DOS был DOS/4GW. Во время разработки Windows 95 я очень много времени тратил на решение задачи совместимости с играми под MS-DOS, поэтому видел много баннеров расширителей DOS, и чаще всего это был DOS/4GW.

Вы можете задаться вопросом: «Как эти игры вообще запускались в Windows 95, если они поставлялись с расширителем DOS? Разве расширитель не пытался бы безуспешно перейти в защищённый режим, потому что Windows уже управляла защищённым режимом?»

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

Читать далее

Скачиваем кусок видео с YouTube с помощью ffmpeg

Reading time5 min
Views12K

Я выступил с докладом на WordCamp US 2023 и захотел скачать видео с ним. Я всегда стараюсь хранить собственные копии таких видео, потому что некоторые конференции в прошлом со временем закрывали к ним доступ.

Моя презентация в прямом эфире транслировалась через YouTube, однако получившееся видео длится 9,5 часа!

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

Читать далее

Добавьте ???="????" к полю ввода

Level of difficultyEasy
Reading time2 min
Views9.9K

Разработчикам, живущим в пузыре под названием «США» трудно воспринимать остальные страны. Но мне очень часто напоминают, что снаружи тоже есть мир. Это введение может показаться похожим на совершенно необязательную мотивационную речь перед изложением чего-то крайне простого, но одна маленькая деталь может стать разницей между тем, что вашим приложением пользуются люди со всего света, или только люди вроде вас. Разницу между этими мирами я постоянно безуспешно пытаюсь осознать; к счастью, те, кто занимается разработкой качественных веб-браузеров, делают за нас всё самое сложное.

С самого начала разработки Standard Notes я получал просьбы о добавлении поддержки языков с написанием справа налево (RTL; это такие языки, как иврит, арабский и урду). И каждый раз, когда я начинал изучать необходимые для этого действия, это казалось нетривиальной задачей.

Читать далее

Factorio на движке Unreal Engine 5

Level of difficultyEasy
Reading time5 min
Views67K

Сегодня мы поговорим об интересном проекте FUE5. Это Factorio, но в 3D! Иногда мечты становятся явью. Это не совсем игра, а, скорее, потрясающее переосмысление её визуальной составляющей. В этой написанной Hurricane статье будет много технических подробностей, так что давайте приступим.

Читать далее

Взлом платных функций Discord Nitro

Level of difficultyEasy
Reading time5 min
Views47K

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

Как это возможно?

Читать далее

Короткий срок сессии не повышает безопасность

Level of difficultyEasy
Reading time4 min
Views4.4K

После логина в веб-приложение сессия не остаётся валидной навечно. Обычно срок сессии истекает спустя заданное время после логина или после того, как пользователь ничего не делал в течение какого-то времени. Какими должны быть эти сроки?

Введение

В некоторых веб-приложениях сессии имеют ограниченный срок. Спустя какое-то время пользователь разлогинивается и должен заново пройти аутентификацию. Для безопасности рекомендуют использовать достаточно быстрые таймауты сессий, например, выход через пятнадцать минут неактивности. Однако большинство мобильных приложений и больших веб-приложений наподобие Gmail или GitHub не придерживаются этой рекомендации. Похоже, что после логина сессия продолжается бесконечно и аутентификацию проходить больше не нужно. Такие приложения небезопасны? Умнее ли Google и Microsoft, чем NIST и OWASP?

Читать далее

Information

Rating
Does not participate
Location
Россия
Registered
Activity