[Utility] Collection Analysis

Discussion in 'Card Hunter General Chat' started by neoncat, Feb 1, 2014.

  1. Derek

    Derek Orc Soldier

    All of the utilities hosted here: http://www.Stexe.com/CardHunter work perfectly. I'm not sure how or why I ended up on outdated tools. Perhaps that shows how difficult it is to navigate 10 pages of forum posts and find the right iteration.

    The fact that this website works means there is absolutely no reason to go through everything I laid out above (since deleted/amended). I will amend it to point people to the proper web address.


    For funsies:

    Mac comes with the capability to handle local .php files out of the box, but the feature is disabled by default, and the way I laid out above I believe is the easiest/only way to turn it on.

    Despite being preprocessed OSX refuses to cooperate because they are local .php files. Renaming them to .html does indeed work so even if the website is down, renaming is the next best alternative for Mac users (and my method [since deleted/amended] should not be used).

    Thank you for the clarification
    Last edited: Jan 10, 2018
    Stexe, ParodyKnaveBob and Sir Veza like this.
  2. ParodyKnaveBob

    ParodyKnaveBob Thaumaturge

    The website now works for me. Yay. $:^ J

  3. Hey guys,

    I'm back into Util-Maintenance, finally. Or to be more precise, I'm slowly getting to know my own code, again :cool: . I haven't decided what my next big thing will be. There are some ideas on my list, @Force.ofWill 's idea is still floating around. But I'm pretty sure that I will present another totally new tool soon (as soon as I decided what this will be exactly).

    In the meantime, I thought it would be a good idea to make some bug-fix version. There was the info-page-problem that I fixed but haven't added into a full version. In addition, I found some minor things that were broken, too. So, instead of keeping all those bugs until I finally decided on my new big-deal-update, I wanted to get them done quickly, so that the tools are usable while I'm brainstorming for new ideas. Tell me, if there are still bugs that I haven't spotted yet.

    A small thing that bothered me for some time was the way the listed adventures in the campaign badge were (not) sorted. I haven't found the perfect sorting, yet, but I created one that is very intuitive. It's a 3-stage-sort: Adventures with a lower level always come first and adventures without your own team (MM + AI (not hard)) come last. Within one adventure level, base adventures come first, the other adventures are sorted by the set that introduced them (e.g. AotA first, ..., CM last). Within each level and set group the adventures are sorted by name.

    Now we come to the most-used and most-updated tool: the collection analysis.
    • The info page should now open up in every browser and regardless of the used ad blocker
    • The wiki links in the info page open in a new tab (if your browser doesn't prevent this)
    • The missing two sorting policies (sorting for tokens ascending and descending) are finally added and should be identical to the keep's sort, too - now I can say, that my tool has more sortings than the Keep without missing any of the Keep's ones
    • Using a filter like ' []!~"some text that shouldn't be in the item's text" ' didn't affect the results at all (no items were excluded) because I haven't designed this right. Now this type of filtering should work again. ' <?>[]=~"Crushing" ' will show all items where at least one card has the text 'Crushing' somewhere (The card 'Attack, Soldier!' will also be found this way) and ' <!>[]!~"Crushing" ' will only show items where no card mentions the text 'Crushing' on it. Therefore ' <?>[]=~"Crushing" ' is now the exact opposite of ' <!>[]!~"Crushing" ' and ' <?>[]=~"Crushing" ' is in a way what the keep does.
    • The headers in the tool's result weren't styled correctly
    Have fun with the tools and good luck for all your hunts.

    Attached Files:

  4. I'd suggest that someone checks if the hosted tools are linked in any FAQ, Tutorial or similar and updates the links accordingly (or add a link at appropriate places if it isn't linked yet). Or - if Stexe doesn't want to keep the old versions for legacy reasons - move the new version to the old name. But I like the /CardHunter/-address more. I could also create a new index-file for the old versions with the note that there are newer versions (with a link)?? But as the old tools don't link their index-file correctly I'm not sure if someone will find this note (if someone had bookmarked a specific tool and not the index-file).

    As I'm already writing about the hosted files: The two mentioned pages are still unavailable. The Cross-Ref isn't a big deal (I don't think that many will use it) but that the filter cheat sheet isn't there is a bigger problem for anyone not following this thread.

  5. Kalin

    Kalin Begat G'zok

    That's how I do it, except my final step instead of alphabetical, I list them in the order they unlock. So level 18 is: Troll, Mind, then Plume. I also try to keep connected modules close together, so Temple of Terror before Black Forest. And the lowest level modules are listed clockwise. Oh, and treasure hunts after free modules.
    ParodyKnaveBob likes this.
  6. Yeah, that's what I meant with perfect sorting. I would like to have something similar. And sorting by treasure hunt or not would be possible (should I add this somewhere in my stages, I wasn't sure about this one??). But the rest is a bit problematic.

    Of course, starting with level 16 (and around Melvelous and Cockroaches) they unlock mostly one at a time. but earlier on the unlocking pretty much is determined by the order in which you complete them. You can have White Star unavailable although you have finished the whole campaign just by skipping Diamonds of the Kobolds. So, I had to define THE ONE CORRECT WAY of playing card hunter. I support you with the tools but I won't tell you what you should do exactly.

    And there are many software engineers (me included) who hate so-called "magic numbers" (facts that are just true, because someone inserted them into the program, but there is no algorithm that can check them, just like axioms in math). And explicitly telling the sorting algorithm that War Monkeys and Temple of Terror both feature Monkeys is in a way just coding magic numbers, hence, automatized thematic sorting is (almost) impossible.

    And sorting clockwise (or counter-clockwise) would be possible but a lot of crunching numbers. The collection analysis more and more starts to slow down because of too many features. So, if the number crunching doesn't bring me a huge benefit, I'll not do it.

    But after all, thanks for you utopian suggestion. I really appreciate any comments.


    PS: Do you manage an own list of adventures for something, or what was the meaning of "how I do it"

    PPS: and which condition is more important: the clockwise or the unlock order? Lair of the Trog Wizard (preferred by clockwise) before Highway Robbery (preferred by unlock order) or after that?
  7. Kalin

    Kalin Begat G'zok

    I sort by level first, so it's the unlock order if you complete every module on this level before doing any on the next.

    It's not magic, just look at the top-right corner of the module cover.

    Oh wait, are you trying to calculate the order of modules every time someone creates a badge? Yeah, don't do that. Just hard code an order that looks good to you.

    Back in beta I kept a log of every chest I opened, to try to work out the rarity formulas. I still update it, but I only log Loot Fairy chests now.

    Here's the order I personally prefer:
    Raid on Ommlet
    Kobold Encampment
    Tunnels into Darkness
    White Skull Canyon
    Wizard's Workshop
    Caverns of the Troglodytes
    Lair of the Trog Wizard
    Highway Robbery
    Ruby Demon Portal
    Dungeon of the Lizard Priest
    Slub Gut's Sanctum
    Rescue From Shieldhaven Prison
    Diamonds of the Kobolds
    The White Star
    Defense of Woodhome
    Beneath the Frozen Earth
    The Throne of Strench
    Forest of Souls
    Valley of Tezkal
    The Compass of Xorr
    Lord Stafford's Treasure
    Melvelous the Magnificent
    Order of the Core
    Beneath Tcotzac
    Gladiatorial Arena, Qualifiers
    Gladiatorial Arena, Finals
    Return to Woodhome
    Crystals of Chronak
    The Viscous Tombs
    Garnet Demon Portal
    Against the Cockroaches
    The Sinister Wood
    Goblins in the Woods
    The Pools of Slime
    Descent to the Core
    The Tomb of Tvericus
    Tree Forts of the Goblin King
    Temple of Scales
    Acquire Within
    Acquire Within (Hard)
    Tomb of Savings
    Tomb of Savings (Hard)
    But a Trifle
    But a Trifle (Hard)
    The Jewel of Alet Zhav
    Shrine of the Astral Guardians
    High Mountain Pass
    Return to the Astral Shrine
    Citrine Demon Portal
    Lord Batford's Manor
    Riddle of the Gnome Lords
    Secret of the Gnome Lords
    Attack of the War Monkeys
    Temple of Terror
    Into the Black Forest
    Cliffs of the Wyverns
    Black Oaken Heart
    Lair of the Yellow Dragon
    Card Stock II Secret Preview
    Dungeon of the Swamp King
    The Troll Tyrant
    Secret of the Elder Mind
    Black Plume Mountain
    The Metallic Monstrosity
    Passageways to Death
    The Perilous Garden
    In the Belly of the Beast
    Throne of the Mechanical Men
    Sanctum of the Cyber Tyrant
    The Spreading Blight
    Svitlana's Inquisition
    Assault on Castle Mitternacht
    Caverns of Chaos
    Return to the Caverns of Chaos
    then all the MMs
    Sir Veza likes this.
  8. ParodyKnaveBob

    ParodyKnaveBob Thaumaturge

    The little abbreviation in the upper-right corner. That's the same code in the adventures' CSV listing, right? Thus, it should be able to sort and grab by text that way.

    I of course avoid magic numbers, too, but in the sense of unnamed literals. It's still sometimes handy to hard-code a data lookup table. Nevertheless, I agree on preferring an automated way so that when new stuff comes, it's more modular, and (the hope is) the system will handle it for you, instead of you needing to manually adjust every time.* On one hand, we don't get new modules rapidly (monthly at best) -- but on the other hand, if Phoenix goes poof all of a sudden, it's nice if the tools are somewhat future-proof.

    * Hence why True Silver accidentally got Legendary bug status looong after the bug was supposed to've been handled thanks to Hu La Houp's Vicious Circle exposing it. BM could've fixed the algorithm (after the Circle) but instead opted to manually adjust every future item (such as Silver). Whoops, missed an item. Automatic has its perks, yes.

    Keep on keepin' on, Mr. TheHunter. $E^ J
    Sir Veza likes this.
  9. Hey fellow Hunters,

    I was very lazy in the last weeks (sounds better than to say last months). But the reason wasn't that I haven't got nice ideas for new projects. It's - guess what - the time that is missing. I have two projects running, but none of them shows any presentable progress. And this thread already reached page two of the General Chat Forum (but the Battle Replayer isn't significantly less inactive nowadays :p so everything's fine).

    At that point a request from @Happenstance came in handy because he wanted to have a very simple list. And making lists is such an easy idea that I finished the corresponding tool within a week (in fact it was more like two days but that shows how much time is left for CH atm that I count in weeks). The other two running projects are way more complex.

    Therefore, I proudly present the Quick Draw Card Pool - Tool. In case all you do in Cardhuntria is to play Quick Draw leagues and you want to know, what cards could possibly be offered by the system then this new tool is probably the easiest way to answer that question. As I said, it's a very simple tool, but I'm glad that there is something new to show at all. But there weren't any bugs reported so far, so no need to rush anything.

    Based on information I found in different places (and partially with kind help from @Happenstance himself) I split the cards by quality and also added probabilities of cards appear in QD matches. I'm no real QD-player, so please tell me if I got something wrong and I'll correct it.


    Attached Files:

  10. Stexe

    Stexe #2 in Spring PvP Season

    I'm at GDC right now so I won't be free for the next week or two. I'll go over the stuff when I can get a chance.
    Sir Veza and ParodyKnaveBob like this.
  11. Stexe

    Stexe #2 in Spring PvP Season

    I'm back but a bit busy job hunting / possibly going to grad school. Let me know when you have your next version and it is vetted by someone and I'll upload it all to my site.
    ParodyKnaveBob likes this.
  12. kayfabe17

    kayfabe17 Kobold

    I'm totally failing to get Collect Analysis or the other tools to work - would someone mind taking a look for me? Following is the info that I've copy/pasted after following the instructions:

    > verbose

    Verbose output mode is now ON.
    Received extension response: serverHeartbeat

    Sending zone extension request: startnewadventure
    (utf_string) module: First Home
    (int) quest: -1

    Initializing deck builder
    Sending zone extension request: requestparty
    (int) index: 1
    (bool) teamMode: false

    Sending zone extension request: requestcollection
    (bool) includeinventory: true
    (bool) teamMode: false
    (bool) onlyadventurecharacters: false

    Received extension response: team.update
    (utf_string) reasonSubject:
    (sfs_object) team:
    (int) talkKey: 235408794
    (sfs_array) members:
    (utf_string) name: Kayfabe17
    (int) id: 1696

    (sfs_object) owner:
    (utf_string) name: Kayfabe17
    (int) id: 1696

    (sfs_array) invitations:

    (int) reason: -1

    Received extension response: party
    (int_array) ActiveChars: [2,4,5]
    (int) Index: 1
    (utf_string) Name: Adventuring
    (sfs_array) Members:
    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 397
    (int) 2453
    (int) 1660
    (int) 491
    (int) 1736
    (int) 2501
    (int) 2533
    (int) 100010
    (int) 100218

    (int) charIndex: 1

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 863
    (int) 1977
    (int) 1184
    (int) 861
    (int) 1117
    (int) 694
    (int) 2443
    (int) 1982
    (int) 100381
    (int) 100227

    (int) charIndex: 2

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 2170
    (int) 1656
    (int) 547
    (int) 1020
    (int) 2360
    (int) 2499
    (int) 1980
    (int) 100418
    (int) 100224

    (int) charIndex: 4

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 749
    (int) 753
    (int) 2488
    (int) 1721
    (int) 2537
    (int) 822
    (int) 2396
    (int) 1542
    (int) 100015
    (int) 100171

    (int) charIndex: 5

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) -1
    (int) -1
    (int) -1
    (int) -1
    (int) -1
    (int) 858

    (int) charIndex: 8

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 2385
    (int) 2377
    (int) 1259
    (int) 2555
    (int) 1293
    (int) 1225
    (int) 1504
    (int) 2191
    (int) 100017
    (int) 100099

    (int) charIndex: 9

    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 1790
    (int) 2141
    (int) 2491
    (int) 1740
    (int) 2189
    (int) 823
    (int) 1575
    (int) 222
    (int) 100492
    (int) 100170

    (int) charIndex: 10

    Received extension response: collection
    (sfs_object) inventory:
    (sfs_array) Items:
    (int) 2201
    (int) 1
    (int) 2202
    (int) 1
    (int) 2204
    (int) 1
    (int) 2207
    (int) 1
    (int) 2193
    (int) 1
    (int) 2198
    (int) 1
    (int) 2185
    (int) 1
    (int) 2184
    (int) 1
    (int) 2189
    (int) 1
    (int) 2191
    (int) 1
    (int) 2190
    (int) 1
    (int) 27
    (int) 1
    (int) 2179
    (int) 1
    (int) 2178
    (int) 1
    (int) 28
    (int) 1
    (int) 2183
    (int) 1
    (int) 2234
    (int) 1
    (int) 2235
    (int) 1
    (int) 32
    (int) 1
    (int) 2226
    (int) 1
    (int) 2227
    (int) 1
    (int) 2231
    (int) 1
    (int) 2228
    (int) 1
    (int) 45
    (int) 1
    (int) 2218
    (int) 1
    (int) 2216
    (int) 1
    (int) 2222
    (int) 1
    (int) 2221
    (int) 1
    (int) 2210
    (int) 1
    (int) 57
    (int) 1
    (int) 2208
    (int) 1
    (int) 63
    (int) 1
    (int) 62
    (int) 1
    (int) 2214
    (int) 1
    (int) 61
    (int) 1
    (int) 2212
    (int) 1
    (int) 2269
    (int) 1
    (int) 70
    (int) 1
    (int) 2270
    (int) 1
    (int) 2271
    (int) 1
    (int) 64
    (int) 1
    (int) 2265
    (int) 1
    (int) 2260
    (int) 1
    (int) 2261
    (int) 1
    (int) 2262
    (int) 1
    (int) 2263
    (int) 1
    (int) 85
    (int) 1
    (int) 2253
    (int) 1
    (int) 84
    (int) 1
    (int) 2252
    (int) 1
    (int) 2254
    (int) 1
    (int) 81
    (int) 1
    (int) 2249
    (int) 1
    (int) 2248
    (int) 1
    (int) 2245
    (int) 1
    (int) 2244
    (int) 1
    (int) 2247
    (int) 1
    (int) 94
    (int) 1
    (int) 2246
    (int) 1

    Should I be pasting all of the above, please?
  13. Short Answer: yes, just paste all this log into the text box.

    Long Answer: The tools all need slightly different parts logged from the game, but the rough steps are the same:
    - Turn on verbose mode because the game logs way less information without it.
    - Cause the game to log the necessary data (mostly by entering the Keep or a shop)
    - Copy the output to the clipboard
    - And again turn the verbose mode off (because otherwise the next time you want to copy some data you would turn it off in Step 1 and because heavy logging can cause bad game experience (slow game play or even crashes) some times)

    For the Collection Analysis for example the interesting part are the last lines you posted:
    But the tool needs most of the other lines, too, in order to know where the interesting part begins and ends.

    I'm not sure, where the problem is exactly, because you seem to have all information you need, so if you need further explanation, then please describe with more detail, where you're stuck.

    PS: There is still some further documentation/manual missing. If you could elaborate further what the difficult part for you was (as soon as you got it working), someone (probably me) would have a good starting point to improve the instructions.
    kayfabe17 likes this.
  14. kayfabe17

    kayfabe17 Kobold

    Many thanks for your response, Phoenix - I've got a bit further than before at least!

    I think that I'm following the steps correctly and the wall of text I've posted above is the result. When I'm pasting this into any version of the Collection Analysis tool then either nothing was happening or I was getting an error message along the lines of: "TypeError: Cannot read property 'trim' undefined."

    I've tried to just select and paste the relevant info as per your advice above and this time the tool does seem to be working...but is returning values of 0 for every item :)

    OK, I've figured out what I was doing wrong and I was being a moron. Posted here just in case anybody else is as stupid as me:

    I was following the instructions and after typing "clip" did not realise that this had already put the data on my clipboard. I was then following the rest of the instructions and manually copying and pasting the information that I could see above.

    Thanks for your help!
    Last edited: Apr 24, 2018
  15. I was very sure that it is just some minor miss-understanding, but manually copying from the log (meaning marking all output and pressing Ctrl+C) should also work just fine. I hope you didn't copy the text in terms of typing character by character from the log output into the text box.

    I'll edit the instructions soon to make them clearer.
  16. kayfabe17

    kayfabe17 Kobold

    Happy to report that I did not type it out by hand - I'd still be there now if so, but maybe my collection would be better...
    Sir Veza likes this.
  17. Stexe

    Stexe #2 in Spring PvP Season

    I'm a little busy still, but if you have a new version you want uploaded to my server let me know.
  18. Hey folks,

    what a coincidence, that I have two new (but only small) things done.

    First of all, I had made the quick draw card pool thing for my last version. This was very - let's say - boring (which is - if you haven't known - the correct and technical term for an all white page ;) ). I was considering turning all the card names into wiki-links but that wouldn't have changed the appearance significantly. If you think, them being links would help you, please tell me and I'll re-consider, but for the moment I wasn't really convinced that links would improve the tool. If you play quick draw you should have a basic understanding of all available cards already or - if not - you won't inspect every card in the tool's output. But if I'm wrong with my point of view, then tell me and you get links.
    The thing that I changed was bringing some color into it. The colors of the card's types. Now you have a list of cards and at first sight you can approximate how likely it is to draw e.g. an attack card in gold quality. The colors aren't exactly the same as in-game to accomplish a better contrast to the text. So please tell me, if you would like some color to be changed for whatever reason (but please tell me your reason so that I can try my best to satisfy it). On hybrid cards I use a special text-coloring (-shading) style for handicap- and utility-cards. If anyone thinks this doesn't work well, please provide an alternative. It was the best I could come up with.

    The second new thing is more or less a test like the exclude- and details-buttons in the collection analysis were. If it works for the majority and I have further ideas of how to use this technique for other things, you'll see more of it later on.
    Image you administrate a tournament and you want to dictate the items that are permitted in your tournament. Or you want to compare your collection with other players but only those items that fulfill some condition. In both cases you could start a thread and name all permitted/forbidden/relevant items but this can get very lengthy quite quickly. What if you just could provide a (perma-)link to the collection analysis that has a pre-inserted item filter? Everyone who wants to know your criteria, opens up the analysis and inserts his or her collection data and gets your filtering for free. This could also be used for further filter explanations: A tutorial could include such Perma-Links and the ones reading the tutorial could directly test each step themselves without having to copy the examples manually. Or if you write a guide for some tricky adventure/quest, provide a perma-link showing the items that you'd recommend to equip.
    In order to create such a perma-link you open up the analysis and type in your filter rule. Then you should test it by clicking process and inspecting the results. If you're satisfied with the filter you wrote, then right-click the new "Filter-Permalink"-link above the filter-textbox and select "copy link-address" (or whatever your browser calls this option). Then you can insert the link into your forum-thread or anywhere else (although world-chat could break the link like it breaks some wiki-item links, too). The others can then open the link and will (hopefully) see your filter already inserted into the textbox.
    WARNING: The problem with this is, that it won't work completely in the non-dev/non-hosted version. Creating the perma-links is working in all versions. But all perma-links are relative to the location where you stored the tool-files. If you use a local copy of the tools (instead of the hosted version) your perma-link will - in general - not work for everyone except you - unless you or the other guy knows how to rewrite the link which is doable. But the even bigger problem is the interpretation of the perma-links. If you haven't got a running php-environment the filter-textbox will always stay empty. This is problematic for anyone testing this feature before the tools are hosted, but because of the problem with the relative links, I think this was the best solution I could come up with. Every solution that didn't involve php struggled even bigger problems/constraints.

    This all said, I feel like I have to reserve some time for my bigger projects as soon as my private stuff is done. Otherwise you won't get anything bigger than a colored card pool page in the (near) future. ;)

    See you around, Phoenix

    Attached Files:

    HisRoyalHygiene and Sir Veza like this.
  19. Stexe

    Stexe #2 in Spring PvP Season

    Neat. Can anyone do a quick test of it and confirm it works? If so I'll try uploading it in the next few days, replacing the current stuff.
  20. Hey fellow hunters,

    May is almost over and I'm half way through my current working phase, so I decided to give you a first glimpse on the upcoming version. Sadly, there will be no new content (probably, unless I find some spare time for the creative part of the development process) because it is somehow the second part of a former update. Looking into the past of the tools there was one version that was mostly about re-organizing the styling sheets. This time I've focused on inspecting and re-organizing the script part. Therefore, this was the second (and final) big step for me to really feel that I now own the project and its source code and I'm not just fixing a project that I'm not responsible for (ok, most of you'll know that I felt responsible for the tools for quite some time now, but I guess you get what I wanna say, don't you?). ;)

    I won't go too much into the techy details here (if someone contacts me directly I'll gladly share my experiences), but I will give some information about the whys and hows:
    At the beginning of my work on this tools I was quite new to web development and I (ab-)used this project to dive into another technology. But scripting was the worst part of it although it was the one thing (besides html and css styling) that I could relate to the most. I come from a world where your code can tell you whether you're working with text or numbers or something completely different (what can make a great difference, as you probably can imagine). JavaScript doesn't and that is from my point of view a great disadvantage (and that every available browser supports a different version of the - some say - standard, doesn't help either). I can see the benefits that this CAN bring, but it is just not my way of doing things. So it was very clear to me, that I had to adapt the tools to my preferences to finally feel comfortable with the scripting. This adaption was using TypeScript. This change triggered some further changes that all improved the tool's quality. All code now comes in separate files. This improves page loading times (at least in theory, I cannot prove or disprove this). Using a module loading framework (oh boy, that was a touch challenge to combine TypeScript, the module loader and my custom-item-filter-parser) I could move basic functionality into utility scripts that every other script uses. This reduced the duplication of identical code to zero (until now each tool that needed function X had this function in its code and I had several copies of the same function, some versions even had slight differences (but the same name) what made re-organizing even harder). Hence, for me there isn't a single aspect of this version to regret this decision, only that I hadn't made this step earlier. Because I'm inspecting all existing code carefully line by line and if I had done this earlier there would have been less code to migrate.

    Besides all the benefits for my development process there is one aspect that should benefit you. I used the oldest available JavaScript standard as output format in my TypeScript-settings. There should be not a single browser that is incompatible with the scripts anymore (or if so, you have a highly insecure set-up that you haven't updated for about a decade or so and that you should shut down immediately ;) ).

    There already are (and also will be) some minor effects on the tools. But trust me, changes for the better. For example there is only one figure spread sheet left with an opt-in for all color versions (the scripts differed by one line and maintaining/keeping two versions was just bs with all the described changes) and this spread sheet now has all figures (including the AI-themed that were missing until now). I'll inform you about the other changes when presenting the results.

    Have a great weekend and I'll come back for more great news when I've finished my work.

Share This Page