Search
Write a publication
Pull to refresh
3
0
Send message

Ticket to Ride.Европа — арифметика, часть вторая

Reading time4 min
Views5.2K
Всё ещё продолжаю изучать основы математики и механики в игре. Данная статья является второй в серии (Ссылка на первую часть), в ней продолжается анализ перегонов, попытка их сортировки по потребности, изучение различных способов строительства маршрутов. Если проводить аналогии с математикой, это лишь основы, арифметика. Алгебра и высшая математика в духе «брать вагоны или строить перегон?», «что сейчас лучше построить — перегон или станцию?» и «использование одного перегона несколькими маршрутами» пока в стадии планов, надеюсь, руки и мозги дойдут и до них.

По умолчанию в посте идут рассуждения, актуальные для игры 2-3 игроков (используется только один путь на «двухпутных» перегонах)

Читать дальше →

Операционная система на Rust. Страничная память: продвинутый уровень

Reading time21 min
Views9K
В этой статье объясняется, как ядру операционной системы получить доступ к фреймам физической памяти. Изучим функцию для преобразования виртуальных адресов в физические. Также разберёмся, как создавать новые сопоставления в таблицах страниц.

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

Введение


Из прошлой статьи мы узнали о принципах страничной организации памяти и о том, как работают четырёхуровневые страничные таблицы на x86_64. Мы также обнаружили, что загрузчик уже настроил иерархию таблиц страниц для нашего ядра, поэтому ядро работает на виртуальных адресах. Это повышает безопасность, но возникает проблема: как получить доступ к настоящим физическим адресам, которые хранятся в записях таблицы страниц или регистре CR3?
Читать дальше →

Эволюция переключения контекста x86 в Linux

Reading time43 min
Views27K


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

Задача: проследить, как изменялось переключение контекста в ядре Linux от первой (0.01) до последней версии LTS (4.14.67), с особым акцентом на первую и последнюю версии.
Читать дальше →

Разворачиваем виртуалку с Windows с пробросом виртуальной видеокарты с помощью QEMU и Intel GVT-g

Reading time10 min
Views31K

Как заставить Intel GVT-g работать


Всем привет! Intel предложили отличное решение извечной проблемы: "у меня есть ноутбук на Linux и мне надо запускать Windows с аппаратным ускорением, но у меня нет тяжеленного ноутбука с двумя GPU и жидкостным охлаждением". С помощью архитектуры своих GPU или чего-то ещё им удалось сделать так, что вы можете разбить свой встроенный Intel GPU на два или более GPU.


К сожалению, это отнюдь не так просто… Документация слегка устарела, и некоторые вещи ломаются непонятным образом без очевидной причины. Поэтому в данном посте я расскажу вам, как настроить аппаратно ускоренную виртуальную машину с Windows с крутыми быстрыми драйверами virtio и Intel GVT-g.


Для этого вам понадобится более-менее современный GPU (Примечание переводчика: согласно официальной документации, GVT-g поддерживают интегрированные видеокарты, начиная с пятого поколения Intel Core и с четвёртого поколения Xeon).


Windows screenshot

Читать дальше →

Сколькими способами можно записать факториал на Scheme?

Reading time10 min
Views7.7K

Злые языки утверждают, что функциональные языки программирования — «языки для написания факториалов». Чаще всего так определяют язык Haskell, мы же начнем с того функционального языка, который сильно повлиял и на Haskell, и на подмножество средств для функционального программирования многих других языков — язык Scheme. По-крайней мере, map и for-each, filter и reduce, а так же apply и eval пришли в наши любимые языки программирования если не именно из Scheme, то в том числе и оттуда.


Рассмотрим некоторые возможные способы записи вычисления факториала. Заодно получится своеобразная ода языку программирования Scheme. Думаю, этот замечательный язык того вполне заслуживает.


У меня получилось 10 вариантов записи определений функций, которые можно свести к 3 основным способам вычисления: традиционному линейно-рекурсивному вычислительному процессу, итерации, генерации последовательности чисел с последующей сверткой умножением. Предлагаю рассмотреть эти варианты подробнее. Попутно мы рассмотрим: оптимизацию хвостовой рекурсии, функции высших порядков и метапрограммирование, отложенные вычисления, бесконечные списки, мемоизацию, способ создать статическую переменную в Scheme и гигиенические макросы.

Читать дальше →

Ticket to Ride.Европа — скромные шаги в арифметику игры

Reading time5 min
Views34K
День первый. Нам подарили игру «Ticket to ride. Европа». Это моё первое знакомство с игрой данной серии, надо обязательно попробовать и заценить.

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


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

Метаобъектный протокол Common Lisp на примере реализации прототипной объектной системы

Reading time10 min
Views9.4K

Введение


Common Lisp, а точнее, его объектная система, CLOS, предоставляет пользователю языка совершенно замечательный механизм, а именно, метаобъектный протокол.

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

