#tooldev-general

1 messages ยท Page 96 of 1

broken cloud
#

I'm keeping a local archive of bulk item prices (saved off poe.ninja once a day) to track profit from my map runs

#

Would like to do this retroactively for non-bulk items (valuable uniques, skill gems, etc.)

pine shore
#

Is there a way to get the divination card splash art?
Last post I've read is from three years ago that used " http://web.poecdn.com/image/gen/divination_cards/<artFileName.png>".
Unfortunately I couldn't get the link to return anything but errors.

pine shore
#

Thanks @earnest radish , didn't think about checking GGG's trade sites source for it.
The full link also has no gen in it, as far as I can see.

inland kestrel
#

Anyone who is familiar with PoESkillTreeEngine, does it know how to turn a ModifierDefinition (or equivalent) into the id that the official trade website uses?

Official trade stats reference: https://www.pathofexile.com/api/trade/data/stats
Example modifier from the official trade site: explicit.stat_3299347043 is # to maximum Life

woeful sphinx
#

@inland kestrel It doesn't. Haven't seen those ids anywhere.

subtle brook
subtle brook
#

using the code:

#

$i = 0;
$nextid = 0;
while ($i < 5){
$json = file_get_contents("http://api.pathofexile.com/public-stash-tabs/?id=:".$nextid);
$jsond[$i] = json_decode($json, true);
$nextid = (json_decode($json, true))["next_change_id"];
file_put_contents("C:\data\data.txt", var_export($jsond[$i], true), FILE_APPEND);

        echo "<br>".$nextid;
        $i++;
    }
inland kestrel
#

@woeful sphinx bummer. So there wasnโ€™t something I missed ๐Ÿ˜ช

deft jolt
#

@subtle brook cause you're passing an invalid change id ๐Ÿ‘€

subtle brook
#

what would be valid change id?

mortal bone
#

@alpine lynx The problem with downloading only the images that you don't have is they tend to get outdated. They do update the artwork for nodes on occasion. I don't know if you currently are, but you should be making a sprite sheet out of the images you download. This will be the most efficient way to draw nodes since you only have to load two textures for the nodes (active, and inactive).

alpine lynx
#

Ah i'm not doing that currently, i'll look into that though. Are you the author of a passive tree tool? I've definitely seen your work before i can't remember where though

mortal bone
alpine lynx
#

Ah i've used that previously, awesome

#

Would it be alright if i message you for advice on this stuff at some point?

#

I've been talking to Openarl but i'd love another perspective

mortal bone
#

sure

alpine lynx
#

Awesome

#

atm my program start up takes an absurd amount of time

#

im kinda just leaving that issue for now and hoping to fix it later by optimizing

mortal bone
#

I have a small tool that will download skill tree images and build the spritesheet out of them

alpine lynx
#

oo

mortal bone
#

it is in c# though

alpine lynx
#

Can i have a link to it? I'd love to read over it

#

i've been reading through path of building which is in Lua

#

and ive been translating the logic reasonably fine

deft jolt
#

@subtle brook one without a colon

mortal bone
#

I can upload it. It isn't very pretty haha

alpine lynx
#

no problem, even if you just want to show me some of the core logic to it that would probalby be a great help

deft jolt
#

also are you writing a river parser in php what in the world..

subtle brook
#

thats the only thing that i know besides gamemaker language xd

#

it has no colon, it looks like this

alpine lynx
#

gamemaker language ๐Ÿคข

mortal bone
#

that has a colon lol

subtle brook
#

what should be good to write in?

#

OH GOD

alpine lynx
#

someone else might be able to give a more educated answer but my assumption would be go for c#

subtle brook
#

SORRY YOU'RE RIGHT

#

that makes sense now

alpine lynx
#

C++ is a great language to learn for your education as a programmer but its not gonna be quick

mortal bone
#

Forgive the name lol

alpine lynx
#

np, thank you!

#

i'll have a read over it later today, what's your time zone? incase i wanna pop you a message

mortal bone
#

the logic sits in Main lol

#

PST

#

it is 1:15pm right now

alpine lynx
#

sweet

#

10:15 am for me

#

at school atm

#

closing out my final projects for this degree

mortal bone
#

there is a ton that can be simplified there, but it does the job

#

ah nice

alpine lynx
#

no worries i should be able to extract the important parts

#

famous last words

mortal bone
#

also, the skill tree parser included will parse any skill tree properly, except the newest because they added a flag

#

it still works, but it just ignores new properties

compact isle
#

whistles

mortal bone
#

lol

alpine lynx
mortal bone
#

I wrote this tool to generate spritesheets for really old skill trees

#

better than my student project lol

#

mine was tax software...

alpine lynx
#

unlucky haha

#

sounds good on a programming resume tho

#

i'm studying software engineering at media design school

#

spend 32 hours a week working with a team of two other programmers and 4 artists

mortal bone
#

wtf

alpine lynx
#

its basically mock industry work

mortal bone
#

mine was just a group of 3 people, and I was the only one that did work lol

alpine lynx
#

yeah i feel that a bit at the moment

#

my main project for this year is really rough, people haven't pulled their weight

#

compared to other groups

#

atleast the ai and such i wrote looks nice and works reasonably well ><

subtle brook
#

when you are at uni in US you do project every year?

#

like a big one or sth?

mortal bone
#

my university did a "capstone" project which spanned your senior year

alpine lynx
#

At Media Design School, after first year, everything is pretty much project based

#

We had exams in first year and then after that it was just project work

subtle brook
#

well, that seems ok

alpine lynx
#

Third year is basically a year long multiple stage production project

#

its really great honestly

#

exams suck ass

subtle brook
#

if you had good people that could be very nice

#

yeah, i dont like them too

#

in my country we have like big exams every half year i think

alpine lynx
#

yeah its pretty normal even in new zealand

#

media design school is different

#

But yeah project work has its own issues

subtle brook
#

it depends on the people i guess

#

if its group project

alpine lynx
#

definitely

fierce birch
#

Funnily, I made a poe builds website as my "end of degree" project for software engineering

alpine lynx
#

Ah awesome

#

Was it like a collection of builds ?

fierce birch
#

it was the ancestor of poe.ninja builds page

#

Closed it not too long ago cause it was getting emarassing and I lost the motivation to keep it running a long time ago

alpine lynx
#

Ah well, I can understand that. Sounds like a cool project though.

fossil arrow
#

hi all

#

can someone explain to me how i can parse affix ids like: this "explicit.stat_3141070085" into stuff i can add to the pathofexile trade site like this: # to Armour (Local). Help is much appreciated

#

or where i can look them up

frigid nova
#

There is a lookup table for the text description - but not a link to the .dat file itself

fossil arrow
#

OMG thank you so much thats what i was looking for

fossil arrow
#

Is it also possible to get the list/table of all affixes (unique only for now) with min and max values per unique?

#

started it handily but thats a little bit frustrating ๐Ÿ˜„

#

should look like this

#

Alpha's Howl Sinner Tricorne #% increased Evasion Rating (Local) 80 100
Alpha's Howl Sinner Tricorne #% increased Mana Reserved -8 -8
Alpha's Howl Sinner Tricorne #% to Cold Resistance 20 30
Araku Tiki Coral Amulet # to Evasion Rating while on Low Life 100 100
Araku Tiki Coral Amulet # to maximum Life 30 50
Araku Tiki Coral Amulet #% to Fire Resistance 20 30
Araku Tiki Coral Amulet Regenerate #% of Life per second while on Low Life 1 1
Atziri's Promise Amethyst Flask #% of Chaos Damage Leeched as Life during Flask effect 2 2
Atziri's Promise Amethyst Flask Gain #% of Physical Damage as Extra Chaos Damage during effect 15 20
Atziri's Promise Amethyst Flask Gain #% of Elemental Damage as Extra Chaos Damage during effect 10 15

#

or similaur

#

unique text min max

celest karma
#

Is there a list of all API endpoints somewhere? The GGG docs only list leagues & stash tabs, but I constantly see other ones like the trade stats one listed above. Complete docs would be fantastic!

simple ravine
#

check pins

celest karma
#

Am I missing something? The closest I see to information in one spot is a swagger link, but it 503s?

#

nm. The swagger link is loading now, musta been on my side...

livid fable
#

no idea if this belongs here, but rough mock up of what my crafting simulator project might end up looking like. im new to all this and trying to create a design document this weekend to help size it down into managable chunks for the future

frigid nova
#

@livid fable How are you calculating chance of success

livid fable
#

the numbers are bogus in this

#

just entered to have something there

frigid nova
#

how do you plan on calculating chance of success

livid fable
#

well, we have the chance of hitting the desired mods multiplied by the likelihood a scenario occurs that its possible to hit the desired mods (say you want 2 prefixes, so scenarios that only 1 prefix rolls would be discounted)

frigid nova
#

How do you plan on calculating the chance of hitting a single desired mod

livid fable
#

assuming there are no other restrictions like certain number of open affixes?

frigid nova
#

ye

livid fable
#

same thing pretty much. the weight of the mod can be used to determine the likelihood to hit from the list of prefixes or suffixes depending on what it is. There's always going to be at least one prefix and one suffix so it's possible in all scenarios, so the chance to hit it doesnt get reduced by impossible to roll scenarios

