Меня всегда интересовало низкоуровневое программирование – общаться напрямую с оборудованием, жонглировать регистрами, детально разбираться как что устроено... Увы, современные операционные системы максимально изолируют железо от пользователя, и просто так в физическую память или регистры устройств что-то записать нельзя. Точнее я так думал, а на самом деле оказалось, что чуть ли не каждый производитель железа так делает!
User
Unsafe в Swift
В этой статья я хотел бы рассмотреть работу с указателями в swift, а так же порассуждать для чего это вообще может понадобиться.
Что нам стоит PCI-E райзер свой построить
Давным-давно собирал я себе мини-компьютер. Но вот незадача – 3D моделирование и чего уж греха таить – банальные игрушки заставляли данную коробочку сильно призадуматься, а меня — понервничать. Но просто взять и подключить видеокарту к ней нельзя — слот PCI-E X4 есть, но нет места в корпусе. Да и по питанию не сможет обеспечить (если не говорить о совсем уж бюджетных затычках). Какие варианты решения данной проблемы есть на рынке, чем они меня не устроили и что в итоге получилось, я постараюсь описать в данной статье. Прошу под кат, кто не боится большого количества картинок!
Древности: игры под MS-DOS, которые мы не выбирали
Возможно благодаря этой ограниченной доступности старые игры вспоминаются с такой теплотой. Выбор игр для обзора у меня очень субъективный и не претендующий на полноту, но он вполне соответствует доступному в те годы ассортименту. Возможно, так было не у меня одного: в те годы и пластинки у всех дома были одинаковые, и игры, распространявшиеся из рук в руки по малопонятным законам, не особо отличались. Я выбрал пять, в которые не только играл в прошлом. Я в них играю и сейчас на своих разнообразных старых компьютерах, и наверное буду играть еще долго. Под катом заметки про Dangerous Dave in The Haunted Mansion, Prince of Persia, Doom, Command&Conquer и Sim City 2000.
Семантика копирования и управление ресурсами в C++
В C++ программист должен сам принимать решения о том, как будут освобождаться используемые ресурсы, автоматических средств типа сборщика мусора нет. В статье рассмотрены возможные варианты решения этой задачи, детально рассмотрены потенциальные проблемы, а также ряд сопутствующих вопросов.
Learn OpenGL. Урок 5.9 — Отложенный рендеринг
В предыдущих статьях мы использовали прямое освещение (forward rendering или forward shading). Это простой подход, при котором мы рисуем объект с учётом всех источников света, потом рисуем следующий объект вместе с всем освещением на нём, и так для каждого объекта. Это достаточно просто понять и реализовать, но вместе с тем получается довольно медленно с точки зрения производительности: для каждого объекта придётся перебрать все источники света. Кроме того, прямое освещение работает неэффективно на сценах с большим количество перекрывающих друг друга объектов, так как большая часть вычислений пиксельного шейдера не пригодится и будет перезаписана значениями для более близких объектов.
Отложенное освещение или отложенный рендеринг (deferred shading или deferred rendering) обходит эту проблему и кардинально меняет то, как мы рисуем объекты. Это даёт новые возможности значительно оптимизировать сцены с большим количеством источников света, позволяя рисовать сотни и даже тысячи источников света с приемлемой скоростью. Ниже изображена сцена с 1847 точечными источниками света, нарисовання с помощью отложенного освещения (изображение предоставил Hannes Nevalainen). Что-то подобное было бы невозможно при прямом расчёте освещения:
Почему Telegram Passport — никакой не End to End
В обсуждении новости про Passport разгорелись жаркие дискуссии на тему безопасности последней поделки от авторов Telegram.
Давайте посмотрим, как он шифрует ваши персональные данные и поговорим о настоящем End-To-End.
Пробрасываем вызовы Steam API из Wine в GNU/Linux и обратно с помощью Nim
У игроков на платформе GNU/Linux множество проблем. Одна из них — необходимость устанавливать отдельный клиент Steam для каждой Windows игры из Steam. Ситуация усугубляется необходимостью установки ещё и родного клиента Steam для портированных и кроссплатформенных игр.
Но что если найти способ использовать один клиент для всех игр? За основу можно взять родной клиент, а игры для Windows пусть обращаются к нему так же как, например, к OpenGL или звуковой подсистеме GNU/Linux — средствами Wine. О реализации такого подхода и пойдёт речь далее.
Как я взломал пул для майнинга Bitcoin
Выравнивание инструкций кода
// func.cpp
void benchmark_func(int* a)
{
for (int i = 0; i < 32; ++i)
a[i] += 1;
}
Ну, давайте просто завернём её в какой-нибудь микробенчмарк, вызовем её много-много раз (для усреднения результатов) и посмотрим, что получится, да? Ну ладно, мы можем ещё посмотреть на сгенерированные инструкции просто чтобы убедиться, что компилятор чего-то там не «наоптимизировал». Мы можем также провести несколько разных тестов, чтобы убедиться, что именно цикл является узким местом. Ну и всё. Мы понимаем, что мы измеряем, да?
Давайте представим, что в нашем файле есть ещё одна функция, скорость работы который вы тоже замеряете, но в отдельных тестах. Т.е. файл выглядит как-то так:
// func.cpp
void foo(int* a)
{
for (int i = 0; i < 32; ++i)
a[i] += 1;
}
void benchmark_func(int* a)
{
for (int i = 0; i < 32; ++i)
a[i] += 1;
}
И вот однажды ваш менеджер приходит к вам и показывает претензию от пользователя вашей библиотеки, которая заключается в том, что она не работает настолько быстро, как вы обещали. Но постойте, мы ведь хорошо измерили производительность и обещали ровно то, что получили по результатам тестов. Что же пошло не так?
Стоимость операций в тактах ЦП
Инфографика:
Когда нам нужно оптимизировать код, мы должны отпрофилировать его и упростить. Однако, иногда имеет смысл просто узнать приблизительную стоимость некоторых популярных операций, чтобы не делать с самого начала неэффективных вещей (и, надеюсь, не профилировать программу позже).
Как мы музицировали с нейронными сетями
Почему LLVM может вызвать никогда не вызываемую функцию?
Что бы ни сказал тебе твой дракон, он солгал. Драконы лживы. Ты не знаешь, что ждет тебя на другой стороне.
Майкл Суэнвик. «Дочь железного дракона»
Не так давно на Хабре был опубликован пост под названием "Как может вызваться никогда не вызываемая функция?". Выводы из статьи простые: в случае undefined behaviour компилятор вправе предпринимать любые действия, даже если они будут совершенно неожиданными. Однако меня заинтересовал сам механизм этой оптимизации. Результатом своего небольшого исследования я хочу поделиться с уважаемым сообществом хабра.
Пишем для UEFI BIOS в Visual Studio. Часть 1 — разворачивание среды разработки, компиляция и запуск на отладку
Введение
В этой статье будет описано, как быстро начать программировать для UEFI во фреймворке edk2 в среде Visual Studio, не тратя массу времени на настройку среды обычным способом, по оригинальным мануалам. Достаточно дать команду git clone ... в корневом каталоге диска, и это на самом деле все, среда будет полностью установлена и готова к работе. Требуются 64-разрядная Windows 7 и выше c Visual Studio 2008-2015. Эти два условия не обязательны, но тогда придется немного потрудиться над собиранием системы edk2-Visual Studio в единое целое, краткая памятка будет приведена.
Цель статьи — провести начинающего за руку по первому UEFI проекту, оставаясь в привычной ему среде. Для более опытных людей, надеюсь, будет интересным поработать в VS вместо привычной командной строки, или разобрать подход и перенести его в любимый Eclipse.
Начнем с простых вещей, вывода строки на консоль и русификации (довольно востребованная вещь, причем простая в реализации), потом будет работа с формами в HII (то, что называлось в обиходе страницами BIOS Setup), потом графика, потом Boot Manager, а потом видно будет (с).
Желающие — прошу пожаловать под кат.
Защищаем сайт с помощью ZIP-бомб
Старые методы по-прежнему работают
[Обновление] Теперь я в каком-то списке спецслужб, потому что написал статью про некий вид «бомбы», так?
Если вы когда-нибудь хостили веб-сайт или администрировали сервер, то наверняка хорошо знаете о плохих людях, которые пытаются сделать разные плохие вещи с вашей собственностью.
Когда я в возрасте 13 лет впервые захостил свою маленькую Linux-коробочку с доступом по SSH, я смотрел логи и каждый день видел IP-адреса (в основном, из Китая и России), которые пытались подключиться к моей сладенькой маленькой коробочке (которая на самом деле была старым ноутом ThinkPad T21 со сломанным дисплеем, жужжавшим под кроватью). Я сообщал эти IP их провайдерам.
На самом деле если у вас Linux-сервер с открытым SSH, то можете сами посмотреть, сколько попыток подключений происходит ежедневно:
grep 'authentication failures' /var/log/auth.log
DIY порошок для посудомойки: как не растворить посуду и не повторить моих ошибок. Год экспериментов
Предыдущие публикации:
→ Пудра для мозга или как сделать порошок для посудомойки в 9,7 раз дешевле
→ DIY порошок для посудомойки: разбираем промышленные средства и улучшаем рецепт
Прошло уже больше года с момента последней публикации из серии домашней алхимии, посвященной
Как лечат сумасшедших. 1.1 — Фармакотерапия: основы и шизофрения
Эта статья является логическим продолжением поста, посвященного патопсихологической диагностике. В ней я постараюсь доступным языком рассказать об основных группах фармакологических препаратов, применяемых для лечения психических заболеваний, а также о тех механизмах, структурах и компонентах человеческого мозга, которые задействованы в этом процессе.
Disclaimer: я не психиатр, а псих. Препараты всех указанных групп я тестировал на себе и наблюдал их действия (когда лежал в психушке). Кроме того, у меня есть некоторый опыт подбора фармы, однако формального образования в этой области я не имею. В связи с этим, а также с тем, что ставить себе диагноз по научпопным статьям — штука крайне неправильная в своей основе, хочу предупредить читателя о том, что, прежде, чем принимать что-либо из описанного здесь, необходимо проконсультироваться со специалистом. Если в пост набегут настоящие сварщики и обоснуют неправильность заявленных тезисов, — буду только рад.
Если вышеизложенное вас не отпугивает, предлагаю окунуться в увлекательный мир психофармакологии. В посте много букв и картинок, предупреждаю сразу.
Рекурсивный фильтр скользящего среднего
Да, дорогой читатель, такое тоже бывает, и может быть вкусно и полезно!
Как ты уже наверняка знаешь, дорогой читатель, существует два способа построения цифровых фильтров.
Продолжаем настраивать практически бесплатную рекламу на пользователей Хабра. На этот раз с помощью виджета авторизации
Благодаря стараниям разработчиков, эта проблема была успешно пофикшена в течение нескольких дней, но на этом наша сага не закончена. Напомню, что согласно официальному прайс-листу Хабра стоимость 1000 показов банера для пользователей ресурса колеблется от 400 до 550 рублей. За гео-таргетинг по Москве и Питеру придется доплатить 20 и 15 процентов соответственно.
Но всё еще существует способ рекламироваться на эту же аудиторию платя 30-150 рублей за тысячу показов. Давайте думать, как исправить и эту фичу:
Натуральный Geektimes — делаем пространство чище
После того, как пару дней назад на главной странице я увидел пост "Школьник расшарил обнажённое фото с телефона учительницы, за что её уволили" уже почти пришло решение — больше никогда не приду сюда, еще один ресурс в минус.
Причина такого решения думаю всем понятна — мало кому понравится принудительное кормление таким информационным шлаком. Администрация не хочет давать возможность настройки и отключения редакторов — это ее право. Мое право уйти с ресурса.
Однако, спасибо lexasss, нашлось решение самостоятельной настройки ленты, которым я и хочу поделиться. Повторюсь, идея и совет пришли от lexasss, я лишь публикую это для тех, кто как и я хочет отключить отображение постов от определенных пользователей.
Information
- Rating
- Does not participate
- Location
- Украина
- Date of birth
- Registered
- Activity