Как стать автором
Обновить
18
0.1

Пользователь

Отправить сообщение

Windows 95 на двух флоппиках

Время на прочтение3 мин
Количество просмотров16K
В этом году мы отпраздновали четверть века с Windows 95. Её минимальная установка занимала 30 МБ; народные умельцы ужимали её до 5 МБ после удаления всех «лишних» файлов и сжатия UPX-ом оставшихся. А как насчёт двух флоппиков по 1.44 МБ, вместе с загрузчиком?



Общий подход я уже описывал в комментариях: создаётся RAMDRIVE, и на него разворачивается двухтомный SFX-архив. Но есть много тонкостей:

  1. Как видно на видео выше, распакованная папка Windows у меня занимает 6.2 МБ. Я взял за основу список файлов Micro95, и дополнительно удалил файлы, оказавшиеся необязательными — например, шрифты и драйвер dosnet.vxd. Кроме того, vmm32.vxd я распаковал, и удалил бывшие внутри него необязательные драйвера.
Читать дальше →
Всего голосов 58: ↑58 и ↓0+58
Комментарии48

Слабые модели памяти: буферизации записи на x86

Время на прочтение6 мин
Количество просмотров8.9K

Об авторе


Антон Подкопаев является постдоком в MPI-SWS, руководителем группы слабых моделей памяти в лаборатории языковых инструментов JetBrains Research и преподавателем Computer Science Center.

Еще в 1979 году Лесли Лампорт в статье «How to make a multiprocessor computer that correctly executes multiprocess programs» ввел, как следует из названия, идеализированную семантику многопоточности — модель последовательной консистентности (sequential consistency, SC). Согласно данной модели, любой результат исполнения многопоточной программы может быть получен как последовательное исполнение некоторого чередования инструкций потоков этой программы. (Предполагается, что чередование сохраняет порядок между инструкциями, относящимися к одному потоку.)

Рассмотрим следующую программу SB:



В этой программе два потока, в каждом из которых первая инструкция — инструкция записи в разделяемую локацию (x или y), а вторая — инструкция чтения из другой разделяемой локации. Для этой программы существует шесть чередований инструкций потоков:


Читать дальше →
Всего голосов 38: ↑38 и ↓0+38
Комментарии21

Откуда в Windows взялись функции BEAR, BUNNY и PIGLET?

Время на прочтение2 мин
Количество просмотров16K
Если покопаться в системных файлах Windows 95, там можно было обнаружить недокументированные функции с именами наподобие BEAR35, BUNNY73 и PIGLET12. Откуда взялись эти дурацкие имена?

У них занятная история.
Всего голосов 37: ↑37 и ↓0+37
Комментарии10

TypeScript. Продвинутые типы

Время на прочтение16 мин
Количество просмотров56K
image

Привет, Хаброжители! Мы сдали в типографию очередную новинку
"Профессиональный TypeScript. Разработка масштабируемых JavaScript-приложений". В этой книге программисты, которые уже знакомы с JavaScript на среднем уровне, узнают, как освоить TypeScript. Вы поймете, как TypeScript поможет масштабировать код в 10 раз лучше и снова сделать программирование увлекательным.

Вашему вниманию представлен отрывок одной главы из книги «Продвинутые типы».
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии1

Язык J становится ближе к людям

Время на прочтение2 мин
Количество просмотров2.6K
Отличительная черта языка J — это возможность написания итеративных алгоритмов без явного использования циклов и рекурсии. К примеру, сумма всех элементов массива решается так "+/", а среднее всех элементов массива так "+/%#".

Различные обзоры J уже не раз публиковались на Хабре. Например в этой статье и в этой.

J — язык с 30-летней историей и он все еще развивается и совершенствуется. Однако оставалось в J одно «белое пятно» — итеративные алгоритмы с остановкой по условию. Для этого предлагалось использовать конструкцию while. в паре c break. и continue.

Использование while. в J выглядит избыточным и неуклюжим. А, кроме того, серьезно проседает по скорости в сравнении с тацитными формами.

И вот в 9й версии языка добавили новый союз F (названый так по первой букве слова «fold»).


Читать дальше →
Всего голосов 3: ↑3 и ↓0+3
Комментарии4

Разработка инструмента командной строки: сравнение Go и Rust

Время на прочтение12 мин
Количество просмотров19K
Эта статья посвящена разбору моего эксперимента по написанию небольшого инструмента командной строки с использованием двух языков, в программировании на которых у меня не особенно много опыта. Речь идёт о Go и Rust.



