#tooldev-general

1 messages · Page 128 of 1

velvet fog
#

column42 after OffHandItemClassesID was removed

carmine merlin
#

ahh ty, that brings them back now

civic crane
#

steel inventing new logout macro on stream 😂 (logs in second client to force kick yourself in 1st; bc as he said sometimes logout is not immediate)

worthy cape
#

Can't wait for someone to try to refine that into an extremely bannable tool that tries to do protocol replay and screw themselves and everyone ever touching it over.

simple ravine
#

Just Don't Get Hit ™️

worthy cape
#

New support - Peer when Damage Taken.

simple ravine
#

Cut Cord When Damage Taken

#

or Send FIN When Damage Taken

#

wonder when people will understand that the "Logout is not always immediate" might not be a protocol issue on client side, but how server do their routines

worthy cape
#

Need to stack ACKuracy.

simple ravine
#

Absolutely, to create SYNergy between client and server

#

I rewrote my fetching thing last night btw, @worthy cape - I was previously wrong, it's not just 50ms to shave off. It's around 600ms if u start from id 0 currently for me

#

so that's actually noticeable

stiff willow
#

Any estimate on when pob will be updated?

carmine merlin
#

soon ™️

carmine merlin
stiff willow
#

🎉 love PoB

carmine merlin
#

wont be done for a couple hours though btw

stiff willow
#

Appreciate the effort! Also, I found a bug in PoB, would you like me to message you about it?

carmine merlin
#

yeah sure

carmine merlin
#

If anyone wants to check out their build with all the gem changes before we release an update

fluid wave
#

Is there an API endpoint I can use just to check rate limit headers?

keen dragon
#

ignore me mod("SkillAndDamagingAilmentDuration", "(-INC)+MORE", nil),

simple ravine
worthy cape
civic crane
fluid wave
simple ravine
fluid wave
#

or make some assumptions of the default rate limits based on ip/client/user token

civic crane
worthy cape
fluid wave
#

Very fun

#

We're using the user's OAuth token, so need to pin their session to that instance 😐

#

or use some distributed thingy

simple ravine
#

IP still takes precedence over OAuth Token when it comes to rate-limiting, right?

#

i.e. you can't have a web-service work on behalf of let's say 100 users on a single IP

fluid wave
#

I don't get the IP rate limit state in headers, so not sure

simple ravine
#

oh, maybe he fixed that since I tried it back in 2018-2019

#

time to rekindle that application key

fluid wave
#

It will just be three users though. But then loading each stash tab or w/e even for one user reaches the rate limit really fast, essentially on a single unique tab 😄

simple ravine
#

time to get something with multiple NICs? 😄

#

Azure has something called Source NAT, which you attach a CIDR, and you'll get round-robined. A bit less deterministic in case of rate-limiting though. Main purpose of SNAT is to alleviate source port exhaustion, but could work.

fluid wave
#

man I have so many bad experiences with SNAT 😄

#

using F5

fluid wave
#

Yes, it gives a 404

#

and it count towards the rate limit 😄

simple ravine
#

hmm, I tried marking "last access" time just before connecting, and adding an arbitrary 50ms to that time, and ensure there's always 500ms before doing next request. I jsut got throttled anyway

#

argh

fluid wave
#

I wonder if I'm just shooting myself in the foot trying to make this async

#

😐

compact isle
compact isle
simple ravine
compact isle
#

send me an email with what you want enabled in it

simple ravine
#

ok can do - is there a list of scopes available somewhere?

compact isle
#

yeah it's kind of shit I need to redo that part of the docs

simple ravine
#

are there other ones not listed?

compact isle
#

none that are available to the regular joe

#

it just needs to be more linked into the resources page so that it's more obvious which endpoints require which scopes

simple ravine
#

I think it's pretty fine as-is, quite obvious

compact isle
#

that's good to hear! It's unfortunately the thing people struggle most with when requesting access

simple ravine
#

You've got mail. @compact isle

graceful barn
#

@carmine merlin is there a place to submit pull requests that 100% shouldn't be merged? I wrote up a pretty hacky proof of concept aurabot exporter inside of the calc's tab, but it should really be rewritten by somebody who's coded in Lua before today if it were to ever be merged in

simple ravine
#

Now, hopefully WinUI 3 becomes a stable development story soon ™️

carmine merlin
simple ravine
compact isle
#

that's because old OAuth used the same APIs as the clandestine "POESESSID" ones

#

😉

simple ravine
#

technology evolves!

ocean iris
#

thanks as always for updating PoB Fork guys

simple ravine
#

aye, these nerfs are going to be glorious to poe

ocean iris
#

i can't find earthbreaker support in the gems, is it just not in yet?

simple ravine
#

i was hoping it'd go as hard as back to 2.4

worthy cape
#

Possible that totem-like things like that just don't have enough data to guesstimate anything.

velvet fog
ocean iris
#

gotcha, thanks!

gray isle
#

is anyone familiar with the cargoquery for the wiki? I can't seem to get the right query to pull skill_gems - trying to build something for fun here but can't find a good resource for skill gems in json format besides the cargoquery from wiki.fandom

worthy cape
#

Not enough info in say RePoE?

gray isle
carmine merlin
#

PoB update out with the 3.15 skill tree and my hacked in skill gems

worthy cape
#

New bugs for all!

carmine merlin
#

🐛

naive gust
#

Ty for update local

#

This is a tooldev general appreciation message

#

Feel appreciated, all of you

granite gate
#

hey guys i tried to download path of building and when i get it and installed it it keeeping to closing after i start it somebody have simmilar issue?

solemn canyon
#

I had a problem with the new update and uninstalling it and downloading the new release fixed it

#

Mine would hang when the update terminal came up

worthy cape
primal schooner
#

does POB support Cogwork / etc rings ?

#

seems like custom editing won't let you remove a prefix and add a suffix

oak estuary
#

No, but you can click the Edit button and put in whatever you want

civic crane
#

The person preparing the patch notes often copy/pastes the formatting for skill stat descriptions from the wiki and then adjusts the values to the correct ones based on the skill's balance history.
PyPoE indirectly helps to write patch notes 😄 I can't believe they don't have tool to compare and format stats between 2 commits

simple ravine
#

why invent something that already exists? 🙂

#

well I shouldn't say anything, I am definitely one of those who suffer a bit from the 'not-invented-here-syndrome'

frank drift
#

what's a little copy/paste error among friends I guess

worthy cape
#

Is it worth the dev time for something you do once a quarter and which normally isn't that much load?

civic crane
#

in 7 languages YEP

simple ravine
#

that's a pretty valid point too, I guess

worthy cape
#

I'd like to think that the wiki is secretly authoritative for the game and we just haven't noticed.

simple ravine
#

Wikis are great, yet I feel that the data format and how things are linked is a bit "dangerous".

#

Wonder if there are any cool "knowledge graph" formats out there that is more "reliable" in the sense of validation and reading-by-a-computer-safe

#

and still user-friendly enough for people to use and display as a wiki of some kind

clever thistle
#

wee i'm a dev now! 😉 😅 Add space and newline before custom mods on Timeless Jewel nodes #2888 (Nightblade) ||+7 characters||

placid stump
fluid wave
#

I'm stuck in a weird state now with the async client. When there's no state, I need to make the first request blocking so I can read all the rate limit headers first and then allow the rest of the requests.
Otherwise I end up allowing all requests as it doesn't know what's the max hit count yet 😐

placid stump
#

Idk if I should make an issue on the pob fork github, but gaining Hexproof via Vidiri's Veil in game still allows you to be cursed, you are just unaffected. Current PoB is counting you as curse immune instead of unaffected (for Self Flagellation, Coward's Legacy)

oak estuary
jovial pollen
#

Anyone having issues updating/installing PoB fork

frank drift
#

that fixes the vastly most common issue

jovial pollen
#

but I let it try to use the folder it selected in user app data and it worked

frank drift
#

recommended not to put it in Program Files, if you do that you need to run it as admin

#

the way it self-updates it needs an unprivileged location

jovial pollen
#

hmm maybe thats what it was, this was the error message

frank drift
#

yep

oak estuary
#

The other option is to always run PoB as admin 🤷

jovial pollen
#

Is this because the new installer/update system cuz I previously had it installed on my C drive program folder no problems

frank drift
#

it changed awhile ago yeah

#

the installer used to put it in Program Files, but hasn't for a long time

oak estuary
#

Usually it doesn't matter for most updates as most files weren't installed in a privileged location. This one changed a backend file that was, so you got the error

glad gorge
#

Hey, is this the right place to ask for help with POB? (it keeps crashing)

oak estuary
#

Have you searched the github issues?

glad gorge
#

yup

#

okay

worthy cape
#

Is it a proper fun crash with Windows dialog or to desktop, or the boring type with black-on-white with a red border with some Lua junk?
Praying it's not the former personally 😄

glad gorge
#

