Про Image / Motion Deblur

На конференции Adobe Max 2011 было показало демонстрационное видео с одним из способов того, как можно убрать с фотографий эффект смазывания (очень актуальная тема для фотоаппаратов типа «мыльница»). Для этой цели в Photoshop’е был применен неизвестный до этого момента фильтр Adobe Image Deblur. Эффект от увиденного поразил всех участников, сидевших в зале. По сути полностью смазанное изображение восстановилось до чуть ли не до своего исходного состояния  не говоря уже о том, что сами объекты съемки стали, как и положено, четкими. Все ожидали, что новый фильтр появится в Photoshop CS5, однако этого не произошло. Потом  на официальном форуме Adobe был размещен ответ, что данный фильтр является экспериментальным и что в ближайшее время он не будет представлен в Photoshop’е. Затем, вроде бы как он стал доступен для подписчиков Creative Cloud, и вот буквально в этом месяце поступила информация о том, что фильтр все же будет доступен прямо из коробки в Photoshop CS7.

Тем не менее во многих источниках пишут, что фильтр от Adobe основывается на некоторых алгоритмах, примененных в программе «Robust Motion Deblur«, которая использует так называемый метод слепой деконволюции (обратная свертка), позволяющий вычислять направления смещения изображения (т.е. того самого смаза) и на основе этого выполнять свертку. Конечно, данный метод не во всех случаях позволяет избавится от смазывания  (волшебной таблетки, как бы нам хотелось, все еще не существует), но в некоторых случаях показывает весьма неплохие результаты. Другие же говорят, что Adobe использует свои собственные наработки и технологии в данном направлении. Официальная презентация Creative Suite 7 пройдет уже 6 мая, на которой, надеемся, будет более подробно рассказано о технической составляющей фильтра по избавлению смазывания.

Я нашел исходное изображение, которое применялось в демонстрационном видео у Adobe и прогнал его через программу Robust Motion Deblur и вот что из этого получилось:

Motion_Deblur_1Motion_Deblur_2

Также существует проект SmartDeblur, который в некоторых моментах дает даже лучший результат. И при этом программа абсолютно бесплатна!

[macOS] Twitter-клиент обновился до версии 2.2.0

Буквально несколько дней назад обновился официальный клиент Twitter для Mac’ов. Стоит отметить, что последняя версия вышла более года назад и вроде бы даже где-то проскакивала информация о том, что официальный клиент уже не будет иметь поддержки в развитии. Тем не менее, новая версия программы вышла и стала поддерживать графику высокого разрешения (актуально для Retina-экранов), а также обзавелась поддержкой дополнительных языков, в том числе и русским. Без ляпов в русификации, как обычно это бывает с проектами подобного рода, не обошлось. Так, к примеру, в разделе поиска кнопка «Сохранить» гордо именуется как «Сохранит«, а в меню «Окно» -> «Подробнее о пользователе» значится пункт «Profile«, вместо «Профиль».

Кстати, вчера, при попытке отредактировать профиль, выскочило окно об ошибке (правда сегодня такое уж не повторяется).

Twitter_error

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

[Windows] Про ошибку 0x0000007b в Parallels Desktop

Встала цель перенести образ системы (Windows 7) с рабочего компьютера на виртуальную машину Paralalles Desktop. Хорошим решением для решения задач подобного рода является Acronis True Image.

Acronis предоставляет на свои продукты пробный период, который к удивлению, не ограничивает никакие наиболее важные моменты в работе, за что искреннее спасибо компании-разработчику. Недавно пришлось пользоваться Stellar Phoenix Data Recovery, так ее ознакомительный смысл заключался в том, чтобы найти удаленные файлы, и предложить восстановить их уже в полной (купленной) версии. Не имея предстовления о том, как программа справится с восстановлением удаленных файлов, покупать кота в мешке совершенно нет никакого желания. Воспользовавшись продуктом Acronis True Image я смог решить поставленные задачи и, если они еще будут передо мной возникать, безсомнений, приобрету полную версию.

Перенос системы прошел успешно, хотя и занял довольно много времени, а вот запуск Windows 7 был обречен на провал: сразу же после экрана загрузки система крашилась с BSOD. Пришлось изрядно потрудится, чтобы сделать скриншот BSOD, т.к. он после своего появления система практически мгновенно уходила в ребут. Анализ BSOD показал, что код ошибки был 0x0000007b, который свидетельствует о том, что система была перенесена на другое оборудование (к примеру, новая материнская плата). В моем случае проблема возникала из-за неправильно выбранного контроллера жесткого диска. По умолчанию в настройках виртуальной мишине значился SATA 0:2. После того, как я изменил на IDE 0:0, система успешно стартовала. Мне весьма повезло, что все так легко обошлось и не пришлось шаманить с LiveCD, переносом файлов драйверов, правкой реестра и пр.

Windows7_BSOD

[AutoIt] Поиск и замена строк в бинарном файле

По работе есть необходимость изменять в бинарном файле последовательность байт. Не спрашивайте зачем, это все равно секрет =)

Т.к. руками это делать ну очень не хочется, то на помощь приходит… AutoIt. Именно он позволил без каких либо напрягов выполнить поставленную задачу. Да и вообще, AutoIt — это замечательное средство не только для тестировщика, но и для всех тех, кому не чужда тема автоматизации процессов.

$exe = "file_name.exe"
 