Если вам не терпится увидеть код и самостоятельно сравнить один вариант моей программы с другим — то вот репозиторий Go-варианта проекта, а вот — репозиторий его варианта, написанного на Rust.
Читать дальше →
Всего голосов 35: ↑33 и ↓2+44
Комментарии166

Опыт конвертирования кода C# в код Rust

Время на прочтение14 мин
Количество просмотров10K

Постановка задачи


Код на языке C# нужно перевести в код на Rust. Точнее, требуется такая процедура перевода (разработка продолжается на C#), чтобы в любой момент можно было получить работающий код на Rust. Эту задачу я решал для языков Java, Python, JavaScript и PHP, написав конвертер из C# в эти языки. Концепция такого конвертирования была изложена в статье UniSharping пару лет назад. Я разрабатывал этот конвертер, чтобы переводить код своего проекта SDK Pullenti (лингвистический анализ текста). И подумалось мне: а не замахнуться ли на Rust? Да, слышал разные отзывы, что язык необычный и пр., но попытка же не пытка… Тем более, что у одного из заказчиков группа программистов увлечённо пишет на нём.

Читать дальше →
Всего голосов 26: ↑19 и ↓7+20
Комментарии62

Распространённые заблуждения о временах жизни в Rust

Время на прочтение27 мин
Количество просмотров22K

(прим. переводчика: времена жизни (lifetimes) — это одна из самых запутанных вещей в Rust, которая часто вызывает затруднение у новичков, даже несмотря на официальную документацию. Разъяснения по отдельным аспектам времён жизни есть, но они все разбросаны по разным источникам и ответам на Stack Overflow. Автор статьи собрал в одном месте и разъяснил множество связанных с временами жизни вопросов, что и делает эту статью столь ценной (я и сам почерпнул новое для себя отсюда). Я решил перевести её, чтобы дать возможность прочитать её тем, кто не владеет английским в достаточной степени, чтобы свободно читать оригинал, а также для того, чтобы повысить известность этой статьи среди русскоязычного Rust-сообщества)


19 мая 2020 г. · 37 минут · #rust · # lifetimes

Читать дальше →
Всего голосов 40: ↑38 и ↓2+49
Комментарии5

Что же такого особенного в IAsyncEnumerable в .NET Core 3.0?

Время на прочтение5 мин
Количество просмотров40K
Перевод статьи подготовлен в преддверии старта курса «Разработчик C#».





Одной из наиболее важных функций .NET Core 3.0 и C# 8.0 стал новый IAsyncEnumerable<T> (он же асинхронный поток). Но что в нем такого особенного? Что же мы можем сделать теперь, что было невозможно раньше?

В этой статье мы рассмотрим, какие задачи IAsyncEnumerable<T> предназначен решать, как реализовать его в наших собственных приложениях и почему IAsyncEnumerable<T> заменит Task<IEnumerable<T>> во многих ситуациях.

Ознакомьтесь со всеми новыми функциями .NET Core 3
Читать дальше →
Всего голосов 16: ↑15 и ↓1+16
Комментарии0

Почему Array.isArray(Array.prototype) возвращает true?

Время на прочтение7 мин
Количество просмотров7.9K

Сегодня мы с вами разберемся в следующем: что за метод такой Array.isArray(), как он устроен под капотом, что изменилось с ним после выхода ES6, почему он возвращает для Array.prototype значение true и еще много связанных с этим методом тем.

Читать далее
Всего голосов 19: ↑18 и ↓1+26
Комментарии8

Решение суда: Google не нарушает авторское право Oracle на Java API

Время на прочтение1 мин
Количество просмотров5.4K
Итак, в прошлый раз судья постановил, что Google не нарушает патентов Oracle в своей операционной системе Android. Но не было понятно, что делать с авторским правом на 37 Java API и 9 строчками кода rangeCheck. Теперь же судья Уильям Хаскел Элсап постановил, что Google не нарушал авторских прав Oracle на API по причине отсутствия этих самых прав. Суд решил, что эти API не подлежат копирайту, поэтому отсутствует состав преступления.
Читать дальше →
Всего голосов 150: ↑144 и ↓6+138
Комментарии92

Как мы в Dropbox перешли с Nginx на Envoy

Время на прочтение26 мин
Количество просмотров47K

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


Читать дальше →
Всего голосов 76: ↑74 и ↓2+95
Комментарии69

Анализ merge request'ов в GitLab с помощью PVS-Studio для C#

Время на прочтение8 мин
Количество просмотров2.5K
image1.png

Любите GitLab и не любите ошибки? Хотите повысить качество исходного кода? Тогда вы попали по адресу. Сегодня мы расскажем, как настроить C# анализатор PVS-Studio для проверки merge request'ов. Всем единорожного настроения и приятного чтения.
Читать дальше →
Всего голосов 6: ↑6 и ↓0+6
Комментарии1

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

