#tooldev-general

1 messages Β· Page 117 of 1

frank kayak
#

musl-ldd (0x7fb7c5858000)
hmm

#

file says this: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=74b55f453c53ab70e942dbc0b0c2df236b80bdea, with debug_info, not stripped

worthy cape
#

ELF 64-bit LSB executable, x86-64, version 1 (SYSV), statically linked, BuildID[sha1]=4737d3f27d75a9a8bc821a854b079ad11429b712, with debug_info, not stripped

frank kayak
#

oh

simple ravine
#

How would you write something simple like this in Go

public readonly struct Point
{
    public Point(int x, int y)
    {
        X = x;
        Y = y;
    }

    public int X { get; }
    public int Y { get; }

    public Point Move(Point dest) =>
        new Point(X + dest.X, Y + dest.Y);
}
worthy cape
#

On Rust, I'm a bit torn if I should port my PoE viewer codebase to C++ or try to interface with the Rust code I have.

frank kayak
worthy cape
#

Ran into a brick wall with GUI and 3D libraries where upstreams were lagging behind or changing their interfaces every other version.

#

In glorious C++ now.

simple ravine
#

@frank kayak I just made a simple case of a struct with a couple of properties and a method, and it just happened to be a Point πŸ™‚

#

It's also immutable

rapid pagoda
#

@simple ravine

type Point struct {
    x, y int
}

func MakePoint(x, y int) {
    return Point{x, y}
}

func (p Point) X() int { return p.x }
func (p Point) Y() int { return p.y }

func (p Point) Move(dest Point) Point {
    return Point{p.x + dest.x, p.y + dest.y}
}
frank kayak
#

type Point struct {
X int
X int
}

func (p *Point) Move (dest Point) Point {
return Point{
X: p.X + dest.X,
Y: p.Y + dest.Y,
}
}

rapid pagoda
#

Or that if you were willing to give up immutability, yeah

frank kayak
#

i wouldnt make simple ints private

simple ravine
#

It's about immutability yeah, but yeah good enough for an example

frank kayak
#

yeah then what he barks

#

MakePoint() would probably be called NewPoint() in most projects though

worthy cape
frank kayak
#

ah if someone wonders - in go public functions, types, ... start with an uppercase letter - if its lowercase its private

worthy cape
#

Like in Go, there's no dedicated constructors, just functions like new, from, parse, etc.

rapid pagoda
#

@frank kayak yeah, fair, naming bleedover from NSMakePoint πŸ˜›

frank kayak
#

whats that?

simple ravine
#

what does the impl keyword do?

rapid pagoda
simple ravine
#

I mean, apparently short for implement, but..

worthy cape
#

Rust separates the data of the struct from the methods.

simple ravine
#

I don't think I like either Rust or Go

worthy cape
#

@simple ravine The general form is impl SomeTrait for Point where you specify the functions of some trait you wish to implement for that struct.

#

An impl block without a trait are just a loose bunch of associated methods.

#

Note how some are static functions (new) and some are member functions (moved).

#

A lot of the genericity in the language is from traits you may implement for your own types and either use statically or with dynamic polymorphism.

frank kayak
#

@rapid pagoda any tips how to make a macos vm run? i think i ended up with graphical glitches after booting

worthy cape
#

Think partial classes but different.

simple ravine
#

Like ruby mixins or whatever they call it?

worthy cape
#

I had decent results with VirtualBox but that was a version or two ago of macOS. Got some remnants of a KVM installation but no idea if it ever worked.

simple ravine
#

like you can mix orange juice and pineapple juice together

worthy cape
#

Performance was horrible, of course πŸ™‚

frank kayak
#

:/

#

its prob not much to make my tool run under darwin but i cant test that way...

worthy cape
#

You can't leverage some CI somewhere?

frank kayak
#

and CI will be crappy too

rapid pagoda
#

@frank kayak last version of macos I ran in a VM was roughly 20 years old πŸ˜›

frank kayak
#

i think i found 2 free macos ci soultions

#

thats slightly too outdated for my causes

#

thanks though

simple ravine
#

C# 9 has some nice new additions for those data record types, records:

public record Point(int X, int Y);
rapid pagoda
#

if it's go, it runs under linux, and it doesn't do anything particularly OS-specific it'll almost certainly run fine on macos

simple ravine
#

pretty nice, adds IEqualityComparer etc automagically

frank kayak
#

no not that filthy cookie scraping im doing in firefox/chrome squlite dbs...

worthy cape
#

@simple ravine #[derive(Eq, PartialEq, Ord, PartialOrd)] πŸ˜›

frank kayak
#

i get my poesessid automated πŸ˜›

rapid pagoda
#

I hopped back and forth between macos/linux a bunch while developing pogo, no issues. Only cross-platform issue I ran into was Windows path names

simple ravine
#

@worthy cape is that AOT magic?

worthy cape
#

One thing that put me off Go was that Windows was considered a bit second-class.

frank kayak
#

the gui might also use a different backend with cgo ...

worthy cape
#

@simple ravine Rust compiler directives.

dull laurel
#

@worthy cape I always thought you are bsd through and through

frank kayak
#

windows is less than seconda class for me - just look at this ugly conhost window...

#

im getting nightmares when i here the login sound from windows

simple ravine
dull laurel
worthy cape
#

@dull laurel Still a warm place in my heart for FreeBSD, but it's not overly usable for desktop or out in reality. Web server still runs it for the lulz.

simple ravine
#

look at my fancy

dull laurel
#

@simple ravine did you really enable the retro flag? πŸ˜„

simple ravine
#

yes πŸ˜„

#

Something I really enjoy with C# though, is static implicit operators

worthy cape
#

@dull laurel systemd kind of ran a stake through the heart of the ports tree

frank kayak
#

my simple bash prompt

dull laurel
#

left icon is last exit code?

simple ravine
#

ya, u can get those in oh-my-posh etc as well

frank kayak
#

my nas runs freenas (freebsd) happily

#

yes

#

and box is yellow if ssh

dull laurel
#

its on my todo list to setup oh-my-posh

frank kayak
#

