Re: Modern Horizons 2

Please make a flag like the 'foil' flag. It would make little sense to put them in separate sets! We currently have the following cards as etched foils:

Full Sets:

  • Strixhaven Mystical Archive
    Strixhaven Mystical Archive Japanese

Partly:

  • Commander Legends: all legendary creatures
    Modern Horizons 2: Basic Lands
    Modern Horizons 2: regular new-to-modern reprints
    Modern Horizons 2: retro frame
    Modern Horizons 2: MH1 retro frame

Creating separate sets just for the etched foils would mean 2 more Mystical archives, a partly commander legends set, a MH2 etched set and a MH1 retro frame etched set.

And don't forget that you can mark cards from each set as foil, even if they are in the etched foil set.

Re: Modern Horizons 2

sebi wrote:

Imported MH2 today with the tokens.

Sadly still don't have a good solution for the etched foils. I really don't want to have to go with a user-settable flag, it would imply a lot of internal changes for pricing calculations and display etc etc... but also it would be awkward now to have a second edition as well. For the 40 timeshifted MH1 reprints, they are already in a separate "Modern Horizons 1 Timeshifts" so I would have to add another edition "MH1 timeshifts ETCHED" or add another 40 printings in the MH1 timeshifts one. Ehhhh i'm really unsure, I don't like any of the solutions sad

Most of the other sites are either going with another set or using a numbering system with an "e" at the end. Not sure if the latter is possible with the way you have the db setup. How did you handle the etched foils on the other sets?

Re: Modern Horizons 2

The user settable flag has the problem of affecting a very large amount of code and pages, because it's basically a special case in pricing.

Just to illustrate a small part of the problem: because a printing could have a non-foil, a normal-foil and an etched-foil version of the same printing, everywhere on the website that now shows 2 prices (normal and foil), will have to show 3 now. This directly relates to the backend where now we will need to store 3 prices for each single printing to cover these 3 cases instead of just 2.

Then all places where pricing sum-type calculations are made (collection value, trades, 'intersection values' for trading opportunites,  etc) now have to be double-checked and if necessary adjusted to check and account for the etched flag.

The matching in trading opportunities has to also be adjusted for that.

And so it goes... smile

I do ideally like this solution in principle as a user. But as the developer this will cause weeks of work and guaranteed future hidden bugs. The solution of separate printings (either with another edition, or with other collector numbers) gets rid of all these complications, since it's gonna be just another printing, that is foil (but with an "e" on the number, or as a note).

Last edited by sebi (2021-06-21 11:46:07)

Re: Modern Horizons 2

I think that it would be great if everything was just a separate printing.  The user defined flags end up leading to inconsistency and sometime represent cards that don't exist, like non-foil prerelease cards, or non-foil version of cards that only existed in Commander decks as foil version.  In my wantlist I end up entering both foil and non-foil versions of prelease cards that I'm looking for just so that I have a better shot at matching a card that might be entered in someone's tradelist.  Anything that can be done to stop errors from getting introduced is the right way to go.

Re: Modern Horizons 2

Understood, but would you still be able to mark cards of these new sets as foil? Or would they automatically gain the foil tag?

sebi wrote:

The user settable flag has the problem of affecting a very large amount of code and pages, because it's basically a special case in pricing.

Just to illustrate a small part of the problem: because a printing could have a non-foil, a normal-foil and an etched-foil version of the same printing, everywhere on the website that now shows 2 prices (normal and foil), will have to show 3 now. This directly relates to the backend where now we will need to store 3 prices for each single printing to cover these 3 cases instead of just 2.

Then all places where pricing sum-type calculations are made (collection value, trades, 'intersection values' for trading opportunites,  etc) now have to be double-checked and if necessary adjusted to check and account for the etched flag.

The matching in trading opportunities has to also be adjusted for that.

And so it goes... smile

I do ideally like this solution in principle as a user. But as the developer this will cause weeks of work and guaranteed future hidden bugs. The solution of separate printings (either with another edition, or with other collector numbers) gets rid of all these complications, since it's gonna be just another printing, that is foil (but with an "e" on the number, or as a note).

Re: Modern Horizons 2

sebi wrote:

