15 апреля 2016 в 15:25

Opera Dragonfly в offline: маленькое полное руководство recovery mode

Сейчас мало кто задаётся вопросом: «А как вот эта штука будет работать без Интернета?». Ещё меньше есть тех, для кого автономная работа той или иной программы или инструмента является важной составной частью рабочего процесса. И совсем немногим хотелось бы заполучить в автономном режиме отладчик Opera Dragonfly под Opera 12 Presto.

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

Opera Dragonfly Local



Прежде всего, коротко о том,

С чего всё началось


В один из судьбоносных дней календаря, а именно 31 октября 2013 года компанией Opera Software ASA было объявлено о закрытии к 1 марта 2014 г. сервиса My Opera.
Всё, что на нынешний момент осталось от my.opera.com — это редирект на страничку www.opera.com/ru/whereismyopera с красноречивым криком в URI нашей боли: «Где моя Опера?!!».
Немножко фактов:

Opera Presto на самом деле до сих пор вполне годный браузер, особенно для скромных машин. Но вот это «ещё» в контексте «ещё работает» для Opera Dragonfly в свете эффективной политики компании делает очень высоким шанс, что однажды вдруг останешься без инструмента отладки. И тогда на этот светлый браузер с утроенной силой нахлынут закопатели. Хотя, имхо, и если по честному, современное содержание Интернета и мизинца IE8 не стоит. Не то, чтобы Оперы.

На этом лирическая часть закончена.

Как сделать Opera Dragonfly доступной локально


Пишу в контексте операционки Windows 7 64bit. Но справедливо будет для любой винды, и по большей части и для иных осей.

Общее начало


1. Открываем в Опере урл opera:config
2. Ищем «dragon» в поле поиска
3. Видим опцию «Developer Tools URL». По умолчанию установлена в https://dragonfly.opera.com/app/
4. Создаём папку, где хотим хранить заветный свой локальный Opera Dragonfly. Например C:\Opera\dragonfly.

Далее есть три рабочих пути.
Можно было, конечно, ограничиться первым попавшимся или оптимальным, но для полноты изложения и картины описываю все найденные возможности.
Как наиболее корректный и простой советую 2-й способ, пронумерованный под литерой B).

A) — Первый видимый путь, в лоб.


5. Открываем в той же Опере 12 ссылку dragonfly.opera.com/app
6. Видим сообщение вида «Ожидание подключения узла к порту 0»
7. Не обращаем на него внимания, жмём Ctrl+S, в диалоге выбираем «Имя файла» = «dragonfly», «Тип файла» = «XML-файл с изображениями». Сохраняем.
8. В папке, куда сохранили, видим файл «dragonfly.xml» и папку «dragonfly_files».
9. Перемещаем в C:\Opera\dragonfly\ файл dragonfly.xml и папку dragonfly_files.
10. Переименовываем dragonfly.xml в client-ru.xml
11. Прописываем в opera:config «Developer Tools URL» значение «file://localhost/C:/Opera/dragonfly/client-ru.xml»

B) — Более короткий и красивый путь.


5. Идём в ещё не убитое хранилище собраных зип версий Opera Dragonfly: dragonfly.opera.com/app/zips
6. Идём в default zips — latest и качаем себе желаемую локализацию dragonfly. Я скачивал client-ru.zip и client-en.zip
7. Распаковываем client-ru.zip в C:\Opera\dragonfly\. Получаем в корне этой папки файл client-ru.xml и две подпапки.
[7.1] Можно распаковать прямо туда же и иные локализации, например client-en.zip, это совместимо. По скриптам и xml контент архивов не пересекается, а css у всех локалей одинаковый.
8. Прописываем в opera:config «Developer Tools URL» значение «file://localhost/C:/Opera/dragonfly/client-ru.xml»

PS: Как подсказывает добрый комментатор тут rb.labtodo.com/page/use-opera-dragonfly-offline, можно даже не распаковывать архив, а прямо ввиде архива и оставить, прописав в Developer Tools URL нечто вроде file://localhost/c:\opera\client-ru.zip/client-ru.xml. Опера умеет работать с zip архивами как с каталогами.

С) — Путь настоящего воина