Вообще, что такое метаобъектный протокол? Очевидно, это слой объектной системы, который, судя по названию, каким-либо образом оперирует над ней самой, и управляет ей.

Для чего он нужен? На самом деле, в зависимости от языка и объектной системы, список применений может быть практически безграничен. Это как добавление коду декларативности(аннотации в Java и аттрибуты в C#), так и разнообразная генерация кода и классов в рантайме(здесь можно вспомнить разнообразные persistance и ORM фреймворки), так и многое другое.

С моей лично точки зрения, лучше всего метаобъектные протоколы себя зарекомендовали со стороны закрепления паттернов проектирования на уровне объектной системы. Такие паттерны, как, скажем, синглтон, которые в языках без достаточно развитого ООП приходится снова и снова реализовывать методом copy-n-paste, в моем любимом Common Lisp создаются буквально из пары десятков строчек кода и переиспользуются в дальнейшем исключительно указанием метакласса[1].

Тем не менее, в нижеследующем тексте я хочу сосредоточиться на кое-чем более интересном, а именно — на изменении правил работы самой объектной системы, самих ее основ. Именно добавление возможностей подобного изменения и было ключевой целью разработчиков метаобъектного протокола для Common Lisp.

Итак, дальнейший текст будет посвящен созданию прототипной объектной системы, подобной JavaScript, в Common Lisp, с использованием метаобъектного протокола и интеграцией ее в CLOS. Полный код проекта доступен на github[2].
Читать дальше →

Перспектива: MultiClet S1

Reading time16 min
Views18K


Итак, пришло время поговорить о следующем поколении мультиклеточных процессоров: MultiClet S1. Если вы впервые слышите о них, то обязательно ознакомьтесь с историей и идеологией архитектуры в этих статьях:


На данный момент новый процессор находится в разработке, но уже появились первые результаты и можно оценить, на что он будет способен.
Читать дальше →

От чего зависит стоимость авиарейса на практике

Reading time9 min
Views47K
image

Я летал не только на пассажирских самолётах, но и на грузовых. Именно на них можно посмотреть мир, встретить разных людей и попробовать сделать так, чтобы они тебя не убили. Особенно в Африке.

Но рассказать я бы хотел не про это, а про то, как работает бэк-офис до рейса.

Под бэк-офисом я понимаю целую структуру отдельных отделов внутри авиакомпании, тесно сотрудничающих между собой. «Планктоны», как их иногда в шутку называют лётный и технический составы, делают 90 % работы, связанной с организацией рейса. Остальные примерно 10 % делают уже пилоты и техники. Они на вершине этой производственной пирамиды, и они отвечают за рейс. Конкретно разгребают нестыковки служб, приходя на работу.
Читать дальше →

KVM, PCI passthrough, Looking Glass и все-все-все

Reading time10 min
Views44K
После успешного перехода на линукс software разработчиков, выгадал момент, когда работы немного, и тоже сменил основную ОС. Опасения вызывал некроссплатформенный софт для поддержки уже имеющихся проектов. Часть софта заработало через wine. Однако оказалось, что определённый софт работать под wine'ом отказывается. Решено было запускать софт на виртуальной машине QEMU+KVM. Софт стал запускаться, но работать в нём было довольно не удобно. Программные виртуальные видеокарты не отличаются производительностью, да и поддержка 3D графики очень скромная. Пришлось расчехлять бубен и искать выход.
Читать дальше →

Два бита на транзистор: ПЗУ высокой плотности в микросхеме с плавающей запятой Intel 8087

Reading time17 min
Views16K
Intel разработала чип 8087 в 1980 году для того, чтобы улучшить производительность ПК с процессорами линеек 8086/8088 (таких, как IBM PC) при выполнении операций с плавающей запятой. Поскольку первые микропроцессоры были предназначены для выполнения операций с целыми числами, выполнение операций с числами с плавающей запятой было медленным, что уже и говорить о выполнение трансцендентных операций, таких как тригонометрические функции или логарифмы. Сопроцессор 8087 значительно повысил скорость выполнения задач с плавающей запятой, все выполнялось почти в 100 раз быстрее. Архитектура 8087 была реализована и в более поздние процессоры Intel, а инструкции 8087 по-прежнему используются в современных x86 ПК. Intel представила в 1980 году чип 8087, предназначенный для улучшения производительности вычислений с плавающей запятой на процессорах 8086 и 8088.

Читать дальше →

Виртуальная память в ARMv7

Reading time5 min
Views8.5K
Здравствуйте!

В статье обзорно описана система виртуальной памяти архитектуры ARMv7.

Заголовок спойлера
Здесь не рассмотрены тонкости кэширования, DMA, LPAE и подобное. За более подробным описанием можно обратиться к литературе в конце статьи.
Читать дальше →

Знакомство с Ruby on Rails (часть 2)

Reading time11 min
Views14K
В продолжении статьи ”Первое знакомство с Ruby on Rails” мы научимся работать с базой данных, и создадим каталог статей.
Узнаем как написать плагин, попробуем использовать AJAX и рассмотрим некоторые проблемы при развёртывании приложения на хостинге.

Начнем с базы данных.


Читать дальше →

Разработка web-приложений на языке Common Lisp (часть третья)

Reading time6 min
Views4.1K
Данный обзор является небольшим путеводителем для тех, решился (или решается) доверить этому чудесному языку будущее своего стартапа. Несмотря на то, что основной акцент будет ставиться на web-разработке, я постараюсь осветить также и более общие темы, так или иначе связанные с Common Lisp. Материал почерпнут из собственного опыта разработки web-сервиса AlterMoby.

Третья часть этого обзора будет посвящена web-серверу Hunchentoot. Рассмотрим его архитектуру и базовые возможности. Кроме того, затронем некоторые смежные вопросы, в частности, генерацию HTML/XML.

image
Читать дальше →

Настоящий веб-сайт на Common Lisp за 9 шагов

Reading time7 min
Views12K

Введение





Эта вводная статья предназначена для желающих попробовать применить Common Lisp в задачах веб-программирования. Я не буду останавливаться на преимуществах этого языка, за меня это сделал ababo в своем вводном посте Разработка web-приложений на языке Common Lisp (часть первая)

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

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

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

Для тех, кто любит проматывать скучные процедуры установки — в конце статьи размещена небольшая вкусность, которая, возможно, расширит ваш взгляд на веб-программирование, если до этого момента вы не имели дела с лиспом. Ищите по ключевым словам SLIME и SWANK :)
Читать дальше →

