• Running image viewer from Windows XP on modern Windows

      I have a directory with old images which I collected in the noughties. I move it with all my other files from one computer to another on every upgrade. Every now and then, when I feel a bit nostalgic, I open it and look through the pictures. There are a few GIF files with animation, and every time I notice that the default image viewer from Windows 7 does not support it. I remembered, that the image viewer from Windows XP was able to play GIF animation properly. So, I spent a bit of time to overcome a few obstacles and to run the old image viewer on modern Windows, a small launcher was created for this purpose. Now I can watch these old images in authentic interface of the old image viewer from Windows XP.


      Download: shimgvw_xp32.7z (includes a binary and source code of the launcher, and the shimgvw.dll from English Windows XP SP3).

      Read more →
      • +23
      • 10.3k
      • 1
    • Запуск просмотрщика картинок из Windows XP на современных Windows

        Есть у меня папка со старыми картинками, которые я собирал в нулевых. Переношу с компьютера на компьютер вместе со всеми моими файлами при каждом апгрейде, изредка захожу поностальгировать. Но каждый раз меня немного смущало то, что стандартный просмотрщик Windows 7 не показывал GIF-анимацию, хотя память мне подсказывала, что во времена XP анимация показывалась без проблем. При очередном приступе ностальгии я всё же решил запустить просмотрщик из XP на Windows 7. После преодоления ряда препятствий, я теперь уверен — GIF-анимация там действительно поддерживалась! А главное — теперь я могу смотреть свою старую папку с картинками в аутентичном интерфейсе просмотрщика картинок Windows XP, что создаёт более подходящую атмосферу =)


        Скачать: shimgvw_xp32.7z (включает бинарник и исходный код лаунчера, плюс shimgvw.dll из англоязычной Windows XP SP3).

        Читать дальше →
      • Telegram сам добавляет чужие контакты? Это норма



          Пользуюсь Telegram не первый год. Всё хорошо, но вот какое-то время назад начала смущать одна странная деталь: время от времени Telegram самостоятельно добавлял в мои контакты неизвестных людей, сопровождая это уведомлением, что они зарегистрировались в Telegram. Вообще Telegram не должен показывать номера телефонов людей, которых нет в вашей телефонной книге, но для таких самопроизвольно появляющихся контактов я видел и номер телефона. Всё выглядело так, будто это контакты из моей телефонной книги. Но их там не было. Тогда я решил, что Telegram автоматически добавляет в мои контакты тех людей, которые добавили мой номер телефона в свою телефонную книгу. Поскольку мой номер телефона несколько лет назад был указан на одном небольшом сайте, я решил, что кто-то из немногочисленных посетителей зачем-то добавил меня в свои телефонные книги, и это какое-то время выглядело правдоподобно.
          Читать дальше →
        • Методы модификации машинного кода: «селекция» vs. «генная инженерия»



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

            «Мутации» машинного кода


            В качестве примера возьмём приставку NES (известную у нас как Dendy), в которой используется процессор 6502. Система команд у него очень проста — опкод представлен всегда одним байтом, и каждый из 256 хоть что-то, да делает. Никаких «защит» от дурака не предусмотрено, и почти любой случайный набор байт будет выполняться без сопротивления со стороны процессора. Таким образом, мы можем взять ROM какой-нибудь игры, исправить в нём случайные биты (будем называть это «мутациями») — и после запуска наблюдать забавные глюки в разных неожиданных местах, но при этом в целом игра скорее всего будет работоспособной. Похоже, что на YouTube имеется целый жанр подобного видео. Полученный таким образом машинный код наверняка не очень корректен, но в большинстве случаев процессор сможет его выполнить и что-то сделать.

            Как оказалось, такую методику используют не только для веселья (а играть в знакомые игры с неожиданными глюками весьма забавно), но и для полученя вполне себе конкретных модификаций: делают большое количество «мутантов» и ищут тот, в котором проявился нужный эффект. Точь-в-точь как в современных методах селекции, когда зародыши организмов подвергаются воздействию мутагенов (что приводит к случайным изменениям в генетическом коде), а потом из того что смогло вырасти отбираются те, у которых есть нужный признак. Полученные таким образом организмы получают в довесок массу других нежелательных мутаций. Избавляются от них путем постепенного скрещивания c нормальным видом, добиваясь получения более-менее вменяемого организма с нужным признаком и минимумом других мутаций, которые оказались заметны. То же самое можно сделать и с машинным кодом.
            Читать дальше →
            • +23
            • 13.2k
            • 7
          • Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте

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

              Разработка Need For Speed III Modern Patch

              Вообще я достаточно редко играю в компьютерные игры. Бывало, не играл по несколько лет подряд. Но иногда во мне просыпается маленький реверс-инженер, который мотивирует меня забраться в машинный код какой-нибудь любимой игрушки из прошлого. В последний год я занимался доработкой Need For Speed III: Hot Pursuit (1998 года). Это моя любимая игра в жанре, но теперь я, к своему сожалению, знаю о том, насколько отвратительно она написана. Большое количество маленьких багов в самых неожиданных местах — прямое следствие низкого качества кода.
              Читать дальше →
            • Need For Speed III Modern Patch: более 100 изменений без исходных кодов

                imageКогда я впервые увидел Need For Speed III, от изумления я даже присел. Диск шёл в подарок к видеокарте моего первого компьютера, и это была первая трёхмерная игра в моей жизни. До этого момента я совершенно не подозревал, что графика в играх может быть настолько потрясающей. Это был далёкий 2000 год. Не счесть количество часов, потраченных на игру в сплитскрине за одной клавиатурой с моим двоюродным братом… Музыке — отдельное слово. Мне она настолько нравилась, что я даже записывал её на кассету, а с кассеты потом обратно на компьютер, при помощи стандартной «Звукозаписи». Это единственное что я тогда смог придумать. Слушал я эти записи по кругу по много часов подряд. MP3? Что это за странные буквы? Только WAV, только хардкор!

                И вот, годы спустя, мне захотелось сыграть в эту игру. Но она не заработала на современном железе. Пришлось разбираться. В процессе захотелось ещё и поддержку широкоформатных разрешений… и понеслась! Немного увлёкся этим делом, и в результате получился внушительный патч. Более 8000 строк на ассемблере, исписано 18 листов А4, огромный список изменений…
                Читать дальше →
              • Сборка ICO файла с иконками в формате PNG при помощи FASM

                • Tutorial
                Иногда я пишу небольшие программы на C++, и часто выходит так, что иконка программы «весит» больше, чем собственно сама программа. Так же вышло и при написании Sound Keeper: программа — 14КБ, иконка 16×16 + 32×32 + 48×48 пикселей — 15КБ. Какое расточительство! К счастью оказалось, что Windows (начиная с Vista) поддерживает PNG внутри ICO. Это как раз то, что нужно! Но почему-то не нашлось программы, которая бы позволила самому оптимизировать файлы PNG и собрать из них файл ICO. Поскольку у файлов ICO очень простой формат, соберём его при помощи FASM. Это нестандартное использование «плоского» ассемблера показывает, что его можно применять в самых неожиданных ситуациях, и это работает!
                Читать дальше →
              • Sound Keeper — предотвращает «засыпание» цифровых аудио-выходов SPDIF или HDMI

                  Если вы когда-нибудь пользовались цифровыми аудио-выходами (SPDIF или HDMI), наверняка вы сталкивались с проблемой, когда во время тишины акустика «засыпала», после чего начало следующего звука обрезалось из-за того, что акустике нужно время на «пробуждение» и инициализацию после сна. Это сильно раздражает. Если у вас никогда не было такой проблемы — значит вам повезло с драйвером. Если же проблема имеет место — она решается непрерывным воспроизведением абсолютной тишины. Костыль, но это единственный доступный способ заставить драйвер не выключать цифровой аудио-выход.

                  Ранее для этих целей существовала одна программа с названием SPDIF Keep Alive. Но на мой взгляд она слишком тяжёлая для решения такой простой задачи: требует наличия фреймворка .NET, расходует слишком много памяти и процессорного времени. Поэтому я написал на C++ новую программу для решения проблемы.

                  Читать дальше →
                • Advanced Locationbar для Firefox

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

                    Locationbar² отлично демонстрирует это. Данное расширение добавляет в стандартную адресную строку возможность простым кликом по нужному сегменту URL подняться на несколько уровней вверх по структуре сайта, причём это «волшебное» поведение активируется только в том случае, если вести курсором мыши слева-направо от иконки типа соединения (можно рассматривать это как жест) или при нажатии Ctrl/Alt/Shift. Однако, кроме этого полезного изменения, как оказалось, Locationbar² ломает работоспособность доменов IDN — они отображаются в закодированном виде, а субдомен и вовсе целиком отбрасывается. Расширение не дорабатывается с 2011 года, со временем в нём возникли небольшие конфликты с новыми версиями Firefox, а автор расширения не выходит на связь.

                    Пришло время сделать форк: встречайте Advanced Locationbar!
                    Читать дальше →
                  • В Miranda NG 0.95 появилась поддержка полноценных мета-контактов в ядре. Что дальше?

                      Прошло уже почти 2 года, как основные разработчики Miranda IM перешли в форк Miranda NG. С тех пор Miranda IM практически не развивается, а вот Miranda NG медленно, но верно идёт вперёд. В начале 2014 года вышла версия 0.94 с поддержкой шифрования в ядре, а совсем недавно вышел релиз 0.95, где была реализована полноценная поддержка мета-контактов взамен костылю, который годами использовался ранее. Теперь у каждого контакта своя история, а у мета-контакта — общая история без дублирования записей в базе.
                      Читать дальше →
                    • Как воплотить в жизнь мечту детства и запрограммировать что-нибудь для Dendy

                        Для меня Dendy всегда была чем-то большим, чем просто приставкой. Я не только играл в неё, но и значительное время провёл внутри неё с паяльником в руках для некоторых простых модификаций. По дороге куда-нибудь я часто размышлял о том, как же создаются эти игры и как это работает внутри. Наверняка, многие из вас когда-то задавались подобными вопросами, такова уж натура будущих IT-шников.

                        Прошли годы. С некоторой периодичностью погружался в эму-тему, изучая всё новое на тематических сайтах, но я не решался окунуться в изучение ассемблера 6502 и архитектуры NES. Внутренний конфликт рационального и иррационального. Я долго убеждал себя, что мне не нужно тратить на это время, но… сорвался. Глядя на то, какие интересные вещи делают энтузиасты эму-сцены, я взялся за свою давнюю идею со светлой мыслью: «Я тоже смогу!». Две недели пролетели незаметно, я еле смог остановить себя. И да, теперь я знаком с ассемблером без команд умножения, о чём раньше только слышал в песне о программистской молодости.



                        Очень вероятно, что сейчас вы вспомнили свой первый картридж для Dendy и меню с романтическим сюжетом и приятной музыкой. На таких картриджах никогда не было «серьёзных» игр, и не глядя на громкие надписи типа 9999-in-1, их обычно было что-то около пяти. Но это меню… Разве это не шедевр китайской мысли? :) Мне с детства нравилась эта мелодия (Unchained Melody), а фоновые изображения сейчас навевают кучу ностальгических воспоминаний. Поэтому я взял IDA и дизассемблировал меню 300-in-1, вырезал всё лишнее, исправил ошибки, добавил фейдинг да немного приятных мелочей — и получилась демка Unchained Nostalgia (для запуска нужен эмулятор, например, Nestopia), есть запись на YouTube.

                        Хотите также окунуться в олдскульное программирование? Делюсь самым полезным и интересным, что я нашёл по теме.
                        Читать дальше →
                      • Pure URL — автоматическое удаление utm_source и прочего мусора из URL

                          В то время, когда веб-разработчики тратят время на реализацию понятных человеку URL, ребята из Google Analytics придумали коварный план по уничтожению красивых URL в сети. То тут, то там мы попадаем на ссылки, щедро разбавленные параметрами вида utm_*, которые Google Analytics использует для сбора различной статистики о пользователях. Сколько можно это терпеть?

                          Вот такая драма

                          Это была последняя капля. Встречайте Pure URL! Расширение работает под Firefox 19+, Chrome 18+ и Opera 16+. Оно обрабатывает запросы ещё до их отсылки на сервер, на лету удаляя весь мусор из адресов. Даже если вы откроете ссылку со шпионскими параметрами в вашем IM, Pure URL любезно сделает так, что сервер даже не догадается об их существовании. Из длинной и ужасной ссылки на картинке получится лаконичное http://bigpicture.ru/?p=431513 — с таким URL значительно приятнее иметь дело.
                          Читать дальше →
                        • В официальном издании Age of Empires Collector's Edition на DVD используются крэки из сети

                            imageПервые части игры Age of Empires уже давно стали своего рода классикой. У этой игры до сих пор есть немало поклонников. В 2007 году вышло официальное коллекционное издание игры, которое включает первую и вторую части с дополнениями. Причём во всех странах, кроме США, оно вышло на одном DVD вместо четырёх CD. Тогда я уже немного занимался реверс-инжинирингом этой игры и знал, что оригинальные версии исполняемых файлов не захотят работать с одним общим диском, поскольку в код каждой части и их дополнений зашита проверка метки соответствующего диска. Очевидно, что у одного DVD не может быть сразу четыре разных метки, и после покупки русского DVD издания я ожидал увидеть перекомпилированные разработчиками версии файлов с изменённым кодом проверки наличия диска или вовсе без него. Но всё оказалось намного интереснее.
                            Читать дальше →
                          • Уведомление о том, что браузер устарел

                              ТизерОни уходят. Ещё вчера мы были вынуждены прикручивать очередной костыль для IE6/IE7, а сейчас в этом уже нет необходимости. В СНГ у IE6 сегодня всего 0.5% трафика, у IE7 — 1.8%. Они действительно уходят. Думаю, большинство верстальщиков давно уже не добивается попиксельного соответствия макету, а кто-то даже не проверяет на работоспособность сайтов в столь старых браузерах. В таком случае не будет лишним предупредить пользователя, что сайт может работать неправильно, и предложить обновиться. Предлагаю готовый комплект из панельки предупреждения и страницы с предложением выбрать новый браузер.
                              Читать дальше →
                            • phpBBex — добавляем автозагрузку классов и обработчики AJAX запросов

                                phpBBex logophpBBex — это расширенная версия phpBB 3, которая была анонсирована ранее на Хабре. Проект постепенно развивается, появляются новые полезные возможности. Сегодня у нас появился официальный форум и вышла новая версия нашего форка.

                                Как известно, код phpBB 3 был заложен в далёком 2002 году. Здесь всё по-старому. Нет никаких сложных абстракций, код простой и линейный. Для небольших проектов это не проблема. Но движок оброс функциональностью, и огромную массу кода сейчас не всегда просто изменить для достижения необходимого результата. Игнорирование современных паттернов мешает дальнейшему развитию. Понятно, что разработчикам phpBB важно следить за совместимостью кода со старыми модами, поэтому никаких серьёзных архитектурных улучшений ожидать не приходится. Выходом из ситуации должен быть phpBB 4 на основе Symfony 2, но за его разработку ещё не взялись. Очевидно, переписать такого монстра не так просто, так что в ближайшее время чуда не будет.

                                Поскольку в phpBBex планируется множество изменений, связанных с переводом интерфейса на AJAX, логичным было бы реализовать удобный механизм для добавления новых обработчиков AJAX запросов. Стандартным способом для phpBB сегодня является создание php файла в корне со своей логикой для каждой модификации. Это не дело. Мы попробовали добавить нечто вроде контроллеров. Обработчики сгруппированы в «классы-контроллеры», имеется единая точка входа, которая создаёт экземпляр необходимого «контроллера» и вызывает соответствующий обработчик. На основе этого мы создали систему анонимной оценки комментариев (почти как на Хабре).
                                Читать дальше →
                              • Создание прокси-dll для запуска DirectDraw игр в окне

                                  В продолжение темы расширения функциональности готовых программ хотелось бы рассказать об ещё одном способе изменения логики работы уже скомпилированной программы, который не требует делать изменений в самом исполняемом файле. Это может пригодиться при распространении вашей модификации в США, где прямое вмешательство в исполняемый файл строго осуждается. Речь пойдёт о создании крошечной прокси-dll (всего ≈4 килобайта) для подмены используемой приложением библиотеки на примере ddraw.dll.
                                  Читать дальше →
                                • Простой индикатор раскладки клавиатуры в курсоре на С++

                                    Тема отображения текущей раскладки беспокоила хабрасообщество уже не раз. Я опробовал множество существующих решений, но по разным причинам они меня не устроили. Чтобы подобрать для себя наиболее удобный вариант отображения текущей раскладки, я написал небольшое приложение на C++, которое при нажатии на левый Shift отображает язык в системном курсоре редактирования текста. Менее 100 строк кода и около 4 килобайт в скомпилированном виде — на основе этого вы можете достаточно просто реализовать свой взгляд на то, как на самом деле должна выглядеть индикация текущей раскладки.
                                    Читать дальше →
                                  • Hosts Commander — консольный редактор hosts для Windows и Linux

                                      Hosts Commander призван максимально облегчить работу с файлом hosts из консоли. Если вам время от времени приходится забираться в этот файл (что характерно для веб-разработчика), и вы любите консоль — Hosts Commander может прийтись вам по душе.
                                      Год назад на Хабрахабре была анонсирована первая версия программы, которая работала только под Windows. Но с тех пор многое изменилось и стало лучше. Это отличный пример, как из простой идеи может вырасти нечто большее.
                                      Читать дальше →
                                    • phpBBex — расширенная версия phpBB 3

                                        phpBBex logophpBB 3 — популярный бесплатный форум. Первая версия вышла в свет в 2000 году, и с тех пор вокруг этого движка сформировалось огромное сообщество. Не глядя на серьёзные архитектурные недостатки третьей ветки, которые остались в наследие от предыдущих версий, данный движок по праву считается одним из самых мощных решений среди бесплатных форумов. Огромное количество модов, написанных сообществом, только способствуют этому.
                                        Как правило, мало кого устраивает стандартная функциональность phpBB 3, и каждый владелец форума устанавливает несколько модов, либо использует готовые сборки, которые включают наиболее популярные модификации. Однако, не все моды реализованы достаточно хорошо. Что-то было написано для старых версий форума, и не было обновлено, из-за чего в новых версиях форума возникают какие-то проблемы.
                                        Несколько лет назад для форума родного города я создал форк с именем phpBBex, где постарался сделать phpBB 3 таким, каким вижу его я. Большинство проделанных изменений не существует в виде модов. Практически все установленные моды были сильно переработаны: исправлены ошибки, код адаптирован под последние версии phpBB. Недавно проект был переведён на Mercurial, в результате чего поддержка форка значительно упростилась. Надеюсь, что кто-то найдёт этот проект полезным.
                                        Читать дальше →
                                      • Smarty vs. Twig: производительность

                                          Smarty — один из самых старых шаблонизаторов для PHP. Если вы программируете на PHP — скорее всего, вам приходилось работать с ним. В 2010 году вышла третья версия этого шаблонизатора. Smarty 3 был написан с чистого листа, с активным использованием PHP5. Вместе с этим Smarty получил обновлённый синтаксис и современные возможности, включая наследование, песочницу и др.
                                          Twig — молодой шаблонизатор от разработчиков Symfony. Авторы позиционируют его как быстрый и функциональный шаблонизатор. По возможностям он во многом похож на Smarty 3. Twig отличает несколько другой синтаксис, а так же заявленная высокая производительность. Проверим?
                                          Читать дальше →