it is working for longer than 1 min now

#

I updated my gpu drivers

worthy cape
odd sail
#

Did they scrap all the Data files in the GGPK torrent?

velvet fog
#

always

compact isle
worthy cape
#

I blame the Kalguurans, somehow.

naive gust
#

I blame Dinkleberg

rapid pagoda
#

Game no longer has any data. All behaviour defined in code

compact isle
#

the ultimate sandbox game: you enter the data

#

if you get it wrong the game crashes

thick hawk
#

Well, the current Content.ggpk has no all required bundles listed in the "index" file. I guess we have to wait for the release patch to get all the "_tiny" bundles etc.

worthy cape
odd sail
#

@compact isle but... PoB won't be ready anytime before league launch with the amount of new gems and only 3 hours to try to get things working... or is that the intent?

compact isle
#

is intended that those things are still being worked on and we don't want them to be datamined, yes

odd sail
#

roger

#

it would be very kind of you if you dropped us a line where the base item type values for armor, evasion, ES, etc. got moved to since that table seems to be gone in 3.15 when you guys are ready... I'm guessing probably into the base item type table itself

rapid pagoda
odd sail
#

Nostradamus was a prophet

golden bane
rapid pagoda
rapid pagoda
#

(watch the index disappear from the next torrent)

compact isle
#

that reminds me I need to add Ward to that page 😄

rapid pagoda
compact isle
#

I couldn't figure a good way to do the subarea-specific searching so instead I just treated it as a flat set of mods that you can search through as normal

#

we'll see if the requirement to drill down further exists and do that later (it'll indexed in a way that we can add that later)

#

bosses are easy since they are per-faction as well as being directly specified in the description

simple ravine
#

Is there a maximum byte size for a publish stashes response from the river?

compact isle
#

internally yes, so before the items are described

simple ravine
#

I implicitly thought it was 5 MiB and allocated and it threw an exception.

#

would it be possible to add a Content-Length header to the response?

worthy cape
#

Wouldn't that have quite the risk of delaying TTFB and increase buffering if it has to pre-render before sending any content at all?

compact isle
#

yeah I think cloudflare will nuke that anyway when they re-compress it

velvet fog
compact isle
#

yeah all item images (and all images we generate FROM /Art) will be /gen/image from 3.15

#

key is required for mtx images

#

no hotlinking >:o

#

it's fine to link ones you get from us the problem was people getting paths from the GGPK and spamming constructed URLs at us

simple ravine
#

@compact isle sometimes, I get a 401 response when using the Authorization header. Not sure why, as retrying helps. Are there any benefits to using the authorization header for the public stash API?

velvet fog
timber path
compact isle
#

image paths that work right now will still work, we'll turn any direct /image/Art/2D(Art|Items)/... off in 3.16

velvet fog
#

same as PublicStash API?

compact isle
#

all URLs we generate will be /gen/image

velvet fog
#

I just use the icon to distinguish item class and unique items

compact isle
#

you can still read those from the base64 encoded segment of the path

velvet fog
#

okay, just build a mapping table like flasks

compact isle
#

yep exactly like flasks but you can just read the URL and get the path out of it if anything depends on that

ebon hill
#

umm...... what dis? I no understand

timber path
worthy cape
#

(GitHub is the primary place to report bugs with many tools, including PoB)

velvet fog
#

that's will heavy impact my site with that

#

heavily hotlinking the cdn images (passives, uiimages, ...)

#

I will try to store images on the site but the site bandwidth may not sufficient, or just give up

#

and shift to the new world

timber path
#

@compact isle when the /images/Art/... is fully removed, can we also get "image":"/gen/image/..." for Div cards, (Blighted) Maps and prophecies. Those are currently not included in the static trade API data

worthy cape
#

I've got most of my personal sites behind Cloudflare these days for fun. Does anyone know how much approximately that saves you on traffic?

velvet fog
timber path
# velvet fog I will try to store images on the site but the site bandwidth may not sufficient...

Why not store the generated link in the items table in its own DB field, then simply use the generated link to display the image? That's my plan atleast, instead of composing the url based on the GGPK's base item type data, I'll just load up the static API data and grab the generated link from there and create the item record and attach the generated link to it (rather than the composed one)

worthy cape
#

I've got my site running as normal but using their DNS with the web fronts set up as "Proxied".

#

Hides the IP and caches stuff on their CDN.

velvet fog
#

I think only public stash api have generated link

#

I will try that before 3.16

timber path
velvet fog
#

there are not all in the static data

timber path
#

But then again, the trade/data/static only covers bulk-exchangable items... you'd still be missing a lot of others

#

Maybe "image" has to be added to trade/data/items too then, thus way each base item type & unique item has a generated image

broken cloud
#

https://web.poecdn.com/gen/image/<base64 data>/<10 hex digits>/Item.png
Is the significance of the 10 hex digits known? Changing that part causes "resource not found"

velvet fog
#

nope, that's secret

timber path
#

Doesn't the wiki also have all images of items? Maybe that can be used as an alternative source if something is missing from GGG's api? 🤔

velvet fog
#

Poe constantly deletes data files, adds more access restrictions, and lacks proper APIs. This is unhealthy for the 3rd party.

gilded tree
worthy cape
#

My stuff is pretty much only public_html so it makes sense that it caches most non-first hits.

swift beacon
#

Looks like some Jamanra files were added. Maybe those missing Nenet contracts and boss fight will be available in Expedition?

smoky flame
#

On Poedb: "Expedition stuff not up until patch drops tomorrow, the torrent deliberately does not have that data."
Does this refer to patch later when league starts, or the 2-3 hour downtime before that?

civic crane
smoky flame
#

Ah thanks 😄

odd sail
#

it's true for all tools....

fluid wave
#

LOL was mid flow working on my client and didn't realize release is so soon. Blocked by error 500s (:

civic crane
#

patching 👍

carmine merlin
#

880MB patch if you have the torrent btw

velvet fog
#

300kb download speed, take a lot of time to finish the download

timber path
#

mods.dat has reading breaks on the Data4 field 🤔 (ref|list|int)

velvet fog
#

hmm.. send me a copy of Data/ ?

carmine merlin
timber path
#

My Data/ folder is 150MB... so how is PoB's 7 MB xD

carmine merlin
#

we dont use all of the dat64 files so only extract the ones we need

timber path
#

@civic crane the data change you just deleted, that was Data1 and Data2, not Data4 🤔

civic crane
#

yep, they were read corrctly but this is not what they hold anymore (both datatype and semantic)

timber path
#

So all DataX need to change to int32's? since they no longer serve their purpose?

#

It seems more data got shifted, changing Data4 to int32 now moves on to Keys1 field that suffers the same issue, it's no longer a ref|list|ulong

rapid pagoda
#

(PassiveSkillTrees probably got added in late 3.14 for Royale but whatever)

timber path
#

Yeah, it looks like the mods.dat table format completely changed. -- I'm still wondering if the .dat files don't actually contain table headers or field sizes or something, or would these be hard-coded into the EXE ?

civic crane
rapid pagoda
timber path
#

🤔 should try to data mine the exe then 😝

rapid pagoda
#

that's borderline off limits and honestly it's not going to help much anyway -- what we're most interested in is names and the executable (probably?) won't have those either

#

looks like BaseItemTypes changed significantly, 215 -> 166 byte rows

timber path
#

Just field sizes would already be a great start in order to then start to figure out the names. But the data mining of the exe is indeed going into an even grayer gray-area 😄

#

I got mods.dat loading now, but have a ton of additional bytes per row

swift beacon
#

We just need a mole within GGG 😆

timber path
rapid pagoda
#

ugh, maybe I'm using an old format definition

oak estuary
#

I got the Tags column back in the right spot by deleting Aura and Aura radius, but it doesn't last very long before going to crap again

rapid pagoda
#

if you are just seeing one additional byte, it's a single boolean on the end, provisionally "IsExpeditionCurrency"

timber path
timber path
rapid pagoda
#

oh interesting you're right, it's also on heist coins and perandus coins

timber path
#

Special vendor currency then?

#

Since it's not Expedition only

#

You use Heist coins to pay for BP/contract stuff

#

and perandus coins at cadibro to buy his items

civic crane
timber path
#

MonsterMetadata: string is off though, but that might be because TagsKeys seems like the first "broken" field 🤔

civic crane
#

what I've linked have it fixed

timber path
#

yeah, I think my data types aren't matching exactly with yours (I'm using the PyPoe py files for it)

#

What datatype is your rid and _ ?

civic crane
#

rid = ref|long, [_] = ref|list|byte in pypoe

rapid pagoda
#

ha ha ha what the fuck

"[DNT] Stack of 5 regals you'll never use, exile?"

simple ravine
#

Are there any nerfs still missing in the PoB implementation, or have they been added already?

timber path
simple ravine
#

if that's the case, looks like my cyclone from last league still holds up very well

