Как стать автором
Обновить
13
0

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

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

KODI: собираем удобный и функциональный медиацентр для дома. Часть 3. Ретро-игры

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

Продолжаем строить домашний медиа-комбайн на Kubuntu с KODI на борту. Сегодня научим его запускать ретро-игры и позволим себе немного поностальгировать по Darkwing Duck на SEGA и Grand Theft Auto или Gran Turismo на Playstation 1.

О том, как разворачивался сам медиацентр, как его настраивали и какими дополнительными возможностями он оброс читайте в предыдущих публикациях - часть 1, часть 2.

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

Windows Kernel Drivers — Стандартные ошибки – IRQL

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

Данная статья нацелена на тех, кто только недавно начал разрабатывать kernel-драйвера под ОС Windows. В 100-ый раз видишь ненавистную надпись IRQL_NOT_LESS_OR_EQUAL и этот грустный смайлик? Тогда прошу вас пройти под кат.

Читать далее
Всего голосов 10: ↑9 и ↓1+16
Комментарии4

Переполнение кучи в Linux для начинающих

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

Данный туториал для начинающих, но подразумевается, что читатель уже знаком с основами работы функции malloc библиотеки glibc. Подробно рассмотрим как эксплуатировать переполнение кучи в Linux на примере 32-разрядного Raspberry PI/ARM1176.  Так же разберем некоторые нюансы эксплуатации и в x86-x64 системах. Для этого будем использовать инструменты  GDB + GEF.

Переходим сразу к уязвимому коду, который я позаимствовал из лабораторных заданий Protostar, а именно данное задание.

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

Идеальный бэкап за пять минут с ZFS

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


Приветствуем в блоге компании «Маклауд»!
Сегодня мы поговорим о том, о чём должен помнить каждый — про бэкапы.

Программисты уже давно стараются использовать серьёзные production-ready решения для сохранения личных данных. Требования к инструментам растут, и если когда-то было принято держать домашние файлы на NAS и перекачивать снапшоты сервера через Rsync, то сейчас на передовой гораздо более сложные и функциональные проекты. Один из них — возможно, самый перспективный и мощный — файловая система ZFS. Оставив конкурента (btrfs) далеко позади и отстояв право на опен-сорс, она активно применяется как в хайлоаде, так и в личных системах хранения. Далее мы разберём её основные аспекты и за несколько минут поднимем рабочую систему бэкапа на удалённой VPSке. Поехали!
Читать дальше →
Всего голосов 30: ↑26 и ↓4+31
Комментарии53

CRTP: Пример на паттерне «Мост»

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

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

Читать далее
Всего голосов 7: ↑6 и ↓1+7
Комментарии29

Советы по написанию библиотек на Rust

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

Перевод статьи Pascal Hertleif "Good Practices for Writing Rust Libraries" (2015.10.24).



Прошел примерно год, как меня заинтересовал Rust, язык программирования от Mozilla Research, сосредоточенный на решении трёх задач: безопасность, скорость и параллелизм. Он такой же низкоуровневый, как Си или C++, имеет хорошую систему типов (с обобщениями (generics) и типажами (traits)), дружелюбный компилятор и отличный менеджер пакетов Cargo.


С выпуска Rust 1.0 прошло уже полгода (май 2015): многие библиотеки (пакеты, crates), включая некоторые мои, были опубликованы в центральном регистре crates.io. Вот неплохие практики (еще рановато называть их "лучшими"), которые помогут другим людям находить, использовать и дополнять вашу библиотеку.

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

GraphQL на Rust

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

В этой статье я покажу как создать GraphQL сервер, используя Rust и его экосистему; будут приведены примеры реализации наиболее часто встречающихся задач при разработке GraphQL API. В итоге API трёх микросервисов будут объединены в единую точку доступа с помощью Apollo Server и Apollo Federation. Это позволит клиентам запрашивать данные одновременно из нескольких источников без необходимости знать какие данные приходят из какого сервиса.

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

Запускаем Rust-приложение на мобильной ОС Аврора

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

Всем привет! Меня зовут Шамиль, я ведущий инженер-разработчик в КРОК. Помимо всего прочего мы в компании занимаемся ещё и разработкой мобильных приложений для операционной системы Аврора, есть даже центр компетенций по ней.