export PS1="
\e[0m\n
`[ $? = 0 ] &&
{ [ -z "$LC_ALL" ] && [ "${LANG/%.UTF-8/#}" = '#' ] || [ "${LC_ALL/%.UTF-8/#}" = '#' ] && printf '\\e[1;34m\\u2714' || printf '\\e[1;34m:)'; } ||
{ [ -z "$LC_ALL" ] && [ "${LANG/%.UTF-8/#}" = '#' ] || [ "${LC_ALL/%.UTF-8/#}" = '#' ] && printf '\\e[1;31m\\u2718' || printf '\\e[1;31m:('; }`
[\e[1;34m][\D{%T; %Y.%m.%d}]
[\e[1;31m][\u[\e[0;34m]@[
\e[1;[ "$SSH_CLIENT" ] || [ "$SSH_TTY" ] && printf 33 || printf 31m
]\h]
[\e[1;34m][\w]
[\e[1;31m]\$[\e[0m]\n\n"

simple ravine
#

some fanciness, bottom is admin mode

frank kayak
#

default powershell?

dull laurel
#

@frank kayak use markdown syntax to format code. ```

frank kayak
#

ah

simple ravine
#

pimped powershell

worthy cape
#

@frank kayak Migrated off FreeNAS/nas4free for some reason, I forget if it was hardware support or some tuning that I just couldn't get right.

frank kayak
#
export PS1="\
\e[0m\n \
\`[ \$? = 0 ] && \
{ [ -z \"\$LC_ALL\" ] && [ \"\${LANG/%*.UTF-8/#}\" = '#' ] || [ \"\${LC_ALL/%*.UTF-8/#}\" = '#' ] && printf '\\\e[1;34m\\\u2714' || printf '\\\e[1;34m:)'; } || \
{ [ -z \"\$LC_ALL\" ] && [ \"\${LANG/%*.UTF-8/#}\" = '#' ] || [ \"\${LC_ALL/%*.UTF-8/#}\" = '#' ] && printf '\\\e[1;31m\\\u2718' || printf '\\\e[1;31m:('; }\`  \
\[\e[1;34m\][\D{%T; %Y.%m.%d}]  \
\[\e[1;31m\][\u\[\e[0;34m\]@\[\
\e[1;`[ "$SSH_CLIENT" ] || [ "$SSH_TTY" ] && printf 33 || printf 31`m\
\]\h]  \
\[\e[1;34m\][\w]  \
\[\e[1;31m\]\\$\[\e[0m\]\n\n"
worthy cape
#

Probably was the 10gbit Mellanox NICs I bought or the LSI HBAs.

#

Oh right, Zen 1 are still horribly broken on FreeBSD.

frank kayak
#

that reminds me one hdd did croak

worthy cape
#

Had a repro that hard froze the machine with ZFS send in around 14h.

frank kayak
#

its some xeon with 6 6tb western

#

a digital graveyard

#

dump without order mostly....

worthy cape
#

I've got around two terabytes of space left before I need to worry about deduplicating my PoE downloads.

frank kayak
#

i did a copy of the last 3.11 pre-noodle state

worthy cape
#

I had a nice delta-compression system for all GGPKs ever, but bundles ruined that.

#

Kept the last full GGPK in each league, and delta-compressed toward the .0 version.

frank kayak
#

i tried delta compression on binary patches for my tool - didnt do anything...

#

oh nice

worthy cape
#

800 gigs for references+deltas, estimated around 10 TiB actual data.

#

Never had it all present at once, had to work league-wise to build the hash-dedup database.

#

144 GiB for every distinct file content in PoE history up to the tech patch.

frank kayak
#

also the exe or only ggpk?

worthy cape
#

I've got all EXEs separately too, for figuring out what rough version it is.

frank kayak
#

cool

worthy cape
#

Those are just like 10 gigs.

frank kayak
#

does anyone have a bash around in a pseudo-terminal (no conhost crap)?

#

just found something nice again:

#
alias t='((i)) && { i=0; a=i; } || { i=1; a=o; }; echo "p${a}ng"; bind "\"\\e[0n\": \"t\\n\""; printf "\\e[5n"'
t
#

anyone brave enough to test it?

worthy cape
#

ping pong πŸ˜„

#

(mintty does the trick)

frank kayak
#

printf "\e[5n" queries the terminal

#

the response is bound to repeating the command and printing ping pong

worthy cape
#

3.12.3 patch note preview, dang that's a lot of stuff changed.

frank kayak
#

oh

#

annointed talismans!

#

...that comes with 2 extra bugs

simple ravine
#

@worthy cape i found a way to deal with those ggpks

#

No problemo

frank kayak
#

is the tooldev-breakout just for oodle stuff?

worthy cape
#

@frank kayak For any focused collaborative work.

frank kayak
#

ah

worthy cape
#

During the week of panic, valuable information was lost in scrollback here, so we set up a separate room for collaborative work.

frank kayak
#

makes sense

simple ravine
#

"storage is cheap" they said

dull laurel
#

there probably is a cheap OVH server with 1TB of data for less

simple ravine
#

160,000 IOPS and 2000 MBps tho

rapid pagoda
#

Hetzner has some pretty cheap/good stuff too, if you just want a physical machine with a bunch of local storage

simple ravine
#

I'm fairly over on-premise normal datacenter stuff

#

u can get 1 TB of storage for $21 per month too, backed up triple up, scalable and all that jazz

#

I have a VM with 7 TB of HDD with a Xeon processor and 8 GB of RAM for €62 / mo

dull laurel
#

wow that is very cheap

simple ravine
#

yeah, 8 cores

#

i dont do enough with it

#

it pretty much holds and acquires eh... media files

worthy cape
#

Was gonna say, that's a lot of Linux ISOs.

simple ravine
#

Yep, all MIT and CC0 licensed data

#

I kinda want to dockerize stuff on this thing though, but I know I'm just gonna blow everything up

#

Plex, sonarr, radarr, jackett, deluged

#

would be nice to have them in small containers

inland kestrel
#

any idea why I can't run pypoe_ui after pulling the latest pypoe?

#

any other ggpk browsers working for the new format. can't recall if the C# one was updated

worthy cape
#

Wild guess is missing the ozz DLL.

inland kestrel
#

I have ooz on math path

worthy cape
#

(the UI doesn't show bundle contents yet, unless Omega has gotten around fixing that)

frank kayak
#

where is that dll for oodle in poe? what is it called? cant find it

worthy cape
#

Ah yes, explodes for me too: ImportError: cannot import name 'extract_dds' from 'PyPoE.poe.file.ggpk' (c:\code\poe\pypoe\PyPoE\poe\file\ggpk.py)

inland kestrel
#

yep

worthy cape
#

@frank kayak PoE static-links it πŸ˜„

frank kayak
#

nice...

worthy cape
#

If you want to obtain it from a game, there's Warframe (40 gigs)

frank kayak
#

i love static linking

worthy cape
#

Or Doom Eternal IIRC.

frank kayak
#

except in this case....

#

tane gets ctrl-clicking

#

he was already positioned in my stash since a while

worthy cape
#

@inland kestrel If all you want is exploding, I've got a command line tool bun_extract_file that can list bundled contents and expand from a file list.

inland kestrel
#

I'd like to browse the tabular data within

inland kestrel
#

opposed to just export the bin files within

worthy cape
#

You could technically explode and repack with some GGPK making tool πŸ˜„

#

But no, my thing is probably not what you want then.

inland kestrel
#

I checked libggpk and it's browser also isn't up to date

dull laurel
#

oh I should market my command line tool as well

inland kestrel
#

totkeks, do you have something for browser the bin's within?

worthy cape
#

I've blown a week on the silly guild stash API, still haven't packed up my API.

dull laurel
#

you can extract that from the command line. but nothing with a gui

worthy cape
#

Note that mine gets into the bins, but doesn't do any .DAT shenanigans.

inland kestrel
#

😒 what language

worthy cape
#

If that's what you're looking for.

inland kestrel
#

yep, looking for .dat browsing

frank kayak
#

if you want to see the ggpk content use pogo-ui

inland kestrel
#

oriath-net ?

frank kayak
#

yeah

dull laurel
frank kayak
#

cant remember if i tried with old or new ggpk

worthy cape
#

@dull laurel I've gone mostly off the file comment in PyPoE.

frank kayak
#

and i dont think you can export yet, youd have to save the file manually by changing the code a bit i guess

simple ravine
#

I wish I had documented it when writing my dat parser

#

I think mine's equally non-documented

dull laurel
#

ah let me make my repo publico

frank kayak
#

but his/her decompressiion cgo binding works so i guess the ui prob has that feature or gets it soon

#

i switched this week to vscodium from scite and i cant make the linter shut up...

#

bugging me to add comments to each exported function when im not even sure about the interface of my library yet

dull laurel
worthy cape
#

You should see Rust's clippy... keeps complaining about the complexity of my PoE format parsers.

#

"too many variables with single letter names" πŸ˜„

dull laurel
#

the 90's have called. they want their limited memory back.

worthy cape
#

@dull laurel Don't forget that all the integers are little-endian.

dull laurel
#

in the dat files?

rapid pagoda
#

@frank kayak the UI is kind of an afterthought tbh, I may have to break that to add full bundle/datadir support

worthy cape
#

There and in the bundle spec you linked.

dull laurel
#

guess I need a better tool to draw those structures (that includes endianess and flexible structures)

worthy cape
#

(I would not recommend anyone using it :D)

dull laurel
#

nice, even using the PoE font!

inland kestrel
#

lol tot

#

@worthy cape i love it

worthy cape
#

Next up for me is splitting out the Bun library/tool and working on my actual tool codebase.

#

Any decade now.

#

@inland kestrel Not sure how up-to-date RePoE is now, might be an alternative if you're fine with more baked data.

frank kayak
#

what does your tool focus on?

dull laurel
#

@simple ravine do you have at least some documentation in your parser?

simple ravine
#

Sorry, it's total garbo in terms of documentation

worthy cape
#

@frank kayak Ultimate goal is rendering/editing hideouts, reversing all the relevant formats along the way.

simple ravine
frank kayak
#

cool

worthy cape
#

Also implementing the worlds shoddiest approximation of the PoE render pipeline πŸ˜„

simple ravine
#

as you can see I haven't touched it in a while, I am moving it to the new branch and touching it up as we speak

worthy cape
#

It's likely that I end up figuring out the animation bits and render it all in a generic lit graybox style.

simple ravine
#

A lot of improvements to be made, now that I read it

#

do not use this code xD

dull laurel
#

i just need the documentation for the format πŸ˜•

simple ravine
#

(but it works)

dull laurel
#

those span extensions are interesting.

worthy cape
#

Leading u32 with row count, rows of fixed unknown width, delimiter (8x BBh) separating fixed data from varying data, columns are fixed size and may reference locations/counts into varying data, some light nesting of types is allowed.

#

NULL fields are encoded by 0xFE repeating, some references are into the delimiter landing pad, some references are to the one-past-end byte of varying data.

frank kayak
rapid pagoda
#

Nope!

frank kayak
#

its not the fastest

dull laurel
#

@worthy cape that is a very sparse explanation, but thanks. πŸ˜„

worthy cape
#

references are four bytes indicating where in varying data to look, lists are 4 + 4 count & reference, strings are 4 bytes offset to UTF-16LE text, zero terminated.

#

(not sure on the order of ref|list if the count or reference comes first)

dull laurel
#

The header of the file contains the number of rows and the size of the rows, so we can determine with certainty how large it would be. Together this is fixed size data section.

so the data until 0xbbbbbbbb is just the fixed row data?

simple ravine
#

yeah

chilly skiff
#

how to separate total elemental resistances to individual ones?

#

I hate combined resistances

simple ravine
#

wrong channel

chilly skiff
#

so where?

simple ravine
chilly skiff
#

ok

dull laurel
#

what was the difference between dat, dat64, datl and datl64 again? One was the pointer size and the other was?

worthy cape
#

64 has wider words for references (internal and keys into other files?), while L has UTF-32LE text, IIRC.

dull laurel
#

okay, thanks. writing it down like this. PRs welcome πŸ˜„

rapid pagoda
#

As far as I'm aware, there hasn't been a lot of work done with anything beyond the "classic" 32-bit dats. They all seem to contain the same information, so there's been no pressing need to look at the rest

dull laurel
#

ah, so they all contain the same information? good to know. thought there are differences

worthy cape
#

Biggest gain with the alternate formats would be if you're looking to derive field definitions from knowing that the data should be the same.

dull laurel
#

i guess they keep the old ones for legacy code

worthy cape
#

Similarly with the localized ones.

#

datl appeared with the tech patch and the mac GGPK has UTF-32 filenames, so might be related to whatever stuff one does with the filesystem/strings on that platform.

#

GGG could rip out the variations some day, which would make it fun.

dull laurel
#

i would assume they keep them until all code using them is gone and then they can be removed

civic crane
#

I believe they will stop support x32 systems in poe2

simple ravine
#

please no, I don't have the patience to start messing with dat64 files right now

dull laurel
#

haha

#

πŸ˜„

rapid pagoda
#

Makes me wonder why the datl files exist. The Mac client is 64-bit only

dull laurel
#

someone's generation script just spit out all four variations?

#

@worthy cape is the magic 0xBB times 8 part of the variable section, as in, are all offsets increased by 8 or is it actually the end of the fixed section?

rapid pagoda
#

It's the start of the variable section.

dull laurel
#

Thanks

worthy cape
#

It's a literal sequence of eight 0xBB in the file, the start of which is the start of the variable data.

dull laurel
#

Was just trying to make sure I document it properly. As in: does it count towards the offset of fields or not, and the answer seems to be it does.

frank kayak
#

4.6s for the building of my 30MB static wasm embedded webpage. compiling the build script, then the actual code and packaging it into the html

frank kayak
#

using syscall/js in go feels weird: ```go
value = js.Global().Get("document").Call("getElementById", i.id).Get(value).String()

#

finally fixed the input fields in my webui backend

worthy cape
#

@simple ravine Dammit, you people are tricking me into thinking about DAT specs again.

dull laurel
#

haha

simple ravine
#

hehe

dull laurel
#

i will continue work on that tomorrow. let me know if there is anything wrong already.

obtuse citrus
#

yeah the pypoe ui won't work right now, it has needed a rework for a while anyway, seems like a good time since I don't see much of a point in it being just a ggpk browser anymore given that most of the stuff is contained in the bundles

wintry surge
#

I think I can say that the parsing component works for now, and its speedy on my rig, though experience with it may vary. 570ms serially, 290ms /w rayon

simple ravine
#

oh you are code-generating based on spec?

wintry surge
#

yea, the proc macros I wrote for it are under poe-type-gen

#

it's ultra cluttered, but in general it's a two-step process:
1- generate structs and a catch-all function that dispatches parsing based on the provided file name
2 - generate the function implementations to actually parse the file "rows"

simple ravine
#

I had a semi-working solution for that in C# a few years ago, but I felt it was becoming a pain

#

Maybe you have inspired me to do a second attempt at it

wintry surge
#

the proc macro step takes almost 2 minutes to run in compilation, so I might create something that generates at least part of that step that I can drop in separately

#

let me know how it goes, I'm like partially hopeful this compiles for wasm and I can use it wherever

simple ravine
#

Ah, that is a neat idea

#

Right now, my dat parser takes a spec.json, and maps it to Dictionaries (maps), and also does recursive lookups when there are references to other dat files

worthy cape
#

@wintry surge How's IDE completion of the macro output? Was a bit hit-and-miss last I tried both codegen in build.rs and proc-macros.

wintry surge
#

the right call there is to probably just made a crate that just contains the generated spec so that recompiling the library portion doesn't redo that every time

worthy cape
#

A separate crate helps a lot indeed.

wintry surge
#

oh it's still not amazing, I'm using rust-analyzer in vscode and I don't get symbols inside quote!{} blocks and it sees the function instead of the macro in suggestions, but otherwise it was fine. I mostly did a lot of debugging through hunches and printing out the token trees to figure out where I missed a parenthesis or a type or something

#

I originally tried to make the overall function dispatch based on a provided type, but rust didn't like that so I had to create the enum

worthy cape
#

Yeah, more wondering about the resulting specs, do you get decent completion if you try accessing a field?

wintry surge
#

oh, I haven't tried that

#

nope lol

#

oh I'm dumb all the struct fields are private

#

going to give it a few minutes for rust-analyzer to rebuild it and then check if it figured out what fields the struct has

#

yea even when I tell it the type it seems that rust-analyzer doesn't know about it. :/

wintry surge
#

has anyone looked into Languages.dat? It looks like there's no spec for it in PyPoE, it has no variabledata block, the table len says 0 and there's definitely a bunch of data in it

#

It almost looks like inline utf-16 strings and other data

velvet fog
#

it defined language enabled and flag

wintry surge
#

that would make sense

velvet fog
#

it's not like other dat and different format

wintry surge
#

yea, I think you're right. There's a utf-16 string followed by the expected 0x00000000, a flag and a key

velvet fog
#
sequence int32
id string
name string
locale string
str4 string
val5 int32
IsEnabled int32
wintry surge
#

Ok, that makes more sense that the first entry includes the initial 0x00000000

clever thistle
#

@digital parrot TradeMacro works for me with poe in "proper" fullscreen, but if you click on any of the tooltips the screenmode will change. Do you have GDI+ enabled? (It's in the ItemInfo tab.) I have that disabled.

dull laurel
#

Can someone tell me what ref|generic means - particularly the generic part. I thought the refs would always use a specific type they point to, so you know the size of the referenced value.

simple ravine
#

I don't think I've ever seen ref|generic when dealing with the dat specifications.

#

It must be something "new".

dull laurel
#

as far as I understood it is always used when a different file is referenced

velvet fog
#

It's a self ref link id

simple ravine
#

hence the quotation marks πŸ™‚ it's "new" to me, who haven't touched DAT files in a couple of years.

dull laurel
#

@velvet fog what does self ref link id means? to another file, right? or inside the same file?

civic crane
#

zero based row number in this dat file

dull laurel
#

the same or a different?

civic crane
#

same ofc

dull laurel
#

oh ah

#

ref|generic, wouldn't it be shorter to just put the row number in there as an int instead of a pointer to the int?

polar elbow
#

Anyone else tried @vagrant plank 's poe-controller?

dull laurel
#

I think I got it all now for the .dat files. The vote is still open for the naming, I'd either suggest Data Table or Dataset, because just "dat" sounds odd, should at least be "data".
https://rentry.org/wqgcf does this sound correct?

frank kayak
#

".dat file format"?

civic crane
dull laurel
#

if I understand your table correctly, it is cpu architecture independent?

#

ah wait no

#

@civic crane why does a foreign key has a size and a pointer?

civic crane
#

good question that I asked too, perhaps it's reserved memory that are written at runtime to make lookups faster?

dull laurel
#

ah, so it never was a long

#

it always was an int plus the pointer.

#

yeah, I assumed the same, that for their in memory database those will contain the actual references to the other table

simple ravine
#

This used to work nicely. I am not sure if it's still the case, though.

#

I am currently reworking it to be more optimized and nicer, but at least there's some logic that works

dull laurel
#

documentation cough πŸ˜‰

simple ravine
#

Β―_(ツ)_/Β―

#

not my strong suit πŸ˜„

dull laurel
#

@civic crane the length of a list also changes to size_t?

civic crane
#

yes

dull laurel
#

nice analysis!

#

would change one thing: char16_t* to wchar_t*

#

ah eh, no.

#

that was the L in the file extension

worthy cape
#

@dull laurel wchar_t is an abomination which should go to hell.

dull laurel
worthy cape
#

Almost always the wrong choice unless you want to express the complete arbitrariness it happens to encode.

obtuse citrus
#

can't use size_t in python struct, that will be based on whether 64 or 32 bit python interpreter is running, so effectively it's still a 32 or 64 bit integer depending on dat or dat64

frank kayak
#

reimplemented my input fields in an immediate mode GUI - abusing the filter function for callbacks and downgrading multiline fields to singleline just so that i can get an event on Return... - but it works now with less triggering

#

resolves from twitch channel to poe account and current character

worthy cape
#

Hrm, I missed out on dialogue from a rogue in the game after a quest contract. Does anyone know off-hand where that's stored?

frank kayak
#

sound?

#

text lines should be in the Client.txt

#

didnt mess yet with the contents of the ggpk

worthy cape
#

I mean the UI dialogue from the exclamation mark in the Harbour, not the in-map greentext.

frank kayak
#

no clue

#

i somehow made my webui hog a ton of memory each time i enter something - too lazy to track that now though

dull laurel
#

do you open the client.txt again every time maybe? πŸ˜‰

frank kayak
#

in the browser

#

and my client.txt parsing seems to be ok

#

600mb file

#

prob some pointer i stored in some struct along the way. but its quite a few layers

#

i did put a very ugly overlay over the UI libraries i use (gui (nucular), webui (vecty), tui (termui - prob will switch to tview), mobile was planned but nucular seems to work for that too)

#

and the control of those uis is quite different

#

ended up with something horrifying

worthy cape
#

Solved my problem by just listening through the Audio/NPC files ^_^

frank kayak
#

in which order?

#

little endian?

#

why do you need the UIs of the NPCs?

worthy cape
#

When you hand in a mission there's a whole bunch of dialogue with text, if you dismiss it or don't pay attention you never get a chance to hear it again.

#

I assume it's stored in a DAT somewhere in plain text with a reference to the ogg it plays.

#

My tooling can't get at post-techpatch DATs yet.

frank kayak
#

ah

worthy cape
frank kayak
#

i dont enjoy the dialogues that much anymore after doing "All Ears"

worthy cape
#

Been there, done that πŸ˜„

#

I'm so damaged from that achievement that I still go through every single dialogue option of every NPC whenever I hit the town.

frank kayak
#

i did that on league start with a weird CoC build that didnt want to work

#

im past that

#

i did that on a lot of chars

worthy cape
#

It's tradition now.

frank kayak
#

i really hope i have my tool soon in a state where i can publish it (and forget about it)

#

when i have a bit time to work on it again i have forgotten the state of the code again...

#

@worthy cape you said you want to recreate hideouts with your tool? how far are the 3d libraries in rust?

worthy cape
#

I ripped a lot of support code from my libpoe code to bun to support the bundle loading.

#

Not sure how I'm going to get it back in again.

#

It varies a lot. My asset viewer skipped all the fancy safe libraries and used plain boring OpenGL.

frank kayak
#

ah

worthy cape
#

You've got decent platform windowing, you've got some different graphics abstractions like the one that's like WebGPU, the assorted Vulkan wrappers, plain bindings-type ones.

frank kayak
#

what is the problem in having your code not in libpoe anymore? is bun the tool importing libpoe?

worthy cape
#

There's friendly bindings for Dear Imgui, but they're a bit behind upstream and changes abstractions at times.

frank kayak
#

prob still has more doc than my GUI πŸ˜›

#

i found out that initiation of the text editors erases my settings...

worthy cape
#

libpoe has low level functionality for parsing GGPK files and a VFS built on top of that, as well as parsers for other formats. It also has utility functions for Unicode string manipulation, SHA256 code, etc.

#

I ripped the GGPK format code and some of the util code into libbun to be able to support bundles in GGPKs for the Bun EXE.

frank kayak
#

have you published libpoe yet?

worthy cape
#

Nope, private WIP with my hideout tool.

frank kayak
#

ok hope we can see it soon

vapid pulsar
#

hideout tool?

worthy cape
#

@vapid pulsar My ultimate endgame is an editor for hideout decorating that doesn't suck.

#

With features like laying out decorations along splines, grouping and layers, prefabs, etc.

vapid pulsar
#

Ah cool, yeah i had envisioned something like that too. Got as far as decoding most of the 3d formats

#

My current project is timeless jewels though

worthy cape
#

Restarted in C++ as the friction in Rust was too much to be comfortable.

vapid pulsar
#

Yeah Rust can be painful at times

worthy cape
#

When you spend more time wrangling the code you know is good to fit the ownership model and keep running into bindings that are not quite like upstream, you finally figure out that it's not meant to be.

frank kayak
#

do we have data sets for timeless jewels? or anything we can work with?

worthy cape
#

In particular, I wanted to use the docking and tables branches of Dear Imgui, which were completely out of scope of the bindings.

vapid pulsar
#

@frank kayak Right now all i know is that they use the passive jewel distance file pjd and the number on the mod as a seed for Mersenne Twister PRNG to get an index in the additional mods dat

#

or replacement mods dat

frank kayak
#

oh

vapid pulsar
worthy cape
#

Do you have any datasets to work with, and would any help?

#

Like if someone went into Standard with a bajillion divines and a character with a tree full of sockets?

vapid pulsar
#

All i really need is one or two sets of jewels and indexes in the dat file/mods that get selection per node

frank kayak
#

if its included does poe include a notice?

Redistributions in binary form must reproduce the above
      copyright notice, this list of conditions and the following
      disclaimer in the documentation and/or other materials provided
      with the distribution.
vapid pulsar
#

ie a jewel with x seed will produce these mods in y socket of the tree.

#

then i can build and test the algo

frank kayak
#

i could check my jewel in a few positions and tell the mods for a few passives

vapid pulsar
#

I remember there was some project where a guy automated the process using akh to collect data on the jewels.

frank kayak
#

let me check i mightve noted something down

vapid pulsar
#

Btw @worthy cape if you want another format in your docs repo this is how the pjd file works.

frank kayak
#
reddit

Posted in r/pathofexile by u/klayveR β€’ 1,021 points and 220 comments

vapid pulsar
#

Ah nice find @frank kayak

worthy cape
#

Kaitai, nice. I tried using it but found it lacking for the more complicated file types.

vapid pulsar
#

Yeah it can be a bit weird at times. Hard to read/understand when you start using substreams

dull laurel
#

mh, that sounds interesting, this Kaitai

vapid pulsar
#

I find the ide useful for playing around with binary files

dull laurel
#

i wonder if you can describe the dat format with that

frank kayak
#

i prefer the go way without additional tooling for docs

dull laurel
frank kayak
#

with go you could create a struct with json2go and "omitempty" all fields leaving you with set stuff

#

or try piping through jq?

dull laurel
grave wren
#

yeah was going to say sounds like jq

frank kayak
#

not much...

dull laurel
frank kayak
#

TIL tinygonehtmlselldrugFREEnodenick is a valid english word...

frank kayak
#

@vapid pulsar Why do you think that PoE uses TinyMT? I can't find any obvious references in the .exe

worthy cape
#

I'd guess at Boost.Random or the one in the standard library if it's a MT.

vapid pulsar
frank kayak
#

thx for the link

vapid pulsar
#

and are are using in asm that has 4 loops and identical bit shifting to the tinymt32_init_by_array function that uses those two other functions.

mortal bone
#

@dull laurel the Read(this Stream stream, Type type) I am not sure if I can fix that. The Read<T>(this Stream stream) should work with all types

#

I am not sure how you could remove the T : unmanaged constraint since you need to do the pointer magic

vapid pulsar
dull laurel
#

@mortal bone can't I read the things without pointer magic if I define it for the 8 types?

inland kestrel
#

what table does the alternate quality info live in?

#

I was looking in repoe's gems.json and it's not jumping out to me

#

Nevermind, I see it now... static->quality_stats array

dull laurel
inland kestrel
#

the values I see was not the same as what I see on poedb. @velvet fog do you update your data after each patch? I'm wondering if repoe is out of date or not

#

or perhaps the weight is actually defined elsewhere

#

Detonate Dead as an example,

        {
          "id": "base_cast_speed_+%",
          "set": 0,
          "value": 500
        },
        {
          "id": "skill_fire_damage_%_to_convert_to_chaos",
          "set": 1,
          "value": 3000
        },
        {
          "id": "detonate_dead_damage_+%_if_corpse_ignited",
          "set": 2,
          "value": 4000
        }```
#

is "value" not the weight?

velvet fog
#

GrantedEffectQualityStats.dat

#

nope. this value need divide 1000

inland kestrel
mortal bone
#

@dull laurel the Read<T> and Read(type) functions aren't really linked. I don't think I am sure what you mean. If you are trying to use reflection Read(type) then you might have to figure out a better solution. if you know the type Read<type>() then you don't need to do anything

dull laurel
#

@mortal bone i'm trying to implement the dat parsing, so the type is defined in the spec

velvet fog
#

(500/1000)*20, divide 1000 and quality 20

dull laurel
#

i will try something out

mortal bone
#

@dull laurel Ah, I have already done that haha those 8 types are all you need

dull laurel
#

I really hope this works :-D

public dynamic Read<T>() where T : struct {
            return (default(T)) switch
            {
                bool => Convert.ToBoolean(Read(1)[0]),
                byte => Read(1)[0],
                short => BinaryPrimitives.ReadInt16LittleEndian(Read(2)),
                int => BinaryPrimitives.ReadInt32LittleEndian(Read(4)),
                uint => BinaryPrimitives.ReadUInt32LittleEndian(Read(4)),
                long => BinaryPrimitives.ReadInt64LittleEndian(Read(8)),
                ulong => BinaryPrimitives.ReadUInt64LittleEndian(Read(8)),
                float => BinaryPrimitives.ReadSingleLittleEndian(Read(4)),
                _ => throw new NotImplementedException("Type not implemented")
            };
        }
inland kestrel
#

@velvet fog I'm sorry, I'm not quite following. Can we use detonate_dead_damage_+%_if_corpse_ignited as an example? You should 20 as weight. The "value" from Gems.dat is 4000.

velvet fog
#

the value 4000 is not correct, should be 4 per quality

inland kestrel
#

ah, so that 4000 (or 4 per quality) is not actually the weight

velvet fog
#

right

#
    'GrantedEffectQualityStats.dat': File(
        fields=(
            Field(
                name='GrantedEffectsKey',
                type='ulong',
                key='GrantedEffects.dat',
            ),
            Field(
                name='SetId',
                type='int',
            ),
            Field(
                name='StatsKeys',
                type='ref|list|ulong',
                key='Stats.dat'
            ),
            Field(
                name='StatsValuesPermille',
                type='ref|list|int',
            ),
            Field(
                name='Weight',
                type='int',
            ),
        ),
    ),
inland kestrel
#

chuan, you don't happen to have a json.php/Gems/Gen that exposes that do you? πŸ₯Ί

velvet fog
#

nope, do we need that?

wide garden
#

What would be the most efficient way to scrape the entire ladder for a single item slot?
I can dl http://api.pathofexile.com/ladders/heist?limit=200&offset=0 to grab ladder characters
Then I tried getting http://www.pathofexile.com/character-window/get-items?character=CHARACTER
But when doing this for characters that aren't mine I get {'error': {'code': 6, 'message': 'Forbidden'}} and also doing it this way would require me to make a separate request for every single character. Is there a good way to get the information I want?

grave wren
#

https://www.pathofexile.com/character-window/get-items works as long as the profile is public, there's no easier way to do this as far asi know, just manual parsing

wide garden
#

When I try with someone who's profile I know to be public I get {"error":{"code":1,"message":"Resource not found"}}

wide garden
#

Oh okay, adding the account name is what I was missing, thanks.

grave wren
frank kayak
#

you can get the account name of a character with this endpoint btw: ```go
url := https://www.pathofexile.com/character-window/get-account-name-by-character?character= + character

it has problems with certain chars, might be all non-ASCII ones.
worthy cape
#

Tried backporting Bun to libpoe last night, my VFS is weird.

#

Not sure if it's worth handling such external mangling of fonts, but thought I'd let you know πŸ™‚

fickle yew
#

@worthy cape Thanks. That's got to break a lot of websites I think though?

worthy cape
#

Probably.

dull laurel
#

non-regular line height?

worthy cape
#

I guess it's a decent price to pay for an overall improvement in readability if you're a bit dyslexic.

fickle yew
#

Yeah for sure. I'll put it on my evergrowing todo list.

#

to see if there's an easy fix

dull laurel
#

put it in the github issue tracker and let some hacktober people help you πŸ˜‰

fickle yew
#

Ninja is not open source so unfortunately I don't get the joy of hacktober.

worthy cape
#

"oh no"

fickle yew
#

Mostly just because it's my own playground and I don't need more pull requests and issues in my life. I do that all day at work.

simple ravine
#

hehe

fickle yew
#

Mm @simple ravine still no updates to master? πŸ™‚

simple ravine
#

Working on it as we speak πŸ™‚

#

having some issues with the new schema format

#

or something else

#

it's not being nice to me

fickle yew
#

Oh. What's breaking?

simple ravine
#

Reading .dat files

#

ordered duck though, so I can both eat and talk to it about my coding problems.

#

it will help

#

im sure

#

pretty fun how u can follow the delivery car in real time

fickle yew
#

Haha yeah we use Wolt once in a while

simple ravine
#

fiancee away on work trip, kid at grandma's

#

i forgot food.

fickle yew
#

Their delivery fee is a bit steep

simple ravine
#

yeah

fickle yew
#

But being able to see the delivery car is nice. Our sushi was delayed the other day and my 2 year old was really hungry. Would have been nice to know when they would be here.

frank kayak
#

finally added automated android sdk installation to my build tool...

#

that sdkmanager pulls a lot of unneeded crap

#

now one make command sets the android dependencies up, creates the apk, and runs it on my phone πŸ™‚

fickle yew
#

What does the apk do? πŸ™‚

frank kayak
#

android app format

worthy cape
#

Like, what's the app for?

frank kayak
#

my tool can be compiled for desktop, web or mobile

#

general mess all stuff related poe i tried stuff out

fickle yew
#

I know what an apk is.. Zao's question

#

Ah okay

worthy cape
#

Oriathan Army Knife

frank kayak
#

currently it now display the GUI correctly on the phone, clicking doesnt work and the keyboard wont vanish but im getting there

#

just compile all into a really fat go binary

#

i use it sometimes on the cli to get some infos for an account

fickle yew
#

Ah I haven't seen many android apps in go. That explains the need to set that infrastructure up yourself

frank kayak
#

its painful in go

#

will change in a few years

#

gui stuff is still a bit behind

worthy cape
#

Rust, rust, rust! πŸ˜›

frank kayak
fickle yew
#

Android apps in rust still sound painful πŸ™‚

worthy cape
#

Never stopped the evangelists.

frank kayak
#

i dont wanna touch rust

fickle yew
#

I would like to touch rust. I just need more of that time thing.

frank kayak
#

i dont think twitch likes the scraping for the JWT stuff... πŸ˜›

fickle yew
#

You know to wait for the compilation

frank kayak
#

link xkcd 1337 or which one was it?

#

...no that was little bobby tables

rapid pagoda
#

tbh, android apps in anything that doesn't interop with the Android runtime is pretty painful

frank kayak
rapid pagoda
#

dart/flutter gets around it by, uh, reimplementing the world 😒

fickle yew
#

Xamarin is okay for c#

frank kayak
#

all i need now: make poem.apk install-android run-android

#

i can use my go gui library for android

#

it uses the stuff the ndk offers

#

i didnt have a clue how to build the apk so that it actually displays

#

theres gomobile (old) and gogio tools for building both need to start the GUI on the main thread with some call - took a while till i noticed i should leave the call out (its in my gui library already) and till i found the necessary build tag

fickle yew
#

When starting a new project I usually decide whether this is a project with the intent of learning something fancy or a project where I want to accomplish something. Both are valuable outcomes but it's hard (for me at least) to accomplish both. I guess this is the first?

frank kayak
#

its my hellow world program to learn go β™₯️ started in 2018

#

theres a lot of really bad code in there - i improve it in little steps

dull laurel
#

@fickle yew that's a pretty cool approach. I like it

worthy cape
#

I've got a lot of porting to go to get from my Rust learner to C++.

frank kayak
#

i cant stand those macros in c and c++

#

i did create a pure macro header for debugging with multiple compilers and that was black magic...

fickle yew
#

@dull laurel it took many many projects for me to stop trying for both πŸ˜‰

frank kayak
#

would someone be interested in looking through my code before i make the repo public? before that i still have some cleaning to do, there might be some poesessids in test files....

#

mostly pure go

#

the make and sed stuff was rewritten

fickle yew
#

What is your concern with making it public? Like what would you like people to look for?

worthy cape
#

I've been considering streaming my dev at times, but there's too many secrets floating around in plain text and in logs.

frank kayak
#

currently im not totally sure if not some sensitive stuff (creds) is in the history, and legally im not too sure about the scraping im doing

fickle yew
#

Scraping should be okay afaik.

frank kayak
#

scraping shouldnt be an issue in my country, but im not sure i want the anger from website owners directed at my identity

fickle yew
#

You can create a clean repo just from the current commit and remove the history if you want.

frank kayak
#

thats the plan

fickle yew
#

Okay then the secrets should a non issue I guess

frank kayak
#

but i do want to clean it up before opening it

#

so i would like to give some access to the project via gitlab

#

is anyone here using gitlab btw?

fickle yew
#

I haven't done anything serious in Go unfortunately, so I probably can't help much on cleaning up.

frank kayak
#

more like sifting through and giving some ideas. the cleanup is sth i have to do

worthy cape
#

@frank kayak Yup, even managed to snag @zao there \o/

frank kayak
#

gz πŸ™‚

#

i like it a lot more than github

#

most go stuff is on there though :/

#

gitlab is annoying if you have to maintain the server yourself

rapid pagoda
#

I wouldn't recommend running your own Gitlab for anything smaller than a medium-size company

worthy cape
#

Migrated my projects I wanted to have private there from bitbucket and github, as I'm too cheap to pay for GitHub πŸ˜„

#

Bitbucket is on the shitlist after the Mercurial removal.

rapid pagoda
#

Gitea / Gogs are probably a better choice for a personal instance.

frank kayak
#

I did learn that already...

worthy cape
#

We run Gitea at work, it's fine enough but the web UI is a bit bare-bones when it comes to finding your way around a repo.

frank kayak
#

the updates are pretty frequent

simple ravine
#

github vs gitlab ey

frank kayak
#

i like the ci a lot though

fickle yew
#

I run azure devops, but all of them are pretty good now imo

simple ravine
#

anyone tried aws devops story?

frank kayak
#

i do abuse github as a data grave for the downloads of the gitlab repo πŸ˜›

simple ravine
#

i heard it hasn't really gotten up to the standards of azure devops / github yet

frank kayak
#

?

simple ravine
#

aws

#

has their own ci/cd story

frank kayak
#

oh

#

never heard that they have one

simple ravine
#

that's probably quite telling in its own

frank kayak
#

...

simple ravine
#

not about you, but about aws of course

frank kayak
#

@rapid pagoda do you have experience with darwin builds with go? - i somehow end up with some cgo crap at some point

rapid pagoda
#

Limited experience... the cgo bits in gooz were completely uneventful πŸ™‚

worthy cape
#

I need to sort out Windows CI some day, would be nice to have releases built off my computer.

#

My eyes glaze over as soon as I look at Actions tho.

frank kayak
#

yeah - your lib is go-gettable!

#

just cross-compile

#

or write in batch πŸ˜›

worthy cape
#

On C++ horribleness, C++20/latest is nice.

#

You get std::optional and all.

#

Almost usable now.

frank kayak
#

i did run in the difference of .bat and .cmd at work - %ERRORLEVEL% gets handled differently

#

how many thousand pages does the spec have by now?

worthy cape
frank kayak
worthy cape
#

No idea, haven't read the standard since C++14 or so.

#

Final draft for C++20 - 1841 pages.

frank kayak
#

hm

#

not bad

#

but it can get larger!

#

print it out and hit someone with it

worthy cape
#

Ooh nice, there's an a translation table in the back mapping clause and subclause references from C++17 to the corresponding C++20 ones.

frank kayak
#

or is the java spec better for that?

#

is that batsh usable?

worthy cape
#

I actually own a hardcover of C++03

#

782 pages

frank kayak
#

they add stuff far too fast and all that old baggage

worthy cape
#

I'm happy that it's moving slightly toward usability.

#

If you've got to use it, it might as well become better.

frank kayak
#

i did try to implement an xpath parser as my first project in c++ 8 years ago

#

wanted an ultimate scraper thingie (prob like scrapy - but easily usable in the shell) - this is prob so much easier in go now

#

rapidxml & firedns as deps

worthy cape
#

No idea about Batsch, found it many years ago.

frank kayak
#

might try it if im forced to write batch again

#

i did write a hybrid batch/powershell script once (polyglot?) - batch to enable powershell execution

frank kayak
#

i did create a fresh repo and some clean up - could someone please check it out on gitlab? @worthy cape @rapid pagoda - its private, i would add you as guests for now

#

@worthy cape i sent an invite

simple ravine
#

aha! i found it

#

ref|generic can be null (0xFEFEFEFE)

worthy cape
#

^_^

dull laurel
#

if it is not used?

simple ravine
#

i guess

#

this is new, I think. before it was just set to 0

#

because im getting it for ref|list too on both elements and offset

frank kayak
#

could someone please check my prealpha tool out and give me some feedback? go knowledge would be good and a gitlab account so that i can send an invite.

worthy cape
#

@frank kayak I seem to be in a project but can't see any repos.

frank kayak
#

let me check

#

oh

#

you should now have access

#

guest permissions arent enough on private repos...

#

thanks a lot for checking it out

worthy cape
#

worksies

frank kayak
#

a make should work if go is in PATH

#

the ci also worked for 3/4 pipelines

worthy cape
#

I'll check that out later, my Go installation is on dualboot for my PoE machine.

frank kayak
#

oh

#

can you see the CI assets?

worthy cape
#

Download button in CI view works, got myself some Windows EXE.

frank kayak
#

wouldnt execute if i were you πŸ™‚

#

/s

pseudo ocean
#

Idk system interoperability is a pretty shit in go right now so it's not a surprise nobody does ui and stuff

frank kayak
#

i do...

#

its for linux/windows (macos untested) with CLI, TUI, GUI (desktop, mobile, web) and stuff...

pseudo ocean
#

:O

frank kayak
#

but UI stuff isnt that far yet with go

#

i use termui for TUI - want to switch to tview, and nucular for GUI + mobile, and vecty for wasm web

#

but it needs work

pseudo ocean
#

Is the UI like opengl based or what?

frank kayak
#

ah the mobile backend does use gl i think

#

the desktop variant uses pure x11, windows what is available

worthy cape
#

Anyone know where I left the old MBP?

frank kayak
#

?

#

whats that?

worthy cape
#

I've got an 2011-era Macbook Pro here somewhere.

frank kayak
#

no clue - didnt see it

worthy cape
#

Stuck on macOS 10.13 πŸ˜„

frank kayak
#

the default build is pure go - so that cross compilation is as easy as possible - that was important for me

#

macos is untested

#

i prob have to use a build take to disable the cgo dep for macos

#

@pseudo ocean would you check the code out too?

pseudo ocean
#

It's nice to have fast iteration without much effort for sure.

#

Yeah sure

frank kayak
#

you need a gitlab account - its a private repo for now

#

when was 10.13 released?

worthy cape
#

It's 10.15 now, with Big Sur beta claiming to be 11.0

frank kayak
#

so its slightly old? 2 years?

worthy cape
#

10.13 was late 2017 it seems

frank kayak
#

thats pretty new

#

im on debian stable πŸ˜›

worthy cape
#

10.14 started requiring too fancy graphics capabilities and this one was doomed.

frank kayak
#

ah

#

noticed that with windows 10 upgrade on a laptop

#

1.3k goes to the build script

dull laurel
#

wow

frank kayak
#

i did have a pretty complicated makefile

#

wanted to get a bit nearer to the chance of being able to use it on windows, so i redid all the build logic in pure go too instead of posix

worthy cape
frank kayak
#

thats my build script

#

a lot is unfinished

#

i assume that i prob need xcode for macos - the test might be missing because i dont have a vm for testing

#

its in internal/tools/build/build.go

worthy cape
#

You've screwed up the test, if requiresXcode && hasXcode {

frank kayak
#

aah

#

i meant if the build requires xcode and xcode is installed in this case

#
if runtime.GOOS == `darwin` && exec.Command(`xcode-select`, `-p`).Run() == nil {
            hasXcode = true
        }
worthy cape
#

The test branches into log.Fatal down in buildDeps

frank kayak
#

...thats fatal

#

:/

worthy cape
#

Slowly building something now and making the machine lift from the table πŸ˜„

frank kayak
#

on the mac pro?

#

hope it works

worthy cape
#

boom

#

Linker problems, something about relocs

frank kayak
#

you prob have to edit line 241f ```go
requiresCgo = true
requiresXcode = true

worthy cape
#

I changed the test in builddeps to requiresXcode && !hasXcode, which should be the intended logic.

frank kayak
#

ok

#

ah

#

it does require cgo because of the gui :/

#

i think there arent any go gui libraries for mac without cgo

#

if youre adventureous take a look into internal/ui/ and its mess - i dont understand the flow i build up...

#

but it works somehow... sometimes...

#

its not pretty

worthy cape
#

Seems to be something about internal vs. external linking here.

frank kayak
#

what is that ?

worthy cape
frank kayak
#

there are quite often issues with macos in go - and its apples fault very often

#

the creator of the issue is the maintainer of gio the GUI backend im using

#

linkmode internal is prob the linker of the go compiler. external the one of the CC

worthy cape
#

Had to change it to external and also drop -static

frank kayak
#

ok

worthy cape
#

It builds and starts some sort of CLI tool.

frank kayak
#

wow πŸ˜„

#

first time on macos

#

does it crash on tab close?

worthy cape
#

Flickers when moving the cursor around and the profile picture for my account is very stretched.

#

Beachballs when hitting an X

frank kayak
#

yeah

#

i think its a mutex lockup

#

new bug πŸ™‚

#

cli works?

#

cli is a bit of an issue on windows

#

./poem-tmp help

worthy cape
#
  * frame #0: 0x00007fff5bf2aa16 libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00007fff5c0f3589 libsystem_pthread.dylib`_pthread_cond_wait + 732
frank kayak
#

😦

#

from the gui or cli?

worthy cape
#

The hung GUI on tab close press.

#

The CUI can do things like resolving my account name and stuff. No Sixel support in iTerm2 tho for pst

frank kayak
#

i do have some tricks for iterm2 somewhere...

#

not in that code though iirc

#

man pages are included btw

#

and shell completion (bricked atm)

worthy cape
#

Not in xterm either, bleh

frank kayak
#

xterm can sixel

worthy cape
#

Not the one on this system, your tool claims.

frank kayak
#

it requires a certain parameter

worthy cape
#

It resizes the window to cover the screen and then bails.

frank kayak
#

would be rare encountering an xterm that is compiled without sixel

#

if it starts resizing it prob thinks the terminal is sixel capable

#

crash or nothing?

worthy cape
#

Blank line and then terminal doesn't support sixel

frank kayak
#

oh

#

what does a printf "\033[0c" say? is a 4 included?

#

if yes your terminal says that it can handle sixel

worthy cape
#

64;1;2;6;9;15;18;21;22c

frank kayak
worthy cape
#

iTerm2 goes 62;4c

frank kayak
#

start your xterm with xterm -ti vt340

#

does it work in the iterm2?

worthy cape
#

No change with -ti 340 or vt340.

#

None of the terminals work.

#

xterm is from XQuartz, so heaven knows how they build theirs.

frank kayak
#

ok have to rework that

#

thanks for all the testing!

#

how do you like the tabs btw? theyre created completeley anew...

worthy cape
#

Very cramped in that glorious 1152xWhatever resolution πŸ™‚

frank kayak
#

ah :/ - only full hd here

#

on the gui version the tab buttons are drawn, in the webui the tabbutton consists of 2 buttons, 1 for close x.

#

around 110 open issues on my old repo left...

#

sleeping a bit - prob continue tommorow with this little project

#

gn πŸ™‚

compact wedge
#

What version are u guys running in your driver? since i switched to 20.9.2 my game feels like utter bullshit

worthy cape
#

Heaven knows, PoE on the dev machine is only for jiggling the alternate guild stash.

#

Probably something mid-July.

#

(this channel is also not for game troubleshooting, you may want to honk a mail to techsupport@)

simple ravine
#

zao, Parsec remoting works pretty good, I do that with my laptop

#

remoting into my dekstop

worthy cape
#

Gonna install 20.9.2 for science, just a bit of a bother as I have to remember the password for the alternate administrator account.

#

(AMD driver installer still insists that you don't have redirected folders)

wind garden
#

@compact isle noticing what I think is a weird bug. The item Putembo's Mountain doesn't appear to show up on live searches

#

I bought one to test, i set the price at 50c and it doesn't show up on my live search, but if I stop it and search manually it does show up

compact isle
wind garden
#

oh that's weird

#

I clicked the link from poe.ninja

#

actually I just typed it in I think

#

didn't think you could do that ebfore

compact isle
#

ah

#

we don't append a wildcard character for livesearch free-form text

wind garden
#

explains why I haven't gotten any live search results for the last week 😦

#

feels bad

#

I stopped it and did a manual search and saw that there were a bunch of rings less than the 70c I had it set at. Was like, what? why didn't it ding at me?

compact isle
#

I think we can remove this workaround now

clever thistle
#

(nvm i must have imagined it lol)

simple ravine
#

Did someone document the layout of GGPK somewhere, or was that for DAT files?

frank kayak
simple ravine
#

no, i mean I have a ggpk parser myself

#

but i wanted to see if there were already something documented

frank kayak
#

no clue :/

dull laurel
#

i wrote down something for the dat file, but not for ggpk

worthy cape
simple ravine
#

zao to the rescue as always, the rock of my poe dev experience

frank kayak
#

that stuff should be added to the general wiki

worthy cape
#

There's markdown in the corresponding repo that can be lifted, but the text may need some love.

velvet fog
dull laurel
#

that looks nice

simple ravine
#

Would be nice if they separated the ggpk data and the tree toc

worthy cape
#

Simply use Steam πŸ˜›

velvet fog
#

@worthy cape I found poe beta 0.95 data files in my 2012 drive

worthy cape
#

ooh

velvet fog
simple ravine
#

that's amazing πŸ™‚

dull laurel
simple ravine
#

funky

broken cloud
#

But I've checked just now and it's not there

fickle yew
#

@broken cloud added it today. But I expect it has some issues because it's so low value (1/600 chaos).. Perandus coins occasionally freak out as well and I haven't had time to find the root cause

#

Will try and take a look at it tomorrow

simple ravine
#

Turning off my lazy loading of reference loading in dat files heh... recursively looking up references in other dat files. Fun way of consuming RAM.

frank kayak
#

i can do that too - my webui locks all the ram up after only a few keystrokes in the right/wrong input field

simple ravine
#

ref|generic is that a pointer to a row, or to an offset in the data section?

#

because I am getting some strange errors

#

in this case, in "UniqueStashLayout.dat"

civic crane
#

if (idx != fefe....) rows[idx]

simple ravine
#

well, thats why my things are breaking. thanks

frank kayak
#
2020/09/27 11:51:51 159943910 243 [INFO Client 8] Web root: http://patchcdn.pathofexile.com/3.12.2.3.2/
2020/09/27 11:51:51 159943910 244 [INFO Client 8] Backup Web root: http://patchcdn.pathofexile.com/3.12.2.3.2/
2020/09/27 11:51:51 159943913 24f [INFO Client 8] Requesting root contents 1``` did anyone check out patching connections?
simple ravine
#

Only briefly a couple of years ago, Omega figured some stuff and added it to PyPoE

#

@civic crane I think added some to the web dat viewer thing?

frank kayak
#

2016/09/02 was the start of patching prot v5 and 2020/09/11 for v6

#

ill check pypoe out a bit

civic crane
#

my thing depends on paths in index.bin. all sound files are not in bundles, so to get index of them you need operate on this patching level protocol

frank kayak
rapid pagoda
#

@civic crane What are you doing with audio? πŸ™‚

civic crane
#

nothing) just saying that you cannot watch all files from my web viewer)

rapid pagoda
#

Ah, okay

simple ravine
#

@obtuse citrus
When you have ref|string and also set key and key_id what is the intention here?
such as:

  "ComponentArmour.dat": {
    "fields": {
      "BaseItemTypesKey": {
        "type": "ref|string",
        "key": "BaseItemTypes.dat",
        "key_id": "Id",
        "key_offset": 0,
        "enum": null,
        "unique": true,
        "file_path": true,
        "file_ext": null,
        "display": null,
        "display_type": "{0}",
        "description": null
      },
obtuse citrus
#

value is a reference to baseitemtypes's Id field in the spec

#

Probably not really but good enough

simple ravine
#

Ok, but I should still read the data portion of said dat file, and not the index row, right?

#
      "Mainhand_AnimationKey": {
        "type": "ref|string",
        "key": "Animation.dat",
        "key_id": "Id",
        "key_offset": 0,
        "enum": null,
        "unique": false,
        "file_path": false,
        "file_ext": null,
        "display": null,
        "display_type": "{0}",
        "description": null
      }
#

same with this in Animation.dat

obtuse citrus
#

yeah you need to read the data

simple ravine
#

looking at libggpk dat reader, they omit the key_id and key from there, and still works.

#

ah ok

#

my code was reading it as "this is a reference, and there's a key present, so should read the index, however this does not look like an index" and throws

#

makes sense, so when ref|string, just read data no matter what

obtuse citrus
#

when key_id is used it means it references the value rather then the row index in the foreign table at the specified column

simple ravine
#

ok, so the field key_id kind of either has multiple purposes, or that the purpose is slightly different to what I thought it was

#

hence my logic is flawed πŸ™‚

#

I tried really hard to interpret your library, but it's a bit difficult to follow, especially for a python-noob.

civic crane
#

first pass physical reading according to "type", second pass reading all "virtual" fields, key_id, etc....

simple ravine
#

well, if ref|string and key is present, I should read from the referenced dat file, and not its own, i presume

obtuse citrus
#

yeah

#

I think it's probably internally done difference otherwise it would a reference

#

I think they just have some sort of object cache or whatever they read that kind of data into

#

but either way for just messing with the data it does work that way

simple ravine
#

yeah, i need to rethink the separation of concerns a little here

obtuse citrus
#

a number of things just exist for the ease of working with the files. Like unique properties or so

simple ravine
#

yeah, i was going to ask you about that one

obtuse citrus
#

so a field can be indexed without being concered for multiple values

simple ravine
#

what are you using display and display_text for by the way?

obtuse citrus
#

for the UI

simple ravine
#

alright

obtuse citrus
#
            String to show instead of the field id when displaying this
        display_type
            Python formatter syntax for outputting the value```
simple ravine
#

so if there's a ref|string and key I assume, I read an uint and then take that as offset to the data portion of the referenced dat file, correct?

obtuse citrus
#

no. ref|string is still a size_t reference to the file itself

#

the value from the data (ie whatever is returned by the pointer to the data section) is what is used as reference key

simple ravine
#

what do you mean with reference key in this case?

obtuse citrus
#

ComponentArmour.dat for example

#

the ref|string will resolve to something like Metadata/Items/Armours/BodyArmours/BodyInt6

#

the same string can be found in the BaseItemTypes.dat Id field

simple ravine
#

ah, ok. so when ref|string always read its own data

obtuse citrus
#

yes

simple ravine
#

then one can use that string value to further look up what it references by leveraging key and key_id.

#

got it

#

thank you

obtuse citrus
#

yep

#

I want to note that it can sometimes be invalid

#

ComponentArmour.dat specifically contains some items that no longer exist in baseitemtypes

#

(some test items)

simple ravine
#

that's good to know!

#

so they have chosen to reference other rows in two different ways.

#

my naive assumption would be that the string id way is an older method?

obtuse citrus
#

maybe

#

I don't think it's nescessarily a reference

#

but might get serialized into some objects at runtime

simple ravine
#

makes sense

simple ravine
#

ookay, so reading the entire thing with references and all takes 7 seconds and consumes around 2 GB of RAM.

#

heh nice

rapid pagoda
#

Hrm. I'm kind of considering whether I should wait to release Heist audio transcriptions until the patch drops and people encounter the new content. There's a few spoilers in there.

simple ravine
#

Are you able to download the next patch's data?

rapid pagoda
#

No, the text/audio was all present from the start, just inaccessible in game.

worthy cape
#

I don't have anything published, but I've been quiet about the things I've found even if they're very meme:y.

simple ravine
#

That's strange. Are you saying that they will release new Heist content later in the league?

worthy cape
#

@simple ravine The plan has been all along to drip-feed the boss encounters out.

simple ravine
#

Ah

worthy cape
#

There's two encounters next patch and one upcoming after that.

rapid pagoda
#

We've known from the start that there would be some boss encounters that aren't in game yet. The challenges mention the "Vox Twins", for example

worthy cape
#

I like that there was Heist textures and models in the tech patch already πŸ™‚

simple ravine
#

Well, I would consider what kind of consequences that would have for GGG, and for the competiveness sake

worthy cape
#

It's one of the concerns I have about my model viewer and hideout thing. For example, I don't want people to find out more about hideouts than what you can see on poedb before GGG actually gets to market them.

simple ravine
#

hehe zao, so they kind of banked on it taking a while for us to figure out the new bundle stuff, or they just figured there wasn't too spoily

worthy cape
#

Especially as my rendering of anything will not be true.

rapid pagoda
#

@worthy cape Ironically, GGG spoiled a bunch of hideouts themselves with the hideout music thingy. Just the names, but the names make the nature of the hideouts pretty obvious

simple ravine
#

I mean, it could be an "intentional leak"

#

i.e.

If people find it, it can create some added hype

#

yet they're in control on how much they show. i guess it all comes down to if you feel it's intentional or not

rapid pagoda
#

Maybe. They've been in there a while though; if it's for hype it's very slow hype

obtuse citrus
#

I'm pretty s ure they just forget stuff

#

and don't intentionally add stuff

simple ravine
#

hehe yeah that's a proable scenario too

obtuse citrus
#

map stash tab file has been worked on for like 2-3 years before it saw the light of the day

simple ravine
#

I think it's give and take, right? show some good faith, get some good faith back

worthy cape
#

In recent memory, the Blight/Metamorph/Delirium tabs were spoiled before GGG got any chance to say anything about it and they'd rather have control over that conversation I reckon.

#

(the shop asset and UI sheets were in the pack)

rapid pagoda
#

(For example, the music player mentions the "All at Sea Hideout", "Boundless Skies Hideout", "Endless Sands Hideout", and "Infinite Abyss Hideout"… sure sounds to me like those are all reskins of Celestial Nebula with different backgrounds.)

worthy cape
#

@rapid pagoda It could be different tho, but unless someone has easy access to tgt/arm/etc. it's still open for imagination.

#

My first encounter with an unreleased hideout was the Corrupted one, with its three distinct rooms.

obtuse citrus
#

if I renember correctly either the hideout file or world areas had various new hideout areas for a long time too

worthy cape
#

It had been in there for heaven knows how long, seems to be a habit of taking boss arenas and hideouting them just in case.

rapid pagoda
#

Anyways. I've left out expansion boss content from audio dumps in the past, but Heist is tough because quite a bit of it is intertwined with non-spoilery content

simple ravine
#

If there were a SPOC for these kind of things, we could always ask in these kind of scenarios

worthy cape
#

@rapid pagoda I had to dig into the audio files to find quest completion dialogue that I missed out on, went to oriath.net first in hope that it was tabulated.

#

But yes, I'd be livid if I accidentally got spoilers on boss content.

#

I'm a bit vary of having my tools open-source if they can be misused in that regard.

rapid pagoda
#

I'd be embarrassed to publish the tools I'm using to build the oriath.net audio index. It's a mess

frank kayak
#

ggg is responsible what they publish - if its out its out

simple ravine
#

I am kind of embarrassed with my PoeSharp atm lol.

frank kayak
#

then i invite you to look at my code πŸ™‚ - youll feel much better after that

#

zao can you rate my code on a scale from 0 great to 10 horrible? 11?

#

ah and asking again if someone with a gitlab account could check a bit through my go code if possible? @rapid pagoda do you have perhaps a bit time?

simple ravine
#

Go is kinda greek to me.

frank kayak
#

my ui middle layer and rate limiter are a headache

#

@simple ravine after going through the go tour or on the first look?

simple ravine
#

after reading some random go snippets

frank kayak
#

ok

simple ravine
#

also, different languages/ecosystems have different 'best-practices' and paradigms they use

#

C# and Java, for an example like to talk about SOLID, DDD, and certain patterns to help with stuff

frank kayak
#

the 10 folders deep 10-line-files java code freaks me out

#

solid?

simple ravine
#

SOLID =
Single Responsibility Principle
Open/Closed Principle
Liskov Substitution Principle
Interface separation Principle
Dependency Inversion Principle

worthy cape
#

C# and Java confuse me, so much code littered around, each part doing nothing but somehow magically doing something.

simple ravine
#

It's mainly for object oriented languages

worthy cape
#

Impossible to browse on the web or without a sufficiently krangled IDE.

frank kayak
#

krangled ide...

worthy cape
#

Bonus points if you're into the XML dependency bean injection shenanigans.

simple ravine
#

I agree C# developers like to separate a bit too much per file

#

F# people are more sane that way

frank kayak
#

i hate xml with a passion

worthy cape
#

Where none of the code does anything until sufficiently caressed by runtime configuration.

simple ravine
#

Well, Java is 10x worse imo

rapid pagoda
#

There is a certain kind of developer that gets excited by attaching suffixes like "AbstractFactoryFactory" to their class names

worthy cape
#

I had to work with a a million line Java codebase at work, it was a deep mystery.

#

All the message buses and all the exotic techniques.

simple ravine
#

AbstractFactoryFacadeAdapter

#

freaking java people

frank kayak
#

does a value end up in a node or in an attr? pretty ambiguous - and as unreadable for humans as for machines

simple ravine
#

πŸ˜„

#

yes, xml should be the true root of all evil

#

pun intended.

frank kayak
#

hope it dies out... at some point

simple ravine
#

when java dies

worthy cape
#
yaml:
 - no
simple ravine
#

I guess csproj files are also XML based, but they look 100x more sane nowadays

frank kayak
#

jsons mostly fine - though we did run into the weird utf-16 encoded chars as a problem with a commercial enterprise software we were using...

simple ravine
#

yaml omg dont get me started, why u go people

#

docker/kube people

frank kayak
#

yaml is also a bit too much

rapid pagoda
#

@worthy cape Funny you should mention that. The site generator for oriath.net uses YAML for configuration

simple ravine
#

and now azure devops use it too

#

freaking me out

frank kayak
#

toml like those crusties use is prob ok - but never used it

#

ever used anchors/references in yaml?

rapid pagoda
#
# Beach Guy

Audio/Dialogue/NPC/BeachGuy/BeachGuy.ogg:
  text: "Bastards dumped near two dozen of us off their ship. You and me were all that survived the swim. If there was much difference between exile and a death sentence...\n\nOh, once I catch my breath here, we'll take a look around, see what Wraeclast has on offer. Saw some smoke from those ruins up the beach. It could be worth checking if there's--"

Audio/Dialogue/NPC/BeachGuy/BeachGuyScreams.dialogue.ogg:
  text: "[screaming]"
frank kayak
#

wow

#

thats the dead guy?

simple ravine
#

the first gem guy

frank kayak
#

that was never played or was it before 2014?

#

never heard it

rapid pagoda
#

It plays every time! But doesn't have text in NPCTextAudio, so I have to inject that during site generation

frank kayak
#

then im deaf...

rapid pagoda
simple ravine
#

wonder if it's worth interning all the strings when reading the dat files.

#

there's a drawback in consideration, which is all strings interned aren't released until process ends.

rapid pagoda
#

How many nontrivial strings are repeated? I suspect you'll end up losing more memory to large strings you can't get rid of

simple ravine
#

yeah, I am curious about that myself.

#

might have to do some analysis on that

#

I am re-doing how i store dat values, as it consumed 2GB of RAM when I read all of them

#

messy 3 year old code.