5. Идём в ещё не убитый репозиторий (есть форки!) github.com/operasoftware/dragonfly. Клонируем / качаем зип.
6. (зачёркнуто) Ридми нам заботливо подсказывает, что Стрекоза (Муха-Дракон) собирается чудо-сборщиком DragonKeeper (Хранителем Дракона) — github.com/operasoftware/dragonfly-build-tools. Клонируем / качаем зип.

Как оказалось, DragonKeeper собирать может, ну наверняка же, и крутая штука, и не только собирать… Но для цели «соберу ка я Стрекозу из сурсов» на самом деле необязателен. Т.к. в сурсах Стрекозы есть собственный питонский сборщик с хороводом поддержки в подпапке /tools

Но если кто решится продолжить своими силами развитие Dragonfly под Оперу Presto, местные мануалы и Стрекозы, и Кипера подскажут много полезного.

6. Качаем питонов. www.python.org/downloads Уберу кусок под спойлер, короче нам для сборки подойдёт 2.6.* — 2.7.*.
История о шишках на питонах
Сначала интуиция подсказывала мне, что стоит взять Python 2

Пробуем собрать под Python 2.7.11



И тут на тебе, UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026'
Потыркал немного, сказал, что я так не играю, и пошёл за другим питоном.

Пробуем собрать под Python 3.5.1


>python tools/dfbuild.py -dtsm src build
File «tools/dfbuild.py», line 393
except (IOError, os.error), why:
^
SyntaxError: invalid syntax

И далее-далее-далее.
Любой гуглозапрос скажет вам, что это одно из характерных проявлений несовместимости кода под 2-й питон под интерпретатором 3-го питона. Например можно полюбопытствовать тут — sebastianraschka.com/Articles/2014_python_2_3_key_diff.html

Кода вроде немного в питонячьих скриптах сборки Стрекозы…
Ради спортивного интереса, я было попробовал в полуручном режиме натравить регэкспы на сурсы:

except (.*)?, (\w+):
except \1 as \2:

raise\s+(.*)?, (\w+)
raise \1\(\2\)

(manually)
print
print\(

тоска…

Оно всё равно легло, но уж совсем с непонятной мне, новичку в питоне, ошибкой, и тут я окончательно понял что что-то я делаю не так :)
Предварительно, я конечно забэкапил исходное состояние папки /tools. Восстановил его и решил чуть попристальней попробовать собрать под 2-м.

Пробуем собрать под Python 2.7.11, попытка 2.


File "tools/dfbuild.py", line 458, in _convert_imgs_to_data_uris
temp.write(line.encode("ascii"))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2026' in position 12: ordinal not in range(128)


Ладно… google, stackoverflow,…

Попробовал поменять методом тыка «ascii» на «utf-8»:
File "tools/dfbuild.py", line 465, in _convert_imgs_to_data_uris
fp.write(temp.read().encode("utf-8"))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 126562: ordinal not in range(128)

И ещё несколько попыток методом «Угадай Мелодию».

И тут я вернулся к началу, — а что за символ-то \u2026?
Ellipsis… так значит, многоточие говорите.
А код, который валится у нас, отвечает за обновление css-ки билда Dragonfly в процессе встройки туда base64 картинок.
И что там в необновившейся /style/dragonfly.css?
Ага!!! И правда, есть там оно, символ многоточия! В бинарной utf-8 кодировке.
(Кстати, как потом выяснилось, там ещё есть пару символов длинного тире)

И я нашёл как починить процесс билда! Только это уже вынесу из под спойлера наружу. Итак:

В оригинальном виде питонячий скрипт собирать Стрекозу не хочет.
Чтобы заработало, надо пофиксить в tools/dfbuild.py 458-ю строку с
temp.write(line.encode("ascii"))
на
temp.write(line.encode("ascii", "xmlcharrefreplace"))
Полезной информацией к размышлению снабдила дока docs.python.org/2/howto/unicode.html
Далее команда для сборки отработает нормально: python tools/dfbuild.py -dtsm src build

Можно склонироваться с master моего форка github.com/FlameStorm/dragonfly уже с этим фиксом. В официальный закинул пулл-реквест.
Отмечу, что собирается Dragonfly довольно долго. И большая часть работы приходится на минификацию js под каждую локаль.