(unless fossils block it in which case there's no possible scenario).

Would be slight changes in chance to roll it depending on other affixes selected with it but there's so many permutations to that its not worth trying to mess with right?

frigid nova
#

I ask these questions because I tried to come up with a crafting simulator

#

and found it impossible to calculate the probabilities directly - so settled on using rollouts and then just reporting the percent which met my criteria

#

I think if you start to think about how items are rolled you will come to a similar conclusion

livid fable
#

yeah we've talked about this

#

in the sanctified chat

alpine lynx
#

good luck!

livid fable
#

i am but a lowly scrub learning programming from the internet but ive got a goal and im tenacious

alpine lynx
#

well you'll either get to your goal or learn a heck of a lot along the way

#

seems legit to me

#

or both

frigid nova
#

I'd suggest focusing on making your rollouts incredibly fast so you can emulate millions of rolls, and using those for success rates.

livid fable
#

i dont quite understand why you couldnt find the probabilities though. obviously there's gonna be some variance because what we know isn't perfect but it's pretty dang close. elaborate for me to help me understand?

frigid nova
#

I could elaborate in pm's - as to not clutter this chat. The basic problem is there are too many permutations of items in which one mod shows up, and for each one of those permutations the order in which the item rolls all the affixes changes the weights at every step. You end up with a summation that's just too large

livid fable
#

honestly i was just planning to treat those as atmospheric noise and ignore them. Even if youre not using fossils, which is unlikely given targeted crafting, the most that the total weight are going to change for each step is maybe 10-15%? with fossils that drops steeply (unless a positively influenced mod is selected)

#

also, if you can accurately emulate millions of rolls, why not just do that for a single mod to determine the realistic success rate and then compare it to a calculated version where you ignore all the different permutations, just to see what the difference actually is?

#

would be interesting to see the numbers at least

frigid nova
#

Yeah I agree with that second point. I do have a script which can emulate, so I could compare to ignoring. I suspsect the noise won't wash out since it's all highly correlated.

livid fable
#

well i'd be interested to see in a few different samples how it looks if youve got the time. i know youre a busy guy though

#

no idea if youre comfortable with it but if youre busy, this is pretty much all im working on all weekend. if youre willing to send your emulation script with instructions id be happy to do it myself and let you know the results

frigid nova
#

yeah im happy to do that

livid fable
#

cool, DM away then. appreciate the feedback as always

ornate nova
#

ay

simple ravine
#

I did a crafting simulator a year or two ago

#

I used the spawn weight stuff to do it

obtuse citrus
#

For the sake of argument, if you assume you'd have around +100 mods and the tree is 6 deep, you'd be looking at 10^12 i.e. a trillion combinations. At each depth you need to calculate the new list of modifiers eliminating any that aren't eligible anymore and new relevant chances. Then you'd need to sum up the relevant ones need to get the actual chance. I think that's pretty intensive computational wise

livid fable
#

while its still quite a few i think the tree would only be 3 deep. prefixes and suffixes are independent of each other barring outlier cases like attack and caster group interactions which im not even sure exist

#

@obtuse citrus

frigid nova
#

My undestanding of the way the game rolls it doesn't pick prefix or suffix independently. It updates the total mod pool each time and randomly selects a mod.

#

(Another way to put this is, the probabilty of rolling prefix mod A and then suffix mod B is different than rolling suffix mod B then prefix mod A)

livid fable
#

right, but its still confined to pick a certain amount of prefixes and suffixes

frigid nova
#

this is true, but the order of magnitude calc omega did is still going to be near correct.

#

(the total percentage of leaves in the tree he described which break the 3 prefix 3 suffix rule are a small amount)

livid fable
#

so if this is true "It updates the total mod pool each time and randomly selects a mod"

at what point in the process does it decide how many affixes the item will have, and how many of those affixes will be prefix vs suffix

earnest ledge
#

@fickle yew have you considered adding proper handling for timeless jewel keystones on poe.ninja builds? As far as I understand it should be possible to deduce when allocated keystones are in the radius of a timeless jewel and figure out what they have been transformed into.

This would obviously allow filtering builds by legion keystones which in itself would be very nice, but also fix all the red herring keystones that make no sense. It causes a lot of confusion and generally makes the keystone filtering a bit less useful. Like this
https://www.reddit.com/r/pathofexile/comments/dty6l1/eldritch_battery_pain_attunement/
or life builds that have the CI keystone, silly things like that that make no sense at a surface level.

#

dang I think he went offline while I was typing the message lol

obtuse citrus
#

@livid fable it's hard to say when exactly it decides the number of mods, but it doesn't even matter much. Either it decides to make 4, 5, 6 rolls right away or it does 4 rolls and then decides whether it should continue, if so, continue and roll again if continue once more. I can't renember the exact percentages but I renember some people burned a lot of chaos to find out the chances for each number of affixes. There is also a chance that other currency items don't follow the same rule as chaos do in terms of number of affixes. Also as nick_ said it just selects something from the pool randomly, it doesn't actually decide on prefix or suffix. It was tested out and we saw it ended up using the pool of prefixes or suffixes that had more weight more frequently, which lead to the conclusion that it just dumps them all into one big pool rather then doing prefix/suffix separately. So, all it does basically is remove the pool for prefixes/suffixes once it hits 3 of those.

fickle yew
#

@earnest ledge last I looked at it looked completely hopeless and pob also don't support it, so it wouldn't count for dps anyway? If anything has changed I could take another look though

frigid nova
#

My testing has all lined up completely with Omega's conclusions.

simple ravine
#

The way I did it was to simulate by implementing domain logic for orbs, such as transmute/alt/regal/chaos/exalt

#

and as omega and nick explained, using spawn weight, tags and the general rule of generating one mod at the time, and update the item's tag list, etc.

#

and then made 'strategy processes' such as "alt-spam + regal", and "chaos-spam"

earnest ledge
#

@fickle yew true, PoB does not support it so it wouldn't affect dps, but that's not the reason to do it. It'd just be for facilitating the filtering functionality on poe.ninja.

Do you know what the problem you ran into was trying to implement it? It seems like it'd be possible to me. Something along these lines:

Detect presence of timeless jewel
Find the jewel's itemId in the xml
Use that itemId to lookup the nodeId of the jewel socket its in
Find that nodeId in the passive skill tree data, get its coords
Use those coords and the radius listed on the jewel's xml to filter the passive skill tree nodes down to all the keystones that are within the radius of the jewel (this would probably be mapped out ahead of time for optimization reasons)
Filter those keystones down to only ones that are allocated
Override (disable) the allocation of the regular keystone (only on poe.ninja's end, not in the PoB)
Override (enable) the allocation of the legion keystone, as dictated by the mod on the timeless jewel's xml (again only on poe.ninja's end).

earnest ledge
#

Oh, I think I see the problem, PoB simply doesn't import timeless jewels, I guess because it doesn't have the item info for the 'Timeless Jewel' base. So if you're importing from the official website, which I assume is what poe.ninja does, no character would ever have a timeless jewel equipped.

So you'd have to fix that somehow. Either get openarl to implement importation of timeless jewels, or use a fork of PoB that has it implemented.

grave wren
#

yeah

#

it'd be nice to just have the correct jewel+seed implemented in pob tbh

earnest ledge
#

Well I'm not asking for anything with seeds to be implemented, just for the item to actually be imported. Doesn't matter if any of the mods on the jewel actually do anything.

Even if seed implementation is not really feasible, it is however totally feasible for PoB to support the keystone part of things.

grave wren
#

oh i meant just the number should be there

#

not the actual nodes

#

just to be able to represent the full build

earnest ledge
#

yeah, that would be there if the jewel was imported

#

so I agree

#

there's a PoB fork with some extra features and other updated stuff, maybe someone can provide a pull request with the necessary stuff for legion keystones to that project

fickle yew
#

@earnest ledge ah so you're only talking about the converted keystones.. Those should be doable yeah.

#

I have my own import. That doesn't go through pob.

earnest ledge
#

oooh, nice ok that does make it easier then

#

I suppose you need to do that for stuff with your GUI huh? like 2d art

fickle yew
#

I didn't have pob support when I first made that part of the site.

#

Was doing my own calculations for all the things displayed.

#

So had to do import too

earnest ledge
#

I see, I don't remember that far back haha

#

I was working on implementing keystone detection in pobpreviewbot just as a proof of concept but maybe I should just redirect my effort into making an update for PoB

#

haven't really fucked around with modifying PoB before but I do know Lua so it should be possible

grave wren
#

there is a fork of it already

earnest ledge
grave wren
#

yeah does it support the jewels?

earnest ledge
#

I didnt read anywhere in its features about it

#

but I havent tested either

fickle yew
#

I have radius and stuff working for my own calculations already so I don't think it should be too hard.

earnest ledge
#

the only other thing I couldn't figure out how to do when working on my proof of concept is how do you figure out the position of a passive skill node, there's no x/y coords

#

I see that each node is assigned a group ID

#

and that group ID has x y coords

#

but is there offsets somewhere or something?

grave wren
#

yep the fork supports it

earnest ledge
#

doesn't support the keystones though, right?

grave wren
#

nope

#

but its imported

earnest ledge
#

sweet

#

does anyone know the answer to my question about node position? For example I see coords for the group of the socket like this

        "399": {
            "x": -3301.35,
            "y": -5679.32,
            "oo": {
                "1": True
            },
            "n": [20987, 7960, 52502]
        },

7960 is the socket, the other two are the nodes leading up to it, and I assume x y are the coords of the anchor point of the group, but how do I figure out the offsets from that anchor point for each of those 3 nodes. there doesn't seem to be any sort of coord offsets in the nodes dict

alpine lynx
#

Have a look at Path of Building's source code

#

under the PassiveTree class

#

The groups have position, and then the nodes actual position is calculated based on what group they're a part of, the distance from the node and the angle. I forget the exact calculation but you can find it under the POB Passive Tree class

fickle yew
#

Yeah it's circles

#

Look at some passive skill tree source code ๐Ÿ™‚

alpine lynx
#

it's pretty easy to figure out thankfully!

#

i should work more on my passive tree..

earnest ledge
#

ah ok, that makes sense. thanks for the answer

golden bane
earnest ledge
#

I'm not sure what part of the problem that is supposed to help with

golden bane
#

I think I misunderstood you earlier, sorry

#

But I would very much appreciate PoB support for Timeless Jewels

earnest ledge
#

If you were talking about trying to implement it in my bot, my bot doesn't use that API, I think it was written after I started my project.

#

But I've ditched that and now I'm trying to implement keystone support in PoB. Floundering around trying to figure out the right place to edit right now ๐Ÿ˜›

golden bane
#

I see. Wish you good luck!

#

Implementing the keystone effects in PoB should be a lot of fun. They interact with a lot of different systems

#

Plus it's possible to at least also implement the Karui/Maraketh extra str/dex mods

frigid nova
#

@compact isle Are there any plans to add timeless jewel support to the passive tree viewer on the official site?

compact isle
#

no

frigid nova
#

If you're able to share - is that decision motivated by game design choices around the jewels or workload decisions about prioritizing technical support?

golden bane
#

Other modifier effects such as Healthy Mind's life-to-mana conversion are also not supported in the passive tree viewer

compact isle
#

the section of the backend that handles those transformations isn't easily available to the website

frigid nova
#

I understand - thanks for your insight!

golden bane
#

But it would be nice to at least have the Timeless Jewel's mods in the character JSON, maybe as mods on the jewel itself?

frigid nova
#

Yeah I do think anything public facing about the jewels would allow people to verify jewels for trades and search for jewels that fit their builds better. But if the infrastructure isn't there, c'est la vie.

earnest ledge
#

would defeat the whole point of the seed system imo, you could just datamine the effect of jewels from public profiles

golden bane
#

I don't think it would defeat the point, since only a fraction of possible seeds would be known

earnest ledge
#

if I understand what you're saying correctly, sounds to me like you're talking about showing what the passives nodes in the rasdius of the jewel are granting

frigid nova
#

The only thing it would do is speed up the data mining, while giving a verification of claims for trades.

earnest ledge
#

it would show a fraction of the data, but not only is that fraction of the data magnitudes larger than any exisiting method, its also the most important fraction of the data

golden bane
#

And it will most likely be almost impossible to reverse engineer the seed creation process

earnest ledge
#

the jewel seeds that people are actually using, in the sockets they are actually using them, those would tend to be the best jewels

#

and therefore the most important to have data for

frigid nova
#

I suspect the seed creation process uses the same process the game uses for rolling mods.

earnest ledge
#

sure, you might only know as little as 1-10% of all the passive tree data for all seeds, but if you look at the profile of some guy wearing 300 ex worth of gear, his timeless jewel is probably pretty damn good. do that many times and you'd have the data for a majority of the most powerful seed/socket configurations

golden bane
#

Another interesting aspect: Without knowing all seeds, if you imagine the perfect jewel for your build, there is no guarantee that it can actually exist if not found already

frigid nova
#

I'm not here to argue balance decisions around timeless jewels ๐Ÿ™ƒ just asking about plans for technical support.

golden bane
#

Even if I know the most powerful seeds, it's not really feasible to attempt to roll them considering the several 1000 possible outcomes imho

earnest ledge
#

no, but it is feasible to live search for them, or at least it was in legion league

#

if you have a list of like, 10 jewels that are pretty legit for your build, one would show up eventually

golden bane
#

Yeah, that would be a problem

earnest ledge
#

you know, its funny to think that the better job the community does of "solving" timeless jewels, the more expensive divines get ๐Ÿ™‚

golden bane
#

They already get more expensive every league, would be bad if they were balanced around Timeless Jewels worth mirrors

earnest ledge
#

So I've got pretty far with supporting keystones in PoB, the problem I'm running into is that the legion keystones don't seem to be in the passive tree data. Therefore, PoB has no idea what legion keystones are or what stats they grant, so its not as simple as just saying "ok, allocate that keystone"

frigid nova
#

yeah they are in a separate .dat file

earnest ledge
#

oh boy

#

in Metadata/Items/Jewels/JewelTimeless ?

#

its mentioned on the poedb page so I assume its that

earnest ledge
#

well, not sure if I can figure it out by myself, guess I'll just hack the keystone modifiers in for now

earnest ledge
#

trying to extract anything out of the game files that isnt already supported by pypoe / repoe is basically arcane magic as far as Im concerned

alpine lynx
#

Extracting anything outside of the client log or passive tree data is dubious

earnest ledge
#

repoe provides a lot of data that actually makes it pretty reasonable for the most part. but that doesn't include timeless jewels

frigid nova
#

I'm not familiar with how pob parses the content.gppk, but im happy to add timeless jewel information parsing into repoe

earnest ledge
#

it looks like it has its own proprietary export tool

#

you're welcome to add it but I wouldn't have any plans to use it personally, for the time being. I could look at the code and attempt to get PoB to export it as well but that's about it

frigid nova
#

I personally don't have a lot of incentive to dev on pob in it's current state.

#

but I'm happy to do repoe.

earnest ledge
#

I use RePoE for PoBPreviewBot but I don't think there's any reason for my bot to do anything with legion jewels right now

golden bane
#

@fickle yew In https://poe.ninja/challenge/divinationcards, many divination card images have broken URLs. At some point, GGG seemingly deprecated https://web.poecdn.com/image/gen/divination_cards/ExampleDivCardName.png in favour of https://web.poecdn.com/image/divination-card/ExampleDivCardName.png. All divination card URLs work with the new endpoint.

fickle yew
#

@golden bane thanks

fickle yew
#

@golden bane Should be fixed now

earnest ledge
#

so I've made some good progress on legion keystone support in PoB, the thing I'm stuck on right now is figuring out the mods granted by the keystones.

for example, the passive skill maraketh_keystone_1 grants the stat keystone_wind_dancer. I've been able to successfully grant that keystone_wind_dancer stat. Then, somewhere further along, that keystone stat grants these stats:

keystone_wind_dancer_damage_taken_+%_final_if_have_not_been_hit_recently
keystone_wind_dancer_evasion_rating_+%_final_if_have_not_been_hit_recently
keystone_wind_dancer_evasion_rating_+%_final_if_have_been_hit_recently

But I haven't been able to figure out how those two things are related in the data. PoB seems to be deciphering it somehow for the regular keystones but not for the legion ones I added, and despite a lot of searching I haven't been able to find any place in the code where that process happens.

#

I also looked at the passive data and didn't see any place where they were connected there either

earnest ledge
#

so after some help from LocalIdentity we've come to the conclusion that they aren't linked in the ggpk in any useful way. PoB actually doesn't do any conversion on the existing keystones, its the tree data supplied by GGG that has the stat descriptions already in place. so I guess the only solution is to hardcode it

velvet fog
#
passive_skill_stat_descriptions.txt: # "All Damage taken bypasses Energy Shield\n50%% of Elemental Damage taken as Chaos Damage\n+10%% to maximum Chaos Resistance" reminderstring ReminderTextMaximumResistance

GGG hardcode the stats into descriptions. there is no way to map keystone_wind_dancer to keystone_wind_dancer_damage_taken_+%_final_if_have_not_been_hit_recently.

#

PoB also missing passive_skill_stat_descriptions.txt in it's StatDescription directory

spring harness
lavish gust
#

0.449999999999999999999996 ๐Ÿ˜„ - I would recommend to format all floating-point values (eg always 2 decimal digits)

spring harness
#

I tried and had issues with it because there was a problem with Numbers

#

I'll fix it at some point

lavish gust
#

What problem?

spring harness
#

Issues where number( in JavaScript

#

Wasn't liking string or parse

velvet fog
golden bane
#

What's this site for?

cosmic saffron
#

currency flipping

mortal bone
#

Iirc, there wasn't a way to properly map the keystone to stats as there are hard coded values in the table

mortal bone
#

that is my addition to RePoE to generate that file

#

I am off to work, but I can probably explain more later

spring harness
#

Is there any package for parsing passive trees

#

From a response

#

Npm please

earnest ledge
#

Yeah I discussed with chuanhsing in PMs , he was very helpful. I think he just responded here for the sake of continuity of the discussion.

I discovered after working on it last night that I don't actually need to map the keystone stat to it's sub stats, fortunately .

#

Since I didn't have the passive skill stat descriptions, I was under the impression the only way to get stat descriptions for the keystones was by mapping to those granted stats and getting descriptions for those. But in reality passive skill stat descriptions. Txt has stat description for the keystone stats and that's all I need to be able to parse the mods for pob's purposes

#

I think I'm done with the data mining aspects of the project, aside from the art assets which I know how to do it's just a matter of figuring out an implementation that isn't a disaster.

#

Then I just need to sort out a few kinks in my implementation and make the mod parser understand all the stats and I'm done

fossil arrow
#

Hi all, iam trying to get the correct affixes from the poe stats affix api "https://www.pathofexile.com/api/trade/data/stats" to get all the affix names for the uniques. As base for the uniques i took the parsed unique-txt file from the wiki. But i have big trouble converting the "text" affix names from the wiki to the correct "text" affix names form the stats api. Any one of you can help me with that or allready did it ?

#

An example:

#

"Regenerate # Life per second" this is the poe stast name where i can find the corresponding id for to make a webpage request on pathofexile.com/trade to find items with this affix

#

but on the wiki its Araku Tiki|@2-4:Life Regenerated per second|:+100 to Evasion Rating while on Low Life|30-50:To maximum Life|20-30:To Fire Resistance|:1% of Life Regenerated per second while on Low Life

frigid nova
#

Also note that the wiki has the internal id names:

|explicit1                               = EvasionOnLowLifeUniqueAmulet4
|explicit2                               = IncreasedLifeUniqueAmulet4
|explicit3                               = FireResistUniqueAmulet4
|explicit4                               = LifeRegenerationOnLowLifeUniqueAmulet4
fossil arrow
#

thankyou very much i think the stat translations.json is actually what i was looking for

frigid nova
fossil arrow
#

o poedb is Regenerate 1% of Life per second while on Low Life

#

the value 1

#

but min and max are 60

#

which does tmake sense to me D

lethal flume
#

60 life per minute

fossil arrow
#

oooh

mortal bone
#

@earnest ledge The code I linked generates a skill sprite sheet like in the normal passive tree

#

the skill node drawing code should work if you load the additional skill sprite sheets into the normal drawing code

earnest ledge
#

@mortal bone yeah PoB does an extremely similar thing with sprite sheets

#

adding legion assets to it isn't hard on paper

#

the problem is the way that doing so conflicts with the design "choices" in my implementation so far

#

all the spritesheets are generated at the same time the passive skill data is generated

#

and my legion skill data is generated seperately, in a different script

#

those two design choices don't coexist really. so I need to decide what the proper solution is and Im mostly held up by my understanding of when and how this existing passive skill script is ran

#

and I say design "choices" because making a choice would require a level of understanding of the codebase capable of any level of foresight, which I don't happen to have lol

mortal bone
#

Ah, makes sense. I an wondering if you can pass any sort of sprite sheet to the generator and just let it go. I have no idea how PoB works at all tbh

earnest ledge
#

the sprite sheets are generated immediately after it finishes processing the passive skill data, using a list of art assets that it assembled during that process

mortal bone
#

Oh, I see ๐Ÿ˜ฆ

earnest ledge
#

so two obvious approaches would be to a) add my legion stuff in between those 2 steps or b) compartmentalize the sprite sheet creation so that I can create spritesheets seperately