$file = FileOpen($exe)
$read = FileRead($file)
FileClose($file)
 
$find = BinaryToString("0x00000000000000000000000000000000000")
$replace = BinaryToString("0x00000000000000000000000000000000001")
 
$read = StringReplace($read, $find, $replace)
If @extended > 0 Then
   ;MsgBox(64, 'Патчер', 'Вхождение найдено, файл пропатчен')
Else
   Exit 1
   ;MsgBox(64, 'Патчер', 'Вхождений нет, файл не пропатчен')
EndIF
 
$file = FileOpen($exe, 2)
FileWrite($file, $read)
FileClose($file)

[Inno Setup] Удаление дефолтных страниц

[setup]
DisableDirPage=true
DisableFinishedPage=true
DisableProgramGroupPage=true
DisableReadyMemo=true
DisableReadyPage=true
DisableStartupPrompt=true
DisableWelcomePage=true

[iTunes] Про режим визуализации

Во многих музыкальных плеерах есть ресторанная поддержка визуализации музыки (будь то Windows Media Player или Winamp), которая под ритм музыки выводит красивые узоры, фигуры и много чего еще в зависимости от настроек.

iTunes также не обделен визуализатором, который включается по Ctrl+T или же путем выбора соответствующего пункта в меню «Вид». Настроить визуализатор можно с помощью клавиш:

M — изменяет алгоритм визуализации
P — изменяет цветовую палитру
I — отображает внизу слева информацию о текущей песне
F — замораживает текущее состояние эффекта
L — блокирует передвижение камеры
N — включает режим фоновой туманности
? — вызывает общую справку по командам

2013-01-25_165912

[Inno Setup] Автоматическое удаление предыдущей версии

Задача: при установки новой версии программы автоматически деинсталлировать старую.

Решение: в секцию [Code] добавить:

function GetUninstallString(): String;
var
  sUnInstPath: String;
  sUnInstallString: String;
begin
  sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
  sUnInstallString := '';
  if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
    RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
  Result := sUnInstallString;
end;
 
function IsUpgrade(): Boolean;
begin
  Result := (GetUninstallString() <> '');
end;
 
function UnInstallOldVersion(): Integer;
var
  sUnInstallString: String;
  iResultCode: Integer;
begin
// Return Values:
// 1 - uninstall string is empty
// 2 - error executing the UnInstallString
// 3 - successfully executed the UnInstallString
 
  // default return value
  Result := 0;
 
  // get the uninstall string of the old app
  sUnInstallString := GetUninstallString();
  if sUnInstallString <> '' then begin
    sUnInstallString := RemoveQuotes(sUnInstallString);
    if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
      Result := 3
    else
      Result := 2;
  end else
    Result := 1;
end;
 
procedure CurStepChanged(CurStep: TSetupStep);
begin
  if (CurStep=ssInstall) then
  begin
    if (IsUpgrade()) then
    begin
      UnInstallOldVersion();
    end;
  end;
end;

Источник: ссылка

[Inno Setup] Добавление пункта в меню «Пуск»

Задача: добавить в меню «Пуск» произвольный пункт, к примеру, URL-ярлык на страницу покупки программы.

Решение: в секцию [Icon] добавить:

Name: "{group}\Upgrade to PRO version"; Filename: "{#BuyURL}"

Баг локализации в Instagram

В недавно обновленной версии Instagram (начиная с версии 3.4.0) добавилась поддержка локализации для 25 языков, в том числе и русском. К сожалению, без ляпов не обошлось: некоторые переведенные слова оказались явно длиннее их англоязычных аналогов, в результате чего они стали «накладываться» на другие слова. Могу с большой уверенностью предположить, что ответственные за локализацию приложения даже не удосужились посмотреть, как же стал выглядеть UI на других языках, ибо такую проблему не заметить просто невозможно.

instagram2 instagram

Про iTunes Match

Приобрел годовую подписку на iTunes Match. Цена невелика и составляет 800 руб. Преимущества очевидны: доступность музыки на всех Apple-устройствах; скачивается лишь то, что слушаем (т.е. не придется держать локально десятки ГБ музыки, все хранится в облаке); высокая степень совпадений с уже имеющимися в iTunes музыкальными композициями (соответственно, треки заменяются на более качественную по звучанию музыку). Кто-то говорит, что iTunes Match — это неофициальная легализация пиратской музыки, но я этого мнения не придерживаюсь. Все таки покупая музыку в том же iTunes, вы получаете файл с DRM-защитой от копирования, которая также подтверждает факт ее покупки.

Чтобы избежать хаоса после импорта музыки в iTunes перед отправкой в iCloud (особенно тем, кто никогда еще не использовал iTunes как медиплеер), можно проделать следующее:

1. Создать в iTunes нужный плейлист, перетащить туда соответствующие музыкальные файлы
2. Выделить в плейлисте эти файлы, ПКМ ->; «Загрузить в iCloud». После этих действий начнет работать iTunes Match: музыка будет просканирована, и если она уже имеется в магазине iTunes, то напротив трека появится статус «Совпадение», в противном случае файлы, у которых отсутствуют совпадения, будут загружены в iCloud, а напротив трека появится статус «Выгруженные».
3. Повторять пункты 1-2 до тех пор, пока не перенесете все музыкальные треки

Хорошую инструкцию по работе iTunes Match можно также найти здесь.

P.S.: локализация хромает…

iTunes_match