Как стать автором
Поиск
Написать публикацию
Обновить
99.2

Windows *

Разработка под операционные системы от Microsoft

Сначала показывать
Порог рейтинга
Уровень сложности

Удивительное рядом. Как устроен буфер обмена в Windows и Linux

Уровень сложностиПростой
Время на прочтение6 мин
Количество просмотров24K
Опенсорсная утилита CopyQ показывает содержимое буфера обмена на всех ОС и сохраняет историю

Буфер обмена — один из основных элементов GUI, но он сложен в реализации. Подводных камней настолько много, что вы больше никогда не сможете произнести слово «копипаст» с презрительным выражением. Есть тысячи приложений и форматов данных. Невозможно обеспечить полную конвертацию всего во всё.

В некоторых случаях данные вообще нигде не сохраняются по нажатию Ctrl+C. И по нажатию Ctrl+V будет возвращён NULL. Shit happens, как говорится…
Читать дальше →

Новые утечки. Что мы знаем о выходе Windows 12

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


Весь интернет уже готовится к выходу Windows 12. Вероятно, следующая версия будет во многом сосредоточена на поддержке работы с ИИ. На это намекает в том числе недавняя утечка от Intel, а также последние действия AMD и направление развития Bing.

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

Avalonia и котики и дизайн для разработчика

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров4.2K

В эпоху невероятной популярности ChatGPT и OpentAI все кинулись играть с их инструментами и использовать API в своих продуктах. Я был в общих рядах и сделал продукт для тех, кому затруднительно воспользоваться официальным сайтом ChatGPT. Но в этой статье речь пойдет не о восхитительных продуктах MS, а о создании интерфейса с котиками на основе этого продукта.

Итак, у нас стоит задача: создать десктопный чат с GTP3, которым будет удобно пользоваться человеку, далекому от пк.

Читать далее

Сканер установленных перехватчиков в памяти процесса

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


В статье будет рассмотрен один из методов поиска изменений в памяти процесса, на основе построения полной карты уязвимых к перехвату адресов. Рассмотрена работа со списками загрузчика, ручным разбором таблиц импорта/отложенного импорта/экспорта/TLS загруженных файлов, c обработкой форварда функций и ApiSet редиректов.
Будет показана методика доступа в 64 битное адресное пространство чужого процесса из 32 битного кода через статически сформированный ассемблерный шлюз, так и подход с применением автоматически генерируемого гейта.
Будет дано много комментариев «почему» применяется тот или иной подход, а также описание различных проблемных ситуаций, основанных в том числе как на собственном опыте, так и на разборе кода системного загрузчика, поэтому будет интересна и подготовленным специалистам.
Читать дальше →

WPF: контролы лишенные внешнего вида и неразрешимая задача выбора конфигурации темплейта

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров3.2K

Мне последнее время приходится заниматься интерфейсом приложения для анализа данных, визуальным представлением данных на разных слоях анализа, а также навигацией по слоям и по данным. Соответственно, пришлось разбираться c новомодным WPF, который продвигает концепцию реализующую возможность параллельной (независимой) работы дизайнеров, занимающихся внешним видом приложения и разработчиков, реализующих поведение приложения. Дизайнер, конечно, из меня не очень (мягко говоря), а вот с реализованной концепцией программирования внешнего вида элементов управления в приложениях, мне, кажется, удалось разобраться. Собственно, вот этим пониманием некоторых аспектов концепции я и хочу поделиться, в том числе для того, чтобы расширить это понимание по результатам критики и/или обсуждения.

Возможно, кому‑то будет интересно сравнить то, что предлагает WPF, с концепциями реализованными, например, в JavaFX.

Читать далее

Сам себя не потренируешь — никто не потренирует

Уровень сложностиСредний
Время на прочтение5 мин
Количество просмотров8.3K

Однажды мой коллега для кругозора заинтересовался темой построения треугольника Серпинского с помощью «игры в хаос». И познакомил с ней меня. Показал видео. Потом он сказал: «Ты же учишься программировать – попробуй написать программу, в которой это будет реализовано».

Читать

Добрый вечер, здравствуйте

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

Если вы программист, тестировщик или другой обитатель мира IT, то, возможно, ранее вы следили за деятельностью компании ABBYY, ведущего мирового разработчика решений в области интеллектуальной обработки информации и анализа бизнес-процессов. Весной 2022 года ABBYY приняла решение уйти из России, а мы — команда разработки и менеджмента бывшего российского офиса ABBYY — создали новую компанию Content AI. Мы посчитали важным сохранить многолетний архив этого блога, ведь в нем отражается путь не только одной компании, но и всей сферы AI российского IT.