Время на прочтение14 мин
Количество просмотров57K

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


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

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

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

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

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

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

— Можете написать тестовый пример для этого алгоритма?
Читать дальше →
Всего голосов 60: ↑52 и ↓8+57
Комментарии124

Построение кривой дисконтирования. Ликбез для гика, ч. 5

Время на прочтение6 мин
Количество просмотров6.7K
Давайте научимся строить кривую дисконтирования. Скажу сразу: очень важно иметь актуальные рыночные данные. Если вы будете искать interest rate свопы на доллар, евро или какую-нибудь другую валюту, то в интернете не так много открытой информации. Большинство данных доступны либо через торговые терминалы, либо у специальных компаний — провайдеров рыночных данных. Я нашел на сайте одной крупной скандинавской банковской группы данные по датской, шведской и норвежской кронам, а также данные для евро и доллара.



Далее мы попробуем построить кривую дисконтирования для шведской кроны.
Читать дальше →
Всего голосов 10: ↑9 и ↓1+13
Комментарии0

Прощай, Google! 15 Альтернативных поисковиков, которые не шпионят, а сажают деревья и раздают воду

Время на прочтение5 мин
Количество просмотров246K


Аве Кодер!

В этой статье речь пойдет о крутых инди поисковиках, которые могут составить конкуренцию поисковым гигантам, а также удовлетворить вкусы как утонченного мусьё, так и идейного борца за личную жизнь.
Читать дальше →
Всего голосов 50: ↑42 и ↓8+46
Комментарии113

Великий раскол в import: проясняем неопределенность с импортом в Typescript

Время на прочтение5 мин
Количество просмотров11K
Перевод статьи подготовлен в преддверии старта курса «Разработчик React.js»




Я довольно долго работаю с typescript, и у меня было много проблем с тем, чтобы разобраться с его модулями и советующими настройками, и должен сказать, вокруг них и вправду много непонятного. Пространства имен, import * as React from 'react', esModuleInterop и т.д. Поэтому давайте разберемся из-за чего поднялась вся шумиха.

Я не буду говорить о пространствах имен как о модульной системе в typescript, поскольку идея оказалась не лучшей (особенно учитывая текущий вектор развития), и этим никто сейчас не пользуется.
Читать дальше →
Всего голосов 17: ↑17 и ↓0+17
Комментарии2

Windows Defender SmartScreen вредит независимым разработчикам

Время на прочтение4 мин
Количество просмотров30K
Допустим, вы независимый разработчик и выпустили своё приложение. Чтобы упростить установку, вы создаёте установщик и начинаете его распространять. Какой-нибудь смелый экспериментатор загружает, запускает инсталлятор — но видит строгое предупреждение:


Windows SmartScreen блокирует запуск исполняемого файла

Действительно, в текущем окружении Windows активно блокирует запуск бинарных файлов через функцию SmartScreen.
Читать дальше →
Всего голосов 63: ↑63 и ↓0+63
Комментарии305

Unsafe.AsSpan: Span<T> как замена указателям?

Время на прочтение16 мин
Количество просмотров10K


C# — невероятно гибкий язык. На нем можно писать не только бэкэнд или десктопные приложения. Я использую C# для работы, в том числе, и с научными данными, которые накладывают определенные требования на инструменты, доступные в языке. Хотя netcore захватывает повестку дня (учитывая, что после netstandard2.0 большинство фич как языков, так и рантайма, не бэк-портируются в netframework), я продолжаю работать и с легаси-проектами.


В этой статье я рассматриваю одно неочевидное (но, наверное, желаемое?) применение Span<T> и отличие реализации Span<T> в netframework и netcore из-за особенностей clr.

Добро пожаловать под кат
Всего голосов 26: ↑25 и ↓1+24
Комментарии16

10 расширений для VS Code, без которых я не могу программировать

Время на прочтение3 мин
Количество просмотров151K
VS Code — мой любимый редактор кода. Это — самый популярный из существующих редакторов, возможности которого можно расширять практически до бесконечности. И, что удивительно, разработала его компания Microsoft. Я полагаю, что ни один из других редакторов и ни одна из других IDE не может дать разработчику хотя бы половину того, что способен дать ему VS Code. Одна из сильных сторон VS Code — это система расширений. Она позволяет создавать расширения буквально на все случаи жизни. Хочу рассказать вам о моём топ-10 расширений для VS Code.


Читать дальше →
Всего голосов 57: ↑31 и ↓26+21
Комментарии70

Информация

В рейтинге
3 980-й
Зарегистрирован
Активность