#

although Im not sure B would even work without rewriting the way PoB uses spritesheets

mortal bone
#

a) might work if you can find a way. It also seems to be the easier of the solutions

earnest ledge
#

it makes some sense for the code to be organized that way anyway

mortal bone
#

You basically have to do a bunch of bull shit to produce a sprite sheet properly

earnest ledge
#

trying to get this lua image processing library to work is hell, guess its time to settle for mediocrity ๐Ÿ™ƒ

#

I can probably just use your spritesheets and make it work

alpine lynx
#

i was reading through arl's pob code and it looked so strange xD

earnest ledge
#

probably has a lot to do with it being lua

#

a special language where you can do special things

lavish gust
#

[07:32]aggixx (PoBPreviewBot):probably has a lot to do with it being lua
[07:33]aggixx (PoBPreviewBot):a special language where you can do special things
in lua, arrays start at 1

spring harness
#

Hey

#

I'm doing zombpoe and someone's getting an error

#

Where they say their account name is an email ?

#

How am I supposed to change their email to their account name for a stash request ? Or do I send it differently in &account name=

golden bane
#

Without a 0 index, there is no neutral element for addition, which also means you cannot use array indices as rings or fields out of the box, that's pretty bad

spring harness
#

Wait arrays start at 1 in Lua

#

What blasphemy is this

golden bane
#

Yes actually

spring harness
#

That's sacrilige

golden bane
#

IIRC the language was designed for petroleum engineers without any formal CS education, so the language designers thought this was somehow less confusing lol

broken cloud
#

@spring harness That's probably user error, account names can't contain the @ character... tell them to put in the actual account name

worthy cape
#

Considering that everything in Lua is eventually a table, you can zero-index most things reasonably well, as long as you give up your sanity.

#

When in Rome, die of lead poisoning.

golden bane
#

Yeah but you would have to assign to the 0 index manually every time, right?

worthy cape
#

Not sure about the actual mechanisms, but I'm certain that there's filthy hacks abound in Lua ๐Ÿ˜„

spring harness
#

@broken cloud idk how they are doing it either. I'll ask them to send me a better screenshot

broken cloud
#

Hi @fickle yew , it seems that harbinger weapon pieces (legion sword piece, imperial staff piece) are not listed on poe.ninja

#

No incursion temple vials either

fickle yew
#

I don't see the weapon pieces though.

#

Vials are not there. Have it on my list.

broken cloud
#

The harbinger belt piece is listed under unique accessories, so I assumed the weapon pieces would go under unique weapons too... but they're not there

fickle yew
#

I'll double check later when I get to a computer.

spring harness
#

@broken cloud I knew he was doing it wrong lol

#

He said I was entering it wrong

#

And that he does have an account name so it works now lol

broken cloud
#

All sorted now? That's good templarthumbsup

spring harness
#

Yeah I kinda thought he was just entering it wrong

#

@fickle yew are you the Poeninja dev ? I wanna thank you for what you made. I use your API for my program โ™ฅ๏ธ

fickle yew
#

@spring harness good to hear. Thanks! The screenshots I've seen of your progress looks cool. ๐Ÿ˜Ž

worthy cape
#

I can't look at this channel without getting the zombo com audio in my head. Thanks a lot, buddy ๐Ÿ˜„

spring harness
#

good

#

you can do anything

simple ravine
#

Looks like tool developers will have a challenge ahead

worthy cape
#

FML

golden bane
#

GGG is working on much more than I expected

simple ravine
#

Will be interesting to see if there'll be big differences to ggpk/dat stuff

worthy cape
#

A bit hyped to get going on my lib again.

#

Lost interest when I tried going from PyPoE JSON schemas to generate datatypes and readers in Rust via macros.

#

My brain is too C++-addled ๐Ÿ™‚

broken cloud
#

Good to know I wasn't the only one who kept going "omg this is going to be a pain in the ass" marauderthinking still hype tho

spring harness
#

Has there be any talk of changes to the API yet

violet path
#

big shock: no

mortal bone
#

Pretty sad that the Procedural World Generation in Path of Exile isn't being streamed

#

The Main Theatre stuff is the only stuff that seems interesting lol

violet path
#

every talk will be put up on their youtube channel, whether or not it was streamed

#

so check that out when its all over

mortal bone
#

Nice

broken cloud
#