The user settable flag has the problem of affecting a very large amount of code and pages, because it's basically a special case in pricing. [...] I do ideally like this [flag-based] solution in principle as a user. But as the developer this will cause weeks of work and guaranteed future hidden bugs. The solution of separate printings (either with another edition, or with other collector numbers) gets rid of all these complications, since it's gonna be just another printing, that is foil (but with an "e" on the number, or as a note).

@Sebi — I've refrained from commenting until now, as I've already said a great deal on this topic. But I think I've figured out the solution.

The issue comes down to a conflict of short-term vs long-term needs: In the short-term, the community needs something ASAP so that they can start entering their etched cards into their inventories. In the long-term, Deckbox needs a sustainable, elegant solution, and almost all of us, including you, have agreed that a flag-based solution is just that (with only a few users voicing opposition, like psrex above, although his concerns with an etched flag can and should be dealt with in other ways). Unfortunately, the two needs do not jive, because meeting the long-term need will not allow for meeting the short-term need (due to development time).

The solution to this conflict? A planned migration:

STEP 1: Implement a temp system to meet the short-term need — Import the cards to the database however seems best in the short term (additional editions, different card names, custom collector numbers). Just ensure that there'll be a one-to-one relationship between an etched card in this temp system and an etched card in the final system.

STEP 2: Develop the long-term solution — Spend the time you need in updating your code in the background. I understand that it'll entail weeks of work, but it does seem like this will be a worthwhile time investment in the long run. In fact, take the opportunity to completely overhaul the pricing code, so that it's as modular and extensible as possible, to account for potential future weirdness from WotC (which is pretty much guaranteed, am I right???).

STEP 3: Release and migrate — In conjunction with releasing the updated pricing and flag engines, announce some planned downtime. During that downtime, run a script on the database that migrates everybody's inventories to the new system. It would see, e.g., Profane Tutor #401 from Modern Horizons 2 ETCHED and convert it to Profane Tutor #401 from Modern Horizons 2 with the etched flag set. Upon completion, delete the erroneous editions.

STEP 3a: Handle CSV imports — The only wrinkle in the above would be people like me who regularly export their inventory to CSV, then who might try to re-import after the migration, causing a long list of errors. You have two options: Leave it to the end-user to fix the "non-existing edition" errors, or create custom code to fix it for them. The only reason the latter might not be preferable is if it would cause a major performance bottleneck to the CSV import. But if you do a quick check for the existence of the erroneous editions within the CSV first, and only run the custom code if it returns true, the performance slowdown would only affect these few edge case users.

In summary — Don't compromise on the correct long-term solution out of short-term convenience or expedience. Instead, give us users a temporary way to handle our etched inventories, then gracefully migrate us over to the long-term solution once it's fully ready.

Re: Modern Horizons 2

meldon44 wrote:

I think I've figured out the solution.

Nicely-said, @meldon44!

I very much enjoy and support this well-thought suggestion.

Re: Modern Horizons 2

psrex wrote:

In my wantlist I end up entering both foil and non-foil versions of prelease cards that I'm looking for just so that I have a better shot at matching a card that might be entered in someone's tradelist.  Anything that can be done to stop errors from getting introduced is the right way to go.

This is definitely an issue, but you are addressing a different issue than what a foil etched flag is ultimately about. Deckbox's database should, as much as is possible, reflect the true edition and card schema created by WotC. Profane Tutor, as an example, already has a WotC-defined edition —Modern Horizons 2. There is no such edition as Modern Horizons 2 Etched, and since Profane Tutor already has a defined edition, there's no need to invent a non-existing one. The same goes for card name and number — Profane Tutor exists, Profane Tutor (Etched) does not; Profane Tutor #401 exists, Profane Tutor #401e does not. So what do we do when there's three printing variants (non-premium, foil, and foil-etched) of the single printing Profane Tutor, Modern Horizons 2, #401? That's where flags is a very elegant solution.

Back to your concern — I agree that wishlist / tradelist matching could be made more robust to account for user error (simply being able to set "I don't care about foiling" on a card would fix the issue you describe). However, while multiple editions is A solution for a very real problem, it's not the best solution for that problem. We don't want to introduce a new deficiency into Deckbox to do a patch job on an old deficiency. Besides, it doesn't really fix your issue, either. There'll still be user error in the form of people not noticing there's an "etched" edition and simply listing it as MH2 with the foil and promo flags set.... so you'll still have to add multiple wants to your wishlist, but instead of those multiple wants being "foil flag set" or "foil flag not set", it'll be two different editions!