Для промышленной разработки мы, конечно же, пока используем связку C++ и QML, но однажды подсев на "ржавую" иглу Rust, я не мог не попробовать применить свой любимый язык программирования для написания мобильных приложений. В этой статье я опишу эксперимент по написанию простейшего приложения на Rust, предназначенного для запуска на мобильном устройстве под управлением вышеупомянутой ОС. Сразу оговорюсь, что легких путей я не искал – эксперименты проводил на сертифицированной версии Авроры, которая добавила огонька в этот процесс. Но, как говорится, только защищённая ОС, только хардкор.

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

Читать далее
Всего голосов 35: ↑35 и ↓0+35
Комментарии9

Погружаемся в логово ржавчины. Как работает компилятор rust

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

В моей предыдущей статье о rust я попытался рассказать об истории языка, и показать откуда он пришёл. В статье было сделано множество упрощений. Просто нереальное множество. Народу не понравилось. Но в опросе, в конце статьи вы сказали, что надо бы показать кишки компилятора.

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

Ну, Fe2+mH2O + 2OH- = mH2O + Fe(OH)2↓
Всего голосов 20: ↑19 и ↓1+23
Комментарии12

MarkedText — маркдаун здорового человека

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

Здравствуйте, меня зовут Дмитрий Карловский и все свои статьи (и презентации) пишу я в MarkDown разметке. И знаете что? Она уже порядочно меня подзаелозила! Тексты я пишу на русском, но большая часть спецсимволов есть только в английской раскладке клавиатуры. А редактирование таблиц - это вечная пизанская башня из вертикальных линий. Короче, есть у него проблемы как с удобством редактирования, так и с наглядностью представления. Так что давайте попробуем спроектировать его с нуля, не таща за собой килотонны головоломных конструкций.

Поехали..
Всего голосов 69: ↑50 и ↓19+53
Комментарии155

Полноценный веб-сайт на C++ и немного диванной аналитики

Время на прочтение20 мин
Количество просмотров128K
Но зачем?
Тут должна быть картинка про троллейбус

Невежливо отвечать вопросом на вопрос, но: а почему бы и нет? Просто потому, что можно.
Ладно, я пошутил. Чтобы пояснить причину, хотелось бы кратко описать историю моего знакомства с веб-разработкой. Но, дабы не нарушать последовательность повествования, я решил поместить ее в конце. В общем, с причинами мы еще разберемся.

Думаю, многим знакома такая разновидность веб-форумов, как имиджборды. Да-да, вы правильно поняли — именно на примере имиджборды я расскажу об опыте создания сайта на C++. Что же сподвигло меня заняться столь сомнительной пользы проектом? Левая пятка. В этом случае действительно никаких особых причин не было. Просто проснулся однажды утром и понял — хочу. Но это все лирика.

На Хабре хватает статей о веб-сайтах на C++: например, с использованием FastCGI или CppCMS. Но все это — HelloWorld'ы и туториалы. Я же вам расскажу о полноценном (пусть и не идеальном с точки зрения архитектуры и чистоты кода) проекте, постараюсь осветить различные тонкости.
Перейдем же к делу
Всего голосов 51: ↑45 и ↓6+39
Комментарии85

Коллекции в Java: о чём многие забывают

Время на прочтение6 мин
Количество просмотров142K
Из опыта code-review и ответов на StackOverflow набралось немало моментов, касающихся Java Collections API, которые мне казались очевидными, но другие разработчики о них почему-то не знали или знали, но не чувствовали уверенности их применять. В этой статье я собираю в общую кучу всё, что накопилось.

Содержание:


  1. List.subList
  2. PriorityQueue
  3. EnumSet и EnumMap
  4. Set.add(E) и Set.remove(E) возвращают булево значение
  5. Map.put(K, V), Map.remove(K), List.set(idx, E), List.remove(idx) возвращают предыдущий элемент
  6. Map.keySet() и Map.values()
  7. Arrays.asList может быть ключом
  8. Collections.max
  9. LinkedList, Stack, Vector, Hashtable
Читать дальше →
Всего голосов 58: ↑57 и ↓1+56
Комментарии37

Java собеседование. Коллекции