rapid pagoda
oak estuary
#

Where did the values in ComponentArmour.dat go? I thought someone mentioned it but I can't find it

rapid pagoda
timber path
civic crane
#

1227369173-1231965578-1189849183-1331074882-1279269888 and now for Expedition

primal schooner
#

Anybody scraped the div cards from the GGPK yet?

timber path
rapid pagoda
#

okay I was completely wrong about BaseItemTypes, ignore my previous comments

#

I misread analyze output, mistook variable data per row as row size

odd sail
#

.... Blade Trap rotates +100 times enchant... 100 times???

primal schooner
#

@timber path doesn't that just have the name and the label ?

#

I'm looking for the actual text on them

rapid pagoda
primal schooner
#

what the cards do

civic crane
primal schooner
#

well i mean, it's all in the GGPK isn't it?

#

hence me asking if anyone has scraped it yet

odd sail
#

not everything is in the GGPK

primal schooner
#

true

#

maybe text is server side and only gotten from GGG severs (via trade, etc)

#

jsut wondering

#

I've never actually personally scraped the ggpk, and my guy that has is AKF

#

so was asking the community

odd sail
#

MonsterTypes.dat had the Tags and MonsterResistances foreign keys modified (or moved)

primal schooner
#

do you have the stats for the new Reaper npc ?

#

like abilities and dmg typs / scaling?

velvet fog
primal schooner
#
#

i mena from the scrape

#

which is hte only way to get the info

#

cause GGG doesn't release that info publically

broken cloud
#

@velvet fog is it confirmed that cadigan's crown and faithguard are the only new uniques, or can there be more?

timber path
# primal schooner I'm looking for the actual text on them

The actual flavour text and effects might be in the GGPK, I'm not sure though... They're in there for things like Prophecies... Anyway, I got this list of new cards:
Added DivinationCardTheLastSupper
Added DivinationCardTheEmptiness
Added DivinationCardASeaOfBlue
Added DivinationCardTheOffspring
Added DivinationCardThePriceOfPrescience
Added DivinationCardTheMindsEyes
Added DivinationCardTerribleSecretOfSpace
Added DivinationCardTheBlessingOfMoosh
Added DivinationCardCostlyCurio
Added DivinationCardLachrymalNecrosis
Added DivinationCardDementophobia
Added DivinationCardAmbitiousObsession

rapid pagoda
swift beacon
#

Flavour text for the new div cards:

#

"Bino's brief career as a chef at Axiom saved the executioner a lot of work."
He appeared before the Light Eater, and at once knew his soul was damned.
The harvest ended, the floods began.
The swarm began with just a couple of children. Now, it is her entire existence.
size:26{The strange voice showed Aul a future where his legacy was forgotten, where new cultures broke themselves upon Aul's ruined world.}
"size:28{Through the eyes of a person,
you can see their soul
Through the eyes of a jewel,
you can see the universe}"
They said they were here to protect us.
While the Labyrinth traps have claimed countless adventurers, they were not designed with felines in mind.
"Oh no, I couldn't possibly afford this fine artefact. I'm... just looking."
Without the ability to weep, the heart hardens against both the pure and the corrupt.
"size:28{I never truly understood the depths of my insanity,
until I realized the voices beckoning me towards the abyss,
were none other than my own.}"
The most pathetic person in the world is someone who has sight, but no vision.

velvet fog
primal schooner
#

How do I scrape these from the GGPK? skillList = { "SummonedReaperMelee", "GASummonReaperUltimateLeftSlash", "GASummonReaperUltimateRightSlash", "GASummonReaperComboWhirl", "GASummonReaperComboLeftSlash", "GASummonReaperComboRightSlash", "GASummonReaperDashImpactSlash", "GASummonReaperDash", "EAASummonedReaperComboAttack", "SummonedReaperDash", "SummonedReaperUltimate", "ReaperConsumeMinionForHeal", "ReaperConsumeMinionForBuff", },

#

Or does someone have a tool and can look them up quickly ?

frank kayak
#

finally had a look at my reddit scraper again. now got an issue with switching between text and links in the richtext with the gui library i am using...

#

needs a bit more work on the gui elements to make it usable in gui mode and code separation...

frank kayak
#

orbits still bugged...

worthy cape
#

Sounds like league start went well, big pats to the launch peeps brittlPAT

frank kayak
#

yeah

#

game runs pretty stable now for me, less memory used too and nice start

rain pasture
worthy cape
#

Mod names greatly overrated 😄

simple ravine
#

Is there an endpoint for buyout tags?

worthy cape
simple ravine
#

yeah

simple ravine
crisp hollow
#

hello

#

i'm getting SSL error when trying to import pastebin link ,it's prolly has to do with firewall i'm using kaspersky

rapid pagoda
#

oh, I bet I know what the new flag on perandus coins, heist tokens, and expedition artifacts is (in BaseItemTypes)

#

it's "can't be sold to vendor"

worthy cape
#

Ooh.

rapid pagoda
#

the game will no longer let you put those items in the vendor trade window at all

clever thistle
gaunt wharf
#

Anyone else having issues with Poe after the new expansion pack? The game cant start at all, it just crashes my PC completely, i've uninstalled it two times even rolled back my video card driver 3 times and it still doesn t work.

worthy cape
#

I recommend you contact the techsupport email at GGG or use the forums, as we're not them 😄

worthy cape
simple ravine
#

Fellow devs who follow the river, how do you deal with the rate limiting header, and ensuring that you're fetching information in the most efficient manner?

#

I've made a more naive approach where I ensure every request at least has 500ms of wait time between them, since the first byte

#

I tried setting the timestamp of last access to when I sent the request, and added an arbitrary 50-100ms to that, to ensure the request has been received, but that got me throttled sometimes.

worthy cape
#

For guild stash audit log I keep a timestamped history of requests and wait them out when I near/reach the limit.

#

As well as honoring the timeout if something else sneaks in to put me over the edge.

#

One-shot downloads tho, not a continuous service.

simple ravine
#

Right, river is twice per 1 second

#

so it's a bit tricky to know exactly how that's counted on the server-side

simple ravine
#

I seem to be able to keep up with the river right now at least

#

but this time of day might not be the roughest?

fickle yew
#

They appeared on the river yesterday when the patch went live.

frank kayak
#

that squared look is from a pretty old series

oak estuary
#

Someone selling off their legacy maps?

fickle yew
#

Maybe. Just weird that they showed up out of the blue on patch day. Hundreds of them.

paper thistle
#

Hi all. What are the realistic alternatives to pypoe_exporter? It seems like every time I want to use it, it's behind on table size updates (and therefore refusing to export).

golden bane
paper thistle
#

Thanks!

simple ravine
#

Anyone know if there are other frameTypes now? (from wiki)

civic crane
#

no, it's all

primal schooner
#

Anybody know of another Chaos/Exa Shard recipie overlay? @golden thunder 's isn't working

primal schooner
#

Do CROs just not work anymore?

#

did GGG change something about the API ?

#

this one I'm using uses your session ID, and it sees all my tabs etc, but it's just not pulling the info from said selected tabs to populate to overlay

#

the tabs are public

vestal pond
#

What mean "type": "array"?
array of what?

from schema.min.json

civic crane
#

you can transform it to array of 1 byte if your app requires it

vestal pond
#

oh~ thanks alot

civic crane
simple ravine
#

@civic crane great work on the dat-schema things

#

was meaning to say that earlier, but got distracted 😂

frank kayak
#

Hi,
I need some clarification on a section in the new dev doc https://www.pathofexile.com/developer/docs/index#policy
To what extant is this? I have no intention of modification of the game files itself but would like to be able to do the following with my own tool and publishing the tool:

  • parse Client.txt
  • watch production_Config.ini and *.filter for changes and possible provide an UI for easier manual editing through the user
  • data extraction from the Content.ggpk for having my tool act for the current state of the game (item related info, etc)
  • providing an easy way to view/extract/convert format of 3d models for hobby artists in the community via a tool with the notice that it obviously is GGGs property
  • starting of PackCheck.exe / Client.exe
  • cache clear
  • F8 screenshots

Does "interact" here mean any kind of access like reading or just modification of files in the Content.ggpk/executables?

#

ToS 7b

golden bane
#

Data extraction of all kinds is against ToS, it's just not currently enforced. ToS are not the law, you're only putting your account on the line. But they can terminate your licence regardless if you do anything they deem not to be the "intended spirit of participation in PoE".

frank kayak
#

Aren't you also using an extractor in PoB?

golden bane
#

Yes 🙃

frank kayak
#

:/

golden bane
#

I know. We've tried to get some clarification/exception to this, but could not achieve anything

frank kayak
#

@compact isle Would it be possible to make it a bit clearer what is allowed for us devs?

#

I mean even the wiki wouldn't work without scraping a bit in the ggpk...

golden bane
#

Which is used by GGG internally 🤔

frank kayak
#

😛