7. Dragonfly собралась в только что созданной подпапочке /build. Берём оттуда файлы client-ru.xml, style/dragonfly.css, script/dragonfly-ru.js
8. Остальное воину объяснять уже излишне.

Результат


Opera Dragonfly Local works!

It's alive, alive!

Работают все три метода.
И да, это было увлекательно!

PS: Дойти рукам до публикации этого небольшого мана помог, уже и нежданный, выход обновления Opera 12.18

PPS: В заключение, упомяну про для многих уже долгожданный выход релиза Vivaldi — лучик света в тёмном царстве! Спасибо старой-новой команде во главе с Йоном фон Тэчнером и отдельно за освещение событий Илье Shpankov — тёплый вам привет и успехов!
FlameStorm @FlameStorm
карма
5,0
рейтинг 0,0
Разработчик
Похожие публикации
Самое читаемое

Комментарии (14)

  • +2
    Эх, жаль Dragonfly нельзя к другим браузерам прикрутить.
  • 0
    Спасибо! Знал про сохранение, но оно казалось некрасивым способом, про хранилище версий не знал.
  • +2
    Жаль что потеряли оригинальную оперу :(
    • 0
      Vivaldi уже почти торт, хотя, пока ещё пироженное )
      Есть некоторые баги, но в общем вполне можно пользоваться.
      • +3
        Vivaldi тортом не будет никогда, у него хромиум под капотом. А это значит что на компьютере, где в старой опере можно было открыть сотни вкладок, в фаерфоксе — десятки, Вивальди сожрёт всю память и вызовет подвисания всей системы уже после трёх-четырёх.
        • 0
          Да, я знаю, почему и как старая Опера рулит, я пользовался ею, как основным браузером, с 4й версии, если не раньше.
      • +2
        Пользоваться можно и виндовой командной строкой, но от этого она не станет удобной. Да, Vivaldi ближе к Опере Престо, чем остальные браузеры. Километра на полтора. При оставшемся расстоянии в три парсека…
        • 0
          А вот тут было бы интересно узнать, чего от оригинальной Оперы не хватает и что не лечится расширениями?
          Для меня это выделение ссылки, решается с «Select like a Boss» и свойства картинок.
          • +5
            Ну, сходу можно назвать низкую ресурсоёмкость и очень шустрый, отзывчивый интерфейс. Ни хромобраузеры, ни Firefox на это не способны, интерфейс в них всегда подтормаживает на какие-то доли секунды, которые невозможно замерить, но которые явственно отличают «мгновенную реакцию» от «лёгкой задумчивости». Работа с большим числом вкладок: три окна по 40-50 вкладок в каждом — Престо справляется одной левой. И все вкладки при этом загружены, то есть при переключении я не получу неожиданную перезагрузку страницы с потерей всех данных в ней или со сбросом статуса прочитанности постов.

            Далее, мощнейшие возможности по настройке интерфейса. Полная кастомизация всех меню и подменю (именно всех: главное меню, контекстные меню — отдельно для страницы, для ссылок, для выделенного текста, для картинок, для картинок-ссылок…, куча прочих меню, плюс возможность создания собственных подменю для вызова их в дальнейшем по клавише или нажатию кнопки), горячих клавиш (опять-таки, в зависимости от контекста), панелей инструментов, мышиных жестов. И вся эта настройка — это не просто «повесить команду А на кнопку Б», а фактически собственный язык, позволяющий комбинировать выполнение нескольких команд (через И, через ИЛИ, условное выполнение, отдельные действия для простого нажатия и для длинного нажатия…), добавлять произвольные инструкции типа запуска внешних программ, открытия урлов, запуска JS-скриптов в контексте текущей страницы, открытия подменю и чёрт знает чего ещё (я так полностью эти возможности и не освоил).

            Ну и огромное количество всяких мелочей, которые даже пытаться искать в расширениях сторонних браузеров нет смысла, потому что даже если они и есть, пока все их установишь и настроишь, браузер превратится в совершенно неповоротливого монстра (я уж не говорю про постоянный риск слетания то одних, то других расширений при обновлении браузера). Например, боковая панель с различными инструментами (в Vivaldi не все из них, и управление там не такое удобное); страница управления загрузками, которая может быть как в составе боковой панели, так и самостоятельной вкладкой; предустановленные режимы принудительной смены стилей страницы для улучшения читаемости или отладки разметки; режим подгонки страницы по ширине; собственные прокси, независимые от системных; отдельные настройки для каждого сайта… В общем, продолжать можно очень долго, потянет на статью. И это будет только то, что используется у меня, а я использую далеко не 100% возможностей Оперы.
            • +1
              Согласен, почти без дополнений. Особенно по отзывчивости интерфейса. И по тому, как хромовые паршиво отрабатывают быстрые действия горячими клавишами в адресной строке (задержки появления адреса и прочее).

              По поводу общей производительности у меня проблем нет из-за обилия оперативной памяти. У Хромовых решений тоже есть плюс — использование всех ядер процессора. Опера же однопоточна и это уже сказывалось.
              • +1
                Кстати да, Опера даже 12 версии (это в 2012-2013 годах-то) умудрилась остаться фактически без адекватной работы с многоядерностью.

                Тут позволю себе такую ремарку WinAPI-ста.
                Опера на самом деле очень даже многопоточна (как это: threads). Да, она однопроцессна (process).
                Может, проблема в том, что Опера Престо кроссплатформенна, и в частности собиралась и под Linux. И именно потому разработчики не смогли или не захотели выжать весь потенциал для виндовой версии. В линуксе же изначально не было понятия «поток», а то, что более-менее устаканилось со временем с 2002 pthread, насколько активно используется на практике и насколько удобно в плане кроссплатформенного кода затрудняюсь судить. Может кто-то подскажет.

                Я честно говоря не могу понять, почему в Опере под Windows не захотели использовать функции
                — Получения общего числа процессорных ядер системы («количество процессоров») GetSystemInfo (см. SYSTEM_INFO.dwNumberOfProcessors)
                — Установки предпочитаемого(ых) ядра(ядер) для конкретного потока SetThreadAffinityMask (поддерживается адресация до 64 ядер)
                — Установки приоритетов для потоков SetThreadPriority

                Итого совершенно очевидна возможность более эффективной работы параллельно хотя бы разным вкладкам:
                — Менеджер вкладок может распределять их по разным ядрам. Как это сделать лучше, и куда отнести главный и служебные потоки браузера отдельная тема.
                — Менеджер вкладок может притушать все вкладки в приоритет ниже среднего, а активную вкладку в приоритет выше среднего. Уйдут дурные тормоза, которые генерит какая-нибудь реклама или кривой скрипт на стопицотой вкладке, когда ты фильм смотришь или на любимом сайте торчишь.

                По хорошему, можно ведь развести у вкладки на разные ядра рендеринг и яваскрипт, например. При необходимости, конечно используя мьютексы/семафоры и подобное.

                Точно можно на отдельное ядро выносить почтовик M2 Оперы.

                Иначе получается досадная штука, — вот у меня 8 физических ядер (у кого-то гипертридинговых, у кого-то 12, 6, 4, 3 и даже 2), но Опера, к сожалению, будет работать только в часть силы — на одном ядре. (Проверял. Исключение тут только в плагинах типа flash или java — они запускаются под контролем специального процесса opera_plugin_container.) А могла бы малой кровью добиться значимого прироста отзывчивости и шустроты.

                Может ещё не вечер, и полноценный преемник Оперы 12 ещё будет.
                Например Vivaldi победит наследие и привычки Blink.
                Ну или выйдет Опера 12.50.
            • +3
              С теплотой вспоминаю ещё и пользовательские скрипты, которые выполнялись сразу при загрузке страницы (а не когда страница уже полностью загружена, как в Greasemonkey), быстрый поиск в боковой панели, позволяющий, например, закрыть или обновить сразу все вкладки одного домена, боковая панель «сведения», в которой было удобно смотреть скрипты, таблицы стилей и фреймы страницы… и многое другое.

              Можно же сделать расширение на firefox, которое сделает из него подобие оперы (не интерфейс, а функционал), позаимствовав код существующих расширений. Неужели нет опытных фанатов старой доброй оперы, которые бы за это взялись?
              • +1
                Они как раз делают Vivaldi.
      • 0
        Вот завезут порт DragonFly под виальди — и цены ему не будет! Ибо хромовский отладчик есть и в хроме.

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Интересные публикации