#tooldev-general
1 messages ยท Page 96 of 1
Would like to do this retroactively for non-bulk items (valuable uniques, skill gems, etc.)
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.
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.
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
@inland kestrel It doesn't. Haven't seen those ids anywhere.
why does "http://api.pathofexile.com/public-stash-tabs/?id=:2947-5143-4137-5411-1759" have next_change_id of itself?
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++;
}
@woeful sphinx bummer. So there wasnโt something I missed ๐ช
@subtle brook cause you're passing an invalid change id ๐
what would be valid change id?
@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).
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
Yeah, I have helped author PoESkillTree and I run the website site http://poeskilltree.com
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
https://github.com/PoESkillTree/PoESkillTree, and https://github.com/EmmittJ/SkillTree_TypeScript respectively
sure
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
I have a small tool that will download skill tree images and build the spritesheet out of them
oo
it is in c# though
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
@subtle brook one without a colon
I can upload it. It isn't very pretty haha
no problem, even if you just want to show me some of the core logic to it that would probalby be a great help
also are you writing a river parser in php what in the world..
thats the only thing that i know besides gamemaker language xd
it has no colon, it looks like this
gamemaker language ๐คข
that has a colon lol
someone else might be able to give a more educated answer but my assumption would be go for c#
C++ is a great language to learn for your education as a programmer but its not gonna be quick
np, thank you!
i'll have a read over it later today, what's your time zone? incase i wanna pop you a message
sweet
10:15 am for me
at school atm
closing out my final projects for this degree
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
whistles
lol
https://cdn.discordapp.com/attachments/640654678220341344/640654733123518505/HighresScreenshot00003.png beauty shots of this steaming student project
I wrote this tool to generate spritesheets for really old skill trees
better than my student project lol
mine was tax software...
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
wtf
its basically mock industry work
mine was just a group of 3 people, and I was the only one that did work lol
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 ><
my university did a "capstone" project which spanned your senior year
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
well, that seems ok
Third year is basically a year long multiple stage production project
its really great honestly
exams suck ass
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
yeah its pretty normal even in new zealand
media design school is different
But yeah project work has its own issues
definitely
Funnily, I made a poe builds website as my "end of degree" project for software engineering
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
Ah well, I can understand that. Sounds like a cool project though.
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
There is a lookup table for the text description - but not a link to the .dat file itself
OMG thank you so much thats what i was looking for
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
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!
check pins
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...
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
@livid fable How are you calculating chance of success
how do you plan on calculating chance of success
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)
How do you plan on calculating the chance of hitting a single desired mod
assuming there are no other restrictions like certain number of open affixes?
ye
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?
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
good luck!
i am but a lowly scrub learning programming from the internet but ive got a goal and im tenacious
well you'll either get to your goal or learn a heck of a lot along the way
seems legit to me
or both
I'd suggest focusing on making your rollouts incredibly fast so you can emulate millions of rolls, and using those for success rates.
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?
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
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
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.
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
yeah im happy to do that
cool, DM away then. appreciate the feedback as always
ay
I did a crafting simulator a year or two ago
I used the spawn weight stuff to do it
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
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
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)
right, but its still confined to pick a certain amount of prefixes and suffixes
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)
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
@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.
Yo guys! I just re-rolled my character into a low life vortex build. Found a build on poe.ninja: ...
dang I think he went offline while I was typing the message lol
@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.
@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
My testing has all lined up completely with Omega's conclusions.
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"
@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).
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.
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.
oh i meant just the number should be there
not the actual nodes
just to be able to represent the full build
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
@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.
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
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
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
there is a fork of it already
yeah does it support the jewels?
I have radius and stuff working for my own calculations already so I don't think it should be too hard.
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?
doesn't support the keystones though, right?
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
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
ah ok, that makes sense. thanks for the answer
@earnest ledge You can have a look at this for keystone support: https://github.com/ppoelzl/PathOfBuildingAPI/blob/master/pobapi/api.py#L154
I'm not sure what part of the problem that is supposed to help with
I think I misunderstood you earlier, sorry
But I would very much appreciate PoB support for Timeless Jewels
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 ๐
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
@compact isle Are there any plans to add timeless jewel support to the passive tree viewer on the official site?
no
If you're able to share - is that decision motivated by game design choices around the jewels or workload decisions about prioritizing technical support?
Other modifier effects such as Healthy Mind's life-to-mana conversion are also not supported in the passive tree viewer
the section of the backend that handles those transformations isn't easily available to the website
I understand - thanks for your insight!
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?
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.
would defeat the whole point of the seed system imo, you could just datamine the effect of jewels from public profiles
I don't think it would defeat the point, since only a fraction of possible seeds would be known
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
The only thing it would do is speed up the data mining, while giving a verification of claims for trades.
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
And it will most likely be almost impossible to reverse engineer the seed creation process
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
I suspect the seed creation process uses the same process the game uses for rolling mods.
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
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
I'm not here to argue balance decisions around timeless jewels ๐ just asking about plans for technical support.
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
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
Yeah, that would be a problem
you know, its funny to think that the better job the community does of "solving" timeless jewels, the more expensive divines get ๐
They already get more expensive every league, would be bad if they were balanced around Timeless Jewels worth mirrors
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"
yeah they are in a separate .dat file
oh boy
in Metadata/Items/Jewels/JewelTimeless ?
its mentioned on the poedb page so I assume its that
well, not sure if I can figure it out by myself, guess I'll just hack the keystone modifiers in for now
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
Extracting anything outside of the client log or passive tree data is dubious
repoe provides a lot of data that actually makes it pretty reasonable for the most part. but that doesn't include timeless jewels
I'm not familiar with how pob parses the content.gppk, but im happy to add timeless jewel information parsing into repoe
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
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.
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
@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.
@golden bane thanks
@golden bane Should be fixed now
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
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
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
0.449999999999999999999996 ๐ - I would recommend to format all floating-point values (eg always 2 decimal digits)
I tried and had issues with it because there was a problem with Numbers
I'll fix it at some point
What problem?
For those using https://strongbox.rogueyoshi.com, I have some bad news. Unfortunately since re-applying for Adsense and [getting declined due to...
What's this site for?
currency flipping
@earnest ledge I can double check some code I have to parse out the stats for the legion stuff, but my 'final' product looked like this: https://raw.githubusercontent.com/EmmittJ/SkillTree_TypeScript/2b8b5ecbe9d364b695c40a211adf1eb980111ccc/data/3.7.0/SkillTreeAlternate.json
Iirc, there wasn't a way to properly map the keystone to stats as there are hard coded values in the table
that is my addition to RePoE to generate that file
I am off to work, but I can probably explain more later
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
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
Also note that the wiki has the internal id names:
|explicit1 = EvasionOnLowLifeUniqueAmulet4
|explicit2 = IncreasedLifeUniqueAmulet4
|explicit3 = FireResistUniqueAmulet4
|explicit4 = LifeRegenerationOnLowLifeUniqueAmulet4
thankyou very much i think the stat translations.json is actually what i was looking for
You can also use poedb http://poedb.tw/us/unique.php?n=Araku+Tiki
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
60 life per minute
oooh
@earnest ledge The code I linked generates a skill sprite sheet like in the normal passive tree
Then I ran it through a spritesheet generator that I made, and it pops out something like this:
https://github.com/EmmittJ/SkillTree_TypeScript/blob/master/data/3.7.0/assets/skills-additional-3.jpg
and
https://github.com/EmmittJ/SkillTree_TypeScript/blob/master/data/3.7.0/assets/skills-additional-disabled-3.jpg
the skill node drawing code should work if you load the additional skill sprite sheets into the normal drawing code
@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
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
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
Oh, I see ๐ฆ
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
a) might work if you can find a way. It also seems to be the easier of the solutions
it makes some sense for the code to be organized that way anyway
You basically have to do a bunch of bull shit to produce a sprite sheet properly
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
i was reading through arl's pob code and it looked so strange xD
probably has a lot to do with it being lua
a special language where you can do special things
[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
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=
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
Yes actually
That's sacrilige
IIRC the language was designed for petroleum engineers without any formal CS education, so the language designers thought this was somehow less confusing lol
@spring harness That's probably user error, account names can't contain the @ character... tell them to put in the actual account name
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.
Yeah but you would have to assign to the 0 index manually every time, right?
Not sure about the actual mechanisms, but I'm certain that there's filthy hacks abound in Lua ๐
@broken cloud idk how they are doing it either. I'll ask them to send me a better screenshot
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
@broken cloud they should be there https://poe.ninja/challenge/unique-armours?name=Piece
I don't see the weapon pieces though.
Vials are not there. Have it on my list.
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
I'll double check later when I get to a computer.
@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
All sorted now? That's good 
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 โฅ๏ธ
@spring harness good to hear. Thanks! The screenshots I've seen of your progress looks cool. ๐
I can't look at this channel without getting the zombo com audio in my head. Thanks a lot, buddy ๐
Looks like tool developers will have a challenge ahead
FML
GGG is working on much more than I expected
Will be interesting to see if there'll be big differences to ggpk/dat stuff
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 ๐
Good to know I wasn't the only one who kept going "omg this is going to be a pain in the ass"
still hype tho
Has there be any talk of changes to the API yet
big shock: no
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
every talk will be put up on their youtube channel, whether or not it was streamed
so check that out when its all over
Nice
@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)
@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.
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
@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.
@lavish gust File format parser lib, model viewer and hideout viewer - all in Rust.
@lusty yarrow You're not allowed to move your mouse and click it with one macro, so probably not
oh its true, it was one server action per macro use right? im gonna look it up, thanks
Yes, but also only one mouse action client-side
didnt know that, thanks a lot
You could reposition your mouse with the arrow keys and press it with another key, however I doubt that's useful enough
i was thinking about that exact thing
i could keep it pressed down tho and use arrows to move it
Sure
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 ?
Some users got a response from GGG support saying that "it would constitute botting"
How so?
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
Well, opening trades does not concern the game at all
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
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
I'd take it 
@lavish gust SSL is running through Cloudflare so they're probably doing the same as Google
Anyone got some AKS experience with service discovery and load balancing? Just probing around what people use, as there are a plethora of stuff
Soon
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
No idea, I'm not into networking
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
so much to research...
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?
idk how to get a pigeonhole.at to get a question about that
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.
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
yeah, that's what everyone do, hehe
makes sense
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.
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
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
new gem system is 4.0, the plus gems are coming in 3.9
Well, a couple of releases they've washed the Data/ folder from the torrent ggpk
super gems meaning plus gems?
Yeah day of content.ggpk, not day before.
Yes - you can see which content is associated to which release on their teaser page.
am i misremembering that they said 'plus' gem won't necessarily level to 20?
they're max level 5, currently
yeah lvl20 was chris' accident
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
@spring harness check here for API updates https://www.pathofexile.com/forum/view-forum/674
Ur the man
is there a public unique item db somewhere? perhaps in json or so
wiki or PoEDB or game content file
@lavish gust @fallow zinc There is no unique item data in content.ggpk anymore since at least 2017 https://github.com/brather1ng/RePoE/issues/1#issuecomment-278979565
neither wiki nor poedb have the data in a raw format though, right?
at least not publicly
wiki have, but you need to use wiki cargo api
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"?
I did find https://www.pathofexile.com/api/trade/data/static. Did somebody map all of the currency ids to numerical ids?
@velvet fog sorry, wiki cargo api? I haven't heard that before, can you point me in the right direction?
was there any mention of trade changes on the 2nd day of exile con? or api, data etc
none I heard
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.
I remember that
I'd much prefer a native UI with API integration than some embedded chromium
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 
I think it was brought up in Quinโs interview with him on day 2
I wouldn't want to embed chromium either...people already complain about Electron apps
I had a buddy doing the GW2 in-game market and API. They were slightly grumpy ๐
electron apps are super bloated though with the node.js runtime and chromium bundle
Steve Sanderson is actually working on an interesting project of how to get .net core apps into a electron like format:
https://blog.stevensanderson.com/2019/11/18/2019-11-18-webwindow-a-cross-platform-webview-for-dotnet-core/
Steve Sanderson's Blog
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?
@spare glade You are issuing requests towards the webpage endpoint, so you get back the HTML content. If you want JSON returns, you need to use different targets like https://www.pathofexile.com/api/trade/data/leagues
@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
Yeah, I'm trying to create a custom program to check if bulk items are being pricefixed using inferential statistics.
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
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
@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"
It might have changed when they did the fragment tab, let me check
@obtuse citrus If the item classes for the filter are the same as those in the ggpk are they not auto extracted each patch?
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
ahh heard of it yes
This is all reflected in ggpk somewhere?
they convert offerings to something different in the tab in order to make it stack
each item is distinct in baseitemtypes so yes
and in case of the goddess, there a two items
I suppose this somewhat makes sense, as the original version is not stackable
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)
resonators had a new item classs from Delve Socketable Currency to Delve Stackable Socketable Currency
Thanks for clarifying @obtuse citrus!
There is some weird stacking behavior with currencies that stack into fragments btw
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"
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
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)
@compact isle does it ever match the old variants or are they all converted to the new ones with Map Fragments class?
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"
^lol HH
there are/were tons of such bugs
99% chance strtol() messes with it
This is also legal:
Quality <= 0xB3X 4#pop
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
: 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)
is that an item class? It doesn't look familiar
No, but some item-class-string-subsets do work, some not
it most likely doesn't split on spaces to compare
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
that makes sense because "Stackable Currency" isn't a substring of "Delve Stackable Socketable Currency"
yeah
but some items do fall into "Stackable Currency" which makes fossils a bit inconsistent
isn't that a good case for the exact match operator?
it is, but this is a very new thing
very useful though
no more exceptions for cards
agreed
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
It might be helpful to document some of these more odd edge case phenomena on the wiki
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
the wiki might be more accessible ๐
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
the Icicle Mine thing is how it works in-game too
My #1 wish for filters is being able to filter by zone name for boss drops.
So many bosses are no longer ilvl bound.
I agree that would be great
Maybe if we all email support at once asking for the same thing it'll get through ๐
As far as the wiki is concerned the class should be fixed now though it only affected offering to the goddess and the breachstones
is there any api for all items information^?
Try the wiki cargo API
@earnest radish classes: https://pathofexile.gamepedia.com/Item_class (some may be outdated)
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.
anyone here familiar with Poe Official Site Trade Enhancer? Is GGG fully ok with it?
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));
};
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
crossorigin.me is giving me a 522 right now but that's likely my fault
just a server to make the request instead? i can do that
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
https://www.npmjs.com/package/express-http-proxy should do exactly that @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
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
im gonna hold it close to my chest for now, but once i get a little further along ill be happy to share :)
is there is a way to get poe wisper sound from conent.ggpk file?
nah im not
i just did some backend stuff for my app
using axios and awaits
for rate limiting
@hearty kelp https://github.com/zombodotcom/Zombpoe/blob/35e924dc513e936708c25573e18fa65310166423/main.ts
might help you with some stuff
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": []
}
that never implemented
๐
i found that swaggethub thing on google
@hearty kelp are you doing index 0 or 1
Join thousands of developers who use SwaggerHub to build and design great APIs. Signup or login today.
each map base is its own stash
maps?
theres no api for maps
its blank
you cant go deeper
unless u found a way?
On swaggerhub, there is no documentation for the /api/trade/exchange/ endpoint, does anyone know how to make a vaild request there?
@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
you can't, I'm just parroting what novynn said earlier about its implementation
ah okay
you might be able to make it public and scrape the trade api instead but idk
get next-change-id from https://poe.ninja/stats and fetch the river
I wanna mess with this: https://blog.stevensanderson.com/2019/11/18/2019-11-18-webwindow-a-cross-platform-webview-for-dotnet-core/
Steve Sanderson's Blog
anyone here with regex skills?
I tend to half-arse it and see if it sticks with the dialect in use, using interactive websites if available.
fug
sets :magic
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.
give it a shot, asking meta questions won't give you an answer for sure ๐
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 FilesorC:/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"
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?
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.
this might be stupid but have you tried wrapping paths with spaces with quotes? or do you have 3rd party dependencies as well
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
i dont wanna do anything in bash :>
me neither
syntax straight from hell
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.
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.
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.
Does anyone have any reasonable code which imports items from the clipboard written in python?
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?
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
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)
is anyone working on a crafting simulator that supports simulating many attempts?
its not mine but this one will simulate 100k+ attempts I believe https://github.com/Gloorf/POECraftingShenanigans I've found it useful in the past
the GUI is pretty god awful though
Now I feel like I wanna polish and fix mine up as well. It had good potential
@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.
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?
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
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
@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.
I finally got around finishing up my generation of Rust structures and loaders for DAT files based on the JSON export of the PyPoE stable.py schema.
build.rs is janky as heck, but way nicer than my previous procedural macros.
https://gist.github.com/zao/27ff3288c127e358a846bbc9d1e6375f
@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 terminatedstrcpyetc 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 isunsigned longcast, 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.
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 ๐
(on a quite tangential note, truncating pointers as a hash key is ugh as the low bits are almost always zero for alignment)
@lavish gust started working full time :-: haven't made more progress on my project yet. How's your filter program going?
the filter compiler works and supports both poe.ninja and poe.watch now + saving downloads, working on the GUI now
I have also reported a security vulnerability in poe.ninja by which the client should not accept the data
@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.
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)
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.
@frigid nova My worry is that Python will be too slow for that kind of work load
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.
Right... I think you will end up writing most of the things in C/Rust at that point.
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
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__cplusplusbeing expanded to 1998xx standard so ... only since 2 years you can actually write 1998+ C++ code because all the time earlier any#ifdef __cplusplus >= 1998xxwould 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.
Scientific Python... makes the node ecosystem clusterhug look benign ๐
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
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
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
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.
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)
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.
I can't imagine writing Python without type hints
Well, either way, Python and algorithms will not outperform C, Rust or .NET Core if you have equally able developers in both languages
No, but its not all about performance.
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
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.
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.
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.
bad code is nothing new
This seems like a generic worry every generation has about the next ๐
Sounds about right.
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
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?"
I don't think they wanted to be there
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
maybe i was just spoiled with good students, I really enjoyed my time teaching over the last 5 years (in the US)
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?
I taught linear algebra at uc berkeley (as a graduate student-not professor), mostly ended up with sophomores.
Yeah, I think that's different.
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.
This is gonna be me the coming years:
https://giphy.com/gifs/michael-jackson-comments-popcorn-pUeXcg80cO8I8
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...
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.
I wanna learn some Elixir, and get to use their fibers
No-one got time to hack on such shared infrastructure.
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
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. ๐
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
Does anyone know how the game rolls rares for bricked vaal orbs/8 mod maps?
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)
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.
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.
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.
my parents didn't let me sleep in the house the first 6 months and i turned out fine
๐
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
still better than some projects I have at work - people love shortcuts and no/hard-to-find explanations
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
A joke in itself as all Microsoft Office formats have incompabilities with each other across versions
and it's always the same person from back then who did shit like that
would be amusing if it wasn't so sad
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='/'
how to overcomplicate finding stuff
@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
@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.
That's the technology for Path Of Building 2 right there too
looks like maybe require from Node.js is breaking it
https://unpkg.com/colormap@2.3.1/index.js. Seems to be failing to import either of the top two variables.
Is there any mobile trade app?
depends on what you mean
you cannot trade items or interact with other players in that way through an app, no
fcftfxig4568t6f456tpgro
Tfw when you don't lock your computer, and the kid goes wild ๐
open up the brainfuck interpreter and let him/her go ham :>
Anyone knows a tool i can use
to display some information as an overlay
IE: GEMS/Act rpogression
are there legal logout macros I can somehow use?
Yes, http://lutbot.com
the best one, for when peeps in my guild are bothering me
If you want to build some ui, Poe developers use imgui for tools inhouse
It's pretty nice too
Seems perfect for game development apps, very nice
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 ๐
some of our debug stuff uses IMGUI so these pictures look strangely official
:0
oh didn't notice you practically said the same thing haha
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
I do website programming and kind of self-assign API things
did you have a hand in the fancy passive tree stuff that seems to have appeared on the web version
like shortest path highlighting
I don't know if I'd call ours fancy but the shortest path stuff wasn't me
The shortest path highlighting has been on the web site for a long time now haha
gggtracker stopped
@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
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++
@carmine merlin https://feathub.com/LocalIdentity/PathOfBuilding/+18
Also, support for the new Bones of Ullr mods and subsequently, the bound fossil "+1 to Level of all Raise Spectre gems" mod and all other skill gems in the future too: https://github.com/Openarl/PathOfBuilding/pull/1761
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
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.
Standalone download size was 2.04 gb... heard that the Steam version was over 3
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.
Interesting, thanks very much!
Only 39 MB added... the vast majority (1.7 GB) is in ShaderCacheD3D11.packed
logs/Client.txt also displayed files downloaded
For anyone curious - https://gitlab.com/zao/poe-rs/blob/master/tools/src/bin/poediff.rs
I'm getting an urge to learn Rust
Just saw that Nim has an official release now, interesting language https://nim-lang.org/
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
Yeah, same
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.
@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 ๐
Yeah it doesn't scare me.
@lavish gust Probably why we haven't heard of it before. It sounds like a terrible idea.
Looks like a second Go language from implementation point of view
also compiled, also binds at C/C++ level but has GC
now "Systems" is a loaded term, to be fair
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)
@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.
expecting such thing, just have no knowledge so wanted to be careful
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 ๐
From my curiosity, does Rust implement strict aliasing rules? Does unsafe change aliasing rules in any way?
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.
Good thing is that there's a "book" on unsafe Rust - https://doc.rust-lang.org/nomicon/
Isn't "single mutable reference" a bit limiting, making some algorithms impossible?
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.
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)
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.
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 syntaxstd::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.
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.
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)
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++.
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
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.
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 ofvoid*). 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: noT*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
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.
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.
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.
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
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? ๐
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
I deal with Fortran on a daily basis, still very much alive.
Fortran has modules. But I heard they were implemented in a such way that they no benefits
Yeah, never really figured those out. A bit of safety on signatures, akin to headers if I grokked them right.
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
Can't have those, those'd be useful ๐
C++20 looks like a big "QoL update", no major features for average user besides modules
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.
C++20 has std::format. You probably know what it does
โค๏ธ
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
Smells like Rust's format! macro, that's nice.
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.
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".
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
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.
Had the same issue already
wanted to build Cairo, a C graphics library
this thing only supports autotools
Oh right, that was you ๐
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"
Huh, cool. We don't patch cairo at all on our site - https://github.com/easybuilders/easybuild-easyconfigs/blob/develop/easybuild/easyconfigs/c/cairo/cairo-1.16.0-GCCcore-8.2.0.eb
3rd best reply: "autotools = build systems tragedy"
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.
I did build some ancient things (eg libpng) but despite their age they do support modern build systems
Current msys2 seems "fine" using pacman and all.
yeah msys2 is fine although I use a different (non-msys2) GCC builds
both do the job anyway
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.
It does work well, forget past complains, they fixed majority of things
Java being the only problem actually....
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 ^^
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"
I would too but unfortunately their C++ IDE, unlike others, has no free license
hm edu licencing :>?
@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
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
@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)
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
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)
intellij does remote debugging just fine for the stuff i do
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)
ah i see, yeah
Does anyone have the api format to query something for trade? Is there a doc somewhere
check ๐
I can't seem to find how to alter the listed within the trade search api. Does any one have an idea?
{"query": { "filters": { "trade_filters": { "indexed": { "option": "1month" } } } } } }
Valid values are "1day","2days","3days","1week","2weeks","1month","2months"
Thank you
https://poe.watch/prices?category=currency&league=Standard&group=currency&search=fusing
hmm, this is interesting, how is the fusing 0.86 chaos while poe.ninja says it's 0.59c for buying and 0.53c for selling?
it's also reflected in the exalt ratio if you look in the poe.watch api: "exalted": 0.00444823, <- this is 225 fusings per exalted orb, and real prices are somewhere around 330-340 fusings per exalted for selling (https://www.pathofexile.com/trade/exchange/Standard/G63a33Ib), and 280-300 for buying (https://www.pathofexile.com/trade/exchange/Standard/JBrerJUl)
Both websites parse the information differently