#

It would be nice if GGG could provide space for a community moderated wiki. fandoom will probably end the current one or turn it into a living corpse...

civic crane
#

and don't forget that it will be down on server restart 😄

frank kayak
#

eh, I would hope for some independence there...

civic crane
#

Novynn promised to fix this on site year ago 😏 (but it's better that we got oauth + new cool dev docs)

golden bane
#

I don't trust the wiki anymore. Usually, I go to straight to the GGPK or to poedb instead

frank kayak
#

poedb for me mostly

frank kayak
#

ah - it is also on linux

#

so the binary modules will probably make issues if not replaced with mockups

golden bane
#

You need LuaJIT, which is somewhere between Lua 5.1 and 5.2 in features. The latter two both won't work (for different reasons). We currently use LuaJIT 2.0.4-3

#

gopher-lua is very slow, probably too slow for PoB

frank kayak
#

I would only consider using a pure go implementation

#

speed is currently not a concern I just want it to run for now

golden bane
frank kayak
golden bane
#

I don't know how to build it though, we get it from vcpkg

frank kayak
#

with go i have a very simple build process for all platforms. I did avoid anything needing other (cross,...)-compilers like the plague

golden bane
#

Well, you're dealing with another language 🙂

frank kayak
#

i do want to handle go code with that bit of lua no need for the c code of the compiler or what it is

golden bane
#

"Just some Lua implementation" won't cut it though. LuaJIT provides extra features over 5.1 (which we rely on) while also being incompatible with 5.2

frank kayak
#

thanks for the link

#

i would replace dofile and loadfile as i embed the files

#

collectgarbage would just be noop

golden bane
golden bane
frank kayak
golden bane
#

Good luck 🙂

frank kayak
#

i think i had something for bitop prob a lot slower though

#

is the headless mode of pob being tested?

golden bane
#

No

frank kayak
#

could you perhaps do that in the future and make it easier to use in scripts with some short howto?

#

its not that easy to do that without any prior lua knowledge...

golden bane
frank kayak
#

here i am running into an issue where GetScriptPath() from mockui.lua which should be loaded is called in Modules/Main.lua but either is not defined or returns nil?

#

i meant specifically headless pob, starting it passing data, making it do something and getting output

golden bane
#

Yeah, that could be useful. mockui.lua is not part of PoB though. Better ask for support for that where you got it from

frank kayak
#

right - i think it was based on the HeadlessWrapper.lua script

#

thx for the help. i will probably try tinkering with it this week again

#

far too tired now...

#

oh and fallback pure lua implementations for binary dependencies would be really cool for headless mode and other platforms

golden bane
#

Not all of these dependencies have Lua implementations available. And creating and maintaining them ourselves is certainly out of scope. All binary dependencies should be really common libraries that build on every platform with a C compiler basically. Right now, Windows + scuffed headless mode is all we want to support

frank kayak
#

ok. I might annoy you with a PR though when i finally learned lua and have a bit time...

golden bane
#

Hahaha, hope you have fun learning 😄

frank kayak
#

i do 😄 - why else would i do it?

#

made it work with luajit

frank kayak
#

now fileName:match("%.lua") doesnt fail anymore

#

current error:

#

is unpack() the problem?

odd sail
#

@compact isle the squished currency icons look wierd

worthy cape
#

Building LuaJIT is reasonably straightforward, lcurl is harder as their makefiles are innovative AF.

#

I've built both across Linux and macOS for my SimpleGraphic port, it's doable and you can probably rip out the makefiles and do whatever with some Go C build infra, whatever they have.

worthy cape
#

Trying my best when krangling the runtime to not break it 🙂

frank kayak
#

no need for curl if i just want to calculate and in case i do need it i can just inject go functions with curl functionality instead

worthy cape
#

Yeah, just mentioning what things tripped me up when porting.

frank kayak
#

what deps does simplegraphics have?

worthy cape
#
giflib:x86-windows-static
libjpeg-turbo:x86-windows-static
liblzma:x86-windows-static
libpng:x86-windows-static
luajit:x86-windows-static
zlib:x86-windows-static
#

(vcpkg.txt)

#

In my fork there's also:

fmt:x86-windows-static
glfw3:x86-windows-static

I've also pulled in some STB libraries for image reading/writing, fonts, and stuff.

frank kayak
#

thanks. STB headers are lovely

frank kayak
oak estuary
frank kayak
#

ah ok

frank kayak
#

i did patch shopify/go-lua with PRs adding string pattern functions and the read method and got a bit further

#

now im stuck with unpack() calls and not certain where the problem lies

#

and the unpack() implementation from table.go

#

forgot the line numbers...

#

it says "attempt to call a nil value". does the called value refer to the unpack() function or the ret argument but that isnt "called" or am i misunderstanding the error message?

oak estuary
#

Should be referring to unpack

frank kayak
#

yes, i did manage to fix it. it is somehow available as table.unpack() in go-lua.
lua.DoString(l, function unpack(...) return table.unpack(...) end)

#

im now trying to make lua.LoadString() available in lua as loadstring()

willow knoll
#

Has anybody tried this github program for controller on pc? This is new one i found. Different to mine is that when i move joystick, character moves without my pressing X or whatever. Isnt that bannable?

worthy cape
#

A single player action should lead to a single in-game action, and it may not change what action it performs.

#

A specific button that leads to a click at a fixed location is perfectly fine.

#

A button that when rapidly pressed would make you run in a circle would not be.

#

Or as the good old example goes, drink different potions every time.

carmine merlin
#

@velvet fog any idea where they put the attack time and crit chance for shield throw, shield charge and shield crush?

velvet fog
#

no idea

#

I missed that too

oak estuary
#

It's in two extra columns at the end of GrantedSkillEffectsPerLevel, fyi

frank kayak
worthy cape
#

What Lua version does this Go implementation attempt to be compatible with? Sounds like an ambitious attempt 🙂

frank kayak
#

i can choose between 3 implementations

#

i think the one shopify has in prod prob is a good choice

#

when i have my trade tab done i can have tooltips with nice pob stats regarding item swap

#

embedding pob blows my binary up by a lot though

#

might try compiling it first before embedding

#

go:embed is still pretty new and doesnt have a compression flag for the go tool yet

worthy cape
frank kayak
#

and didnt want to fall back to old 3rd party embed libs

#

interesting

worthy cape
#

Embed as bundling binary files as blobs in symbols?

frank kayak
#

its go so we pack all in

#

dont know how exactly its done

#

i think it differs from how 3rd party libs have done in the past

#

** globbing is not possible in the embed paths which is annoying me a bit

#

cant do pob/**.lua to match all lua files not much of an issue though - have to add subfolders manually though if pob changes structure

#

ok found out what the next error is: nil being passed to band which ends up in a sum...

worthy cape
#

Ah yes, I could just look at the URL, big brain.

velvet fog
#

they remove all microtransation and hideout doodads to /gen/image/

#

same as item/unique icon in Public Stash API

#

im still finding solutions for storing these images

civic crane
#

first poe community abused pastebin, now we will imgur too 😄

velvet fog
#

https://apidocs.imgur.com/
Commercial Usage
Your application is commercial if you're making any money with it (which includes in-app advertising), if you plan on making any money with it, or if it belongs to a commercial organization.

broken cloud
#

Been thinking about this too, considering a local image cache instead... @worthy cape you might know, has stuff in image/Art/2DItems/* remained static over time, or have some of them been revised while keeping the same file name?

worthy cape
#

Not sure, think I've broken the content database that could answer it.

#

It's a bit hard to query with the symlinks and brotli in the old data.

velvet fog
#

only weapon/armor and uniques could be accesses by image/Art/2DItems/, and it will move to gen/image in Patch 3.16

worthy cape
#

No idea about the CDN, never used that.

oak estuary
broken cloud
#

Hmm, I see 🧐

worthy cape
#

UI images are bonus fun as those are mostly in sprite sheets.

civic crane
velvet fog
#

I will try this, thanks

frank kayak
#

any tips for debugging lua? print(debug.traceback()) is bricked for me ...

worthy cape
#

Assuming things like EmmyLua doesn't work with your impl?

frank kayak
#

i doubt it will work with go-lua

#

might still try to install it for language support in codium

#

guess il try later...

reef token
#

why are all the rooms locked i cant join them

oak estuary
runic cypress
#

anyone using AHK recently find that sendinput is skipping keys? for ex. a hotkey that is "Send {enter}/remaining" is only typing "remaing"

#

seems to be a limit of 7 characters, plus the slash... so /menagerie is "/menagri" but "/hideout" gets copied fully... does POE maybe have some new rate limit on characters or something?

worthy cape
#

Looks like it's dropping duplicate letters at first glance there.

runic cypress
#

odd, same script I've used for years but I come back this league and it does this

#

seems you are correct, tried a script with just 10 a's in a row and only the first got input...

#

nvm it was some other background program interfering with it

rain osprey
#

is the shop's current sale visible to the api?

ocean raft
#

Skill gem count scaler in PoB doesn't seem to work for totems? Bumped it up to 7 but still only see dps for single totem listed

worthy cape
#

Architecturally unless a skill has a dropdown to select particular thresholds of things, the top figures in the side pane are almost always per-each. In order to get an idea of how multiple instances and multiple skills interacts, there's the Full DPS infrastructure which reports at the bottom of the side pane when configured correctly.

#

Rather nifty setup, saves a lot of computation 😛

ocean raft
#

Yeah, but I can't seem to get it to show up

#

oh. uhh. nevermind. didn't see the "include in full DPS" button.

#

hmm. didn't remember needing to hit that before

frank kayak
#

did patch go-lua manually this time on the newest commit and now it doesnt crash (yet) - still running 😄

#

ok while i was typing it did crash...

worthy cape
#

Never speak positively about a running test.

frank kayak
#

but i think im making progress

#

ye...

#

have to fake the first program argument arg[1]

worthy cape
#

You've found the protocol handler stuff, eh?

#

PoB has the ability to load builds from URLs on the command line, suitable for use as a protocol handler for browsers.

frank kayak
#

curl stuff comes soon. functionality will be easy with net/url. i dont have the meshing of go and lua functions down yet though...

#

not sure why it ends up in that function. probably just checking if it should dl it...

#

ok this doesnt seem to work in lua...

#

the load up of the lua code does take a while. a lot slower than luajit. prob trying to load it up and then loop and push new items in

civic crane
#

@velvet fog any idea what is this, can this be some bugged unique from ROYALE

frank kayak
#

thats the royale version

civic crane
#

@compact isle somehow unique items from royale leaked on trade site

velvet fog
#

hard to track royale unique

frank kayak
compact isle
#

I would suggest that you go through official channels to ask that question

frank kayak
#

ok thanks for replying

velvet fog
#

@frank kayak wish to know the resuld if you can share

velvet fog
#

is there a way to query x-rate-limit without real query item in /trade/search/Standard?

frank kayak
#

i dont think so. and the limit also depends on if youre logged in (Account, IP method)

velvet fog
#

im playing with x-rate-limit but failed everytime :<

frank kayak
#

i was trying to implement rate-limiting for my library but it did mess up on the last allowed query iirc... probably shouldnt have coded iterated that code at 3 in the morning... i do store the different limits in a map with the endpoint urls as keys iirc. for trade i want to use the IP method first have to find out if i have to use the Account method for a search before the actual query - was it the search complexity? when it works itll be completely hidden in my library

#

was playing around with giving requests a priority not sure how that plays out

velvet fog
#

seems a solution for this..hmm

grave wren
#

Your variable naming triggers me quite a bit :p

worthy cape
#

In true PoE spirit it's defensive layers against anyone reading.

velvet fog
#

native obfuscation code

grave wren
#

Oneshot coding is living the dream

velvet fog
#

any idea to get /gen/image of ActiveSkills, BuffDefinitions, PassiveSkills, HideoutDoodad and MTX?

velvet fog
#

MTX -> /character-window/get-mtx-stash-items with POESESSION

frank kayak
#

i do have one mtx link: https://web.poecdn.com/gen/image/WzI1LDE0LHsiZiI6IjJESXRlbXMvRWZmZWN0cy9Db25zdW1lcmFibGVzL0RhcmtTb3VsY29hc3RlckZpcmV3b3JrIiwidyI6MSwiaCI6MSwic2NhbGUiOjF9XQ/e97e571018/DarkSoulcoasterFirework.png with a corrupt base64 [25,14,{"f":"2DItems/Effects/Consumerables/DarkSoulcoasterFirework","w":1,"h":1,"scale":1}]. when i reencode it i get the link https://web.poecdn.com/gen/image/WzI1LDE0LHsiZiI6IjJESXRlbXMvRWZmZWN0cy9Db25zdW1lcmFibGVzL0RhcmtTb3VsY29hc3RlckZpcmV3b3JrIiwidyI6MSwiaCI6MSwic2NhbGUiOjF9XQ==/e97e571018/DarkSoulcoasterFirework.png which is still valid. so i think we can at least exclude the possibility that the hash is based on the base64 string.

#

the f field in the json or the filename might be the string that gets hashed

velvet fog
#

f is original path in dat file

#

but the hash algorithm is unkown

frank kayak
#

40bit or perhaps truncated?

frank kayak
#

trying to change scale or the first numeric value doesnt work so i think that the string that gets base64 encoded might also be the one being hashed

velvet fog
#

25 is item class (or type)

frank kayak
#

ok

worthy cape
#

Secret server side salt: "n0vynn_rulez" 😉

frank kayak
#

oh

#

google prefers saltysalt peanuts for its chrome browser

worthy cape
#

I have no idea about anything, but I assume that it's never generated client-side, only ever sourced from server side secrets, a bit like how timeless jewels work.

frank kayak
#

that would be annoying...

#

if that would be the case the json would serve no purpose i think

worthy cape
#

In my mind, the JSON is the request, the hash is the digest from signing it.

#

Easy to validate given a public key, "impossible" to generate without the private key.

velvet fog
#

tried many one-way hash algorithm and no matched

frank kayak
#

yeah also tried all that i could find :/ ...

timber path
#

Just throwing out some random thought: maybe it's a truncated CRC (or other checkum hash?) of the actual image itself?

frank kayak
#

perhaps there are some clues in the js of the website

timber path
#

Another random thought: maybe the hash is a base-36 (aka alpha-numeric) [edit: or other base-N?] hash of a timestamp? Maybe the timestamp the file/image got originally created at/added to the GGGPK?

frank kayak
#

would be so much easier if that damn stacktrace worked...

worthy cape
#

That was one of my favourite features of Haskell, at any point it'd just go "blackhole detected" and die.

frank kayak
#

ooh... that sounds nice 😄

#

so happy that i have a really nice one in go

worthy cape
#

The lazy evaluation of thunks was super powerful, but also a great way to accidentally build huge intermediaries and values that kind of could blow up infinitely when forced.

frank kayak
#

that doesnt appeal to my gusto

#

dont miss blow ups from dynamically typed languages like python ...or my old shell scripts

#

had a few scripts with more than 1k lines, ran in parallel and communicated with SIGUSR{1,2} traps.... that was dumb fun

#

now go for all my purposes

#

would be unfit for embedded hardware-stuff, or for high performance that would be rusts area. have no plans in tinkering in those areas though. so go all the way for me

#

does someone know where the capital PCall() function is defined in PoB?
i can only see the override from mockui.lua which is not part of PoB

frank kayak
#

thanks!

#

i just found that it also is in the original HeadlessWrapper.lua as an override which i perhaps deleted. mockui.lua is based on that file

worthy cape
#

Yeah, the headless thing spoofs most of the bindings it ends up using, but helps to keep ui_api in mind when you read code.

frank kayak
#

didnt even consider that its from outside the lua code...

#

is the src of the pob.exe also somewhere?

worthy cape
#

Only one that doesn't have source is Updater, but that's ancient and uninteresting.

frank kayak
#

ok

worthy cape
#

Launcher mostly handles krangling of command line args into the right encoding, loading SimpleGraphic DLL and invoking it with the src/ dir it finds and any builds given.

civic crane
frank kayak
#

got the stacktrace working yay

#

"biggest missing part is goroutine/channel/defer"

frank kayak
#

ignored the PCall error and got a bit further...

vapid pulsar
#

Hey guys. I'm doing a little tool that shows the base -> unique outcomes for an item to assist in the Gwennan gamble mechanic. Using the ctrl + c data.
Currently I'm loading the pricing from poe.ninja. But i wanted to know if there was some source of data on uniques that are boss only, league specific, fated etc?

frank kayak
#

wiki can be queried with CargoQuery but prob outdated

vapid pulsar
#

Hmm i guess i could parse the wiki to a json file then tweak it by hand for anything outdated.

frank kayak
#

you get the data as json from the wiki

vapid pulsar
#

Thanks @earnest radish I'm trying the wiki approach right now. As long as i get most of the common ones sorted it should be fine. People would be looking for high value items so i would expected they would have better more up to date data than some of the obscure items.

#

Currently looks like this

velvet fog
#

seems there is a unfinished new armour attribute: adaptation, on flask modifier

velvet fog
#

ActiveSkillType ID 102: Prismatic

mellow ferry
#

is there any documentation on the structure of item copy text?

worthy cape
#

Might still be relevant tho.

worthy cape
compact isle
#

config editor on stream :o

worthy cape
compact isle
#

hide yo dat files

velvet fog
#

yo dat files!

timber path
#

Did anyone capture that? ;p anything we can learn from it? 😄

compact isle
#

and he opened BaseItemTypes, ItemClasses, ItemVisualEffect, Mods

oak estuary
#

At best we'll get the proper names of the columns 🤷

timber path
#

(For those interested, the editor is shown at around ~44 minutes)

#

"Can be Super Corrupted" 🤣 is that "double corruption" ? xD

worthy cape
#

Krangling confirmed 😉

timber path
#

it was in ItemClasses, which got fully shown 😱 . Now we can verify if our naming is generally similar to GGG's own naming. Probably we ain't that far off

#

Supported .dat data types are also shown: String, Decimal, Bool, File, Directory, Reference, Interval, Color, Point, Enumeration and DateTime 😄

#

Too bad Cardinality didn't get shown though

#

Only saw "Single" in there

oak estuary
vapid pulsar
#

Would be for Server only data i would expect. Super duper secret stuff like drop rates etc

velvet fog
#

and QuestVendorRewards for gems

oak estuary
#

Yeah, I was going to say, not even super secret stuff like that.

simple ravine
#

ooh this is funky

timber path
#

@compact isle The trade webpage seems to have some issue when I want to use "any time indexed" filter (i.e. query > filters > trade_filters > filters > indexed > "option": null). When performing a post request it errors out with Invalid indexed type but when doing a manual search using the webpage itself and looking at the source, the same "option": null is being used, but the trade doesn't error out at all. 🤔
(Relevant url: https://www.pathofexile.com/trade/search/Expedition/RoVnDMRi7)

simple ravine
#

Nice, source generating the dats. I did the same a couple o fyears ago

compact isle
#

we had to strengthen some type checks to allow loading searches that get invalidated by stat descriptions changing hash

timber path
compact isle
#

yeah by default there is no time filter

timber path
#

👍 cheers, then I'll have to fix that & push an update for the tool I'm working on 🙂

compact isle
#

I'm logging failed queries atm to get a sense of where people are doing strange things and I'm surprised by what I see 😄

worthy cape
#

$ curl https://poe/hello/novynn/nice/day/isnt/it?

simple ravine
#

hehe

compact isle
#

it is also very much past day and into night

#

soon I really will look like this 3xG

worthy cape
#

Any bets on if the HR mailbox will look like ThisIsFine tomorrow?

#

Probably always does.

compact isle
#

hah no clue, not very many web devs apply anyway

worthy cape
#

Scaring them away with the idea of successfully using PHP.

compact isle
#

exactly, especially so with the mention of Zend

worthy cape
#

Just point that CoPilot AI at the PHP documentation comment section and everything solves itself.

#

Last time I did professional webdev was probably in 2008, with the lovely choice of PHP calling out to LaTeX or Java with all the beans.

compact isle
worthy cape
#

Oh right, there was also a headless automation of OpenOffice to convert document formats.

#

User-sourced, of course.

simple ravine
#

Nowadays we have users do low-code/no-code solutions, connecting their "apps" to business data around the enterprises

#

it's lovely

compact isle
#

this is why I'm happy to stick with PHP (plus a dive into C++ now and then)

worthy cape
#

I regret to say that there's PHP attempts on client-side WASM.

#

First few hits were running WASM in PHP, which is way more sane, but then it degenerated...

simple ravine
#

my php journey was like 1998 to 2004 (and then was thrown back into it a couple of times after that).

#

the mvc frameworks and things were really made by happy-go-lucky devs it feels like

#

imposing things like Active Record pattern etc

gilded tree
#

Which language would you teach?

worthy cape
#

I've got a textbook here on my shelf I should send to xanthics: "Now with JDK 1.1!"

simple ravine
#

100% agree that you should learn some of the lower-level stuff before you get into Java/C#/Kotlin/Whatever

#

so you actually learn a bit about how a computer actually works

gilded tree
#

I think we already see quite some python in schools, C probably mostly starting in university.
The thing is, it's the best to teach a general purpose language where you learn how to read basic code. If you know Java, you can basically also understand most other languages. C is probably too hard to start with, that's why they choose Java as a high level language. They could also choose C#, but at the end it's kinda similar. And it would be too much work to "rewrite" all courses.

The goal is to learn programming in general, not to learn a single language. Like if you get the basic concepts you can learn new languages even faster - and to get in touch with programming. If you understand the basics you can dive deeper into C, Assembler, Verilog 😄

But it's also important to adjust the materials to the audience. Do we really need to teach C in school were we have people who aren't really interested in programming and maybe even get feared?

frank kayak
gilded tree
grave wren
#

We started with plain c in school

#

Then minimal c++

gilded tree
#

Right, that's a totally valid point - that''s why they mostly "skip" classes and explain them later. Quite sad but here were go

grave wren
#

Good old Borland c++ builder 1947 edition

worthy cape
#

The amount of things you have to cover for the C++ Hello World.

grave wren
#

Its always weird when people learn coding in python scripting style and have massive issues getting oop

gilded tree
#

Exactly

frank kayak
#

i think i came into contact with Pascal as my first programming language in the optional robot course back at my school

#

pascal probably an Europe thing?

grave wren
#

Never had Pascal in school but I know someone who's a big Delphi fan

#

I think technical schools have some leeway in choosing languages at least in Germany

frank kayak
#

the pascal ides i worked with were always quite nice with the gui stuff and such. missing that in go

#

mostly Java here in Germany and Austria or Python in science...

grave wren
#

I feel most make the mistake of not actually using stuff

#

Reading and copy pasting from tutorials clearly must be enough

frank kayak
#

Python is so ugly to deploy...

grave wren
#

Uni was mostly java here too but school before that c/c++/asm

frank kayak
#

asm in school?

grave wren
#

Yes technisches Gymnasium did it for me

ebon oasis
#

pascal was the first thing i came into contact in school

frank kayak
#

ah

grave wren
#

Basically more focus on specific things in the specialized schools

gilded tree
#

Turbo pascal is the thing

grave wren
#

I still think I am too dumb for haskell

ebon oasis
#

pascal was pretty good for teaching the basics imo, as a language, not sure

grave wren
#

But I basically need to have more than a few academic examples before actually getting stuff

gilded tree
grave wren
#

Concepts are fine but really doing anything useful in Haskell just never clicked for me

simple ravine
#

I had Pascal in school too

#

Pascal and C++

#

oh, and Visual Basic 😄

frank kayak
#

right nearly forgot about VB...

ebon oasis
#

i acutally learned vba because i did a lot of shit in excel since i started working

frank kayak
#

current days?

ebon oasis
#

last 10y

frank kayak
#

macros or is it also used for generating tables?

ebon oasis
#

more macros than tables

frank kayak
#

for gen id use a lib in some usable language

#

k

ebon oasis
#

including pulling shit from rest api

#

and parsing jsons

frank kayak
#

dont have much contact with excel atm only some table generation every now and then. always in go so far. no macros luckily

ebon oasis
#

my first big "project" was that league of legends had lack of stats tracking, but they had api ¯_(ツ)_/¯

#

so i made a few macros to pull my stats from api and populate pivot tables

worthy cape
#

@rapid pagoda Got any oriath.net/atlas updates planned for 3.15, or happily snoozing? 🙂

vapid pulsar
simple ravine
#

How is it supposed to work?

#

ohh, Gwennen's Gambling Window in-game

#

got it.

vapid pulsar
simple ravine
#

I'll try it when I fire up PoE 🙂

civic crane
#

ggg forced to change stats without even translating them because of reddit, sadge

clever thistle
#

back in the early days of the wiki i smashed together some vba in excel to scrape skill gem info from trade forum posts. a little bit of mania can be quite productive 😉

civic crane
#

@compact isle did you just blocked axios in user agent? whatYouDidThere (403)

gilded tree
# frank kayak axios?

a http client lib for js - used for requests etc. Or maybe we are talking about something else, but it would fit. 😄

frank kayak
#

oh

frank kayak
#

why is it so quiet here?
some noise please

simple ravine
grave wren
#

pics or didnt happen

simple ravine
grave wren
#

approved, looks good

simple ravine
#

Now I'm gonna make tacos.

#

Also thinking about the best way to map item names to item tags (buyout tags) from the river, while adhering to Open/Closed principle etc

frank kayak
#

i stumbled again upon https://pkg.go.dev/github.com/buger/jsonparser today - prob a good fit for the river for finding matches. a regular unmarshal afterwards in a goroutine.
should finish that go|lua-mess first though before i forget again where i was.

gilded tree
# frank kayak i stumbled again upon https://pkg.go.dev/github.com/buger/jsonparser today - pro...

the parser from the std lib is totally fine for the river. And we know the data structure, no need for a parser which mostly focuses on unknown data structures. It would help a bit with memory allocation and speed, but that shouldn't really be a problem. tbh I wouldn't care about that and just use reflections and use structs.
But yeah, we have a static structure - it's not that worth it if I think about it. There are some parsers for that (ffjson, easyjson).

frank kayak
#

yeah i have my item struct with lots of tags and and old custom unmarshal function from when the socket field could be different types iirc.

#

thought that for that speed of the river just scanning for the fields to get the offsets is better and then pointing the std way onto those offsets only

#

doesnt seem like too much work and i have buffer upwards for peak times

simple ravine
#

is parsing slow for you in go?

frank kayak
#

i actually havent checked

#

the standard encoding/json package is slowed down by reflection and some other stuff afaik

#

its mostly just so that i can try a new library

#

does someone know what the throughput of the river is on avg and peaks?

simple ravine
#

when I started it - it takes the current change_id from poe.nina stats, and start, it was 5-6 MiB per chunk for a little while before it caught up

#

when developing and testing this, it hasn't been over 2-3 MiB

simple ravine
frank kayak
#

it nearly never matters

#

where im getting slowed down a lot is in go-lua

#

4 to 7 minutes to run TestItem.lua with pob

#

docu says the switch implementation of go is guilty

simple ravine
#

Let's rewrite PoB in C++ trollface

frank kayak
#

have to make the last few lines work first though then i can slowly optimize. uising a go implementation instead of the pure lua bitop dropin im using replacing other critical lua functions with go. perhaps trying to find out how to replace that slow switch with some go asm...

simple ravine
#

I had this stupid idea yesterday to perhaps make a simple calculation engine (in c#), just because I liked the challenge. I am not sure if I will though

delicate ore
#

Rewrite for web from the ground up imo templarthumbsup

gilded tree
#

wasm

delicate ore
#

PoB.party was a good start but web native has so much potential

frank kayak
#

i would like to implement the pob calcs in go

simple ravine
#

it certainly has indeed

frank kayak
#

with pob working in go-lua i could try replacing piece for piece

simple ravine
#

the problem is execution speed. wonder how wasm would bench vs a well-written statically typed thing

#

from what I heard, one challenge with PoB is how UI and calculation was kind of tightly coupled

#

a goal I personally would have if making one, is to have an architecture that's a bit more decoupled (low coupling, high cohesion, SOLID etc)

#

but with PoE 2 "around the corner" ™️ ®️ - not sure if it's a viable investment of time

#

perhaps something to look into for PoE 2?

gilded tree
frank kayak
#

i dont think that poe2 will mess up too much there

simple ravine
#

I think what's necessary is to create a calculation engine that has literally 0 coupling to a UI, and then use some mechanism to render whatever you'd like, MVVM/MVU-style (or whatever u prefer)

#

that way it can be used for several purposes - easier

frank kayak
#

no clue why its ui coppled, its annoying that its not a lib

oak estuary
frank kayak
#

dont know about all those terminologies mvv/mvu. i did hear solid a few times and forget it each time

#

isnt a call to OnFrame necessary to start the calc?

simple ravine
#

solid =
s = single responsibility principle
o = open/closed principle
l = liskov's substitution principle
i = interface segregation principle
d = dependency inversion principle

#

mvvm = model view viewmodel
mvu = model view update (i think)

frank kayak
simple ravine
#

then you similarly have mvc = model view controller

frank kayak
#

when im done with cleaning up my tool i want you to look over the api that i havent messed up too much 😄

oak estuary
#

It's coupled in that way, but I think that could be changed to onCalculate instead and have the UI fire that event only when needed. Just hasn't been a high priority

frank kayak
#

would be great if you guys could improve pob so that its easier to script

oak estuary
#

What else do you want to have available?

frank kayak
#

i dont have too much of an overview yet over the structure in pob

#

but it would be great if unnecessary ui-related stuff could be left out when pob is scripted

rapid pagoda
frank kayak
#

and perhaps provide easy high level functions to get the good stuff out of pob

oak estuary
#

Feel free to open a PR 🙂

frank kayak
#

oh when youre here dog i also have some requests

simple ravine
#

hehe, i had a gut feeling that answer would arrive

frank kayak
#

not enough lua knowledge yet

#

😛

#

would make the compiled c++ stuff digestable on linux first with a makefile etc

oak estuary
#

As much as I'd love PoB to become robust enough to integrate with everyone else's tools, we have to rely on them to open PRs and not just rewrite HeadlessWrapper.lua for their own purposes. I know of at least 3 copies of it floating around out there

frank kayak
#

@rapid pagoda and it would be great if your ggpk package wouldnt hard depend on the gpl-licensed ooz code but have an decompressor interface which is provided by gooz. that way you can remove the dependency of pogo from ooz.

#

your library user has then the option to use the gooz decompressor for pogo

rapid pagoda
rapid pagoda
frank kayak
#

thanks

rapid pagoda
#

I need to rework the whole file loading "stack" to support steam installs anyway -- I can see about making the bundle compressor pluggable when I do that

frank kayak
#

i did request an update on pkg.go.dev

#

not working yet...

#

perhaps it takes a bit longer

#

its there 🙂

#

i might compile a separate ooz tool that can be used in general for decompression and make a decompressor that execs that. that should be allowed by the GPL

#

as long as there is no coupling in the interface noticeable

#

was a big fan of copyleft licenses a few years ago and mostly still am as long as i dont have to handle those dependencies...

#

GPLv2 and GPLv3? together? incompatible...

#

some nice solaris stuff under cddl? also an annoyance. pretty sure the cddl was made to be incompatible to the gpl

rapid pagoda
#

you can blame orable for that one

frank kayak
#

so much easier in go where most just use mit or bsd

#

yeah oracle can die off...

#

the thing about a few lines with the android api, openoffice what else was there?

#

opensolaris...

rapid pagoda
#

ZFS

frank kayak
#

how did oracle f** with zfs?

rapid pagoda
#

it originated in (open)solaris, so the code was all CDDL

frank kayak
#

ah, yeah that i know

#

i do use it with freenas. is that the solaris version modified?

#

wasnt there some movement last year to combine the efforts in openzfs and was it bsd?

#

...should go to bed

#

ah... @rapid pagoda are you perhaps interested in looking through my go code on gitlab before i make the repo public? i prob need a few more months to sort stuff out. can add anyone interested as reporter role to the repo if you have a gitlab account...

#

@gilded tree too

#

have a package that automagically gets me a poesessid etc

mossy mauve
#

Best I can figure from this channel and elsewhere: The reason the wiki doesn't have any of the league's new skill gem's info (or a lot of other updated data) is that said data used to come from PyPoE but the guy who both maintained that and also made a lot of wiki edits with it stopped doing that in about May. There's at least one somewhat-maintained fork, but no one is trying to use it to fix the wiki yet.
Is this accurate?

I hate fandoom, but I hate not having skill gem wiki pages more. I thought I'd ask if anyone knows things before I try to figure out the hard way whether pypoe generates the massive templates for the wiki.
My python was decent back when 2.7 was the norm, but it's super rusty now. 😬

rapid pagoda
hazy fog
simple ravine
#

@compact isle Do you have a list available for Item->extended->category, and potentially sub categories?

compact isle
simple ravine
#

and those are categorized a little differently, so trying to figure out the best and yet extensible way of doing it 🙂

worthy cape
#

@frank kayak One of the things that may be fun and which might be diverging a bit in behavior between proper and headless PoB is the subscripts.
I'm not sure if the calcs you use leverage them and if the wrapper reimplements them in some way.

#

In short, a subscript runs on a separate thread from the main Lua interpreter and has two sets of remote functions it can invoke on the main thread; one fire-and-forget type "sub" that doesn't return anything, and one "func" set that actually transmits a value back.
They're implemented kind of like a blocking RPC where the arguments and results are serialized on a queue which is polled and executed as part of the render loop - this is why some computations (including update checker) have performance that varies based on UI framerate.

#

I had some fun with the serialization code as it accidentally truncated strings with embedded zero bytes.

gilded tree
frank kayak
#

can you point out or make an example what you didnt like in that medium article?

#

the separation of behaviour (interface) and data (structs) (rob pike calls it orthogonal i think) makes it very easy to avoid tightly coupled code

#

i would suggest trying go for some very little project and see how it feels first

frank kayak
#

that new warcry mtx looks ...liberating

trim sinew
#

anyone know a bit autohotkey ? got a small issue I need fixing.

grave wren
#

Your best bet is to ask instead of asking to ask templarthumbsup

trim sinew
#

was unsure if this was the right channel&knowledgable ppl

#
#Ifwinactive, Path of Exile
~a::
    SendInput, {Left}{End}
return

I use this and S key to navigate tabs. However, this also moves cursor right/left while in chat/searchable
fields. How to prevent that?

worthy cape
#

(you use triple backticks to do multi-line code blocks on Discord, single backtick to delineate in-line code)

#

There's no way to query from the game what UI state it's in, so anything you press is going to universally apply to everywhere.

trim sinew
#

right, so my best bet is to change to CTRL+S or something.

frank kayak
#

touchpads feel like a gimmick to me - cant work with them

frank drift
#

probably going to be about as successful as that modular smartphone

#

remember that

frank kayak
#

i think it might have a better chance at succeeding

#

you mean phone bloks or when it was bought out as project ara by google?

frank drift
#

that sounds right

#

the reddit comments about the laptop were dumb af, but that's reddit I guess

frank kayak
#

ah i think it was a collab and not bought out

#

but the phone bloks project missed the right support

#

and its really not overpriced. i think they are ex engineers from lenovo & apple if i remember correctly from the vid

grave wren
#

Looks good but for private use I'd still go with a m1 MacBook air

#

Getting a tuxedo notebook for work soon

frank kayak
#

macbook keys feel just bad for me and its fragile, overpriced, walled-garden, weird hardware badly supported on linux. wouldnt touch one even if it was a gift. 😛

#

i do have a company iphone and thats luckily it.

#

oh and forgot about all the glue etc to make repair as enjoyable as possible

frank kayak
simple ravine
# gilded tree Why? 😄

cc @frank kayak

Composition is good, but enforcing it and not allowing interface segregation and inheritance doesn't appeal to me, in my mind right now. The examples I read when they argue against interfaces and inheritance are pretty terrible ones hehe.

#

If you adhere to Liskov Subsitution and make sane interfaces, which is a slight mental shift, it's really good tools to have. Surely you can achieve your goals with pure composition, but my gut feeling says it'd be messy.

#

Perhaps I am wrong. I don't know... hence why i said gut feel

frank kayak
grave wren
frank kayak
#

i do liked the thinkpad t410 keyboard and the new ones like P50 also feel nice. when i typed on macbooks it felt too "soft" i think

frank kayak
#

for example the pretty common io.Reader interface accepts any object that provides a Read() method to read bytes. so functions often state io.Reader as a parameter type. you can throw os.File, encoders or whatever in as long as you can read from it.

#

im dont completely understand the difference between composition and inheritance. what do you think gos composition could not provide that would be possible with inheritance? @simple ravine

simple ravine
#

It can likely provide the same goal, but in a different way

#

but first I want to address a bad and a good example of inheritance

#

give me a second

#
namespace Foo
{
    public interface IAnimal
    {
        void Walk();
    }

    public class Dog : IAnimal
    {
        // etc
    }
}
#

bad example.

#

The way at least I refer to define interfaces are separated by capabilities that are required to work as a single unit, and not a "whole thing" such as IAnimal or IMonster

frank kayak
#

1 method interfaces are good in go

#

for some internal private stuff i do end up with many methods. my ui drawer interface being implemented by a gui, tui and so (bit of a mess)

#

btw in go types implement an interface implicitly. you dont state that you implement it. its structural typing and just requires you to have those methods - they can also be promoted from embedded structs or interfaces.

simple ravine
#
namespace Foo
{
    public interface INotificationSender
    {
        public Task<INotification<IPayload>> SendAsync();
    }

    public interface INotificationReceiver
    {
        public Task<INotification<IPayload>> ReceiveAsync();
    }

    public interface IPayload { }
    public interface INotification<TPayload> where TPayload : IPayload
    {
        public TPayload Payload { get; }
        public DateTimeOffset Sent { get; }
    }
}
frank kayak
#

in your 1st example what exactly is bad?

simple ravine
#

IAnimal as an interface does not say what behavior it satisfies

#

it's just a "thing"

frank kayak
#

isnt Walk() the bahaviour? i thought its the opposite?

simple ravine
#

someone smart once said, you should define your interface as the prefix I as in the word I (me). "I can X" and "I can Y"

#

ICanWalk and ICanSwim, etc

frank kayak
#

in go interfaces should end with -er if possible. like Reader which Read()s or Runner which Run()s

simple ravine
#

for me, that's not a language-specific guideline, but rather a sanity guideline 🙂

frank kayak
#

yeah

#

you have to recognize it

#

i do like that in go you can see by looking at the name if its exported (capital) or not

simple ravine
#

you mean if something is public or private?

frank kayak
#

yes

#

Dog in a package would be accessible from other packages. dog would not be acc.

#

takes a bit getting used to but very nice

simple ravine
#

I think I prefer the C#/Java way of defining things inside the "thing" and mark things as public or private

#

but it can be because I've been at it with this style for so long

frank kayak
#

pike (go author) also didnt like it at first but started to like it after a bit. you get the info by the name without looking up the definition

#

and code is less verbose

simple ravine
#

I guess for me it looks a bit scattered, and the idea of defining program flow first, and then types is quite foreign to me.

#

Especially since I am a big proponent of Domain Driven Design, where you encapsulate your business invariants (think of it as business rules) in your domain objects.

frank kayak
#

can you explain to a dummy like me what the 2nd example is? is INotification an implementation of the 2 interfaces INotificationSender, INotificationReceiver or just the combined interface (behaviour set) of the 2?

simple ravine
#

It could be a simple pub/sub implementation

#

or a queue mechanism

gilded tree
#

In general Go has many things which are a bit different than most other languages. They are following their own philosophy, I don’t like all of them either. Sometimes they tried to reinvent the wheel where it’s not really needed, idk.

grave wren
#

Lack of generics just made me not touch it yet

gilded tree
#

Soon

simple ravine
#

woah, ok I thought it would create a post out of it

frank kayak
#
package foo

interface NotificationSender { Send([]byte) error; }
interface NotificationReceiver { Receive() ([]byte, error); }

struct Notification { data []byte; }
func (n *Notification) Send(d []byte) { /* do something with d */ return nil; }
func (n *Notification)  Receive() { /* get d */ return d, nil; }