Разработка web-приложений на языке Common Lisp (часть вторая)

Reading time5 min
Views4.2K
Данный обзор является небольшим путеводителем для тех, решился (или решается) доверить этому чудесному языку будущее своего стартапа. Несмотря на то, что основной акцент будет ставиться на web-разработке, я постараюсь осветить также и более общие темы, так или иначе связанные с Common Lisp. Материал почерпнут из собственного опыта разработки web-сервиса AlterMoby.

Вторая часть этого обзора будет посвящена базовому конфигурированию Lisp-среды. Будет описана установка простой Lisp-системы. Кроме того, вкратце рассмотрим систему управления зависимостями ASDF.
image
Читать дальше →

Разработка web-приложений на языке Common Lisp (часть первая)

Reading time4 min
Views9K
Данный обзор является небольшим путеводителем для тех, решился (или решается) доверить этому чудесному языку будущее своего стартапа. Несмотря на то, что основной акцент будет ставиться на web-разработке, я постараюсь осветить также и более общие темы, так или иначе связанные с Common Lisp. Материал почерпнут из собственного опыта разработки web-сервиса AlterMoby.

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

image
Читать дальше →

Самодельный плоттер: советы для начинающих, работа с grbl-прошивкой

Reading time5 min
Views41K

Во время изучения в университете такого занимательного предмета, как схемотехника, мне пришло в голову сделать в рамках курсового проекта "Двух осевой плоттер на бумаге с головкой из авторучки на базе Arduino". К моменту начала работы я себе весьма смутно представляла разработку электрической части проекта, впрочем, как и механической. Подобного опыта в моей жизни еще не бывало. Именно поэтому я нашла в сети, перебрав множество ресурсов, показавшийся мне наиболее простым и понятным туториал, и решила точно следовать ему. Однако, скоро выяснилось, что все простое на первый взгляд расписано не достаточно подробно для такого "умельца" как я. Поэтому в оставшихся "за кадром" вопросах пришлось импровизировать, не всегда удачно, как оказывалось в последствии. Это была небольшая предыстория. Теперь хотелось бы поделиться своим ценным опытом по ряду ключевых вопросов. Приводить полностью новую инструкцию с моей версией этого устройства не буду, т.к. на просторах интернета итак достаточно более удачных решений.


Содержание


  1. Конструкция
  2. Схема электрическая
  3. ПО
Читать дальше →

Муравейник или крепость? Строю дом по цене квартиры. 3 часть. Электроснабжение

Reading time8 min
Views30K
Часть 1. Строительство
Часть 2. Отопление
Часть 4. Комфорт дома и гаджеты.

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

Непривилегированные пользователи Linux с UID> INT_MAX могут выполнить любую команду

Reading time3 min
Views35K
Присядьте, у меня есть новость, которая вас сейчас шокирует…

В операционных системах Linux есть неприкрытая уязвимость, позволяющая пользователю с низкими привилегиями санкционировано выполнить любую команду systemctl (и даже стать root — прим. переводчика), если его UID больше 2147483647.

image
Читать дальше →

Information

Rating
Does not participate
Registered
Activity