Сейчас мало кто задаётся вопросом: «А как вот эта штука будет работать без Интернета?». Ещё меньше есть тех, для кого автономная работа той или иной программы или инструмента является важной составной частью рабочего процесса. И совсем немногим хотелось бы заполучить в автономном режиме отладчик Opera Dragonfly под Opera 12 Presto.
Друзья мои, этот небольшой мануал — для всех из вас. И если одним он покажется вполне занимательным, а для других уже пройденным этапом, то для других станет откровением. Любопытствующие, конечно, тоже велкам под кат.
Прежде всего, коротко о том,
С чего всё началось
В один из судьбоносных дней календаря, а именно 31 октября 2013 года компанией Opera Software ASA было объявлено о закрытии к 1 марта 2014 г. сервиса My Opera.
Всё, что на нынешний момент осталось от my.opera.com — это редирект на страничку www.opera.com/ru/whereismyopera с красноречивым криком в URI нашей боли: «Где моя Опера?!!».
Немножко фактов:
- my.opera.com — портал My Opera убит
- blogs.opera.com — немного теплится, трансформировался в www.opera.com/blogs/russia
- portal.opera.com — закрыт, висит заглушка www.opera.com/ru/o/news-portal
- widgets.opera.com — 403 Forbidden
- labs.opera.com — 400 Bad Request
- link.opera.com — закрыто, заглушка www.opera.com/ru/whereisoperalink
- operaunite.com — закрыто. Хотя на самом деле было очень интересное начинание по настоящему p2p между браузерами
- dev.opera.com — живое, но уже практически не об Opera Presto
- irc.opera.com — жива, старушка родная! (открывать не через http, а как сервер IRC, конечно)
- …
- dragonfly.opera.com — и, собственно, ещё живой инструмент отладки для Opera Presto
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.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. Остальное воину объяснять уже излишне.
Результат
It’s alive, alive!
Работают всё три метода.
И да, это было увлекательно!
ссылка на оригинал статьи https://geektimes.ru/post/274240/
Добавить комментарий