Re: Modern Horizons 2

I sympathize with all of the work, but I would also like to voice my opinion that I think a flag would be best (containing all prints within the same "set" whenever possible).

This type of convenience/granularity is what makes deckbox so great and is why I'll always be premium.

Thanks as always for your hard work.

Re: Modern Horizons 2

I concur with meldon44's suggestion here... mostly because of what he said at the end of part 2... Wizards will find some other "special treatment" for cards in the future that will not be supported with a unique collector number and only apply to a small subset of cards. It will come up again.

As always, thank you, Sebi, for all you do around here. smile

Red Wildrider YouTube channel - box openings, Commander deck tech, and more!

Re: Modern Horizons 2

Yes, I imagine Wotc coming up with holographic foils, inverted foils, gold foils, ...

Re: Modern Horizons 2

meldon44 wrote:

Deckbox's database should, as much as is possible, reflect the true edition and card schema created by WotC.

I know I mentioned it before, but tying card records to a scryfall id (or other more common id, unfortunately multiverse id is not good enough) would I think solve a lot of issues. On Scryfall if a card has 16 different versions, between reprint or premium printings, it will have 16 different IDs. With their API you can get prices that are updated more often (daily? hourly?) and it is split out between usd and usd_foil (as well as eur and tix if people wanted to use those). New cards come in nearly next day when previews are happening so if the system can be updated I'm sure Deckbox could also update with similar frequency as a result and thus no more having people 80 times that Modern Horizons 2 is missing as if the 79 other posts didn't say the exact same thing. There is also MTGJson which could be used as well ... ...

I'm sure the backend was not made to handle it, but updating the infrastructure to take advantage of these resources now would be considerably less work going forward

Re: Modern Horizons 2

scramasax wrote:

The token with the same name as a card might be a lot of work for you to solve. Wizard said they did not made a black lotus token because they never name token the same name as a card but they broke their rules in the same set. roll

It's not that they never make tokens with the same name as cards. Other than embalm and eternalize, there have been a couple of other example. Maro said that they never make tokens of actual cards, which is true. There's also no Rat Pack or Jace, Mirror Mage token

Re: Modern Horizons 2

If there's a way that users can only set flags that make sense and reflect cards that actually exist, then I would be all for that. As it stands now it is too easy to make a variation of a card that doesn't actually exist.  Letting users set attributes on a card is sure to lead to bad data.  If you could only set flags to reflect what has actually been printed, then that would be great.  Certainly just being able to set flags to reflect that is a better user experience than selecting from a 15 item drop-down menu that details each variant.

Re: Modern Horizons 2

Sebi,

Could the foil flag field be converted to a multiple choice “type” that would allow us to choose and be considered as part of the card name like foils are today?  I assume it’s a Boolean today, turn it into an int and then it would allow multiples. This would allow you to introduce future foil types too for the same card in one field and still have the same data structure for the most part. I realize it’s similar to adding another column (e.g. another flag), but this route is more manageable in the long run as you’re basically making this another key member and gives you N number types for the future.  Today’s 0 value records become non foil, flagged become foil, and new values get established as needed. Wouldn’t be hard to then make a table by edition to say what types were available and limit/default the type drop-down automatically. This isn’t unlike how variant comic book covers are handled on other collection sites where everything is the same except the cover art.

My $.02, one database developer to another.

Joe

Last edited by joemiiier (2021-06-23 03:33:06)

Re: Modern Horizons 2

I think Scryfall and other websites also have this as separate printings, and not a "flag", like normal foil. That is, if you go to a card that has for that printing a normal, a foil and and etched foil version, they don't all show up there as 3 different prices for that card. They will show up as a printing that has normal and foil, and the etched will be a separate printing.

Re: Modern Horizons 2

psrex wrote:

Letting users set attributes on a card is sure to lead to bad data.

The important distinction, though, is that it's bad data only within that user's account, rather than within the whole database, and a given user's bad data only affects other users when it comes to trades. As of now, I could go set the foil flag on all my Beta cards, and that will affect exactly zero people, until I try to list them for trade. I would rather tolerate bad data on the per-user level than introduce it on the card database level.


psrex wrote:

If you could only set flags to reflect what has actually been printed, then that would be great.  Certainly just being able to set flags to reflect that is a better user experience than selecting from a 15 item drop-down menu that details each variant.

