Opera dragonfly в offline маленьке повне керівництво, savepearlharbor

Зараз мало хто задається питанням: «А як ось ця штука буде працювати без Інтернету?». Ще менше є тих, для кого автономна робота тієї чи іншої програми або інструменту є важливою складовою частиною робочого процесу. І зовсім небагато чим хотілося б отримати в автономному режимі відладчик Opera Dragonfly під Opera 12 Presto.

Друзі мої, цей невеликий мануал - для всіх з вас. І якщо одним він здасться цілком цікавим, а для інших вже пройденим етапом, то для інших стане одкровенням. Допитливі, звичайно, теж велкам під кат.

Перш за все, коротко про те,

З чого все почалося

На цьому лірична частина закінчена.

Як зробити Opera Dragonfly доступною локально

Пишу в контексті операційки Windows 7 64bit. Але справедливо буде для будь-якої вінди, і здебільшого і для інших осей.

Загальна початок

Далі є три робочих шляху.
Можна було, звичайно, обмежитися першим-ліпшим або оптимальним, але для повноти викладу і картини описую всі знайдені можливості.
Як найбільш коректний і простий раджу 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»

С) - Шлях справжнього воїна

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 not 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

Коду на зразок трохи в пітонячьіх скриптах збірки Бабки ...
Заради спортивного інтересу, я було спробував в напівручному режимі нацькувати регекспи на сурси:

except (. *). (\ W +):
except \ 1 as \ 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 not 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 not 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!

Працюють все три методу.
І так, це було захоплююче!