
Full size version
Hope you like it. I'm not exactly chuffed, but then I never am.
Moderators: rjlittlefield, ChrisR, Chris S., Pau
Oh yes, very familiar. In fact the whole reason Zerene Stacker exists and has the features it does is because I got so tired of retouching using other packages. I still get tired of it in ZS too, but that's because I'm pickier now. More improvements needed...DrLazer wrote:I spent so long retouching this bee that I couldn't possibly bare to spend any more time on it right now. I'm sure you are familiar with that feeling right?
Lots of factors. Platform independence is the biggest one. The speed advantages of C++ over Java are largely a myth, partly left over from the very early days when Java was interpreted instead of just-in-time compiled, and partly maintained by people writing sloppy Java that runs inefficiently because it beats on the memory manager and makes a lot of unnecessary function calls. For well written computational work, Java and C++ are within a few percent of each other. It's true that Helicon runs faster than ZS does, but that's because it does different computations.DrLazer wrote:I noticed a couple of things about Zerene that I thought were a bit odd. Firstly is the java. Did you choose Java to make it platform independent? Have you ever thought about porting it to C++ to speed it up? Not that the speed bothers me in any way but everyone likes stuff faster, it also seems to be the one thing that Helicon has over ZS.
Yes, that's an annoying oversight in the coding. It really ought to handle that situation gracefully and just ask you where the images have been moved to.Errrr also - I'm sure you know about this already but if you mess with the source files and try and run a restack it crashes.
The image files are not copied. If you look in a project file, you'll see the alignment parameters, just like you expect. Those image files you're seeing are heavily compressed "preview" images that are used to permit that trick of playing like a filmstrip and doing fast depth navigation while retouching. They're controlled by checkboxes at Options > Preferences > Image Caching. If you un-check those boxes, the cached images will not be generated. That will make stacking per se run somewhat faster, but in exchange navigation and retouching will be a lot slower.I'm being assumptive here but it looks like when it runs a stack it makes new realigned images and puts then in a new directory. Thats what confused me, I thought after that point it wouldnt matter about where the source images are. On the same note, why does it need to copy all the images - is there some reason that prevents it from being a possibility to just store realignment co-ordinates?
That's a common misconception. It was emphatically true in the very early days, but for quite a few years now, the runtime technology has involved a "just-in-time compiler" that essentially treats the byte code as an intermediate form of source code and compiles that into native. The runtime compilation takes some time, but it's a tiny amount for any computational task that takes long enough to worry about.I thought that C++ would be faster because the code will be native, whereas Java is byte code that has to be interpreted on the fly by the JVM.
Easy to believe, and not an unreasonable position. You can't write "textbook Java" and expect it to run at the speed of C++. But if you specifically code to avoid the inefficiencies, the differences are pretty small. This was an issue that we looked at quite a lot in my previous career HERE, and it was one of the things I checked out when I started prototyping ZS.DrLazer wrote:The main reason for that is the companies I work / have worked for immediately dismiss it as an option, even if platform independence is neccessary. I think it's almost always dismissed for speed too.
There are other factors involved here. Good games offload a lot of work to the graphics processor, and those interfaces are much more mature in C++. For critical systems, especially anything that has a hard realtime constraint, you need to strictly limit the amount of runtime involvement. This is fairly straightforward in C++, but difficult or impossible in standard Java -- there's always a memory manager lurking in the background that can consume time unpredictably.The other thing that makes me think it is faster is that whenever a system requires speed .. it is almost allways written in C++. Console games, critical systems etc.
No problem; yes; and yes but not published. If there's something you particularly want, contact support@zerenesystems.com and we'll talk about what might be involved.Sorry about pointing out on the forum the moving of source files problem. Are you still working on the app and if so do you have a list or order of improvements/new features?
Well, in an ideal world the relationships would have been spelled out somewhere. They weren't. On the bright side, I've just recently restructured the zerenesystems website so it'll be a lot easier to add and find little snippets of information like that. Life gets better...Thanks for clarifying that the folder of additional images are just compressed previews. Silly assumptive me saw the folder and thought "oh ... i guess I can shift my source files then".
It is the same for me. I learn new stuff here every day. Regarding computational tools, that just happens to be an area where I've made my living for some 40 years. Most of that was in a research environment where standard practice was to assume that half of what we knew was wrong, and the challenge was to identify which half was wrong, make half the rest obsolete, and somehow exploit the remaining quarter that happened to be both right and relevant. There was a line item on the HR form for evaluating interviewees: "Tolerance for ambiguity". I'm convinced that the person who wrote that was a genius, although in retrospect I've joked that perhaps it should have been "Fondness for confusion."DrLazer wrote:Being on this forum feel a bit like going back to school ... So much to learn.
Beats me. Everybody has their own priorities.Do you think there is or should be much interest on computational efficiency and throughput re Zerene stacking?
Probably I should have mentioned that my personal interest is mostly based on a long-standing personal interest in: computational efficiency, algorithms, numerical analysis, as well as making my PC faster. Obviously, most others don't share these special interests! Then I began wondering if anything of interest might turn up if we compared notes using our own PC hardware.rjlittlefield wrote:It is the same for me. I learn new stuff here every day. Regarding computational tools, that just happens to be an area where I've made my living for some 40 years. Most of that was in a research environment where standard practice was to assume that half of what we knew was wrong, and the challenge was to identify which half was wrong, make half the rest obsolete, and somehow exploit the remaining quarter that happened to be both right and relevant. There was a line item on the HR form for evaluating interviewees: "Tolerance for ambiguity". I'm convinced that the person who wrote that was a genius, although in retrospect I've joked that perhaps it should have been "Fondness for confusion."DrLazer wrote:Being on this forum feel a bit like going back to school ... So much to learn.
Beats me. Everybody has their own priorities.Do you think there is or should be much interest on computational efficiency and throughput re Zerene stacking?
For my own photography, the priority is on "better images, less work". That's less work for me as the photographer. I'm not terribly concerned how hard the machine has to work unless that time gets in my way as a user. When I figure out how to double the computation time but get a big improvement in image quality, I'll jump on that because I can go do something else while the machine crunches.
I suspect that users like eurythyrea would have similar priorities, since he spends a lot of time in post-processing (e.g. HERE).
On the other hand, there are other users who are lark happy with the results they're getting from the current methods, but they'd be happier to get those same results faster because they're running in a production environment.
Given that there are limited resources to spend on code development, I think it's pretty clear that these two groups are in conflict with each other. Time spent making the same thing run faster generally doesn't contribute much to getting a better result. So there's a tension that I resolve by listening and contemplating and eventually taking the heat for deciding which direction to pursue. I'm not sure that collecting numbers would help much with resolving that tension.
On the other hand, perhaps your concern is more prosaic: given N $$, how should those be divided between processor, disk, memory, etc., so as to get the most bang for the buck. In that case, some carefully collected numbers could be useful. However, I have to say that I'm not particularly interested in collecting them myself because time spent collecting numbers and making sense of them is time not spent making the code and documentation work better for the majority of people who just want to run ZS on whatever machine they already have.
Is this helping?
I'll let DrLazer decide if it's threadjacking or not.
--Rik