I think you've hit on the key here. The flag system IS a great system, but it has this one glaring deficiency.

If Sebi were to utilize MTGjson as ic0n67 suggests, or implement the data himself as Joe suggests, then it would be a simple database query when populating the flag dropdown to check what foil treatments a card does or does not exist in.

Last edited by meldon44 (2021-06-23 17:38:25)

Re: Modern Horizons 2

I'm not a coder, so those solutions are best left to others.

What I do see is a push by WOTC to increase the collectibility of a set across varying treatments (e.g. foil, etched foil) and styles (e.g. retro frame, showcase, extended art). Styles have their own card number, but treatments do not, and it's likely that we will see more of those.

I believe that an adaptable solution with room to add future treatments will be necessary.

At the same time, I really would like to catalog what I have now, which is why I liked meldon44's suggestion above. :-)

Re: Modern Horizons 2

sebi wrote:

I think Scryfall and other websites also have this as separate printings, and not a "flag", like normal foil. That is, if you go to a card that has for that printing a normal, a foil and and etched foil version, they don't all show up there as 3 different prices for that card. They will show up as a printing that has normal and foil, and the etched will be a separate printing.

I'm sure this was done out of the same expedience that I mentioned above -- a seller platform like TCGPlayer needs something NOW so its sellers can sell cards and they can make money. Scryfall and the others realized, like you, that it would take weeks of dedicated developer time to overhaul the system, so they opted to take the easy route in order to meet the short-term need. But just because they're all doing it doesn't mean it's the best system.

The problem is that for literal decades now, websites have been able to rely on the binary foil/nonfoil schema from WotC. Their own database schemas expect this data structure. Now WotC is no longer adhering to that structure.... and we're all left scrambling.

It's time to overhaul the system, to shed these data structure expectations, so we don't face this same issue in the future. I would hate for you to finally get this all settled, only to have WotC throw another curveball at you in a couple months.

I think Scryfall et al. will likewise discover that having ten printings of the same card just due to foiling variations will be a suboptimal system, and they'll eventually redo their database and flatten those printings. We're already running into this with MH2: There are retro frames where the foiling is only on the border, and retro frames where the foiling covers the art and text box. Scryfall likes to track "light" and "dark" printing variations of old cards (rather than considering one official and the other a misprint). Are they also going to acknowledge these modern-day foiling variations? I'm not saying they should. My point is that the number and types of variants can and will increase, so databases should be structured to be as flexible as possible.

Re: Modern Horizons 2

sebi wrote:

I think Scryfall and other websites also have this as separate printings, and not a "flag", like normal foil. That is, if you go to a card that has for that printing a normal, a foil and and etched foil version, they don't all show up there as 3 different prices for that card. They will show up as a printing that has normal and foil, and the etched will be a separate printing.

It appears (again I am just guessing since I don't know Scryfall's actual system) that the foil itself is a flag. I know by looking over the API documentation that you can distinguish the pricing by usd or usd_foil (which alone gives me a clue that it is probably a flag), but I don't really have the tools to use their API effectively to really look. I really only have a rudimentary search function integrated into a Google Sheets that someone else coded atm. They will have different id for different printings, but non-foil Dominaria Opt and foil Dominaria Opt foil should have the same id.

Here is what they have for Opt on MTGJson (surprisingly there are only 14 different versions of the card). I hid a lot of the columns here as there is a LOT of information that isn't really relevant to the discussion. I also apologize if the formatting gets muffed I added some tabs to try and line things up correctly to read easier. I'll attempt to bold face the two Strixhave Mystical Archive Etched Foil Opts. As you can see on MTGJson they have a hasFoil flag and a hasNonFoil flag. In fact they have those two versions of Opt flagged as not even having a non-foil version, which is good. I would assume Scryfall works similarly. I think MTGJson uses Scryfall in building its card database, but I could be the other way around too.