Время на прочтение10 мин
Количество просмотров894K
С недавнего времени у меня появилась настойчивая мысль, что профессиональное развитие сильно замедлилось и это хочется как-то исправить. Да, читаю книги, слушаю курсы, но в то же время приходит и понимание того, что возможно пришло время сменить работу, здесь вроде как все изучено, плавно уходим в рутину. Данная мысль сподвигла меня на рассылку своего резюме в несколько компаний — лидеров рынка. После прохождения собеседования в 3 из них, я решил, как водится внести свои 5 копеек в освещение обширной темы собеседования, а именно технических вопросов по Java коллекциям, с которыми приходится сталкиваться. Да, знаю, читатель скажет: «коллекции — избитая тема, сколько можно», но часть из приведенных ниже вопросов, я задавал своим знакомым разработчикам, которые занимают именно позиции разработчиков («крепких середнячков», по меркам недалекой от Москвы глубинки, которые уверенно справляются со своей работой на практике, а вот в теории скажем так есть пробелы, потому, что работа не требует решения каких-то нетривиальных задач, да и потому что не всем это интересно — изучать как внутри работает структура данных), вызывало растерянность. Думаю, что рассмотренный материал будет не очень интересен разработчикам выше уровня Junior (я попрошу их комментировать, дополнять и критиковать изложенный здесь материал), а вот Junior`ы уверен, найдут в этой статье интересное для себя.
Читать дальше →
Всего голосов 97: ↑86 и ↓11+75
Комментарии306

Проброс видеокарты в гостевую ОС из гипервизора KVM с помощью технологии VFIO

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

Вступление


В статье описывается способ проброса физических устройств из гипервизора KVM в гостевую ОС с помощью технологии VFIO, реализованной в linux kernel 3.9.*.
Материал не является руководством к действию (прим. туториалом). Все описанные инструкции вы производите на свой страх и риск.

Эксперимент выполняется под ОС Ubuntu 13.10:

  • kernel: 3.11.0-15-generic
  • qemu: 1.5.0
  • seabios: 1.7.3


Аппаратная часть стенда:

  • мат. плата: AMD990FX
  • процессор: AMD FX-8120
  • опер. память: DDR3 PC3-14900
  • видеокарта: ATI RADEON HD 7750
  • видеокарта (гость): NVIDIA GTX560-TI


Видеокарта для гостевой системы и хоста, может быть, предположительно, любая (NVIDIA, ATI RADEON).
Материнская плата должна иметь блок управления памятью ввода/вывода (IOMMU) — технология AMD-Vi или VT-d.
Если используется процессор Intel, то он также должен поддерживать VT-d.
Независимо от выбранной платформы в биосе материнской платы должны быть реализованы IVRS/DMAR таблицы.
Читать дальше →
Всего голосов 23: ↑22 и ↓1+21
Комментарии28

Проброс видеокарты в KVM из под ubuntu

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

Предистория


Года два назад я решил перейти полностью на линукс, но необходимость в венде не упала, поэтому всегда держал у себя 2 операционные системы. Около месяца назад попробовал поставить VirtualBox и на нее установить Windows, в общем то работать с 2мя операционными системами мне понравилось, но была одна проблема, я программирую исключительно компьютерную графику и мне нужна была поддержка OpenGL 3.3 и выше, к сожалению VirtualBox не предоставлял мне такой возможности. Погуглив наткнулся на такую штуку как Xen, долго пытался что-то сделать на ней, в итоге ничего не вышло, скорее всего из-за основной видеокарты — nVidia GeForce 580 GTX, гипервизор попросту не хотел запускать даже убунту, не говоря уже об виндовсе. Начал искать другие гипервизоры, и наткнулся на KVM, с ним пришлось повозиться, но в конце концов все заработало.

Конфигурация


Итак, нам понадобится:
  • Процессор с поддержкой виртуализации (в Intel — это VT-d, в AMD — AMD-Vi). Важно: чипсет тоже дожен поддерживать эту технологию
  • Материнская плата с блоком управления памятью ввода/вывода(IOMMU)
  • Две видеокарты, для гостевой ОС желательно использовать AMD видеокарту, т.к. с ней проблем не должно быть. Видеокарты NVidia не работают.

Моя конфигурация:
  • Процессор AMD Phenom II x4
  • Материнская плата ASUS M5A99X EVO R2.0
  • Видеокарта для Ubuntu: NVidia GeForce 580 GTX
  • Видеокарта для гостевой ОС: AMD Radeon HD 5800

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

Автоматизируем десктопный GUI на Python + pywinauto: как подружиться c MS UI Automation

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

Python библиотека pywinauto — это open source проект по автоматизации десктопных GUI приложений на Windows. За последние два года в ней появились новые крупные фичи:


  • Поддержка технологии MS UI Automation. Интерфейс прежний, и теперь поддерживаются: WinForms, WPF, Qt5, Windows Store (UWP) и так далее — почти все, что есть на Windows.
  • Система бэкендов/плагинов (сейчас их двое под капотом: дефолтный "win32" и новый "uia"). Дальше плавно двигаемся в сторону кросс-платформенности.
  • Win32 хуки для мыши и клавиатуры (hot keys в духе pyHook).

Также сделаем небольшой обзор того, что есть в open source для десктопной автоматизации (без претензий на серьезное сравнение).


Эта статья — частично расшифровка доклада с конференции SQA Days 20 в Минске (видеозапись и слайды), частично русская версия Getting Started Guide для pywinauto.



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

Перегрузка в C++. Часть I. Перегрузка функций и шаблонов

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

C++ сложный и интересный язык, совершенствоваться в нем можно чуть ли не всю жизнь. В какой-то момент мне захотелось изучать его следующим образом: взять какой-то аспект языка, возможно довольно узкий, и разобраться с ним максимально глубоко и подробно. Такой подход в значительной степени был стимулирован замечательными книгами Скотта Мейерса, Герба Саттера и Стефана Дьюхэрста. Когда накопилось определенное количество материалов, решил познакомить с ними Хабровчан. Так появилась эта серия, которую я назвал «C++, копаем вглубь». Серия помечена как Tutorial, но ориентирована она все-таки не на начинающих, а скорее на intermediate уровень. Первая тема — это перегрузка в C++. Тема оказалась очень обширной и получилось три статьи. Первая статья посвящена перегрузке функций и шаблонов, вторая перегрузке операторов и третья перегрузке операторов new/delete. Итак, начнем копать.


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

Понимая, как используется дисковое пространство в Linux

Время на прочтение11 мин
Количество просмотров49K
Прим перев.: Автор оригинальной статьи — испанский Open Source-энтузиаст nachoparker, развивающий проект NextCloudPlus (ранее известен как NextCloudPi), — делится своими знаниями об устройстве дисковой подсистемы в Linux, делая важные уточнения в ответах на простые, казалось бы, вопросы…

Сколько пространства занимает этот файл на жёстком диске? Сколько свободного места у меня есть? Сколько ещё файлов я смогу вместить в оставшееся пространство?



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

Однако в современных Linux-системах такая интуиция может вводить в заблуждение. Давайте разберёмся, почему.
Читать дальше →
Всего голосов 42: ↑42 и ↓0+42
Комментарии16

CreateRemoteThread для Linux

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

Мицуха несёт новые потокиВ WinAPI есть функция CreateRemoteThread, позволяющая запустить новый поток в адресном пространстве другого процесса. Её можно использовать для разнообразных DLL-инъекций как с нехорошими целями (читы в играх, кража паролей, и т. д.), так и для того, чтобы на лету исправить баг в работающей программе, или добавить плагины туда, где они не были предусмотрены.


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


Я подробно расскажу о том, как с помощью спецификации ELF, некоторого знания архитектуры x86_64 и системных вызовов Linux написать свой маленький кусочек отладчика, способный загрузить и исполнить произвольный код в уже запущенном и работающем процессе.


Для понимания текста потребуются базовые знания о системном программировании под Linux: язык Си, написание и отладка программ на нём, осознание роли машинного кода и памяти в работе компьютера, понятие системных вызовов, знакомство с основными библиотеками, навык чтения документации.

Читать дальше →
Всего голосов 61: ↑60 и ↓1+74
Комментарии27

Скриншотим игры — the hard way

Время на прочтение6 мин
Количество просмотров39K
Ну что такого сложного может быть в создании скриншота? Казалось бы — позови функцию, любезно предоставленную операционкой и получи готовую картинку. Наверняка многие из вас делали это не один раз, и, тем не менее, нельзя просто так взять и заскриншотить полноэкранное directx или opengl приложение. А точнее — можно, но в результате вы получите не скриншот этого приложения, а залитый черным прямоугольник.
Читать дальше →
Всего голосов 46: ↑45 и ↓1+44
Комментарии22

Информация

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