Now, few people ask the question: "But how will this thing work without the Internet?" Even less are those for whom the autonomous work of a program or tool is an important part of the work process. And very few people would like to get Opera Operafly debugger under Opera 12 Presto offline.
My friends, this little manual is for all of you. And if one seems to be quite entertaining, but for others it is already a past stage, then for others it will be a revelation. Curious, of course, also well under the cat.

')
First of all, briefly,
How it all began
On one of the fateful days of the calendar, namely, on October 31, 2013, Opera Software ASA announced the closure of the My Opera service by March 1, 2014.
All that is left at the moment from
my.opera.com is a redirect to the
www.opera.com/ru/whereismyopera page with an eloquent cry in the URI of our pain: “Where is my Opera? !!”.
Some facts:
Opera Presto is actually still quite a good browser, especially for modest machines. But this “still” in the context of “still working” for Opera Dragonfly in the light of the company's effective policy makes it very high the chance that one day you will be left without a debugging tool. And then on this light browser, the diggers will rush in with the trebled force. Although, IMHO, and if you honestly, the modern content of the Internet and the little finger IE8 is not worth it. Not that of the Opera.
On this lyric part is over.
How to make Opera Dragonfly available locally
I am writing in the context of Windows 7 64bit OSes. But it will be fair for any Windows, and for the most part and for other axes.
Common beginning
1. Open opera in Opera Opera: config
2. We are looking for “dragon” in the search field
3. See the “Developer Tools URL” option. The default is
https://dragonfly.opera.com/app/4. Create a folder where you want to store your local Opera Dragonfly cherished. For example C: \ Opera \ dragonfly.
Then there are three working ways.
It was possible, of course, to limit oneself to the first one or to the optimal one, but for completeness of the exposition and the picture I describe all the possibilities found.
As the most correct and simple I advise the 2nd way, numbered under the letter
B) .
A) - The first visible path, in the forehead.
5. Open in the same Opera 12 link
dragonfly.opera.com/app6. We see a message like "Waiting for a node to connect to port 0"
7. We do not pay attention to it, press Ctrl + S, in the dialog select “File name” = “dragonfly”, “File type” = “XML-file with images”. We save.
8. In the folder where you saved, we see the file “dragonfly.xml” and the folder “dragonfly_files”.
9. Move to C: \ Opera \ dragonfly \ dragonfly.xml file and dragonfly_files folder.
10. Rename dragonfly.xml to client-ru.xml
11. We register in opera: config “Developer Tools URL” the value of “file: // localhost / C: /Opera/dragonfly/client-ru.xml”
B) - Shorter and more beautiful way.
5. Go to the not yet dead repository of assembled zip versions of Opera Dragonfly:
dragonfly.opera.com/app/zips6. Go to the default zips - latest and download the desired localization of dragonfly. I downloaded client-ru.zip and client-en.zip
7. Unpack client-ru.zip in C: \ Opera \ dragonfly \. We get in the root of this folder the file client-ru.xml and two subfolders.
[7.1] It is possible to unpack directly to the same place and other localizations, for example client-en.zip, this is compatible. According to the scripts and xml, the content of the archives is not intersected, and the css is the same for all locales.
8. We register in opera: config "Developer Tools URL" the value of "file: // localhost / C: /Opera/dragonfly/client-ru.xml"
PS: As the good commentator here
suggests rb.labtodo.com/page/use-opera-dragonfly-offline , you can not even unpack the archive, but leave it directly in the form of the archive, writing something like
file://localhost/c:\opera\client-ru.zip/client-ru.xml
in the Developer Tools URL
file://localhost/c:\opera\client-ru.zip/client-ru.xml
. Opera can work with zip archives as with directories.
C) - The path of this warrior
5. Go to the not yet dead repository (there are forks!)
Github.com/operasoftware/dragonfly . Clone / download zip.
6. (crossed out) Reedmi us carefully suggests that Dragonfly (Dragon Fly) is going to be a miracle-assembler DragonKeeper (Dragon Keeper) -
github.com/operasoftware/dragonfly-build-tools . Clone / download zip.
As it turned out, DragonKeeper can collect, well, surely, and cool stuff, and not only collect ... But for the purpose of “gathering a dragonfly from a surse”, it is not really necessary. Since Dragonfly has its own Python collector with support in the / tools subfolder
But if someone decides to continue the development of Dragonfly under the Presto Opera on his own, local manuals and Dragonflies, and Keeper will prompt a lot of useful things.
6. We swing pythons.
www.python.org/downloads I will remove the piece under the spoiler, in short, 2.6. * - 2.7. *.
The story of cones on pythonsAt first, intuition told me that I should take Python 2
We try to build under Python 2.7.11
And here on you, UnicodeEncodeError: 'ascii' codec can't encode character u '\ u2026'
Took a little bit, said that I did not play, and went after another python.
We try to build under 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
And further, further, further.
Any guglozapros will tell you that this is one of the characteristic manifestations of the incompatibility of the code under the 2nd python under the interpreter of the 3rd python. For example, you can ask here -
sebastianraschka.com/Articles/2014_python_2_3_key_diff.htmlCode like a little bit in the dragonfly build scripts ...
For the sake of sporting interest, I tried in half-manual mode to incite regexps on surses:
except (. *) ?, (\ w +):
except \ 1 as \ 2:
raise \ s + (. *) ?, (\ w +)
raise \ 1 \ (\ 2 \)
(manually)
print
print \ (
yearning…
It lay down anyway, but absolutely with an incomprehensible to me, a novice in python, a mistake, and then I finally realized that something I was doing wrong :)
Previously, I of course saved the initial state of the / tools folder. I restored it and decided to try to collect it a little more closely under the 2nd one.
We try to build under Python 2.7.11, attempt 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)
Okay ... google, stackoverflow, ...
I tried changing the “ascii” to “utf-8” method:
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)
And a few more attempts using the “Guess the Melody” method.
And then I went back to the beginning - and what kind of character is \ u2026?
Ellipsis ... so mean, ellipsis speak.
And the code that falls down with us is responsible for updating the css of the Dragonfly build in the process of embedding the base64 images there.
And what's in the newest /style/dragonfly.css?
Yeah !!! And the truth is, there it is, the symbol of the dot! In binary utf-8 encoding.
(By the way, as it turned out later, there are still a couple of long dash characters)
And I found how to fix the build process! Only this is already taken out from under the spoiler. So:
In its original form, the python-script does not want to collect the Dragonfly.
To make it work, you need to fix in the tools / dfbuild.py 458th line with
temp.write(line.encode("ascii"))
on
temp.write(line.encode("ascii", "xmlcharrefreplace"))
Useful information to think about supplied
Doc docs.python.org/2/howto/unicode.htmlNext, the build command will work fine:
python tools/dfbuild.py -dtsm src build
python tools/dfbuild.py -dtsm src build
You can bend with the master of my fork
github.com/FlameStorm/dragonfly already with this fix. In the official threw a pull-request.
I note that Dragonfly is going for quite some time. And most of the work falls on the minification of js for each locale.
7. Dragonfly gathered in the newly created subfolder / build. We take files client-ru.xml, style / dragonfly.css, script / dragonfly-en.js from there
8. The rest is already unnecessary to explain to the soldier.
Result

It's alive, alive!
All three methods work.
And yes, it was fascinating!
PS: Reach hands before the publication of this small mana helped, already and unexpected, the release of the update
Opera 12.18PPS: In conclusion, I would like to mention for many the already long-awaited
release of Vivaldi - a ray of light in the dark kingdom! Thanks to the old-new team led by Jon von Tachner and separately for the coverage of events Ilya
Shpankov - warm greetings to you and success!