index    id        cardKingdomFoilId    cardKingdomId    hasFoil    hasNonFoil    name    number    scryfallId                            setCode
17074    17075    218087            217700        1        1        Opt        60        25f2e4d0-effd-4e83-b7aa-1a0d8f120951    DOM
18259    18260    227822            227421        1        1        Opt        59        c3669391-8f64-4904-b432-0f0582f30449    ELD
23863    23864    46159            45159        1        1        Opt        64        958262ec-8e52-40cf-a9fd-a60e42643e15    INV
30468    30469    234533            234227        1        1        Opt        59        323db259-d35e-467d-9a46-4adcb2fc107c    M21
31259    31260                    228849        0        1        Opt        451        4a6f3714-cb21-4056-97db-7449be2c2456    MB1
39615    39616    218487                        1        0        Opt        60        c255e9f7-9fd7-437a-be14-e35957a89168    PDOM
43944    43945                                1        1        Opt        68047    0ceaeeee-986b-4950-98fe-4c907266f038    PRM
49628    49629    237112            237107        1        1        Opt        111        0b5bb062-eb03-4d9a-b028-91c089442187    SLD
[b]50664    50665    244246                        1        0        Opt        19e        d52960b0-66bb-4976-9067-983dfe1b525b    STA[/b]
50679    50680    244055            243741        1        1        Opt        19        ab59ac4f-2a77-4566-85c0-32666447dcf2    STA
50810    50811    244118            243744        1        1        Opt        82        cd5017e7-2da9-48be-8dc3-458a1374b97c    STA
[b]50811    50812    244357                        1        0        Opt        82e        6d9e1c48-c0a1-44d1-be82-f1c8371f51d5    STA[/b]
56996    56997                                0        1        Opt        ar64        6e2ff7a5-ddd4-4581-93ea-2069a2d0dedf    WC01
58171    58172    214322            214020        1        1        Opt        65        66c3aa9f-5cb0-4c8d-a050-42938398071b    XLN

I downloaded my inventory off Archidekt that DOES use Scryfall for their card information and after an exhaustive search because their system absolutely SUCKS and their back end does what ever the hell it fricking wants to at any given time -- a good responsive system that actually does what you tell it to .. that is what makes Deckbox as good as it is -- I did find cards that I have in both foil and non-foil and they both use the same scryfall id.

Quantity    Name        Foil        Condition    Language    Tags    Edition Name    Edition Code    Multiverse Id    Scryfall ID                            MTGO ID   
3        Divining Witch    FALSE    NM        EN            Nemesis        nem            21318        be981eef-9dd2-4233-82c9-03f9f2e82c59    13869    57
1        Divining Witch    TRUE    NM        EN            Nemesis        nem            21318        be981eef-9dd2-4233-82c9-03f9f2e82c59    13869    57

I don't know if you want to take a look at MTGJson. They do have a csv (or SQL) version of their files out there if that makes it easier to see what is going on https://mtgjson.com/downloads/all-files/ . If I were in your shoes I would probably look into going this route and incorporating these two resources into the deckbox infrastructure, but then again I don't know what Deckbox's backend looks like and  thus can't make the risk/reward analysis necessary to make a real informed decision on that front. I think it will just be easier on you going forward, but I can only guess that it would be hell getting to that point in the meantime.

Last edited by ic0n67 (2021-06-23 18:28:57)

Re: Modern Horizons 2

Hey @ic0n67, put those data dumps in code blocks and they'll be much more legible.  smile

Re: Modern Horizons 2

Its a little better ... Can't bold in the code, but that isn't that big of a deal ... still not lined up though

Re: Modern Horizons 2

ic0n67 wrote:

still not lined up though

Yeah, you have to use single spaces instead of relying on tabs. Bit of a pain, but definitely works to get things lined up nicely!

Re: Modern Horizons 2

as a user of the site i'd 100% find "MH1 timeshifts ETCHED" much simpler to interact with

for anything else there is Scryfall

Edit: ideally this would be a good opportunity to fix the "foil-only" sets, so that the system could automatically set the foil flag for such cards

Last edited by koda (2021-06-23 22:30:49)

Re: Modern Horizons 2

dude1818 wrote:

The List is weird because it's all the same set, but it slowly changes over time. You probably need to manually update based on the changelog Wizards publishes with each set, which is https://magic.wizards.com/en/articles/a … 2021-06-04 for MH2

I would like to kindly remind about this. The List seems to get updated on each set, and thankfully Wizards provide updates on which cards are added to it each time. Dude provided the link to the article listing the additions for MH2.

Nothing pressing here, I just got multiple cards that I am unable to enter into the inventory correctly. I hold them on a piece of paper near the keyboard expecting the List update on Deckbox, because I would rather enter them with the correct expansion at once than enter them with a currently existing expansion and have to remember to alter it later on the correct variation of the card.