func ReceiveEmail(n NotificationReceiver) { data, _ := n.Receive(); fmt.Println(string(data)); }
func someFunc(){ notif := &Notification{}; ReceiveEmail(notif); }

this is for example how you could use a sender and receiver interface as a func param and pass a struct implementing it.

frank kayak
#

https://arxiv.org/abs/2005.11710 who is this Philip Wadler dude? /s

#

hope someone understands it as well as me

gilded tree
simple ravine
#

Later today I can share some things regarding why I like OOP and DDD, perhaps we can ideate around how it would look like in corresponding languages.

frank kayak
#

that date is fucked... lol

simple ravine
#

DateTime in c# is just a struct that wraps a ulong 🙂

frank kayak
#

at least a time is now dual nature with a monotonic clock

grave wren
frank kayak
simple ravine
#

I really enjoy idea-driven discussions where you can compare different languages, and in a diplomatic way discuss their strengths and weaknesses. Especially since I really want to learn more about the strengths of other languages that I haven't gotten into yet, and at the same time give c# a bit more cred (a portion of the dev community thinks it's un-hip and bad, which I disagree with)

grave wren
#

Isn't un-hip good

frank kayak
#

all languages are shit. just use sed for all 🙂 fite me

grave wren
simple ravine
#

just use asm and get over it 😄