И мы начинаем новую главу этой истории. 

Читать далее

Wine 8.0: что «выросло» в новой версии? Возможности и совместимость с ПО

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

На Хабре публиковалась новость о Wine 8.0, новый релиз был представлен спустя целый год разработки и трех десятков тестовых версий для «обкатки». Наконец, несколько дней назад разработчики представили стабильный релиз Wine 8.0. Работа действительно очень объемная — команда внесла почти 9 000 изменений.

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

Зачем нужен эмулятор retrowin32

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

Самый популярный вопрос о моём эмуляторе Windows retrowin32 (после «Зачем вообще это нужно?») — это вопрос о том, как он работает. Сегодня ответ кажется мне очевидным, но прежде чем я разобрался, он представлял для меня огромную загадку. Поэтому я постараюсь объяснить так, чтобы вам тоже стало понятно.
Читать дальше →

Как построить WaitGroup на основе 32-разрядного целого числа

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

В Go есть приятная утилита для синхронизации, именуемая WaitGroup, которую могут ожидать одна или несколько горутин. Это требуется для конкурентного завершения задач. В других языках обычно действует следующее соглашение по завершению задач: нужно объединять потоки, выполняющие работу. В Go горутины не имеют ни значений, ни дескрипторов, поэтому WaitGroup применяется вместо объединений. Собирание WaitGroup на основе типичных портируемых примитивов – путаное дело, в которое вовлечены конструкторы и деструкторы; также в процессе этой работы приходится управлять временами жизни. Однако, как минимум, под Linux и под Windows, можно построить WaitGroup из целого числа (инициализируемого в значении), во многом как при создании 32-разрядной очереди и 32-разрядного барьера.
Читать дальше →

Несоответствия исторических пластов Windows 11 — если копнуть, на дне сохранились даже элементы Windows 3.1

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


Спустя несколько лет Windows 11 доросла до более-менее нормального состояния, так что ею с удовольствием пользуется большинство людей. В сентябре вышло обновление Sun Valley (22H2) с давно назревшими изменениями в дизайне. Но достаточно ли их, чтобы устранить исторические несоответствия в UI?

Давайте посмотрим.

Примечание. В данном исследовании используется Windows 11 build 25267, последняя сборка Insider Dev на данный момент (01.01.2023 г).
Читать дальше →

Почему для открытия меню «Пуск» иногда требуется несколько секунд

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

Обычно я запускаю большинство программ на своём ноутбуке с Windows 10, нажимая клавишу <Win>, после чего ввожу несколько букв имени программы, а затем жму Enter. На моём мощном ноутбуке (SSD и 32 ГБ ОЗУ) этот процесс обычно занимает лишь время, необходимое мне для ввода символов, то есть считанные доли секунды.

Обычно.

Однако иногда он занимает больше, намного больше. Порядка десятков секунд. Торможения непредсказуемы, но недавно мне удалось записать трассировку Event Tracing for Windows (ETW) одной из таких задержек. При помощи людей в Twitter я смог проанализировать трассировку и понять, почему на запуск «Блокнота» требуется примерно минута.

Прежде чем приступать к описанию анализа, мне нужно сделать два заявления: 1) у меня есть достаточное понимание проблемы, но нет решения, и 2) если вы наблюдаете аналогичные симптомы, это не значит, что их причина та же, но я дам советы о том, как понять, в ней ли дело.
Читать дальше →

Величайшие программисты XXI века. Марк Руссинович и его 65 системных утилит

Время на прочтение9 мин
Количество просмотров50K
Кто из админов не знает утилиты SysInternals (Winternals) для администрирования и диагностики Windows? Кажется, они известны с незапамятных времён. Но не каждый в курсе, что эти незаменимые инструменты написаны вовсе не компанией Microsoft. Скорее наоборот, они написаны вопреки её желанию.

И здесь мы подходим к личности автора, талантливого и суперпродуктивного программиста Марка Руссиновича. Он показал, что один умный парень способен интеллектуально продавить мегакорпорацию. И той придётся заплатить ему огромные деньги, и даже взять на работу. Потому что повторить его программы она не сумела…
Читать дальше →

Ближайшие события

JEP-400 или UTF-8 РєРѕРґРёСЂРѕРІРєР° РїРѕ умолчанию

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

Не прошло и пяти лет, как в Java 18 докатилось небольшое, но очень ожидаемое и обсуждаемое изменение: теперь во всех стандартных API используется UTF-8 кодировка по умолчанию. Это изменение, которое сделает выражение «Write once, run anywhere» действительно правдой, так как теперь поведение приложения будет еще меньше зависеть от системы, где оно запущено. 