@fickle yew Some more things I noticed while tinkering with pricing data:

  • String of Servitude not listed
  • Hale Negator and Command of the Pit are only listed once (should have separate "1 Jewel" and "2 Jewel" variants for # of abyss sockets)
fickle yew
#

@broken cloud Corrupted uniques are not listed unless explicitly added. String is also random enough to be hard to handle anyway. Hale Negator should be split, true.

lusty yarrow
#

hi guys, if i use ahk to use arrow keys to move my character, is that allowed?

#

im worried about clicking in a specific place all the time been detected as a form of cheating while in reality i would be manually moving the character

lavish gust
#

@worthy cape what tool are you making?

#

@fickle yew What server implementation are you using for poe.ninja API? I have noticed it has the SSL short read bug. Multiple sites have been identified with this bug (notably Google) that do it on purpose as an "optimization of transfer by faster disconnect", however from the client's perspective it looks like there is a TCP truncation attack and the data received could be cut partially or completely.

worthy cape
#

@lavish gust File format parser lib, model viewer and hideout viewer - all in Rust.

golden bane
#

@lusty yarrow You're not allowed to move your mouse and click it with one macro, so probably not

lusty yarrow
#

oh its true, it was one server action per macro use right? im gonna look it up, thanks

golden bane
#

Yes, but also only one mouse action client-side

lusty yarrow
#

didnt know that, thanks a lot

golden bane
#

You could reposition your mouse with the arrow keys and press it with another key, however I doubt that's useful enough

lusty yarrow
#

i was thinking about that exact thing

#

i could keep it pressed down tho and use arrows to move it

golden bane
#

Sure

spring harness
#

So 1 action per server tick right

#

What's the tick rate

#

@golden bane I can't move and click in the same macro ? Even if it's spaced by 1 second ?

golden bane
#

Some users got a response from GGG support saying that "it would constitute botting"

spring harness
#

Well trade macro is kind of botting also

#

Could be argued ish

golden bane
#

How so?

spring harness
#

But I know what you're saying

#

Well it isn't cause it's just copying text pretty much

#

And just sending single text commands to open trades and stuff

golden bane
#

Well, opening trades does not concern the game at all

spring harness
#

I can't believe they answered the flask question though on stage

#

And talked about the popsicle stick method

#

Hopefully they create something everyone agrees with at one point

golden bane
#

Maybe grouping flasks would be a balanced option

#

e.g. always drink your Vinktar's and shock removal flasks together with one button press, or all five if you don't want more control over them

#

Zombo: So 1 action per server tick right
To my best understanding, the rule is worded "One server-side action per client-side action", not concerning tick rate at all

worthy cape
#

@golden bane Metaflasks? ๐Ÿ™‚

#

Just pour them all into a nice brew.

golden bane
#

I'd take it gottagofast

fickle yew
#

@lavish gust SSL is running through Cloudflare so they're probably doing the same as Google

simple ravine
#

Anyone got some AKS experience with service discovery and load balancing? Just probing around what people use, as there are a plethora of stuff

fickle yew
#

Soon

simple ravine
#

I'm trying to determine when to use Istio, Envoy and so on

#

And then you have Service Fabric, and Service Fabric Mesh for people who might not be completely comfortable with k8s. Especially customers with little linux knowledge

#

Problem I see with SF Mesh is the price being quite high, same as ACI

lavish gust
#

No idea, I'm not into networking

simple ravine
#

I can't say it's not about networking, but it's more about software, scheduling, control planes, admission control and load balancing

#

@fickle yew U tried using ACI as build agent?

#

Was thinking if that would be a cheap way of speeding up builds and releases.. potentially mounting cached nugets etc to a volume

fickle yew
#

@simple ravine nope.

#

Might work though

#

Or it definitely will..

simple ravine
#

so much to research...

spring harness
#

im really interested in the changes in the api

#

how do i stay up to date on that

#

are there any GGG members who are going to talk about that?

simple ravine
#

APIs and third party developers are something that GGG aren't really prioritizing, and it's been like that since I joined three years ago. People have come and gone, asking the same thing ๐Ÿ˜‰

#

Novynn is the most communicative at GGG, doing a good job updating developers on parts that are heavily used and extended on, such as filter updates, and some changes to the public stash model.

#

However, one can think they should spend a bit of resources to help extend the game experience with more official APIs etc, but I think they also have split opinion internally on this, so I wouldn't hope for a lot more in this arena, unfortunately.

spring harness
#

thanks for the post

#

this is helpful โค๏ธ

#

i guess ill have to wait for the patches to release then put out a new thing asap

simple ravine
#

yeah, that's what everyone do, hehe

spring harness
#

makes sense

simple ravine
#

but then again, GGG doesn't really condone the reverse engineering of the GGPK/DATs actively, as long as it's within 'good faith' use, so to speak. But they're not promoting it either, and aren't documenting it etc.

#

Same thing goes with the undocumented APIs used for the web parts, like character window etc - they're there for internal use, and are undocumented. As far as I've understood, it's "fair" to use for applications, as long as it's not breaking ToS, making morally questionable features etc.

spring harness
#

so when are they releasing the new gems?

#

4.0?

#

just kind of wondering when im going to have to deal with socketed gems json

frigid nova
#

They usually show a 20/20 preview a few days before, and then full data comes out day of in the form of the content.ggpk

violet path
#

new gem system is 4.0, the plus gems are coming in 3.9

spring harness
#

ive never looked into the .ggpk only the apis

#

jsons/

simple ravine
#

Well, a couple of releases they've washed the Data/ folder from the torrent ggpk

spring harness
#

super gems meaning plus gems?

frigid nova
#

Yeah day of content.ggpk, not day before.

#

Yes - you can see which content is associated to which release on their teaser page.

languid tulip
#

am i misremembering that they said 'plus' gem won't necessarily level to 20?

violet path
#

they're max level 5, currently

alpine lynx
#

yeah lvl20 was chris' accident

spring harness
#

i think they were getting crowd reaction to some content changes

#

and then were going from there

#

some people seem ool

#

which is okay

#

sometimes on releases

broken cloud
spring harness
#

Ur the man

fallow zinc
#

is there a public unique item db somewhere? perhaps in json or so

lavish gust
#

wiki or PoEDB or game content file

golden bane
fallow zinc
#

neither wiki nor poedb have the data in a raw format though, right?

#

at least not publicly

velvet fog
#

wiki have, but you need to use wiki cargo api

spare glade
#

Hey guys, I am new to querying requests to the trade website

#

Can somebody explain me why this doesn't work?

#

Plus, is it also possible to search for something in a similar vein to this? Is it possible to say "The id of the 'want' item must be 1 and the id of the 'have' item must be 2"?

fallow zinc
#

@velvet fog sorry, wiki cargo api? I haven't heard that before, can you point me in the right direction?

obtuse citrus
#

was there any mention of trade changes on the 2nd day of exile con? or api, data etc

hazy fog
#

none I heard

worthy cape
#

There was some talk about the future of trade - like musings about how it would be more likely to have an in-game trade site browser with more integration, but that would require embedding a browser and all.

#

I forget under what session it was, but one with Chris IIRC.

hazy fog
#

I remember that

golden bane
#

I'd much prefer a native UI with API integration than some embedded chromium

hazy fog
#

he didn't want to embed chromium because of dependencies

#

I don't remember which talk it was but I remember where I was in final fantasy 14 at the time WeirdEyes

carmine merlin
#

I think it was brought up in Quinโ€™s interview with him on day 2

mortal bone
#

I wouldn't want to embed chromium either...people already complain about Electron apps

worthy cape
#

I had a buddy doing the GW2 in-game market and API. They were slightly grumpy ๐Ÿ™‚

spring harness
#

hey

#

my electon app is okay

#

ish

mortal bone
#

electron apps are super bloated though with the node.js runtime and chromium bundle

velvet fog
#

new atlas map is dynamic when adding watchstone, it will change map level, map position and new map added. will we have api for the current atlas map information?

lavish gust
obtuse citrus
#

I seriously doubt that we'll get an api for that

#

datamining as usual

golden bane
#

@lavish gust They fixed it in their second request though. I'm interested in the exchange request format too, as I was not able to find any documentation on it

#

Or make a valid request myself

spare glade
#

Yeah, I'm trying to create a custom program to check if bulk items are being pricefixed using inferential statistics.

lavish gust
#

Has anyone got a loot filter reference for specific items? Wiki is either wrong on most of them OR the "item class" from wiki is something different than Class in loot filters

obtuse citrus
#

Can you be more specific about that? Item class is the class in the filters. Just make sure to use the class, and not the id, the id is for internal purposes

lavish gust
#

@obtuse citrus https://pathofexile.gamepedia.com/Offering_to_the_Goddess
Says the class is "Labyrinth Map Item" but for filters it is actually "Map Fragments"

Path of Exile Wiki

Offering to the GoddessIt is time for the Goddess to give her final verdict.Your fate rests in her even hands.Travel to the Aspirants' Plaza and spend this item to open the Eternal Labyrinth. You must have completed the six different Trials of Ascendancy found in Maps in orde...

obtuse citrus
#

It might have changed when they did the fragment tab, let me check

frigid nova
#

@obtuse citrus If the item classes for the filter are the same as those in the ggpk are they not auto extracted each patch?

lavish gust
#

apparently they are not

#

looks like there are 2 separate class systems

obtuse citrus
#

there are not

#

some items have duplicates with other classes due to some stuff ggg did and on the wiki we only really have one variant

#

it's mostly been related when they added stash tabs for stuff, and some item types may actually exist in both forms

lavish gust
#

ahh heard of it yes

frigid nova
#

This is all reflected in ggpk somewhere?

lavish gust
#

they convert offerings to something different in the tab in order to make it stack

obtuse citrus
#

each item is distinct in baseitemtypes so yes

#

and in case of the goddess, there a two items

frigid nova
#

I suppose this somewhat makes sense, as the original version is not stackable

lavish gust
#

well, they fixed multiple stuff in 3.7.4 and 3.8 (fossils and resoantors not stackable but stackable curency for filters, resonators having socktes for filters but not having sockets for jewellers orb)

obtuse citrus
#

resonators had a new item classs from Delve Socketable Currency to Delve Stackable Socketable Currency

frigid nova
#

Thanks for clarifying @obtuse citrus!

golden bane
#

There is some weird stacking behavior with currencies that stack into fragments btw

obtuse citrus
#

Everything that has a value for FragmentBaseItemTypesKey in the dat basically uses the new one I believe

#
Sacrifice at Dawn
Sacrifice at Noon
Sacrifice at Dusk
Mortal Rage
Mortal Hope
Mortal Ignorance
Mortal Grief
Eber's Key
Yriel's Key
Inya's Key
Volkuur's Key
Fragment of the Phoenix
Fragment of the Minotaur
Fragment of the Chimera
Fragment of the Hydra
Divine Vessel
Xoph's Breachstone
Tul's Breachstone
Esh's Breachstone
Uul-Netol's Breachstone
Chayula's Breachstone
Offering to the Goddess``` is the  whole list
#

they are all classified as "Map Fragments"

compact isle
#

if you guys ever need clarification on what items match what in item filters let me know

#

since that's data we should freely hand out

lavish gust
#

Previousky I was more concerned about GGG's filter parser. Basically it was implemented as very native string-find-consume loop, causing multiple bugs for filters that should be legal (mostly not allowing comments after various actions)

obtuse citrus
#

@compact isle does it ever match the old variants or are they all converted to the new ones with Map Fragments class?

lavish gust
#

Now there are only 2 bugs, 1 being potentially risky:

# loads correctly, but does not play anything upon item drop
    CustomAlertSound ""

# works fine, just an effect of naive string search
    CustomAlertSound WHERE IS MY HH???"pop.wav"
compact isle
#

^lol HH

lavish gust
#

there are/were tons of such bugs

#

99% chance strtol() messes with it

#

This is also legal:

Quality <= 0xB3X 4#pop
compact isle
#

yeah Rhys fixed a lot of them I saw

#

@obtuse citrus it will match whatever is on the item base type so it should only match new classes to my knowledge

#

since the old items get upgraded on serialisation

lavish gust
#

: if you guys ever need clarification on what items match what in item filters let me know
I have a list of all "item filter information" posts before each league and dedicated stash tabs on standard to test filters

#

AFAIK everything has been fixed, only "Two Axes" not working ("Two Hand" and "Hand Axes" do)

compact isle
#

is that an item class? It doesn't look familiar

lavish gust
#

No, but some item-class-string-subsets do work, some not

compact isle
#

it most likely doesn't split on spaces to compare

lavish gust
#

unless there are separate classes for each word except "Hand"

#

Last when I checked it was this way:

Resonators fall into "Delve Stackable Socketable Currency", "Stackable Socketable Currency", "Socketable Currency" and "Currency" classes but not into "Stackable Currency"

#

so it's probably only a substring search, no splitting on spaces

compact isle
#

that makes sense because "Stackable Currency" isn't a substring of "Delve Stackable Socketable Currency"

#

yeah

lavish gust
#

but some items do fall into "Stackable Currency" which makes fossils a bit inconsistent

compact isle
#

isn't that a good case for the exact match operator?

lavish gust
#

it is, but this is a very new thing

#

very useful though

#

no more exceptions for cards

compact isle
#

agreed

lavish gust
#

I'm working on a filter-compiler-generator language tool and found so many weird stuff with filters...

#

Most have been fixed with 3.8 fortunately

frigid nova
#

It might be helpful to document some of these more odd edge case phenomena on the wiki

lavish gust
#

Then started to pull trade API data to generate filters based on market prices and realized the trade also has some "quirks", eg new blue Icicle Mine being green icon in trade api data (probably old Freeze Mine)

#

@frigid nova I have it on my repository

frigid nova
#

the wiki might be more accessible ๐Ÿ™‚

lavish gust
#

it is, but I don't have the access and the process is slower

#

prefer git + markdown honestly, it's mostly for my own needs

#

Now I only wish filters supported abyss sockets. Ctrl+C already does

compact isle
#

the Icicle Mine thing is how it works in-game too

frigid nova
#

My #1 wish for filters is being able to filter by zone name for boss drops.

#

So many bosses are no longer ilvl bound.

earnest ledge
#

I agree that would be great

frigid nova
#

Maybe if we all email support at once asking for the same thing it'll get through ๐Ÿ™‚

obtuse citrus
#

As far as the wiki is concerned the class should be fixed now though it only affected offering to the goddess and the breachstones

pulsar seal
#

is there any api for all items information^?

golden bane
#

Try the wiki cargo API

lavish gust
obtuse citrus
#

The list of base types would be really long, with some of the stuff removed that doesn't drop (doodads, mtx, prophecies) you're looking at 2.2k entries.

grave wren
alpine lynx
#

Huh

#

The heck

#

That sounds awesome

dusky sail
#

anyone here familiar with Poe Official Site Trade Enhancer? Is GGG fully ok with it?

hearty kelp
#

im trying to build something in JS to hit the get-stash-items endpoint from a browser, and im having trouble getting the session cookie to actually validate... getting blocked by CORS, No 'Access-Control-Allow-Origin' header is present. has anyone done this successfully from a browser context?

the request:

const getStashItems = ({
    league = 'blight',
    tabs = '1',
    tabIndex = '0',
    accountName = '[redacted]',
    userSessionCookie = '[redacted]',
} = {}): any => {
    const url = STASH_ITEMS
        .replace('{league}', league)
        .replace('{tabs}', tabs)
        .replace('{tabIndex}', tabIndex)
        .replace('{accountName}', accountName);

    setCookie(POE_SESSION_ID, userSessionCookie, 1);

    return axios(url, {
        method: 'get',
        withCredentials: true,
    })
        .then(r => console.log(r));
};
hearty kelp
#

i was using fetch before, but i swapped to axios because i thought i started making progress with the withCredentials: true line

#

good to know i dont need it at all ๐Ÿ˜„

#

i tried using some other proxy

#

but it doesnt work because they strip out my poe session cookie

#

just a server to make the request instead? i can do that

hearty kelp
#

okay, im looking up how to get that going

#

i've done some basic stuff with node, if that'll work that's my most comfortable

grave wren
hearty kelp
#

i got it working with a standard express server + the Superagent library to reissue the request, but that looks like a better solution

hearty kelp
#

yeah, i have it restricted to my dev environment right now ๐Ÿ‘

#

is there any security concerns around the POE session id? do they need to be encrypted/obfuscated?

#

ah, so maybe once im further along in development i'll reach out for oauth access

#

seems reasonable

smoky temple
#

what are you currently developing?

#

if I am allowed to ask ^^

hearty kelp
#

im gonna hold it close to my chest for now, but once i get a little further along ill be happy to share :)

vast axle
#

is there is a way to get poe wisper sound from conent.ggpk file?

spring harness
#

@hearty kelp are u using electron

#

@hearty kelp nvm u got it working

hearty kelp
#

nah im not

spring harness
#

i just did some backend stuff for my app

#

using axios and awaits

#

for rate limiting

#

might help you with some stuff

hearty kelp
#

the request for my map stash tab contents is returning empty... is that normal? i definitely have maps in that tab.

{
  "numTabs": 24,
  "mapLayout": {},
  "items": []
}
velvet fog
#

that never implemented

hearty kelp
#

big props for the swaggerhub reference by the way, it's a huge help @velvet fog

velvet fog
#

๐Ÿ™‚

spring harness
#

i found that swaggethub thing on google

#

@hearty kelp are you doing index 0 or 1

cosmic saffron
#

each map base is its own stash

spring harness
#

maps?

#

theres no api for maps

#

its blank

#

you cant go deeper

#

unless u found a way?

golden bane
#

On swaggerhub, there is no documentation for the /api/trade/exchange/ endpoint, does anyone know how to make a vaild request there?

hearty kelp
#

@spring harness im passing tabIndex: 1, but that's only because my map stash is the tab at index 1

#

@cosmic saffron if you know how to access the map stash tab, i'd love to know as well

cosmic saffron
#

you can't, I'm just parroting what novynn said earlier about its implementation

hearty kelp
#

ah okay

cosmic saffron
#

you might be able to make it public and scrape the trade api instead but idk

velvet fog
lavish gust
#

anyone here with regex skills?

worthy cape
#

I tend to half-arse it and see if it sticks with the dialect in use, using interactive websites if available.

grave wren
#

fug

worthy cape
#

sets :magic

lavish gust
#

Ok, sorry for being late now (had to go to eat), I have solved the regex issue but not the actual one. But I doubt anyone here can help me with the actual issue (building cairo on Windows) because the majority of work on this channel is web-related which is the opposite end of the programming world.

grave wren
#

give it a shot, asking meta questions won't give you an answer for sure ๐Ÿ˜‰

lavish gust
#

Ok so here is the thing: @grave wren

  • You have a standard GNU toolchain (GNU make, GCC, unix shell tools) etc - basically "the bread and butter" for any C or C++ project on unix systems (and one of possible toolchains on Windows)
  • You want to build some C or C++ libraries
  • One of them uses GNU autotools, which (unlike most modern C++ build systems) uses a ton of shell scipting and explicitly does not support paths containing spaces and other special characters
  • Your tools/libraries/dependencies reside in C:/Program Files or C:/Program Files (x86)

Goal: build the "cairo" and "pixman" graphic libraries. So far I have found 2 things (pkg-config, autoconf) that are completely broken by "most standard Windows installation path"

hearty kelp
#

if the issue is the windows installation path, is it possible to rebuild your tooling under WSL or in a docker/container setting with linux?

lavish gust
#

Of course it is, but unfortunately the build system cairo has (autotools) does not support cross-compiling

#

Major modern C/C++ build systems (CMake, Meson) read "project description files" which have a very declarative syntax (source files, header files, dependencies, requires standards etc) and then "interrogate" your compiler in order to generate a shell script that calls the compiler with appropriate flags (which can be even 100+).

The problem with other build systems (autoconf/autotools, manually-written makefiles) is that they almost always assume something which break for someone. Usually some things like compiler flags, supported standards or default and some paths. Ironically I have hit one of the most simplest problems: paths containing spaces.

hearty kelp
#

this might be stupid but have you tried wrapping paths with spaces with quotes? or do you have 3rd party dependencies as well

lavish gust
#

I hoped that "wrapping spaces with quotes" can be solved by a good sed with appropriate regex, but the issue is much more complex to solve.

#

Cairo has a 39995-line-long shell script and it's basically an abonimaton of string split/join/merge operations and calling other programs (compiler, linker, archiver etc)

#

But don't worry, I have had other problems already and will likely find a solution for this one too. At worst by writing an entire modern project script for current-era tools in order to build it.

#

Well, it's actually a workaround because you evade the problem. I'm surprised there are tools which were never meant to support paths carefully and blindly concatenate strings assuming everything is pure ANSI and has no special characters.

#

There are no other "versions" (or whatever you meant by it), it's just 1 library which supports only 1 tool to build it. And the tool is pretty unprepared for a ton of things.

#

correct bash code should be string wrapping any user input
Any shell code should be doing this. Not doing so is a problem equivalent to SQL injection etc

grave wren
#

i dont wanna do anything in bash :>

lavish gust
#

me neither

grave wren
#

syntax straight from hell

lavish gust
#

bash in a nutshell:
"something does not work in line X" - why? - because a space is missing
"something does not work in line Y" - why? - because there is an extra space

#

functions in bash are amazing: there are no restrictions and checking on arguments, and the only way to have a return value is echoing the string

#

I'm really glad that all of modern C and C++ tools do all the string-based work inside and directly call installed programs with precomputed arguments instead of invoking the shell

#

The only thing they need are paths to these programs, which are usually guessed by inspecting common installation directories on each system and PATH

#

I wish others could do aswell. I have even seen a project (made by Intel) which writes C89 code in 2019 and only manually-written-shell-build-scripts. This looks like an absolute hell to work with, no matter whether directly or just using the library.

worthy cape
#

The problem with spaces is that some of the languages involved in autotools builds are very bad at consistently and reliably handling "special characters" in paths, and there's an undercurrent of intentionally not fixing such problems as they only affect The Enemy - people accepting Windows.

#

When upstream is often hostile or indifferent, workarounds are the name of the game.

#

Symlink everything, ensure that all directories you control are boringly named, and then cry a bit over the state of things.

lavish gust
#

I understand arguments against not supporting Windows, but the library does provide a separate makefile to build using MSVC (the compiler bundled with Visual Studio). Contrary to the autotools, this one is manually written and can be easily tamed to support other compilers - I just need to change stuff like CFLAGS, CXXFLAGS, LDFLAGS etc. Already managed to build pixman by doing this.

frigid nova
#

Does anyone have any reasonable code which imports items from the clipboard written in python?

frigid nova
#

Oh sorry, I really should've been more clear, I meant parses poe items off of the clipboard (ideally into some basic item class)

#

I suppose I'm pretty tempted to make a python package which handles different item representations and parses them into some shared object.

#

Yeah, seems like a reasonable package to have lying around to help standardize things a bit, a bit low on my list of things to dev on right now though.

#

Does anyone know if the maximum number of prefixes/suffixes that can roll on a base item is located somewhere in a .dat?

golden bane
#

I think this question came up sometime in the past and it was concluded that this info is serverside

#

And at least in RePoE there is no such info

#

There are now quest/vendor rewards in RePoE btw

#

I wanted to add them for a long time but never got around to do it

#

Iherron beat me to it, gj

frigid nova
#

Oh nice! yeah I made RePoE into a python package so if anyone wants to import it you can directly access the jsons as a python dict using

import RePoE
print(RePoE.characters)
hard hinge
#

is anyone working on a crafting simulator that supports simulating many attempts?

earnest ledge
#

the GUI is pretty god awful though

simple ravine
#

Now I feel like I wanna polish and fix mine up as well. It had good potential

lavish gust
#

@earnest radish @worthy cape I actually managed to reinstall multiple tools (Git Bash, make) and other libraries (libpng, freetype); workarounded pkg-config's prefix path and spaces in other paths. Cairo finally started to build but the quantity and severity of warnings it emits (even with proper setup) is scary:

cairo-scaled-font-subsets.c: In function '_cairo_sub_font_init_key':
cairo-scaled-font-subsets.c:258:31: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  258 |         sub_font->base.hash = (unsigned long) scaled_font;
      |                               ^
cairo-scaled-font-subsets.c:263:31: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
  263 |         sub_font->base.hash = (unsigned long) scaled_font->font_face;
      |                               ^
cairo-type1-subset.c: In function 'cairo_type1_font_subset_get_matrix.isra.0':
cairo-type1-subset.c:337:6: warning: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]
  337 |      strncpy(s + j, decimal_point, decimal_point_len);
      |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cairo-type1-subset.c:315:25: note: length computed here
  315 |     decimal_point_len = strlen (decimal_point);
      |                         ^~~~~~~~~~~~~~~~~~~~~~

Now I wonder if it won't segfault on anything.

hearty kelp
#

is there a limit to the number of items you can request at once in the /api/trade/fetch/{items} endpoint? im currently getting an error #2 on my current request of 91 items, but passing a few select items in individually seems to work fine. my guess is i just need to batch request these item ids?

lavish gust
#

Haven't heard of query limitations, but did heard of data transfer limitations. Maybe there is also a limit of items you can query in order not to DoS the server

hearty kelp
#

seems like 10 is the max

#

im redoing a query, adding items 1 by 1. 10 works, 11 fails, and the item at index 11 works, so im guess im just limited to 10 per request

worthy cape
#

@lavish gust It's a common pain point for porting software to Windows on x86, unsigned long is 64-bit on Linux and 32-bit on Windows.
Everyone in hippieville "knows" that it's 64-bit, so why use POSIX types that actually have sizes like uint32_t, uint64_t and uintptr_t.

#

Some of the warnings above may be intended, of course, but it's hard to tell as they look similar to actual mistakes and I love compilers for their speculative diagnostics.

#

(as long as you're not one of those fools that ship with -Werror)

#

If you're building something that might have binary builds on Windows from some party, it might be worth looking into if they patch their builds or if they're vanilla upstream.

worthy cape
lavish gust
#

@worthy cape

Some of the warnings above may be intended, of course, but it's hard to tell as they look similar to actual mistakes and I love compilers for their speculative diagnostics.
The newest ones from GCC about non-null terminated strcpy etc can be controversial, but I just turned everything on to see if it happens.
Some warnings are obviously intentional (eg fallthrough in switches) so it's fine. I have no idea why there is unsigned long cast, the library does use fixed-with type names in most places.
If you're building something that might have binary builds on Windows from some party, it might be worth looking into if they patch their builds or if they're vanilla upstream.
There are no official builds. I did the build exactly as they document it for my toolchain.

worthy cape
#

Seems like their hashmap implementation has settled on "unsigned long" for the intrusive hash field, which is a bit odd but sure, might have performance swings in both directions on 32-bit and 64-bit ABIs. A more warning-resistant cast would be something like (unsigned long)(uintptr_t)blargh to explicitly express the truncation.

#

I got some nice linter warnings about my Rust code the other day, had a cast like let x = 0u16; let y = x as u32; and got a warning that told me that if the type of x changed in the future, the cast could be silently truncating. I love those.

#

(the suggested fix for that was let y = u32::from(x) which only has implementations for integers smaller than the one used, so I'd get a nice hard error if x suddenly was u64)

#

Regarding the previous discussion about autotools vs. good build systems, I've seen just about every build system there is at work, where I compile scientific software for our researchers. Turns out that people who write scientific software are often better at their science than build engineering ๐Ÿ˜„

worthy cape
#

(on a quite tangential note, truncating pointers as a hash key is ugh as the low bits are almost always zero for alignment)

alpine lynx
#

@lavish gust started working full time :-: haven't made more progress on my project yet. How's your filter program going?

lavish gust
#

the filter compiler works and supports both poe.ninja and poe.watch now + saving downloads, working on the GUI now

alpine lynx
#

Sick

#

Looking forward to seeing the progress

lavish gust
#

I have also reported a security vulnerability in poe.ninja by which the client should not accept the data

frigid nova
#

@earnest ledge @simple ravine I'm working on polishing up my crafting simulator currently and making it into a python package. I'd appreciate any feedback from people who are willing to beta it. It will be only backend, no gui.

lavish gust
#

rasmuski is aware of this but it's due to the hosting being used (Cloudflare's SSL), performing a very bad-looking optimization (from the user's side: you get all the data but it looks like someone is TCP-truncate-attacking you)

#

Nonetheless if you have any ideas - let me know - I have like 10 issues open

#

I'm interested in any opinion from potential users, but want to make a first post about it when I have the gui

#

optionally compile it as a shared library object being to able to be imported as a python module (doing this for CPython from C++ code is extemely trivial)

worthy cape
#

Biggest pain point I've had in the past when building shared objects for Python is that the manylinux1 environment is horribly ancient.

#

I forget what the sanctioned MSVC version is on Windows.

simple ravine
#

@frigid nova My worry is that Python will be too slow for that kind of work load

frigid nova
#

Undoubtedly a reasonable worry. I do plan on timing all the ops. The usual solution when trying to implement performant python packages is to write the performant parts in C and then stitch it together with python.

#

I am most comfortable in python and interested in having a suite of python poe packages which provide a rich enough sandbox for people to try out different things.

simple ravine
#

Right... I think you will end up writing most of the things in C/Rust at that point.

frigid nova
#

It all depends how expensive the ops are. If your technical ops take up the majority of the time, then having the governing logic written in python is fine.

#

This is why a lot of scientific computing packages are still in python

lavish gust
#

I forget what the sanctioned MSVC version is on Windows.
MSVC has been ages behind unix tools, even on Windows. It's catching up but many report it's codegen is still significantly worse. Also, just 2 years ago Microsoft finally fixed the bug of __cplusplus being expanded to 1998xx standard so ... only since 2 years you can actually write 1998+ C++ code because all the time earlier any #ifdef __cplusplus >= 1998xx would be ignored. Libraries needed to find/ask for Visual Studio compiler version, because the most standard way built-in to the language to check it's own version was broken for 20+ years.

worthy cape
#

Scientific Python... makes the node ecosystem clusterhug look benign ๐Ÿ˜„

simple ravine
#

Apparently 2 years ago since I touched this

#

But I was decently happy with the way this worked... where I had each orb/thing as a class, and have strategies being using these applying to an Item until X orbs has been used, or goal has been reached

#

it was pretty fast

frigid nova
#

I think the only thing you'll really need to add thats fundamentally different is fossils. And if you have tags implemented properly shouldn't be too much work

simple ravine
#

But a lot of things would need improvement before "production ready"

#

Yeah, which is why I prefer a language with generics

#

execution branches would be far faster with generics

lavish gust
#

thezensei: @frigid nova My worry is that Python will be too slow for that kind of work load
Yeah, was a bit scarier for it too when did something else. I have some sort of a HTML escaper for specific task and it performs just 1 memory allocation for the entire work. Python will perform like 2-3 allocations for each line.

Python is terribly slow due to it's flexibleness (PyObject in CPython is ~250 bytes, even if its a class holding 1 integer) but the majority of Python is spend inside C or C++ code - just lookup the source of any machine learning/web/graphic library.

simple ravine
#

I might be biased, but I think .NET Core can be a good option, if you know how to write performant/optimized code, or perhaps Rust (so you don't have to deal with memory safety in C)

frigid nova
#

My taste is sandbox over extreme performance. But if there is a case demonstrated to me that the performance is limiting I'm happy to see alternatives.

lavish gust
#

I can't imagine writing Python without type hints

simple ravine
#

Well, either way, Python and algorithms will not outperform C, Rust or .NET Core if you have equally able developers in both languages

frigid nova
#

No, but its not all about performance.

simple ravine
#

Well, it depends what your usecase is

#

If you're doing an application where a user is experimenting with a bunch of ways to craft their items, performance may or may not be important

worthy cape
#

The upside of Python enabling laypeople to write code that does things is that it enables laypeople to write code that does things. The downside is that I've got to deal with laypeople writing code in Python ๐Ÿ˜„

#

Beats using MATLAB as a scripting language, tho.

lavish gust
#

I actually didn't choose C++ for my filter-compiler project because of performance. The primary motivation was to learn, use dedicated libraries (C and C++ are prime languages most compilers are written in) and to have anything to show on future job interviews.

simple ravine
#

On a broader topic, I am a bit worried about the software developer industry in general. I meet a lot of (and train some) newcomers to the industry. I worry that they're simply not equipped enough to deal with the increasing expectations from them.

lavish gust
#

bad code is nothing new

frigid nova
#

This seems like a generic worry every generation has about the next ๐Ÿ˜†

worthy cape
#

Sounds about right.

lavish gust
#

study showed 80% of indian gratuates are unemployable after finishing school

#

some otehr study showed that 98% of indian IT students can't write a working hello world in any language

#

I have seen a recording from one of the lessons: the teacher writes a statement on the board and people repeat it 5 times. Students were ~16 years old. Something went terribly wrong

simple ravine
#

Yep, exactly that.

#

I held one of the last days of the career boosting days, where we were supposed to go over Cosmos DB. We initially thought I'd hold another day about Microservices, and talk about distributed computing (but after the initial days, we abandoned that idea).

Out of 15 people in the room, 3 of them figured out half of the first lab I had - which was essentially store an object in Cosmos, and retrieve it.

#

They had half the day.

#

Literally from after lunch, and at 4 pm they were all "too tired to think" bohoo

#

Out of the 15 people, 2 were girls. Both of the girls outperformed the guys in the room, btw.

#

Before starting, I asked if they had any initial questions. Two guys asked when the breaks were going to happen.

#

I'm like... "wat?"

obtuse citrus
#

I don't think they wanted to be there

simple ravine
#

They specifically applied to join

#

Most people fresh out of university, we provide this program as part of employment (and you can apply without joining this program, as this would give them a good start in a specialization field, such as Cloud, Test Automation, RPA etc). The schools they attended clearly did not prepare them well

frigid nova
#

maybe i was just spoiled with good students, I really enjoyed my time teaching over the last 5 years (in the US)

simple ravine
#

Agree, the cultural differences between India and Europe/USA is quite difficult. I work with a lot of indian people, and it's... difficult at times.

#

nick, did you teach at a specific school?

frigid nova
#

I taught linear algebra at uc berkeley (as a graduate student-not professor), mostly ended up with sophomores.

simple ravine
#

Yeah, I think that's different.

simple ravine
#

Considering the increasing demand for developers, the number of developers double every 4-5 years. This means that half of the work-force has 5 years or less experience. It also means that what is deemed "senior" is also pushing down. When I started, a senior developer was 8+ years of experience, and if you wanted to be an architect it was easily 10+ years of experience.

Today, I see some people with 5-ish years of experience (sometimes less) who title themselves as software / solution architects. To me, that's total madness.

Couple that with the increasing expectations from the software industry, significantly increasing complexity of software.

Today, clustered distributed systems on kubernetes using microservices, devops, continuous integration and continuous delivery, infrastructure/configuration/pipeline/documentation as code, CAP theorem to worry about etc, is becoming mainstream... I mean.. jesus it's gonna be popcorn hour in a few years.

#

I've seen teams who have been pitching systems, with quite high demands, where they have literally no idea what the CAP theorem means, pitching highly distributed systems for mission/business critical systems.

I just feel we're in an almost-apocalyptic-stage unless we can really abstract all those pain-points away from developers, or make sure developers understand all of these concepts.

It's unfortunate, but I think developers who want to embark on more "serious" system development gigs, will have to spend a lot of their free time, being curious and learn more than what universities can offer. It's either that, or software development programs need to be like 5-6 years instead of 3.

#

12 out of 15 didn't even know what async and await was.

#

Yeah, but nobody told them about it

#

I've been at customers, advising on things... I mostly talk with their architects, sometimes their developers. I've been to some places, where their senior developers hand no idea about these concepts either.

#

So, imagine having to then tell them "Ok, so you want to use Kubernetes, and build microservices"...

#

where to start...

worthy cape
#

Try hiring for HPC sysadmin work - only two kinds of people you can hire are either hobby admin enthusiasts you can train up, or old farts.

#

The university computer clubs are pretty much dead nowadays, while we used to source a lot of staff via those.

simple ravine
#

I wanna learn some Elixir, and get to use their fibers

worthy cape
#

No-one got time to hack on such shared infrastructure.

simple ravine
#

In c# we have tasks (as well as threads), and a really good task scheduler. Helps you write good async stuff

#

zao, yeah - better hire by attitude and train them

#

problem is most people I've interviewed are a "nope!"

#

Another big issue are all of these 'coding bootcamps'. A lot of them are taught by people who should not be teaching. They get taught the wrong things, completely, expecting to get into the industry kicking ass, but realizing the grim reality of software development

worthy cape
#

I still remember some interaction&design students I overheard in the corridors at the university, who were going to apply for some C++ job. They figured that they'd taken some Java, so they'd be fine. ๐Ÿ™‚

simple ravine
#

Sure, there are a lot of developer jobs not going to require all those above things I mentioned, but they're getting more and more mainstream. In a few years, we're going to see a lot more demand from users

frigid nova
#

Does anyone know how the game rolls rares for bricked vaal orbs/8 mod maps?

frigid nova
#

Current observations are: it ignores added tags, and always rolls max affixes. Does anyone know if it changes the spawn_weights? ( @obtuse citrus tagging in case you had looked into this previously)

smoky temple
#

As a somewhat software development junior I really enjoyed reading the discussion above.
I self studied and am working since 4.5 years for a company, I made many mistakes and learned respectively fast.
Imo making mistakes and trying to stop repeating them or finding a solution is what students lack.

Was one of them too, and making mistakes was the worst thing for some teachers, but tbh its the fastest way to learn.
And as long as the issues don't go live it is alright.

alpine lynx
#

Yeah was a nice conversation to read. I'm an even more so junior software engineer. Just finished my degree a couple weeks ago and i've been working as a professional for a week now.

#

I might be biased but I feel like my institution seems to produce pretty solid software engineers

#

i was the student rep for my degree so i watched over a lot of my class mates and generally none of them were particularly bad

#

all reasonably good at tackling whatever problem came up at the time, i suppose that's dumbing down the points made above though.

smoky temple
#

Well no you are not dumbing down my points.. I wouldn't say children are afraid from making mistakes by default.
Your school (teachers) might have done it right way I assume.

When I was like 5y old I jumped, ran, drove my bike even thought I knew I could hurt myself in the process.
The one who is responsible for educating are parents and teachers,
and some tend to make you more hesitant from dangers and problems.
Imo teaching how to avoid dangers is a good skill, but some parents exaggerate.

My aunty (doctor) did not leave the house with her child for 6 months, such over protection is not good for children at all.
At least imo.

violet path
#

my parents didn't let me sleep in the house the first 6 months and i turned out fine

smoky temple
#

๐Ÿ˜†

golden bane
#

I'm working my way through PoB's source code and I have to say, lua for _, valueIAmActuallyInterestedIn in ipairs(thingThatShouldBeAnArray) do every ten LOC gets really tiresome

lavish gust
#

still better than some projects I have at work - people love shortcuts and no/hard-to-find explanations

grave wren
#

found a thing in our codebase that was ~350 LoC from 2012 with the comment //use calculation similar to excel file

#

which excel file, what does it even do, why is it that long

golden bane
#

A joke in itself as all Microsoft Office formats have incompabilities with each other across versions

grave wren
#

and it's always the same person from back then who did shit like that

#

would be amusing if it wasn't so sad

lavish gust
#

Trying to search for simple stuff and stack amazes me:
https://stackoverflow.com/questions/14223233/list-all-directories-recursively-in-a-tree-format
pwd;find . -print 2>/dev/null|awk '!/\.$/ {for (i=1;i<NF-1;i++){printf("โ”‚ ")}print "โ”œโ”€โ”€ "$NF}' FS='/'

simple ravine
#

how to overcomplicate finding stuff

earnest ledge
#

@golden bane yeah that's a classic lua-ism, I don't think there's a more optimal way to do that. Assuming that only the table values are relevant in that snippet but that the keys/value pairings are relevant somewhere else in the code. If the keys weren't relevant you'd use an integer indexed table instead.

#

but I'd love to be wrong here

frigid nova
#

@earnest radish that pyodide project is dope

#

Yeah - almost definitely only good for niche uses like specialized libraries. But still provides a pretty quick way to get material into web friendly form.

#

I work at a machine learning research lab and will definitely share this with the web developer, seems great for demos.

golden bane
#

That's the technology for Path Of Building 2 right there too

frigid nova
#

looks like maybe require from Node.js is breaking it

mild lava
#

Is there any mobile trade app?

violet path
#

depends on what you mean

#

you cannot trade items or interact with other players in that way through an app, no

simple ravine
#

fcftfxig4568t6f456tpgro

simple ravine
#

Tfw when you don't lock your computer, and the kid goes wild ๐Ÿ˜‚

grave wren
#

open up the brainfuck interpreter and let him/her go ham :>

past peak
#

Anyone knows a tool i can use
to display some information as an overlay
IE: GEMS/Act rpogression

lavish flicker
#

are there legal logout macros I can somehow use?

golden bane
lavish flicker
alpine lynx
#

If you want to build some ui, Poe developers use imgui for tools inhouse

#

It's pretty nice too

golden bane
#

Seems perfect for game development apps, very nice

worthy cape
#

I use imgui (and GL) for my GGPK viewer, helps a lot when you need to quickly spam out a bunch of lists and text.

#

Figured out recently how to load fonts, so now the whole UI is in one of the PoE fonts ๐Ÿ˜„

compact isle
#

some of our debug stuff uses IMGUI so these pictures look strangely official

alpine lynx
#

:0

compact isle
#

oh didn't notice you practically said the same thing haha

alpine lynx
#

Hehe ye

#

I heard from Chris or Jonathan, I forget

#

What sort of stuff do you do at GGG novynn?

#

I assume programming since U have the tools dev role

compact isle
#

I do website programming and kind of self-assign API things

alpine lynx
#

did you have a hand in the fancy passive tree stuff that seems to have appeared on the web version

#

like shortest path highlighting

compact isle
#

I don't know if I'd call ours fancy but the shortest path stuff wasn't me

alpine lynx
#

aw

#

well its more fancy than it used to be

mortal bone
#

The shortest path highlighting has been on the web site for a long time now haha

alpine lynx
#

mm i thought it might have

#

i hadn't checked the website tree for a long ass time

velvet fog
#

gggtracker stopped

past peak
#

@alpine lynx what's the easiest way for a skiddie to hack-together some ui without extensive programming knowledge?

#

or does imgui handle that (overlay)

#

I can only find D3D overlays for cheats if i google "easy" don't think PoE will like that :p

alpine lynx
#

Imgui is pretty easy, it's a little bit tricky to get it working in your program but the actual usage is very simple imo

#

I'm not sure if there are easier alternatives, my knowledge is local to C++

golden bane
broken cloud
#

Is there a quick way to diff two versions of Content.ggpk, or is there anyone already doing this for each patch?

#

Very curious about the latest one, 2 GB seems a lot for only adding two supporter packs as the patch notes say

worthy cape
#

I don't remember if I have any example code in poe-rs for doing that, but it should be reasonably straightforward to write.

#

@broken cloud What's 2 GiB? Steam download size, physical difference in Steam GGPK size, or ditto for Standalone?

#

I see standalone patch size being 2.04 GiB, so probably that.

broken cloud
#

Standalone download size was 2.04 gb... heard that the Steam version was over 3

worthy cape
#

Heh, I had a poediff command already.

#

Off to work now tho, will see if I can run it later.

#

(assuming it still compiles, forgot to touch the tools when rewriting DAT handling)

#

Three listings - files that are different, files that are removed, and files that are added.

#

The DDS files that are like 70 bytes large, those are symlinks to other DDS files.

#

It seems like a completely kosher patch, tbh.

broken cloud
#

Interesting, thanks very much!

#

Only 39 MB added... the vast majority (1.7 GB) is in ShaderCacheD3D11.packed

velvet fog
#

logs/Client.txt also displayed files downloaded

worthy cape
simple ravine
#

I'm getting an urge to learn Rust

golden bane
#

Just saw that Nim has an official release now, interesting language https://nim-lang.org/

Nim Programming Language

The Nim programming language is a concise, fast programming language that compiles to C, C++ and JavaScript.

grave wren
#

For me it's go for it's templates that look super useful

#

But I don't have a specific thing in mind so I am still in the waiting phase

golden bane
#

Yeah, same

lavish gust
#

Nim is a compiled, garbage-collected systems programming language

garbage-collected systems programming
Hold on, this contradicts itself. One of the aspects of systems programming vs anything higher level is that you have control over allocations and entire resource management. GC is best in terms of writing-cost/performance but still beaten by proper deterministic implementations when they can control everything.

worthy cape
#

@simple ravine Please don't see my code as "good Rust", it's quite uncommented write-only ๐Ÿ˜„

#

Most of the convolution in that one is due to multiprocessing tho, farming off the initial gathers of the full file trees into two threads, and then farming out the comparisions across all cores.

#

Feels rude to write serial code on a Ryzen ๐Ÿ˜›

simple ravine
#

Yeah it doesn't scare me.

#

@lavish gust Probably why we haven't heard of it before. It sounds like a terrible idea.

lavish gust
#

Looks like a second Go language from implementation point of view

#

also compiled, also binds at C/C++ level but has GC

simple ravine
#

now "Systems" is a loaded term, to be fair

lavish gust
#

well, for me "systems" means:

  • no underlying implementation - the language is self-sufficient to implement everything in itself (this is the case of C and C++ standard libraries, except some concurrency primitives and keywords like sizeof/alignof) (no knowledge about Rust in my case)
  • full control: raw memory access (pointers), no runtime checking for viability or performance reasons (undefined behavior) (compile-time checking through type system strongly desired instead)
  • no unnecessary stuff and things you pay for even if not using (that is, no GC, no implicit bounds checking, no RTTI and virtual tables, no exported symbols and other binary bloat)
worthy cape
#

@lavish gust Rust is written in Rust, needs LLVM. No intrinsic runtime that needs to start, std or core are linked into your binary.

#

The things you're allowed to do in unsafe blocks might resemble the stuff that C lets you do with aliasing, pointers, and transmutes, but it pretty much means that you are supposed to uphold all the invariants.

lavish gust
#

expecting such thing, just have no knowledge so wanted to be careful

worthy cape
#

As for bounds checking, depends on what functionality you use. Debug builds have checked arithmetic, release builds wrap.

#

You can't do everything in Rust, but that's probably for the best sometimes ๐Ÿ˜„

lavish gust
#

From my curiosity, does Rust implement strict aliasing rules? Does unsafe change aliasing rules in any way?

worthy cape
#

Embedded people seems to be somewhat fine with it, my uses are more what I'd traditionally use C++ for.

#

For regular values, you've got either a single mutable reference or many immutable references. You can't have both at the same time.

#

So if you have something mutable, you know nothing else will alias it.

#

As for reinterpreting (transmuting in Rust parlance), fairly sure that it would invalidate whatever it used to be, but that's deep in unsafe land.

lavish gust
#

Isn't "single mutable reference" a bit limiting, making some algorithms impossible?

worthy cape
#

One of the things that newcomers do is to try to write doubly linked lists.

#

Took me a good while to overcome that some ways of doing things were just not suited for the language, and my code is probably better for it.

#

Something like BTreeMap (the ordered dict) most probably uses unsafe or unsafe-derived functionality (UnsafeCell<T>) inside, to actually make a good B-tree.

#

You've nailed it exactly on the head there, some code is cumbersome or "impossible" to write verbatim. Sometimes you can wrangle it into something that works fine, sometimes you've got to rethink a bit further out.

#

If you've got something that has a lot of pointers into arrays, it might be rewritable to work with indices for arrays.

lavish gust
#

well, I don't think you could make a language like Rust work with its high-lvl safety feature in all cases without unsafe blocks

#

Maturity and age of C and C++ show that a ton of compiler extensions are required to make something fast and there is no language that would be both very save and very fast without something like safe/unsafe code blocks. AFAIK C++ creators do not want such safe/unsafe thing, they just want reasonable language-imposed invariants and some built-in features to support exceptional cases. Some are already in various languages (eg instructing which if branch is more likely) but some AFAIK exist only in C and C++ (built-in XMM and SEE intrinsics, stuff like __builtin_unreachable() etc)

worthy cape
#

C++ is kind of stuck with their object model with weirdo moves glued onto it. I feel properly scared writing code in C++, no safeguards on implementing even a copyable/movable object correctly.

#

And I've been the kind of person that used to cite the standard back in the C++03-11 days.

#

It's also quite split between the dialect that high performance graphics/simulations are written in (C with plus plus), the intended kind that reads like Java, and the template clusterhugs that the rest entertain themselves with.

#

Took me about a year to get to this point of reasonable competence in Rust btw, picked it up for Advent of Code last year.

#

Not sure what the SIMD story is in Rust, never felt much need to duck around with that.

lavish gust
#

C++ is kind of stuck with their object model with weirdo moves glued onto it
I wouldn't name them "glued". Moves were already well known pre-modern-cpp era and in other languages, they just werent in the language. C++ object/memory model is constantly changing (there are for sure changes in 2014/17/20 to support more operations). The only complain that I have is that the syntax std::move(obj) is verbose for such a fundamental thing.

no safeguards on implementing even a copyable/movable object correctly
I don't think such thing is ever possible. Pointers are pointers, the compiler can not track algorithm invariants. The only safeguard is that once you have a type that is properly implemented (eg any data structure) any type that composes of them can use "rule of 0" and just not implement any of copy ctor/move ctor/dtor because the implicit codegen is already calling underlyin members copy/move/dtor. In reality you very rarely implement any rule-of-5 type and just compose more types from already implemented ones.

It's also quite split between the dialect that high performance graphics/simulations are written in (C with plus plus), the intended kind that reads like Java
I have no idea what do you mean here.

worthy cape
#

The rule-of-N was what I was referring to, and I don't write that kind of C++ enough to have a grip on how to have object-safe types in C++.

#

Graphics/game-like code tends to be quite C-like, seldom bothering with types that are copyable/movable right. Put most of them in a vector ($diety forbid) and they'd blow up.

#

There's two very different types of C++ people write, and I find myself quite a lot inbetween them.

#

Composing object types out of other object types happens all the time in "proper" committee sanctioned C++, and very seldom in that way in "real" C++.

#

If that makes sense.

lavish gust
#

there regarding rule-of-N, are only 2 scenarios:

  • the type owns some resource directly (eg has a pointer member) => you do rule of 5 and implement all copy/move/dtor (rule of 3 in pre-modern-cpp)
  • the type composes only from other types => rule of 0, nothing needed (implicit copy/move/dtor will call members copy/move/dtor recursively)
worthy cape
#

I used to do a lot of Boost say 15 years ago and kind of fell off the horse when it came to that kind of C++.

lavish gust
#

unless you want to roll your own dat structure or has to deal with some very manual C API library, you pretty much never need to write rule-of-5 code

worthy cape
#

Not helped by admining a #gamedev, that's for sure.

#

Construct my own derived objects at runtime with hand-emitted vtables, overallocated objects with self-relative pointers in the space after the header for persistence, reading game file formats (hey, that's why I'm here now).

#

Nowadays I feel quite lost in C++ as I pretty much missed C++14 and C++17.

#

MSVC's slow adoption of the standards made it mostly pointless to try to keep up, as nothing nice could be used.

lavish gust
#

Construct my own derived objects at runtime with hand-emitted vtables
I tried to do such thing. It's possible and fully type-safe (no uses of void*). There are no problems, you can implement dynamic dispatch manually and there are even libraries supporting stuff like multiple dispatch.

overallocated objects with self-relative pointers in the space after the header for persistence
formally, C++ has no support for such thing; unformally, every compiler supports this without problems

MSVC's slow adoption of the standards made it mostly pointless to try to keep up, as nothing nice could be used.
I agree. MSVC has been ages behind GCC and Clang. It's catching up but I definitely prefer to use GCC, even on Windows.

I feel quite lost in C++ as I pretty much missed C++14 and C++17.
The very TL;DR of post C++11 standards is: no T* at all if you don't do stuff like "my own data structure implementation". Modern C++ == programs without owning pointers.

#

I did some C++14/17 projects and you can grep for * with no results other than multiplication and multi-line comments

worthy cape
#

My implementation was literally shoving function pointers into a template vtable and spoofing enough of the information, very implementation-bound.

#

The precursor to my poe-rs bounced several times between C++ and C, as I just didn't feel happy in either language.

lavish gust
#

It's likely you did something wrong. C++ is known to be taught very bad and there are very few good resources. The language is hard to learn and the general state of teaching anything in IT makes it even worse.

worthy cape
#

I've been doing it for something like 20 years now and have done pretty much everything one can do in it.

#

All the new jazz people are hyped up over just feels uninteresting, like constexpr and better SFINAE and other TMP bullshit.

#

I can't stand that kind of code after Boost.

#

You should've seen our graphics and visual simulation courses around 2006 or so... you were assumed to have picked up C++ by yourself, whereas all courses beforehand was C and Java.

#

They had me on as TA later to crash-course the basics ๐Ÿ˜„

#

I might get back to the language eventually, but I have no reason to right now and that feels great.

lavish gust
#

I agree that TMP in C++ has some bad spots and needs overly complex code to sometimes perform simple things, C++20 concepts help a lot with this (by higher-lvl type system and no more wall-of-text compiler error messages) but the actual TMP thing (compile-time type/function edits like it is in D) is planned to arrive in C++ in 2026 ("metaclasses").

A thing that I want more for C++ is much saner build times, build process and dependency management. Modules are already being implemented and should arrive in the next year. Finally something being able to replace includes

worthy cape
#

My dayjob is compiling scientific software. Can't wait for the mess that separately compiling modules will cause when people start needing those ๐Ÿ˜„

#

We used to manually build software with environment modules and manual README.sysop files to document how to build and use something. Now we install thousands of packages via EasyBuild and somehow it all mostly works.

#

Have they figured out what modules actually should be and what they should do yet? ๐Ÿ˜„

lavish gust
#

looks like yes

#

there was a recent post on C++ reddit titled "remember the FORTRAN" and posts like "remember the Vasa" mentioning half-bakced features and projects will ultimately lead to destruction of themselves

worthy cape
#

I deal with Fortran on a daily basis, still very much alive.

lavish gust
#

Fortran has modules. But I heard they were implemented in a such way that they no benefits

worthy cape
#

Yeah, never really figured those out. A bit of safety on signatures, akin to headers if I grokked them right.

lavish gust
#

What I know is that "people behind C++ modules" first implement them in actual compilers, benchmark, bikeshed the code and them show to others

#

They adopted multiple proposals which focused stricyly on the pragmatic aspect - that is - will it work and can we do it well in GCC or Clang? What blocks making it efficient etc

#

The guy behind metaclasses (aimed at 2026) runs his own fork of Clang which implements them. So they can test actual code and compiler before the feature is worked in it's paper form.

#

I think leaning from other people's experiences and mistakes is still underused by the C++ commitee, but they finally realized it's better to look from the perspective of average user and started to focus on what really matters for actual programmers, not boost or committe experts. By "stuff that really matters" I mean .contains() for maps, .starts_with()/.ends_with() for string, standard enum for platform endianess, math constants in the standard library etc

worthy cape
#

Can't have those, those'd be useful ๐Ÿ™‚

lavish gust
#

C++20 looks like a big "QoL update", no major features for average user besides modules

worthy cape
#

I've got to pop out for groceries and keel over - been nice chatting with you.

#

I may have to revisit C++ if my GUI options in Rust don't pan out.

lavish gust
#

C++20 has std::format. You probably know what it does

worthy cape
#

โค๏ธ

lavish gust
#

The best part of it: it's pretty much a copy of Python's or C#'s format.

#

But they were battle-tested and I don't think you need to reinvent the weel

#

The only major difference between upcoming C++ format function to string formatters in otehr languages is that it's a constexpr magic that checks the format string at compile time. It doesn't throw on invalid argument type - it just won't compile. The format library is already on GitHub and IIRC they beaten printf and any similar in speed

worthy cape
#

Smells like Rust's format! macro, that's nice.

lavish gust
#

I'm looking to more "foreign language imports" in C++. Just more everyday convenience like hints for if branches, formats, math constants. C++20 has a ton of small things that is hard to remember but IIRC there is also std::lerp.

worthy cape
#

Thanks for reminding me of the trauma of C++ builds and dependencies. All the things like vcpkg break down miserably as soon as you want things like "debug builds with release runtime and no iterator checking" or "static runtime linking".

lavish gust
#

There are package managers (eg Conan) which allow such things. They label each build combination with an ID from compiler flags hash, version number etc. Haven't used vcpkg

Other thing is that I recently got to learn "modern CMake" which is the currently the most widely used C++ build automation system and modern CMake vs old CMake is basically that you no longer use variables and functions in build scripts, now you just define your private and public dependencies, required compiler flags/features and expose a "target" object which all further projects just "depend on". So there are no longer problems with tracking recursive dependencies inlcude paths or poisoning other projects with questionable compiler flags. You just define what you need in a self-contained "target" library/executable object

worthy cape
#

Yeah, been doing that, but hell is legacy dependencies and having to adapt everything into my world, if at all possible.

#

At work I can kind of motivate massaging software into building in Our Way, but at home as a hobbyist, my builds are utterly incomprehensible and non-reproducable by anyone that grabs the repo.

#

I've heard the Conan gospel but nothing of it has touched on my concerns.

lavish gust
#

Had the same issue already

#

wanted to build Cairo, a C graphics library

#

this thing only supports autotools

worthy cape
#

Oh right, that was you ๐Ÿ˜„

lavish gust
#

made a post on C++ reddit about the whole "adventure"

#

post titled "autotools + windows: a build systems tragedy"

#

2nd best reply: "autotools + anything = build systems tragedy"

worthy cape
lavish gust
#

3rd best reply: "autotools = build systems tragedy"

worthy cape
#

That's Linux tho, very native world.

#

You recall how I ranted about how MSVC was eternally behind on C++? I sunk quite some effort into mingw-w64 therearound.

#

Hopefully mingw32 is dead and buried by now.

lavish gust
#

I did build some ancient things (eg libpng) but despite their age they do support modern build systems

worthy cape
#

Current msys2 seems "fine" using pacman and all.

lavish gust
#

yeah msys2 is fine although I use a different (non-msys2) GCC builds

#

both do the job anyway

worthy cape
#

I think I have one project in Rust that targets the GNU toolchain, due to some upstream crate being silly.

#

Now try to integrate a decent Windows GCC toolchain into an IDE ๐Ÿ˜„

#

Even IDEA gets all upset over versions being too new, not to mention Qt Creator.

lavish gust
#

Eclipse

#

not a joke

worthy cape
lavish gust
#

It does work well, forget past complains, they fixed majority of things

#

Java being the only problem actually....

worthy cape
#

Last I tried the CDT, that image is the result of trying to type in a C++ source file, it chugging out each character with a few seconds between each, and eventually just dying.

#

This was well over a decade ago, of course ^^

lavish gust
#

well since few years it works really seamlessly

#

I just quadrupled the RAM in config file to let Java be more Java and work faster. Eclipse parses C++17 STL and language features. Excellent autocomplete. No problems with includes and compiler-provided defines

#

The project settings menu is somewhat a mess, but the magic "find UI button/tab" search box does wonders

#

I wish some other tools like Notepad++ or office format editors had this thing, I way to often search the entire menu to find simple options like "justify left" or "remove extra blanks at end of line"

grave wren
#

dunno eclipse was always kinda slow for me

#

i prefer jetbrains tooling

lavish gust
#

I would too but unfortunately their C++ IDE, unlike others, has no free license

grave wren
#

hm edu licencing :>?

golden bane
#

@lavish gust If you don't like Nim's lean built-in GC, you can also switch it out, write your own or disable it. You can also write Nim code with manual memory management, very flexible: https://nim-lang.org/docs/gc.html

grave wren
#

wished there was a sale on pycharm

#

i'd like to snag a cheaper pro version

lavish gust
#

Well I'm doing some projects, with let's say, "higher goal" so preferably all things involved should be openly licensed. Anything licensed requiring some payment or closed code is very likely a no-go

frigid nova
#

@grave wren a decent chunk of people at my work use vsc as a competitor to pycharm professional, I just switched over recently to vsc and enjoy it for python deving (will warn you some features are still in the process of being integrated)

grave wren
#

hm i am not a fan of doing a lot of setting up myself, especially with debugging and profiling that's where jetbrains stuff shines imo

frigid nova
#

Ah yeah - my workflow doesn't use ide's for debugging or profiling. So I can't speak to either of those (all of our code is launched remotely and executes mainly on gpu's)

grave wren
#

intellij does remote debugging just fine for the stuff i do

frigid nova
#

yeah - python code mainly is a driver which issues async commands to the gpu, so debugging the python code is rarely useful - unless the ide magically had a CUDA debugging suite (which I would be very keen for)

grave wren
#

ah i see, yeah

mint hinge
#

Does anyone have the api format to query something for trade? Is there a doc somewhere

cosmic saffron
#

check ๐Ÿ“Œ

mint hinge
#

I can't seem to find how to alter the listed within the trade search api. Does any one have an idea?

broken cloud
#

{"query": { "filters": { "trade_filters": { "indexed": { "option": "1month" } } } } } }

#

Valid values are "1day","2days","3days","1week","2weeks","1month","2months"

mint hinge
#

Thank you

timid crest
frigid nova
#

Both websites parse the information differently