grave wren
#

Wasted 6h in a shell script last friday

#

And turns out it just didn't work on my machine but does in gitlab runners

#

Hooray

frank kayak
#

macos with a 2 decade old bash?

#

or dash on debian?

#

better switch to rc shell 😛

#

if you also start your sed scripts with #n react with 🇳

#

if you use mini-sed and dont know what im talking about then dont

grave wren
#

No Linux mint no clue why it didn't work as expected but I dread shell scripts regardless

#

Stuff is just black magic you cant read

frank kayak
#

i loved shell scripts and only switched to go because it runs everywhere without setup in most cases

#

debian centos differences did annoy me sometimes.

gilded tree
gilded tree
grave wren
#

I still want anything that comes close to iterm for linux

#

Tilix is the best I found and it's still not great

gilded tree
#

iTerm the terminal emulator?

grave wren
#

Yes

frank kayak
gilded tree
#

Or kitty if you want less features, focused on other things

frank kayak
#

mlterm can sixel by default

#

prefer terminator though

#

kitty ignores xdg places...

grave wren
#

Thanks for the suggestions gonna check em out

frank kayak
#

if you have any questions about putting images into a terminal i probably know nearly all of em 😄 (or ripping cookies out of browsers...)

#

xterm and urxvt are decent but require quite a bit config

#

mlterm just works, vte limps behind with most features

worthy cape
#

Date/time is hard and complicated in libraries because date and time is hard.

#

Same goes for filesystems, text, and all the other filthy stuff that interfaces with reality.

#

Lots of different clocks with different representations, not to mention calendars and human time and the conversion to and from them.

simple ravine
#

modelling reality is complicated

frank kayak
#

nearly missed the chicken drop... thought 12h later...

#

for anyone else not aware 32$ twitch drops right now

simple ravine
#

too late?

worthy cape
#

5h event, first drop after 30min watched, second for 2h watched.

frank kayak
#

1.5h left so too late for heartbreaker

#

but not for the chicken

#

you need twitch prime and linked up

#

and dont forget to get it in the twitch inventory afterwords or you will lose it

#

the drop event is locked to the first drop-enabled stream

#

visited mathils stream first and couldnt switch...