На конференции Joker я рассказал, как развивались события в работе над JEP-400 и как сделать так, чтобы ничего не поломалось после перехода на новые версии JDK. А теперь делюсь с Хабром и видеозаписью доклада, и текстовой версией. Как говорится, помимо двух самых сложных задач в программировании – нейминга и инвалидация кэша, есть ещё две: таймзоны и кодировки. Вот о кодировках и поговорим. Как читается название доклада/поста — разберёмся в конце.

Читать далее

Звуковой датчик при респавне игрока

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

Играя в Unreal Tournament (ut99) я использую тактику "ожидание противника в засаде", таких игроков называют camper.

Я мирно cтою за ящиком и слушаю музыку.

Как только раздаётся сигнал "респавна" (воскрешение игрока).
Я говорю: - Привет!

Во время игры я слушаю музыку

Шаблон приложения Asp .Net Core 6 Web API с предустановкой и настройкой необходимых инструментов

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

Обычно моя работа связана с разработкой функционала REST веб-сервисов. Чаще всего, разработка эта ведется на базе уже существующих приложений, созданных и настроенных ранее по шаблону Web API в VisualStudio. Создавать новые приложения приходится не часто, последнее созданное мной, было еще на .NET Core 3.1, поэтому, когда возникает подобная задача, приходится тратить время на повторное изучение технологий первоначальной настройки приложения, чтобы оно отвечало всем требованиям бизнес-процесса компании, в которой я работаю. Столкнулся с этой задачей накануне, решил создать шаблон приложения (ссылка на репозиторий GitHub), в котором уже все настроено и готово. Краткое описание процесса привожу в этой статье. Постарался разбить сам процесс на независимые блоки, чтобы для реализации одного из них не приходилось изучать другие. Намеренно подробно освящаю настройку базовых функции, не вдаваясь в описание принципа работы той или иной функции - для более глубокого понимания привожу ссылки на документацию, по которой учился сам. Статья моя будет полезна для новичков в качестве отправной точки для изучения тех или иных функций .Net Core 6, а так же для специалистов, которые как и я, сосредоточены на реализации бизнес-логики приложения и требуется сократить время восстановления в памяти технологии его первоначальной настройки.

Читать далее

Ретроразработка драйвера для Windows 3.1

Время на прочтение6 мин
Количество просмотров12K
Word, запущенный в Windows 3.1 с удобным разрешением 1152х864

Много месяцев назад я попробовал свои силы в написании 256-цветного драйвера высокого разрешения для Windows 3.1. Попытка была успешной, но работа пока ещё не завершена. В процессе я заново открыл для себя множество забытых вещей и узнал ещё больше новых. Этот пост основан на заметках, которые я делал по ходу разработки.
Читать дальше →

7-zip — нет времени спешить

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

Данной заметки не должно было быть, но мы живем не в идеальном мире. Есть много пользователей, что предпочли стандартному проводнику Windows альтернативу и наверное еще больше пользователей архиватора 7-zip. Имеет смысл поделиться с ними, подумал я и вот мы здесь.

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

Что делает обычный эникейщик в подобной ситуации? Конечно же берет в руки первый подвернувшийся профайлер.

Читать далее

Flutter Flame: глобальная оптимизация производительности игрового движка

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

Мой опыт работы с игровыми движками для Flutter привёл меня к, в целом, удручающим выводам: производительность хромает, и без специально проработанных «хаков» сделать что-то сложнее простой казуалочки представляется нереальной задачей.

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

Читать далее

Git for Windows: вклад в проект с помощью патча

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

Существуют разные способы совместной работы над исходным кодом проекта. Так получилось, что сначала я познакомился с тем, как работать с командой «git push», посылая свои изменения в удаленный репозиторий, и как создать на сайте «GitHub» форк для отправки из него запроса на принятие изменений («pull request», сокращенно «PR»). И только после этого я узнал о том, что существует способ обмена изменениями в код с помощью файлов-патчей.

В этой статье я экспериментирую с командой «git diff», создаю тестовый проект и файл-патч из него в программах-оболочках «PowerShell» версии 7 и «Git Bash». Клонирую проект и применяю полученный файл-патч с помощью команды «git apply».

В последней части статьи я показываю, как можно применить программу «Git» для создания файла-патча с изменением в исходный код известного веб-приложения «WordPress». В конце этого примера я создаю сообщение об ошибке (ticket) в системе управления проектом «WordPress» и прикладываю к нему свой файл-патч.

Читать далее

Вклад авторов