windows
zip: https://github.com/hydrusnetwork/hydrus/releases/download/v288/Hydrus.Network.288.-.Windows.-.Extract.only.zip
exe: https://github.com/hydrusnetwork/hydrus/releases/download/v288/Hydrus.Network.288.-.Windows.-.Installer.exe
os x
app: https://github.com/hydrusnetwork/hydrus/releases/download/v288/Hydrus.Network.288.-.OS.X.-.App.dmg
tar.gz: https://github.com/hydrusnetwork/hydrus/releases/download/v288/Hydrus.Network.288.-.OS.X.-.Extract.only.tar.gz
linux
tar.gz: https://github.com/hydrusnetwork/hydrus/releases/download/v288/Hydrus.Network.288.-.Linux.-.Executable.tar.gz
source
tar.gz: https://github.com/hydrusnetwork/hydrus/archive/v288.tar.gz
I had a good and busy couple of weeks. As well as a great holiday, I have completed a long-awaited and big ui library update.
There is not a huge amount different for users this week, and while everything now seems good in my testing, there may be unusual bugs, particularly for the non-Windows releases. If you are a casual or very new user, you might like to wait a couple of days before updating, just in case there is need for a hotfix–or even the whole week until v289.
There are no database changes this week, so if you update and anything does break, you can just roll back to v287 and you should be good.
wxPython Phoenix
The hydrus client now uses wxPython 4.0.0 (the 'Phoenix' build). This is a complete rewrite of the ui library (the bit that draws windows, buttons, and scrollbars etc… to the screen) that 'talks' to the underlying C++ wxWidgets library in a better way. It is a significant change from the 3.0.2.0 release, which is now more than three years old, and took a lot of work my end to switch over. I am very glad I took the two weeks for this, as I was almost down to the wire.
As is often the case with these sorts of updates, the results are important but boring: you shouldn't notice any gigantic changes in how the ui looks, but the behind-the-scenes is all a lot neater, more flexible, and has more modern features (like high-dpi awareness) that I can play with in future. You should see less flickering and general sperging-out from the ui. The non-Windows releases have nicer widgets and layouts in some cases.
The update forced me to clean up some of my bad code (it took a while to get to the point where the client could boot and exit cleanly without crashing), so it isn't just the backend that has important changes. I have completely rewritten several timer systems and data-ui interactions, cleaning out some old bottlenecks and awkwardnesses on the way.
I have tested a whole bunch, but there may be some bugs for unusual situations. If you encounter a crash or exception, please please let me know the details and which platform you are running.
Unfortunately, I could not get the Windows-only embedded flash window working reliably. I can get it to display, but some lingering object is not being cleaned up somewhere and the program typically crashes when I try to exit. I am not sure if this is my code or something with wx or something else. Flash and ActiveX are heading towards the sunset, so it may just be that it is their time to die, but I am going to give it another go in the next week or so just in case I missed something my end. In any case, you will now get an 'open externally' button instead of the embed. If you don't have it, grab the Flash Projector here, put it somewhere good, and associate it with .swf files:
https://www.adobe.com/support/flashplayer/debug_downloads.html
And you should be good. I suspect this is the way we'll generally be going as we get closer to 2020 (when Flash will officially die). Depending on how that goes, we can have a new conversation then, as well.
other builds and running from source
wxPython 4.0 is quite different to 3.0, so anyone who puts out their own hydrus release, or anyone who just runs from source, will have to update as well. The libraries are different enough that my code will not run on the old version.
The good news is that it is available on pip now, so you can just get it or put it in its own virtual environment or whatever. The bad news is that figuring it out for Linux is a small headache (at least it was for me–I'm not very experienced in building things on Linux). The build script isn't great yet, so you are much better off chasing down a wheel that works. In any case, please check out my updated 'running from source' page here:
https://hydrusnetwork.github.io/hydrus/help/running_from_source.html
And let me know how you get on.
Also: I actually rolled back to Ubuntu 16.04 this week and got the GTK2 version of wx, and I am happy I did. I regret previously updating to 17.04, and I hope my build is now a bit more stable and has wider compatibility. The console error-spam seems to be significantly down as well. But again, I am not an expert in Linux, so feedback would be appreciated.
DnD and memory improvements
Before I discovered that my fledgling Linux build crashed on opening the options dialog (wew!), I thought I had some spare time this week, so I did do a couple of other neat things:
I reduced the 'startup' lag of large file drag-and-drops. The whole way some of this stuff works is better, so it should be less jank all around.
An awful bug that was causing 10s+ 100% cpu lag on certain large-page select->inbox/archive thumbnail events is now completely fixed. I apologise if you were hit by this!
I have put a lot of work into how animations clean up after themselves, and I have fixed multiple pseudo-memory leaks. You should notice that memory usage is significantly down in many circumstances, particularly in idle time, and I think I may have simultaneously fixed a random super-memory-spike that some users were seeing.
full list
- updated to wxPython Phoenix (4.0) build!
- all builds now require the new wx, so if you run from source, please consult the help files for new info on figuring this out
- did a ton of wx refactoring
- merged a large number of timers
- wrote a new wx-aware timer to replace some of the more awkward old timers that could not be neatly merged
- replaced wx.calllaters (the new ones aren't always garbage collecting nicely) with the new custom timer object
- misc wx deprecation refactoring
- cleaned up some wx test code
- fixed some crashing wx test code
- fixed 'select from list of strings' object, which was no longer processing enter key properly
- cleaned up a bunch of ui object interaction code
- cleaned up a bunch of wx-related shutdown code
- fixed an issue with the splash window not shutting down cleanly
- fixed a shutdown db-gui status report crash
- was unable to get flash embed windows working properly without edge-case crashing on windows, so they are disabled for now (you'll likely get an 'open externally' button instead)
- animations now clean up their memory buffer faster in certain circumstances–all users who view animations in the preview window should notice significantly leaner 'idle' memory usage over time
- fixed a very important inefficiency bug that meant select->inbox/archive on large pages with more than a handful of inbox files was taking extremely long periods of 100% CPU
- wrote a faster way of fetching some media and their paths
- copying files to clipboard is now much faster
- initialising any large file drag-and-drop event is now much faster
- certain redundant image pre-fetching will no longer be done
- 'open externally' panels will no longer draw a (slightly buggy and useless) animation bar if the underlying media would have had one
- added a new 'menu profile mode' that will profile any menu click
- cleaned up the debug menu
- deleted some old options code that is no longer used
next week and this year
I wanted to keep up with messages during this update, but I couldn't find the time. I now have two weeks of stuff to catch up on, so I will focus on that first. Then I would like to get back to the downloader overhaul, probably by finishing off the url class stuff and starting on the actual new parsing engine.
I do not have any significant plans for 2018 other than to just continue as I have. I am in an ok situation with a couple of bads but mostly goods. I would like to concentrate on getting the downloader overhaul finally done. I am not sure how long it will take, but I am fairly confident we are on the tail end now. Then I will put up a poll to see what big thing people would like me to work on next.
At some point, I would like to update to Python 3.x (I am currently on 2.7). This may prove a much larger job than this wx update, so I will have to research it a bit first so I better know what I am talking about.