Друзья мои, этот небольшой мануал — для всех из вас. И если одним он покажется вполне занимательным, а для других уже пройденным этапом, то для третьих станет откровением. Любопытствующие, конечно, тоже велкам под кат.
Прежде всего, коротко о том,
С чего всё началось
В один из судьбоносных дней календаря, а именно 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. Клонируем / качаем зип.
Как оказалось, 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\(
тоска…
Оно всё равно легло, но уж совсем с непонятной мне, новичку в питоне, ошибкой, и тут я окончательно понял что что-то я делаю не так :)
Предварительно, я конечно забэкапил исходное состояние папки /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!
Работают все три метода.
И да, это было увлекательно!
PS: Дойти рукам до публикации этого небольшого мана помог, уже и нежданный, выход обновления Opera 12.18
PPS: В заключение, упомяну про для многих уже долгожданный выход релиза Vivaldi — лучик света в тёмном царстве! Спасибо старой-новой команде во главе с Йоном фон Тэчнером и отдельно за освещение событий Илье Shpankov — тёплый вам привет и успехов!
Комментарии (14)
KorDen32
15.04.2016 19:33Спасибо! Знал про сохранение, но оно казалось некрасивым способом, про хранилище версий не знал.
vasili111
15.04.2016 21:53+2Жаль что потеряли оригинальную оперу :(
Grox
16.04.2016 01:15Vivaldi уже почти торт, хотя, пока ещё пироженное )
Есть некоторые баги, но в общем вполне можно пользоваться.Jogger
16.04.2016 11:55+3Vivaldi тортом не будет никогда, у него хромиум под капотом. А это значит что на компьютере, где в старой опере можно было открыть сотни вкладок, в фаерфоксе — десятки, Вивальди сожрёт всю память и вызовет подвисания всей системы уже после трёх-четырёх.
Grox
16.04.2016 21:05Да, я знаю, почему и как старая Опера рулит, я пользовался ею, как основным браузером, с 4й версии, если не раньше.
CaptainFlint
16.04.2016 11:58+2Пользоваться можно и виндовой командной строкой, но от этого она не станет удобной. Да, Vivaldi ближе к Опере Престо, чем остальные браузеры. Километра на полтора. При оставшемся расстоянии в три парсека…
Grox
16.04.2016 21:08А вот тут было бы интересно узнать, чего от оригинальной Оперы не хватает и что не лечится расширениями?
Для меня это выделение ссылки, решается с «Select like a Boss» и свойства картинок.CaptainFlint
16.04.2016 22:54+5Ну, сходу можно назвать низкую ресурсоёмкость и очень шустрый, отзывчивый интерфейс. Ни хромобраузеры, ни Firefox на это не способны, интерфейс в них всегда подтормаживает на какие-то доли секунды, которые невозможно замерить, но которые явственно отличают «мгновенную реакцию» от «лёгкой задумчивости». Работа с большим числом вкладок: три окна по 40-50 вкладок в каждом — Престо справляется одной левой. И все вкладки при этом загружены, то есть при переключении я не получу неожиданную перезагрузку страницы с потерей всех данных в ней или со сбросом статуса прочитанности постов.
Далее, мощнейшие возможности по настройке интерфейса. Полная кастомизация всех меню и подменю (именно всех: главное меню, контекстные меню — отдельно для страницы, для ссылок, для выделенного текста, для картинок, для картинок-ссылок…, куча прочих меню, плюс возможность создания собственных подменю для вызова их в дальнейшем по клавише или нажатию кнопки), горячих клавиш (опять-таки, в зависимости от контекста), панелей инструментов, мышиных жестов. И вся эта настройка — это не просто «повесить команду А на кнопку Б», а фактически собственный язык, позволяющий комбинировать выполнение нескольких команд (через И, через ИЛИ, условное выполнение, отдельные действия для простого нажатия и для длинного нажатия…), добавлять произвольные инструкции типа запуска внешних программ, открытия урлов, запуска JS-скриптов в контексте текущей страницы, открытия подменю и чёрт знает чего ещё (я так полностью эти возможности и не освоил).
Ну и огромное количество всяких мелочей, которые даже пытаться искать в расширениях сторонних браузеров нет смысла, потому что даже если они и есть, пока все их установишь и настроишь, браузер превратится в совершенно неповоротливого монстра (я уж не говорю про постоянный риск слетания то одних, то других расширений при обновлении браузера). Например, боковая панель с различными инструментами (в Vivaldi не все из них, и управление там не такое удобное); страница управления загрузками, которая может быть как в составе боковой панели, так и самостоятельной вкладкой; предустановленные режимы принудительной смены стилей страницы для улучшения читаемости или отладки разметки; режим подгонки страницы по ширине; собственные прокси, независимые от системных; отдельные настройки для каждого сайта… В общем, продолжать можно очень долго, потянет на статью. И это будет только то, что используется у меня, а я использую далеко не 100% возможностей Оперы.Grox
16.04.2016 23:16+1Согласен, почти без дополнений. Особенно по отзывчивости интерфейса. И по тому, как хромовые паршиво отрабатывают быстрые действия горячими клавишами в адресной строке (задержки появления адреса и прочее).
По поводу общей производительности у меня проблем нет из-за обилия оперативной памяти. У Хромовых решений тоже есть плюс — использование всех ядер процессора. Опера же однопоточна и это уже сказывалось.FlameStorm
18.04.2016 15:49+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.
Darth_Malok
18.04.2016 10:48+3С теплотой вспоминаю ещё и пользовательские скрипты, которые выполнялись сразу при загрузке страницы (а не когда страница уже полностью загружена, как в Greasemonkey), быстрый поиск в боковой панели, позволяющий, например, закрыть или обновить сразу все вкладки одного домена, боковая панель «сведения», в которой было удобно смотреть скрипты, таблицы стилей и фреймы страницы… и многое другое.
Можно же сделать расширение на firefox, которое сделает из него подобие оперы (не интерфейс, а функционал), позаимствовав код существующих расширений. Неужели нет опытных фанатов старой доброй оперы, которые бы за это взялись?
Xao
18.04.2016 09:16Вот завезут порт DragonFly под виальди — и цены ему не будет! Ибо хромовский отладчик есть и в хроме.
Jogger
Эх, жаль Dragonfly нельзя к другим браузерам прикрутить.