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

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

Время на прочтение 6 мин
Количество просмотров 9.7K
Сейчас мало кто задаётся вопросом: «А как вот эта штука будет работать без Интернета?». Ещё меньше есть тех, для кого автономная работа той или иной программы или инструмента является важной составной частью рабочего процесса. И совсем немногим хотелось бы заполучить в автономном режиме отладчик 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 — тёплый вам привет и успехов!
Теги:
Хабы:
+15
Комментарии 14
Комментарии Комментарии 14

Публикации

Истории

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

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн