#tooldev-general

1 messages ยท Page 116 of 1

mortal bone
#

Yeah, those

#

I think the last time I touched php was when dreamweaver was the main ide lol

grave wren
#

i only know python with type hints

#

and tbh i really dislike people who script without any typehints

#

especially in groovy/kotlin

mortal bone
#

The scripting language we use is called gosu and is very similar to kotlin/typescript. I am glad it is strongly typed haha

dull laurel
grave wren
#

had the pleasure of extending a groovy script a bit ago

#

i still dont know why you'd choose groovy at all

#

Apache Groovy is a Java-syntax-compatible object-oriented programming language for the Java platform. It is both a static and dynamic language with features similar to those of Python, Ruby, and Smalltalk. It can be used as both a programming language and a scripting language ...

#

the omitting of parantheses and dots make me angry

dull laurel
#

dots = semicolon?

mortal bone
#

I don't mind gosu except it takes 7.5 minutes to do a rebuild and 20 minutes on the build server with as many optimizations as I can do

grave wren
#

no you can write take(coffee).with(sugar, milk).and(liquor) as take coffee with sugar, milk and liquor

mortal bone
#

Oh. That is gross

obtuse ermine
#

i have a question

mortal bone
#

I don't like that

grave wren
#

and the script mixed traditional typing and this new typing

#

and its so hard to figure out what the fuck is going on

mortal bone
#

Time to make a style guide lol

obtuse ermine
#

if i get the skill that gives the attack/cast speed that my minions get, if i equip a jewel that gives only ONE of my minion types a 25% atk/cast spd does the full 25% apply to me?

dull laurel
#

tabs > spaces. </style>

grave wren
#

what does the question have to do with tool development?

obtuse ermine
#

oh sorry i read the chat wrong

mortal bone
#

I don't honestly know if I use tabs or spaces because my ide does that for me

dull laurel
#

i like people to pick their width. Or actually I just want my 3 spaces per tab and don't want to bother others.

golden bane
#

Configure your formatter to 3 spaces on checkout and 4 spaces on pre-commit, easy

dull laurel
#

Oh, that is an interesting solution. Never thought about that

golden bane
#

Not the full solution, you still need to commit the formatting changes and get rid of them on pre-commit, else the git diff won't be usable

rapid pagoda
#

Or use a language like Go that has Opinions about formatting ๐Ÿ™‚

civic crane
#

is struct files_t {} files has same order as unpacked paths from path_rep_bundle ?

worthy cape
#

The file list in the index? I don't think the order correlates with anything, vaguely sorted in bundle and offset order, with duplicates after the first set of files in a bundle.

#

The only known mapping from full path to file is solely by hash.

civic crane
#

got interesting numbers: _.index.bin WASM decompression 100ms, but then reading & parsing in JS world takes 3.2s

simple ravine
#

oof

worthy cape
#

๐Ÿ˜„

simple ravine
#

0.3 seconds for me to read index bin and hash all fnv1a etc

#

most of the time is used on hashing

dull laurel
#

javascript?

simple ravine
#

nono, .net 5

dull laurel
#

in the browser?

simple ravine
#

no?

dull laurel
#

ah, I mixed you up with Snosme, he was the one talking about that

toxic root
#

Hi! I'm looking at Topologies.dat (via PyPoe), in particular the referenced DGRFile fields (e.g. Metadata/Terrain/Act1/Area1/Graphs/macro_beach4.tgr) -- these aren't stored anywhere locally, are they?

rapid pagoda
#

Those all exist within the GGPK, within a bundle nowadays

#

AFAIK, terrain generation has always been client-side, based on a seed provided by the server

#

Hence the occasional error reported "Terrain generator is out of sync"

grave wren
#

anyone currently working on that?

carmine merlin
#

Do you have a character I can import that on @grave wren ?

grave wren
carmine merlin
#

We'll probs release an update tonight but not sure if it fixes that

grave wren
#

maybe its also an issue from poe ninja, not sure which system was it

carmine merlin
#

Yeah, I need a character to import from to be able to test it

grave wren
#

if i knew nobody is onto it i'd check it out but lua really isn't my fav language so it'd take a while ๐Ÿ˜„

hazy fiber
#

theres been alot of work done since last release, just been a bit slow becouse theres lots of work to do

#

and even if we release update tonight wont support everything

grave wren
#

yes just asking if parsing imported gem names for anomalous etc is in

carmine merlin
#

Yeah it just seems to not import the gems if it sees the alt qualities atm

#

I want to get that fixed for the update though so will look into it now

grave wren
#

๐Ÿ‘

grave wren
#

think i also found the place to do it, i'll see if i can do it

simple ravine
#

Anyone has Emmitt's tree comparer link?

dull laurel
simple ravine
#

grazi

grave wren
#

well i have it working but it ain't pretty :>

carmine merlin
#

what did you change?

grave wren
#

we took it to the pob fork discord for anyone wondering, my solution was parsing the item names and matching the quality to the existing dictionary

broken cloud
#

Would anyone happen to have a list of all the dialogue lines for the new Heist NPCs? Particularly interested in the "mission complete" ones

worthy cape
#

@rapid pagoda Did you know that even some hideouts uses capabilities of terrain generation with a fixed seed? Most hideouts are one or more rooms with no actual variability, but ones like the Robber's Trench Hideout actually uses graph generation for the canyons leading into the hideout, screwing me over big-time ๐Ÿ˜„

#

@toxic root What kind of project are you hacking on? This sounds close to my interests, I've been delving around the .arm soup for ages.

toxic root
#

@worthy cape I'm working on a program to help me go faster in ssf hc. Was peering around and noticed that the topologies seem to actually line up with zone layouts - and it would be very helpful for racing.

worthy cape
#

There's a fixed number of layouts for a zone, each described by a graph.

#

You can squint at them and kind of get an idea of the major directions of the layout and what you might be able to use as a tell, but it's very unprocessed and level generation will shift the nodes around to fit rooms and features.

#

Have you watched the ancient video on PoE terrain generation?

carmine merlin
#

Pretty sure there was a talk about it from ExileCon too

worthy cape
#

The latter relates the different types of files involved (based on what Chuan said IIRC), while the former partially decodes the room file format.

#

tgr/dgr are very similar graphs, one for indoors and one for outdoors IIRC.

#

You can't (anymore) tell which layout you're in from client logs, people used that to cheat the Lab in the dark ages.

worthy cape
#

Ooh, there's a chunks-as-tasks branch of DepotDownloader now that supposedly has speedups on large files. Too bad there's no single large file anymore ๐Ÿ˜„

golden bane
#

I'm a bit late to the party, but could I get an invite to the poe-tool-dev org? I'd like to add to the wiki

#

Github account name is ppoelzl

worthy cape
#

I think I've clicked the right thing now.

golden bane
#

Got it, thanks!

vestal pond
rugged night
#

Windows defender keeps stealing it... saying its a trojan

worthy cape
#

@vestal pond You've misspelled BundleExporter btw ๐Ÿ™‚

vestal pond
#

I know, but i don't know how to change ๐Ÿ˜„

worthy cape
#

Solution and project files are textual and are safe to edit for C++, but don't know about C#.

rugged night
#

Yeah... latest release keeps being nabbed by windows though

vestal pond
#

What I mean is changing folder name on GitHub

worthy cape
#

@rugged night Odd, ran all the contents through VirusTotal and they're happy.

#

My Windows Defender is cool with it too.

rugged night
simple ravine
#

Any reason why you're still on .NET Framework @vestal pond

vestal pond
#

Any reason why you're still on .NET Framework @vestal pond
@simple ravine I am better at using it

worthy cape
#

@simple ravine I got the bright idea to make a WinForms project the other day. The editor is beyond unusable on high-DPI screens. It even tells you that it really wants you to configure VS to run in 100%-mode ๐Ÿ˜„

simple ravine
#

@worthy cape I believe .NET Core 3.1 / .NET 5 has High DPI support for WinForms

#

at least for WPF

#

@vestal pond Recommend looking into .NET Core (which is going to be .NET 5). .NET Framework is not being developed anymore.

vestal pond
#

Okay, I will try it~ ^^

rugged night
#

.net core is cross platform if you make it console or asp.net ..and has built-in json deserialization instead of needing nuget packages (eventually).

#

I've really gotta look into asp.net sometime... not used it yet

dull laurel
vestal pond
dull laurel
#

ah the omega did. interesting

vestal pond
dull laurel
#

i like the word "record" for those entries. gonna steal that ๐Ÿ˜‰

rapid pagoda
#

hmm, there are some subtleties that aren't quite captured in ENCODE_TYPES_HEX (from bundle.py above)

#

Mermaid and Selkie are different tunings of the same compressor, iirc, which is why they share a value

#

and Hydra is an adaptive compressor (hence the name!) which picks an encoding based on the data

dull laurel
#

how do you know all that?

rapid pagoda
worthy cape
#

I don't see too much point in identifying the details of the headers from the outside, unless you're writing a decompressor.

#

@rapid pagoda Also on ryg's blog, but more about rANS and the other fundamental tech.

rapid pagoda
#

re. Hydra in particular:

Hydra is a meta-compressor which selects Kraken, Mermaid, or Selkie per block. It uses the speed fit model of each compressor to do a lagrangian space-speed optimization decision about which compressor is maximizing the desired lagrange cost (size + lambda*time).
https://cbloomrants.blogspot.com/2017/02/oodle-hydra.html

dull laurel
#

crazy, they implemented kraken in hardware

worthy cape
#

It's what powers the PS5 storage tech and why all authorized developers for the platform have a license for Oodle Texture.

rapid pagoda
worthy cape
#

Yeah, that thread covers the conflict between Jeff and the author, and its resolution a page or few later.

#

The primary concern was if it the DLL was obtained illicitly.

#

They supposedly had someone pose as a prospective customer to get their hands on the SDK when it was new.

dull laurel
#

Well, that was an interesting read. Even though I'm still no smarter about the algorithm itself

rapid pagoda
#

if you aren't familiar with compression algorithms in general, I'd highly recommend reading up on (and writing a toy implementation of) LZ4 or LZ77

#

they're not hard to implement, and understanding how they work will open up a lot of doors

dull laurel
#

what kind of doors?

rapid pagoda
#

in terms of understanding other more advanced compression algorithms

#

(assuming that's something you're interested in ๐Ÿ™‚ )

dull laurel
#

I have to prioritize somehow, too many topics I'm interested in ๐Ÿ˜„

rapid pagoda
#

haha, something's not quite right with the build process for preload scripts. Login_x64.bundle.txt includes paths like C:/Users/buildslave/Documents/My Games/Path of Exile/Countdown/protected_image_heist_timer_TimerBackground.png

worthy cape
#

๐Ÿ˜„

rapid pagoda
#

in other news: I've got loading from bundles working, still got a bit of work before I can enumerate them though

dull laurel
#

in which language?

rapid pagoda
#

Go

dull laurel
#

My code works too. Can open bundles and indices. Extract files from them and even do that in parallel. But the memory usage is crazy. I must debug that

worthy cape
#

I think I capped out at around six gigabytes during dev ๐Ÿ™‚

little dune
#

it works, but I'm wondering if anyone knows where I can look up a full list of the currency API codes

#

for example an exalted orb is "exa"

rapid pagoda
#

including a whole ton of things that people never actually trade in ๐Ÿ˜›

little dune
#

thanks mate

worthy cape
#

jq '.result[] | select(.id | contains("Currency")).entries[] | .id' to query the identifiers out ๐Ÿ™‚

rapid pagoda
#

man I love jq

worthy cape
#

I've got to relearn it every time I try to use it, and still don't know how the programs work.

dull roost
#

so why do golems have a cooldown timer anyways?

worthy cape
#

They'd take over tooldev otherwise, put us out of our jobs.

dull roost
#

shit, whoops wrong channel, my bad

dull laurel
#

@worthy cape i managed to get up to 16gb when extracting the whole index. I guess I need to free up the bundles that have already been extracted

simple ravine
#

xD

worthy cape
#

@dull laurel If you're doing bulk processing you can group by bundle and file offset, that will let you decompress each bundle in order, discarding decompressed chunks not needed anymore as you sweep through it.

#

Other solutions are bounded chunk caches or threaded counters to avoid threads from having too many chunks in flight at once.

dull laurel
#

Right now I only have a GetFile() method on my index and do the glob matching in the cli. If I would move that to the lib, it should work.
Also lazy load the compressed bundle contents.
My design flaw is that the index is a persistent object and I can't free the memory because I don't know what the next operation will be. If on the other hand those would be atomic/singular operations on the index, then I could free the memory during processing.

worthy cape
#

I'd say that the index is designed to be persistently loaded and have some structures (dicts, etc.) built around it.

#

The index alone is tiny, like a hundred megs tops.

#

Sounds like there might be room for a less naive bulk extraction or at least bundle-awareness in the frontend.

dull laurel
#

and then dispose the finished bundle?

worthy cape
#

Yeah, as it's not an interactive application it knows there's no need for the data once it's finished with the bundle.

#

The library doesn't cache anything, that's up to the consuming application.

#

(well, it holds the index as long as the library structs are open)

simple ravine
#

garbage collection becomes a bit trickier when you have references to an object from multiple threads etc

#

be very meticulous when doing so, to prevent memory leaks

dull laurel
#

I guess that is for version 2 then ๐Ÿ˜„

worthy cape
#

You should've seen poe-rs, where memory use could shoot sky-high as compression probing was done by slapping a probably-uncompressed payload into Brotli and see how much it would try to allocate.

#

I could routinely hit swap on 32 GiB of RAM if access patterns were wrong.

#

Ryzen with all those hardware threads are no toy, 16-24 threads all slapping.

dull laurel
#

same happened here when i did an extract all. 32gb full, swapping, everything stopped

worthy cape
#

Again, PoE has amazing I/O to with low overhead which I'd love to know how it does things for interactive access.

#

Always surprised to see that it uses only 5-6 GiB at runtime.

mortal bone
#

You could almost process a bundle per thread to avoid having multiple threads with references. You could then hand off the span/bytes to a separate thread to handle the file extraction from the bundles

rapid pagoda
#

new pogo feature in the works: versioned data definitions

type NPCTextAudio struct {
    Id               string ``             // 0
    CharactersKey    uint64 ``             // 4
    Text             string ``             // 12
    Mono_AudioFile   string ``             // 16
    Stereo_AudioFile string `since:"2.1"`  // 20
    HasStereo        bool   `since:"2.1"`  // 24
    Flag0            bool   `since:"2.1"`  // 25
    Inflection       string `since:"3.0"`  // 26
    Unknown0         int32  `since:"3.12"` // 30
    Unknown1         int32  `since:"3.12"` // 34
    Unknown2         int32  `since:"3.12"` // 38
}
worthy cape
#

Neato. Do you handle/care about renamed ones and ones that change format?

dull laurel
#

how does that work in the parser?

rapid pagoda
#

@worthy cape There's also a until:"version" tag that could be used for situations where a format changes

#

@dull laurel Which side of the parser do you mean? Tags are a native Go feature, so ast can pick them out of the source file, and https://github.com/fatih/structtag handles parsing them into key/value pairs

dull laurel
#

ah, that's go. should have noticed, thought it's c#

wintry surge
#

got back around to working on my rust parser for dat files, the special handling is way shorter than I expected and ๐Ÿคž there's no off-by-ones
https://github.com/jlmcmchl/poe-dat-rs

worthy cape
#

There's some fun corner cases, where string offsets at the end of the payload have special (null?/empty) meaning, and of course the variety of None patterns there are (0xFEFEFEFE), or point into the 8-byte separation header.

dull laurel
#

that take_until is a cool function. I miss that in other languages.

wintry surge
#

I wish I figured out a more functional way to do the vector parsing, but I think I'm sorta stuck with a loop for the string parsing since it's kinda special cased

#

hmm, I'm definitely not checking for pointers to the end of variable data yet, I'm sure I'll find one of those when I start trying to parse every dat file

worthy cape
#

I could of course be misremembering some bug with the at-the-end ones.

rapid pagoda
#

Yeah, I don't recall seeing any of those. You might see a pointer off the end for empty arrays on the last row, I guess

simple ravine
#

I made a dat parser a couple of years ago. I cant recall too much shenanigans

#

wonder if something changed since then

wintry surge
#

if that's the case then I probably don't even read from the variable data, so I should be ok there. If I find anything like that I'll mention it

dull laurel
#

I tried to build my console app as a single file executable, but it only works correctly when I build with debug configuration. in release configuration it fails when executing the same command. ๐Ÿ˜•

civic crane
#

remember how I was wondered that
Debug.Assert doesnt work in prod (side-effects) and I have been looking for bug all day ๐Ÿ˜…

dull laurel
#

ah

#

good reminder, I have one of those lines as well

#

because the ooz guy had those in his code as well, but in c++ assert is always there

#

Debug.Assert(reader.ReadUInt32() == 0, "Path templates not starting with 0-word"); poooooof ๐Ÿ˜„

dull laurel
#

@civic crane thanks. that really helped. now it works ๐Ÿ™‚

worthy cape
#

The two primary causes of Configuration-related problems - not having DLLs/assets deployed into build dir; and asserts.

#

Also launch options ๐Ÿ˜„

dull laurel
#

now I just need to include your libooz in the exe file as well, makes the user experience easier in the end if there is just a single file

dull laurel
#

if anyone wants to build his dotnet console app in a github action, these are the magic words:
dotnet publish -c release -r win-x64 -p:PublishSingleFile=true -p:IncludeNativeLibrariesForSelfExtract=true -p:PublishReadyToRun=false -p:PublishTrimmed=true .\src\Bundles\CLI

civic crane
#

added bundle support & importing them on demand from CDN (cached until next patch version). First time page loading 5s, which is pretty good. Bundle decompression requires SIMD in WASM

  • Can be enabled in Chromium-based browsers on about://flags/#enable-webassembly-simd
  • Can be enabled in Firefox on about:config "javascript.options.wasm_simd"
    Importing local dat files still works without need for SIMD ๐Ÿ™‚
    https://snosme.github.io/poe-dat-viewer/
dull laurel
#

w00t.

#

this is impressive

#

where do you use SIMD? for the decompression?

civic crane
#

ooz uses it

dull laurel
#

and the webapp itself is written in which language? also c# with blazor or js?

civic crane
#

all typescript except wasm compiled ooz

dull laurel
#

any framework like angular or so?

civic crane
dull laurel
#

true. sorry, overlooked the link for the repo

simple ravine
#

@civic crane looks very cool

#

I'm getting the following error though

#

both on chrome and edge chromium

#

ah nvm

dull laurel
#

reading is hard today for us ๐Ÿ˜„

simple ravine
#

haha yes

#

im actually pretty impressed

lusty musk
#

@fickle yew why does poe.ninja cap the total count of items at 99?

#

I'd love to be able to do some analysis based on the number of items listed

violet path
#

poe.watch used to go super high, new management might have kept that feature

fickle yew
#

@lusty musk The count is not exposed in the ui and isn't actually a total count, so ๐Ÿ™‚

lusty musk
#

@fickle yew would it be possible to expose a total count in the API?

#

(and/or the UI)

fickle yew
#

I'll put it on my list of stuff to look at ๐Ÿ™‚

acoustic schooner
#

has there been any changes to the way path of exile handles client.txt in the last 2 years? i'm fairly sure it used to log chat and write to the file periodically but now it only seems to do it on exit with a lot of info missing.

#

okay it still logs chat my bad. Have they made changes to the frequency it writes to disk though?

worthy cape
#

Haven't heard about anything like that. Only "recent" change was that Kakao accounts (Korean) chat isn't logged.

acoustic schooner
#

it feels like the log buffer isn't getting flushed to disk.

#

Weird it's working fine now, wasn't working yesterday when I tried.

#

I'm wanting to make a simple zone timer with a bit of filtering to record average map time and last map time, and pull new data over api after zone switches for stream integration, so my viewers can see what loot I picked up from each map.

violet path
#

check out mapwatch

#

does something similar

pliant sierra
civic crane
#

F12

paper thistle
#

Hi, has anyone managed to extract obtain the BaseItemTypes table for 3.12 yet?

#

Or is that entirely blocked by the new archive format?

worthy cape
#

@paper thistle All files are completely accessible.

paper thistle
#

@worthy cape Oh, dang. Where can I find out more?

worthy cape
#

PyPoE has internal support for accessing files in bundles, my bun_extract_file tool can list all the bundled files and extract given a list.

#

PyPoE's UI isn't wired up yet, so you can't use it to display a .dat but if you've got external tooling for it you can get hold of the files.

#

poedb has the experimented base types, btw

velvet fog
dull laurel
#

ha, tried for an hour to include the libooz in the exe file and in the end the secret is, that you don't have to do anything and it happens automatically.

simple ravine
#

wat

#

when u do /p:singleexething?

dull laurel
#

yes. it includes the unmanaged dll as well. and I didn't realize and looked for hours for solutions how to do that.

gilded tree
#

poe.watch used to go super high, new management might have kept that feature
@violet path yeah, still have that with the "daily" prop. Maybe that's what you want @lusty musk

lusty musk
#

what does "daily" mean?

#

I would think cards listed per day measured over some period

#

but the numbers seem too high for that

gilded tree
#

how often you saw that card in the last 24h, like a "daily counter"

lusty musk
#

define 'saw'

gilded tree
#

How often people put that card in a public stash

lusty musk
#

but does it only count new, previously unseen occurrences?

#

or any time that item pops up in the river?

gilded tree
#

the latter - it's just a silly counter

lusty musk
#

=/

#

can't really use it for much then

#

thanks anyway

rapid pagoda
#

even as is, it's a rough measure of drop frequency x saleability maybe?

lusty musk
#

@rapid pagoda it heavily skews cards that are in high-churn tabs such as dump tabs vs those in low-churn tabs like expensive item sale tabs

rapid pagoda
#

Mm, yeah, fair point

dull laurel
#

pob can't calculate the elementalist notable for increased buff effect per golem? at least it seems like it

carmine merlin
#

@dull laurel it has been calculating that node for about 9 months on the community PoB. It assumes you have your max number of golems up at all times though.

dull laurel
dull laurel
worthy cape
#

Cool kids export the spec to JSON.

civic crane
dull laurel
#

@worthy cape you mean the xml / python descriptions?

worthy cape
#

Dumping from pypoe to JSON which you can drive whatever codegen you want with.

#

Saves a lot of duplicated work going off a single authoritative source.

simple ravine
#

I tried code-genning back in 2017-2018. It became messy

dull laurel
#

ah you mean the file contents not the spec itself

worthy cape
#

No.

dull laurel
#

the xml spec is pretty readable though

worthy cape
#

I don't have to do shit when upstream changes the files, regen the JSON spec from pypoe, rerun whatever codegen/loader I have and I'm good.

dull laurel
#

with all those nulls in that file you can save a lot lines by using the default values

worthy cape
#

Sure. You can do a lot of things.

#

All I'm saying is that there's an existing good human-editable source from which you can transmogrify and represent all you want.

#

I wouldn't know where I would find a lightweight and usable XML reader these days, the format is quite dead outside of particular languages and domains.

#

Had to go through quite a few hoops to emit any XML in my last work project.

dull laurel
#

i was just thinking how lightweight json is

earnest hull
#

ugh when i press play button the game crashes on poe client help!!!!

worthy cape
#

@earnest hull I recommend you email techsupport or skim the forums for assistance with the game client.

earnest hull
simple ravine
#

@earnest hull what has this to do with tool-development?

earnest hull
#

idk xd sorry

#

ANY SOLUTION THO ?

simple ravine
#

zao already gave you the options, now stop cluttering this space.

worthy cape
#

Validate your game files, ensure your drivers are up to date, please read the topic, hug techsupport. They're there to help with things.

#

TDRs are super fun.

simple ravine
#

TDRs?

worthy cape
#

Timeout Detection & Recovery.

earnest hull
#

yo chillax dude i said sorry

worthy cape
#

When something has wedged the GPU for 10 seconds (by default) Windows uncermoniously restarts the GPU driver.

#

To an application it looks like someone removed and reinserted the GPU.

simple ravine
#

ah yeah

worthy cape
#

Quite the improvement over the graphics-related BSODs of before.

simple ravine
#

I get that once in a blue moon when rendering something in Houdini with Octane (GPU based rendering) and do something somewhat GPU-interesting on the side

#

all the windows styling stops, all gpu-accelerated apps turn black etc

#

ah yes, agree

worthy cape
#

If you do heavy graphics development, you can alter (and disable?) the limit in the registry to be able to run longer kernels and stuff.

simple ravine
#

overall system stability the past couple of years has been nicely improved

#

yeah, I am cautious, because I don't want to potentially hurt the hardware

worthy cape
#

For a device designed for frames lasting a dozen milliseconds, not making progress in 10s is an eternity ^_^

#

I've definitely written compute shaders and done debugging that has pushed me over the edge.

simple ravine
#

hah interesting

#

wonder how they got that to show up

worthy cape
#

PCIe is hotpluggable with the right firmware and device support.

simple ravine
#

you're saying i wont blow up my peripherals by yanking out my graphics card during operations?

#

nifty.

worthy cape
#

Might require motherboard awareness too ๐Ÿ™‚

simple ravine
#

i guess that makes PCIe drives hot-swappable

#

on another note, testing Rider without huge issues, out of curiosity

#

I like the integrated IL viewer and Structure pane

worthy cape
#

Electrically, they're designed with one pin shorter that if wired correctly can be used to signal that the card is sufficiently into the socket to start feeding it, or something.

simple ravine
#

also, this is pretty nifty that they've finally got range operators in c#

worthy cape
#

Ah, IDEA for C#?

simple ravine
#

kinda yeah

#

works with c++ too

worthy cape
#

I haven't found much use for JetBrains software on Windows as they're quite bad at supporting non-GNU debuggers, at least for Rust.

simple ravine
#

I still think I prefer Visual Studio

worthy cape
#

I've used Clion a fair bit, but couldn't make it my daily driver for the debugging reasons.

simple ravine
#

but they have some alluring nifty features

worthy cape
#

Also, the keyboard bindings are all wrong, my debugging muscle memory is hosed ^_^

simple ravine
#

yes!

worthy cape
#

Feel like techno grandpa here, having to hover the stepping icons and second-guessing whether it was F7 or F8 to step into/over.

simple ravine
#

hehe. how old are u?

worthy cape
#

Have to count backwards... 36 now.

simple ravine
#

ah, im an 85er

worthy cape
#

The biggest improvement I've made to my environment recently was to switch fonts to Iosevka, the narrowness of it is very nice for side-by-side IDE and terminals.

simple ravine
#

the hype nowadays are those coding fonts with ligatures. my brain cant deal with that

worthy cape
#

Especially for C++ template errors, seeing more columns is good ๐Ÿ˜„

simple ravine
#

hehe

#

a bit too narrow for me, but i can see the appeal

worthy cape
#

Took a few days to get used to it, now it feels normal.

simple ravine
#

the JetBrains mono looks fairly nice actually

mortal bone
#

are you using that as a system-wide font?

simple ravine
#

but im not picky

grave wren
#

yeah also very fond of the new default font for intellij

mortal bone
#

Consolas?

#

Or have they switched?

grave wren
simple ravine
#

JetBrains Mono it seems

worthy cape
#

I'm using Iosevka Term as my console font and Iosevka for IDEs.

mortal bone
#

ohhh

grave wren
#

they swapped in 2020 versions

worthy cape
#

There's a style set for Iosevka where it pretends to be more like JetBrains Mono too ๐Ÿ˜„

mortal bone
#

I can't do ligatures

grave wren
#

unsure if its the same in the console and supports zshell

worthy cape
#

Completely optional, I kind of like them as long as they don't go super bananas.

mortal bone
#

it breaks my brain

worthy cape
#

If you let the Haskell people too close, you get mangling of pretty much any combination of swear words.

grave wren
#

that is kinda ew

mortal bone
#

wtf

simple ravine
#

yeah wtf

mortal bone
#

is ## a ligature? why?

simple ravine
worthy cape
#

I'm a fan of subtle ones that polish operators like && and friends, but >= is stretching it.

#

I've used All The Fonts.

#

"editor.fontFamily": "'Iosevka', 'Rec Mono SemiCasual', 'Cascadia Code', 'Fantasque Sans Mono', 'Noto Mono', 'Fira Code'",

#

(this list has been recently culled)

simple ravine
#

ttf or otf, what's better?

worthy cape
#

Recursive Mono was neat, but the designers did a bit too much advanced type wankery so it was hard to get it working in IDEs which defeated the whole point.

#

Either is fine, use whatever your platform understands.

simple ravine
#

They apparently recommend TTF for quality

mortal bone
#

mono is a lot wider than consolas haha I don't know if I can get used to this

dusky sail
#

I bought supporter pack yesterday, need to buy most expensive one to fix THIS?

#

or can they just fire thy guy who made this website?

grave wren
dusky sail
#

its a tool used to trade in game

broken cloud
#

Heh, that's one way to look at it... but this channel is for assistance in making tools, not using them

#

Sorry about your problem, but this really isn't the place for it

dull laurel
#

i love cascadia code. I think there is even a version that includes powerline symbols to pimp your shell/terminal

simple ravine
#

Cascadia PL yeah

dull laurel
simple ravine
#

Hanselman had some hack before it was a thing

#

yeah, just not a fan of powershell

#

wonder if powershell core is better

dull laurel
#

depends on what "better" means for you. they upgrade the language a little and add some things that modern languages have, like shortcuts for (null) coalescing.
other than that is up to your use cases I guess. I just use it for scripting and to have a nice terminal prompt and some azure interactions.

simple ravine
#

Just installed v7 preview

#

Gotta love Windows Terminal magically understands that I have it installed and adds it as a dropdown.

dull laurel
#

reminds me that i wanted to clean/setup my prompt and profile

simple ravine
#

nice

dull laurel
#

indeed. just a litte lack of constrast with the blue on dark

simple ravine
#

yeah, trying to figure it out

#

there

#

good waste of 50 minutes lol

#

now let's figure out how to get rid of that welcome message

worthy cape
#

I am happy with my environment currently and I'd appreciate it if I wasn't tempted to modify it ๐Ÿ˜„

dull laurel
#

@simple ravine --noLogo

simple ravine
#

sweet, it works

rapid pagoda
#

We implemented a new system for handling conversations for Heist. This system lets us rank dialogue by priority, with higher priority dialogue cutting off lower priority dialogue and preventing any new lower priority dialogue from playing.
I bet this is what the new, currently undocumented fields in NPCTextAudio are for ๐Ÿ™‚

broken cloud
#

Noticed that chaosEquivalent for currency is just the average of the buying and selling prices... would there be any issues with making it a weighted average instead?

#

(pay.count * 1/pay.value + receive.count * receive.value) / (pay.count + receive.count)

fickle yew
#

Yeah that makes sense. I'll take a look.

#

He should definitely sell those jewellers orbs though ๐Ÿ’ต

fickle yew
#

@broken cloud That change is going live now ๐Ÿ™‚

broken cloud
#

Awesome, thanks exaltexaltexalt

timber path
#

What's the best solution for signing open-source software releases and avoid annoying smart screen filters and anti-viruses from marking your app as un-safe?

simple ravine
#

I haven't thought about signing things for many years, but what I would do today is setting that up with a CI build, so you don't taint your actual code repo

mortal bone
#

poeskiltree isn't signed, and it is an annoying process to get things officially signed

#

at least it was annoying the last time I looked into it

simple ravine
#

what do you mean with officially?

mortal bone
#

not self-signed basically

simple ravine
#

I guess you have to buy a certificate from an authority

mortal bone
#

Yeah

simple ravine
#

Wonder if you can use LetsEncrypt for that.

#

or did you have to buy a special kind of certificate?

worthy cape
#

Signing barely helps there.

#

For a while (still maybe?) a Polish company (CERTUM?) provided free code signing certificates for verified open-source developers.

#

Seems to be paid nowadays, bleh.

civic crane
#

poe-lurker uses Signpath

worthy cape
#

@simple ravine Code signing is a completely different Purpose/Key Usage.

mortal bone
#

that last I recall, you need a cert from a trusted authority, sign your app, and even then you have to deal with smart screen

#

you then have to upload your signed app to the Microsoft service, and then it still isn't a guarantee that it won't be smart screened

worthy cape
#

Certum advertises their EV certificates as "deleting the SmartScreen message" ๐Ÿ˜„

mortal bone
#

this was probably 4 years ago, so I could be wrong on some of the details

#

ev code signing was like $600 a year lol

#

it wasn't worth the effort to have people click more information -> run anyway lol

golden bane
#

Microsoft's code signing is an extortion scheme

worthy cape
#

My solution to it is fuck-it-all.

golden bane
#

@timber path You could still sign your app with GPG to verify correctness of download/authorship. Doesn't do anything about SmartScreen though :/

worthy cape
#

I've got a buddy that does executable packers. You think you have bad days? ๐Ÿ˜„

golden bane
#

Writing code in NSIS for PoB's installer was certainly interesting

simple ravine
#

I reinstalled windows between times of playing, and had to install PoB just before league start, and I dont think I got a SmartScreen thing

golden bane
#

@simple ravine That's because I've tweaked the installer to be user-mode only after there were some complaints about installing in restricted environments. Don't need elevated rights to install anymore

frank kayak
#

oh NSIS... nice... I used it 15 years ago to package something Gameboy emulator related

#

does anyone here have experience in app development (android, ios) in go?

#

@golden bane does the pob setup dump the program into %APPDATA% like Chrome? - not yet sure how i will handle a setup with my tool on Windows

dull laurel
#

From poe lurker :-D

The goal is to have a slick and performant overlay (No Electron allowed).

frank kayak
#

i cant stand electron apps...

golden bane
#

@frank kayak %APPDATA% is the default install location, but you can choose any other install location that your current user has write access to. If you want to install it to %ProgramFiles(x86)% instead, you would have to start it with elevated rights beforehand. There are some fancy installers that let you elevate rights mid-installation, but then you'd have to restart the installer and also keep its state somewhere to not lose progress. Didn't implement that bc it wasn't worth the effort

frank kayak
#

i can make my programs laggy and consume all memory even without embedding a browser...

#

@golden bane ah thanks for answering, i dont have a windows vm for testing around currently and pob is just executed with wine without installation...

timber path
#

I am aware of code sign certs and them being quite expensive. Not really worth it for an open source project that isn't 100% mine anyway... It seems like there's no good and free option for this.

frank kayak
#

I also saw that Signpath option for CI in open source projects that is being used by poe-lurker - not sure if ive seen it there

worthy cape
#

@fickle yew The looking glass icon for alt-quality skill gems on ninja takes me to the /trade frontpage, while it works for regular skill gems.

fickle yew
#

@worthy cape ๐Ÿ‘ I'll take a look

gilded tree
#

@worthy cape ๐Ÿ‘ I'll take a look
@fickle yew you just have to use =term for them instead of type. That was the fix for me. (that's at least what the normal trade page is doing.)

{"query":{"status":{"option":"online"},"type":"Storm Brand","stats":[{"type":"and","filters":[],"disabled":false}]},"sort":{"price":"asc"}}

{"query":{"status":{"option":"online"},"term":"Anomalous Storm Brand","stats":[{"type":"and","filters":[],"disabled":false}]},"sort":{"price":"asc"}}

or you could use {"gem_alternate_quality":{"option":"x"}} :D

{"query":{"status":{"option":"online"},"type":"Storm Brand","stats":[{"type":"and","filters":[],"disabled":false}],"filters":{"misc_filters":{"filters":{"gem_alternate_quality":{"option":"1"}},"disabled":false}}},"sort":{"price":"asc"}}```

There is a totally awesome looking page for that if people are too silly checking the network tab.
https://poe-query.now.sh/ -> You can just enter the query param like "v0ZjKRXuE" and there you can see it's using "term".
gilded tree
#

was it wrong? @civic crane

dull laurel
#

trade secrets! ๐Ÿ™‚ ๐Ÿ˜‰

gilded tree
#

oof

compact isle
#

term is raw text so depends on what site subdomain you use

gilded tree
#

that's probably also the "wanted" solution. I just added all possibilities I was aware of, maybe it's easier to do a quick hack than rewriting something bigger. But totally agree, I didn't think about the languages.

golden bane
worthy cape
#

Oh gods not again.

#

It's also known as "why the hell are there illiterate people opening issues and PRs on my Open Source projects?"

simple ravine
#

like.. yeah, no

dull laurel
#

that sounds really negative

worthy cape
#

It's a neat initiative but the quality of the PRs coming into more popular single-maintainer repositories is an extreme burden.

dull laurel
#

so it generates more work than it benefits them?

simple ravine
#

they've been struggling to moderate which PRs are meaningful enough to count

worthy cape
#

It kind of encourages drive-by PRs that twiddle some miniscule part of the project like formatting or changes things for the sake of change, or even worse, are utterly invalid and just there for someone to grind points.

#

The added load for a maintainer to sort through the influx of junk is ugh.

#

Ahh yeah. #hacktoberfest2020 bringing the quality PRs again (not my repo)

Note: I'm not saying docs PRs aren't quality, just that being innundated with low quality PRs like happens at the start of Hacktoberfest must be a nightmare for people with more popular packages.

golden bane
#

Okay that's extreme for what looks like a new project

worthy cape
#

Please label the invalid pull requests as invalid by giving them an "invalid" label. This will ensure that pull request doesn't count toward the user winning. Simply closing the PR will leave it as a valid PR that counts toward the user winning.

#

Yay ๐Ÿ˜„

simple ravine
#

As long as the maintainer is aware of this.

dull laurel
#

"improved docs" ... mh how much effort is that?

simple ravine
#

"Hack"toberfest

#

"Doc"toberfest rather ๐Ÿ˜„

worthy cape
#

pets his bulk of repositories hosted on GitLab.

#

Serenity by obscurity.

golden bane
#

I think as long as the PRs don't include duplicate work, it's fine to fix some typos (1 such PR per user per repo)

gilded tree
#

Yay ๐Ÿ˜„
@worthy cape the thing is, most things are still valid. Like changing a typo is a small thing, but still a valid PR and I do really appreciate things like that.

#

I think as long as the PRs don't include duplicate work, it's fine to fix some typos (1 such PR per user per repo)
@golden bane exactly

simple ravine
#

Not really in the original spirit of the idea though, I'd say

gilded tree
#

I mean they are helping with open source stuff

simple ravine
#

It's not really "Changing the world through open source" as they market it as

dull laurel
#

maybe they should exclude doc PRs or at least the ones that don't add value (like fixing typos)

simple ravine
#

Some are of course ambitious and go along with the original spirit of it, but yeah, I suspect vast majority won't be ambitious at all

worthy cape
#

Game the system for a T-shirt by bothering the world \o/

gilded tree
#

maybe they should exclude doc PRs or at least the ones that don't add value (like fixing typos)
@dull laurel fixing a typo is still adding value. Better docs are probably better for every user

simple ravine
#

Sure, but miniscule value, though, in comparison to the ambitions laid out in their "founding idea"

#

Don't get me wrong, people helping with docs is good

#

But it should be above a certain bar imo

golden bane
#

Ofc it's not exactly as advertised @simple ravine

#

My initial question was about who of you plan to participate, not how you feel about what other people do on other people's projects

rapid pagoda
golden bane
#

Okay, those are quite weird/bad ones :/ Imagine being so desperate for a shirt that doesn't really mean anything to you ๐Ÿค”

broken cloud
#

Do pull requests made on my own repositories count?

Yes, but we strongly encourage you to make quality contributions to other repositories.

Free shirt!

#

Hmm, reading into this a bit more, it does seem potentially very spammy

grave wren
#

I don't think that the ide behind hacktoberfest is to be a positive thing for the maintainers but to get some users to participate at all. Can't imagine people doing it just for a free shirt. The sloth sticker last year was top notch tho ๐Ÿฆฅ

civic crane
#

was it wrong? @civic crane
@gilded tree Dont want to push unnecessary load on trade DB. Do want the queries remain valid in case of some name collision in future.

fickle yew
#

@worthy cape There's now support for all your divergent skill gem search needs.

grave wren
#

What about my phantasmal search needs (sic)

fickle yew
#

That sounds pretty anomalous.

simple ravine
#

punny dad jokes

#

๐Ÿ˜„

dull laurel
#

Does anyone know a similar tool to this? https://github.com/luismartingarcia/protocol
I don't know how to properly search for this. Tried "ascii header generator" but gave me just this one.
I was trying to make a nice documentation for some data formats, that is not pseudo code / C.

simple ravine
#

ascii banner perhaps

#

kinda?

worthy cape
#

Last time I tried documenting file formats I used some LaTeX package, but it was still weird to use and doesn't result in text like you want.

simple ravine
#

ooh, i am dumb

#

RFC-style data structure explanations

dull laurel
simple ravine
#

lol

dull laurel
#

ouch

simple ravine
#

i mean wtf

dull laurel
#

i mean one PR for all the existing typos would be okay. but 1 PR per letter is ridiculous

simple ravine
#

they want t-shirts

worthy cape
#

@simple ravine I love how the "contributor" failed to see the misspelled buid.cmd earlier in the line, instead opting to bungle the grammar.

#

T-shirts and/or a CV line item.

#

It's a bit unfortunate as it also sows a bit of disdain for programmers from particular parts of the world.

dull laurel
#

India?

worthy cape
#

Among others, guessing wildly based on the account names seen.

grave wren
#

I earnt my first pr on POB yesterday

simple ravine
#

Nice!

grave wren
#

(after breaking something there earlier, everything according to plan)

simple ravine
#

oh the conspiracies

dull laurel
#

pob is written in c# and lua. right?

grave wren
#

I wonder why people bother with those bogus prs instead of just making their own repo

#

Only lua

#

It's the horror

#

Ui might be c++/c#

dull laurel
#

i always wanted to have a web version of PoB that uses PoBs calculation engine plus the optimization engine from PoESkillTree

simple ravine
#

xyz made one

#

stopped updating it unfortunately

dull laurel
#

because what PoB currently lacks is the option to optimize a skill tree based on certain parameters.

grave wren
#

For me it's mostly UI scaling that'd be nice

#

But tbh I'd love for it to have tests so you can't break random stuff easily

dull laurel
#

lua unit tests? go for it! ๐Ÿ˜‰ I'd rather rewrite the whole thing in typescript then touch lua ๐Ÿ˜„

grave wren
#

I don't think rewriting is really feasible

#

You'd have to compete in so many areas

dull laurel
#

okay, better start small. first my poetool ๐Ÿ™‚ because everyone likes their own implementation of that

#

que?

worthy cape
#

Rewrite It In Rust

dull laurel
#

Ah

#

It is either rust or go to learn in the future. go has obviously won the hipster award thanks to google and docker.

grave wren
#

i was very confused by this sentence rn

mortal bone
#

So, PoESkillTree does have a game engine

#

@woeful sphinx spent a lot of time on it haha

golden bane
#

Without proper automated testing up front, you would end up writing something similar but not quite like PoB. Blind rewrites lead to scope creep, introducing a different set of bugs, and possibly even some old ones when you rewrite rather than reimplement

simple ravine
#

It's my ambition to still go through the PoeSkillTree.Engine

woeful sphinx
#

What Emmitt linked has a lot of automated testing going on. But I kinda lost motivation atm because it'd be very time consuming to catch up to PoBCommunity as a single person.

#

Motivation was much higher at PoB's low point before for the community fork really started.

simple ravine
#

It was just a bit of a threshold to get over, as there seems to be a lot of abstractions etc

woeful sphinx
#

It probably got a lot more complex than initially intended ^^

#

But with the league updates it seemed much easier to get new stuff in than with PoB

simple ravine
#

It is still a little coupled to the PoeSkillTree use-case I can guess by looking at ComputationInitializer.cs

#

With observables and timeout etc

woeful sphinx
#

that's not the engine, that's PoESkillTree's connection to it

#

But yes, it was written primarily to be used with PoESkillTree so the API probably naturally developed to fit that use-case

simple ravine
#

There are some fundamental differences to how I would architect the solution to what you've currently done, and I also know how much time and effort you've poured into this so it's difficult to balance the feedback if you know what I mean

woeful sphinx
#

Oh, if I'd start from scratch now, it'd probably also look much different (at least on a structural level)

dull laurel
#

how does one write a calculation engine 101? ๐Ÿ™‚

simple ravine
#

Because I really appreciate what you've done with it, and appreciate how difficult it is to develop something on your own

#

totkeks, I think it's 'keep it simple' paired with 'lego'

woeful sphinx
#

Let's say I think I've learned a lot since I started the engine ๐Ÿ™‚

simple ravine
#

but yeah, there's no 1 single good answer, and the same goes for the old saying 'ask 10 developers to develop something, and you get 10 different solutions'

dull laurel
#

was more a general question how such things work.
like i would imagine you have stats and then you have things that affect those stats.

woeful sphinx
#

But still, I'd appreciate feedback, pretty much all my dev stuff is self-taught. Was rarely in a situation where I got feedback from more experienced people.

simple ravine
#

Let's just say I've been very blunt in the past, and it has hurt some people's feelings, and burnt some relationships in the process, so I am very cautious on wording nowadays ๐Ÿ™‚

mortal bone
#

Honestly, you could treat the inputs like a program and write a solid parser and ast then you would write you calculations on top of that

dull laurel
#

ah, there are 2 other 101s I can suggest. giving constructive feedback and non-violent communication. helped me a lot in the past.

woeful sphinx
#

@dull laurel If you want a general solution, it'll can easily get very complex. This is from a discussion before I started working on it.

simple ravine
#

Sometimes you also have to just also appreciate what is already there, and not everything has to be the exact way I self would do it, and work with what is there

#

Yeah, calculations of stats is probably the first thing I would try to tackle in a minimal happy-path way, and see how far I would come

#

Like, how many usecases are missing with a simple happy-path, and what are the ways to solve those "edge"-cases

#

A couple of different things I would start with as test-cases would be

  1. Life, should be one of the most straight forward things to get right.

  2. A resist, where it inherently has a maximum of 75% actual, but you still need to contain the total (uncapped vs capped). You have calculations that would need either of them.

  3. Critical chance (without mind-wrangling about effective crit chance, which I would consider an auxiliary stat)

dull laurel
#

oh right, TDD could be a good approach for this. and then you also have unit tests in place for other developers

simple ravine
#

And yeah, I think such engine, if I wrote it, receive several re-architectures/refactors over the time

#

I think TDD is outright necessary, yeah

grave wren
#

unit tests in place for other developers
a unicorn!

simple ravine
#

For me, in this particular case, it's more about being able to iterate quickly over something with live unit testing

mortal bone
#

This is also a solid case for BDD

grave wren
#

tbh i find editing pob very stressful because the only tests you can do is manually editing stuff and check if it breaks

dull laurel
#

@mortal bone can you give an example? (the B is for behavior, right?)

mortal bone
#

Yeah

#
When I "increase" the <stat> by 10%
Then The <stat> should be 110```
dull laurel
#

Ah Gherkin

mortal bone
#

it isn't perfect, but something to that effect. You can describe the behavior you are looking for and implement to that

digital parrot
#

someone knows Poe TradeMacro (autohotkey based) and can give me a hint why it does not show up in PoE fullscreen? in windows mode it does show up.

dull laurel
#

@digital parrot because the overlay can't appear in fullscreen mode technically

mortal bone
digital parrot
#

oh boi. thanks.

mortal bone
#

you "can't" draw on top of a full screen program.

grave wren
#

wheres the difference to tdd emmitt, seems like just a way to express tests

worthy cape
#

Today's fun discovery - if you read() Python3's urllib.request for a file 2049 megabytes or larger, it blows up in the TLS stack.

simple ravine
#

To my understanding BDD --> TDD --> Actual code

worthy cape
#

Streaming it out with say shutil.copyfileobj works, of course.

simple ravine
#

first you define the behavior, which kind of turns into tests that you satisfy with code.

grave wren
#

hm i never recognized the first step as its own thing, that was just a thing you do when testing imo

simple ravine
#

I should probably not indulge in trying to explain BDD, as I am probably half-wrong anyway.

mortal bone
#

The point of BDD is to describe the behavior of the system without defining the functionality of that system. TDD typically describes the implementation of the system

digital parrot
#

b is behaviour. t is more internally/intrusive. BDD is from a users point of view where the whole system is a black box. TDD from a internal integrity point of view. They don t really depend on one another IMHO.

simple ravine
#

Right.

#

Because I focus on larger things, we indulge in domain story telling and/or event storming to define requirements/expectations.

mortal bone
#

We are using BDD and TDD in our current upgrade project. Also, BDD is nice because your requirements are in your feature files.

simple ravine
#

I suppose they are not mutually exclusive

grave wren
#

makes more sense, BDD language should basically withstand technical changes that might break lower level tests then?

mortal bone
#

Yeah, the idea is that you don't have to change your requirements/tests when you are making system changes.

#

You still need to update the "glue code" behind the features, but the overall test (behavior) is unmodified

simple ravine
mortal bone
#

specflow is basically a port of cucumber into .net

#

we use cucumber

simple ravine
#

I don't know what cucumber is

dull laurel
#

JS bdd framework?

simple ravine
#

Is it something for the other side?

mortal bone
#

it is what reads the gherkin syntax and attaches it to the "glue code"

simple ravine
#

โ˜• side of things

grave wren
#

time to join any java discord just to have appropriate emojis

dull laurel
#

you mean the Frontend?

#

Gurke

simple ravine
#

Gurka in swedish ๐Ÿ™‚

dull laurel
#

same with those coffee based framework names like moccha or city based frameworks like istanbul

#

I always wonder how people come up with those names

simple ravine
#

Instead of being clever, I like to name things descriptive to what they do, most of the time

grave wren
#

try apollo something

simple ravine
#

And all the Apache foundation software heh

dull laurel
#

Apollo the GraphQL Framework

grave wren
#

yep not only that, lots of apollos around

simple ravine
#

I guess branding something with a funky name is fine, but for internal components or libraries etc, there's literally no reason to name it "something funky just because"

#

it just leads to massive confusion

dull laurel
#

i love codenames for each project.

simple ravine
#

Which tool was for parsing the logs again, Homer or Bart?

worthy cape
#

Apache - where projects come to stagnate.

simple ravine
#

No it was Lisa.

grave wren
#

El Barto

dull laurel
#

like kubernetes. there is some helm and then something with T on the other end. and I don't know what else

worthy cape
#

@dull laurel Try administering an OpenStack cloud.

#

Infinite number of components.

dull laurel
#

I try not to, but we got this infrastructure team and they love to push force their services on us instead of letting us use azure PaaS

simple ravine
#

Hehe, nice zao

grave wren
#

Terraform?

simple ravine
#

that reminds me, i never followed up with Hashicorp, poor guys

#

I mean, Consul and Nomad aren't really very telling names either

#

but yeah, server names in old times (pets vs cattle), when you named the servers

#

and instead of naming them with something descriptive, u named them with funky names, like "thor" "freja" etc

#

then there was thor-01, thor-02, etc etc

grave wren
#

our uni admin had a knack for some chocolate so that was the server name for one of them

worthy cape
#

Our infra machines are all name series and they compete in having the most obscure names for machines.

dull laurel
#

how else would you name them? database-01, database-02, appserver-01?

grave wren
#

highlander-01

worthy cape
#

Like the ones that are all shades of grey, or the ones that are named after condoms, or the ones that are assorted pancake-type food.

#

"so is the new mail server now waffle, crepes, or blini?"

#

I used to get a majority of my cronmail dropped on the floor by GMail.

#

Turns out that naming the install servers "levitra" and "cialis" wasn't the smartest move ๐Ÿ˜„

dull laurel
#

had to google that one

worthy cape
#

My fellow coadmins have a crude sense of humor at times.

frank kayak
#

I know of a company which named their servers after energy bars

mortal bone
#

at my last company, the mailing server was named frodo lol

frank kayak
#

youre the author of the poeskilltree?

mortal bone
#

I am one of them, yea

frank kayak
#

i did like it a lot - but was not able to make it run on linux

#

can it be used with dotnet core or mono?

mortal bone
#

Yeah, wpf has limited support. I think at some point someone was able to

frank kayak
#

prob with wine then but WPF did cause some headaches for me

mortal bone
#

It is currently .net core 3.1

#

but wpf on .net core isn't cross platform, which is annoying

frank kayak
#

you just destroyed the glimmer of hope i got...

#

i am working on a poe related tool for 2 years now every now and then

#

ease of building, deployability & cross-platform support was important for me

#

i did choose go for it

#

i hope that i have it soonish in a state where i can publish it

#

it runs on linux,windows,wasm,android (prob macos too) with GUI (regular, web, mobile), TUI, CLI interfaces

#

i did implement some api and scraping stuff but the ui is still missing functionality except for the cli...

#

by default i end up with one staticaly linked binary without dependencies

#

my PST drawing still did some path drawing errors i couldnt find the cause of but its too long...

worthy cape
#

Ooh, 010 Editor v11 is out.

#

Looks nice.

dull laurel
#

@frank kayak go supports platform independent GUI? or they just have something connected to each platforms native library?

frank kayak
#

there are 3-5 pure go GUI libraries without cgo (c bindings) around, a bit difficult to find. I ended up with https://github.com/aarzilli/nucular

lean spindle
#

Ooh, it does look nice. Small changes, but I like.

frank kayak
#

I did make it display correctly yesterday on Android. did take a bit...

lean spindle
#

Hi all, I'm looking to publicly release my atlas website, https://www.poeatlas.net soon, but I'd like to get some initial feedback first, if possible. If any of you folks could take some time to look at it and let me know of any suggestions you have, I'd greatly appreciate it.
Atm, the website just allows you to view PoE's Atlas of Worlds and search for individual maps, or map tiers, and get some information on those nodes. Suggestions for both improving this existing functionality & appearance, or even for possible new features are more than welcome!

civic crane
#

Lorem Ipsum ๐Ÿ™‚

lean spindle
#

TRUE

#

LOL

#

ty for remind

#

Got so used to it that I forgot haha

worthy cape
#

@lean spindle Scrolling jumps in miniscule steps here on Firefox.

frank kayak
#

I can't find Gorge ๐Ÿ˜ฆ

lean spindle
#

Gorge is glacier now I think

frank kayak
#

same issue on my Firefox ESR 68

#

Gorge is Gorge

lean spindle
#

Ah, darn it firefox

worthy cape
#

Edge Chromium is "fine".

frank kayak
#

who is using Edge?...

lean spindle
#

:P

worthy cape
#

@frank kayak People who want to see how things fare on Chromium without suffering the UI design of freestanding Chromium or actual Google Chrome.

lean spindle
#

Unless you were meming in which case, Whoops, I'm slow :P

worthy cape
#

Also, I have to watch twitch streams in Edge as my Firefox profile is krangled to the extent that it cannot connect to Twitch Chat ๐Ÿ˜„

lean spindle
#

Thats impressive, honestly

#

welp, now to figure out why firefox hates me

#

ty for the heads up peeps

frank kayak
#

i use a dozen different firefox profiles

#

I start it with firefox -new-instance -P

#

i think theres also no-remote

lean spindle
#

oh, this is interesting

frank kayak
#

the parameter meaning did change over time

lean spindle
#

for me, on firefox, its smooth as butter, but zooming is INCREDIBLY slow

#

O.o

#

Its based on scroll increment

#

anyone know why that would be the case?

frank kayak
#

no experience in building a browser... or an OS

lean spindle
#

Ah, its almost definitely smooth scrolling

frank kayak
#

cant be

#

i always have that disabled

lean spindle
#

Yep, its not, just tested

#

O.o

simple ravine
#

I use Edge Chromium

#

I like it slightly better than Chrome

lean spindle
#

I love web development

#

./s

frank kayak
#

heres my PST drawing in the terminal (it seems i have destroyed the GUI version again...)

dull laurel
#

that is actually funny

frank kayak
#

how?

dull laurel
#

seeing the tree drawn in a terminal

frank kayak
#

ah

#

thats sixel

#

mintty can do that too on windows

#

and i think that crappy conhost does get sixel capabilities too

#

Sixel, short for "six pixels", is a bitmap graphics format supported by terminals and printers from DEC. It consists of a pattern six pixels high and one wide, resulting in 64 possible patterns. Each possible pattern is assigned an ASCII character, making the sixels easy to tr...

#

my circles on the tree are still wrong :/

#

you can see it in the shadow area

mortal bone
#

Yeah

frank kayak
#

i did that late night early morning through iteration without thought...

#

dont bring rickrolling into the terminal please...

simple ravine
#

ooh funky

frank kayak
#

when you work with sixel the biggest difficulties is getting the pixel dimensions of the character box

simple ravine
#

takes me back to QuickBASIC days when you could write hardware-damaging things to make the resolution higher and paint funky things

#

I miss that in today's Windows Terminal stuff

mortal bone
frank kayak
#

sixel was used for printers initially

#

pixel dimensions can be queried with "\033[14t" or with TIOCGWINSZ

#

@mortal bone thanks i will check that out when im getting to the pst stuff

#

currently trying to fix the webui backend of my ui layer... and fixing stuff ive already broken

#

my tool compiles to a fully static webpage... slightly on the larger side with 30MB...

#

i did initial work to make it work with tinygo and then its only 500kb but with a lot stripped off

#

using https://github.com/hexops/vecty for the webui in wasm

GitHub

Vecty lets you build responsive and dynamic web frontends in Go using WebAssembly, competing with modern web frameworks like React & VueJS. - hexops/vecty

simple ravine
#

I am intrigued where you will take this ๐Ÿ™‚

dull laurel
#

I wonder if WASM will drive javascript/typescript away, if it offers superior performance

mortal bone
#

There is already a few cross compilers lol typescript to wasm

frank kayak
#

wasm works really well with go

#

the size is just huge

simple ravine
#

I think there's one with C/C++ as well, Elm

#

And of course, .NET's Blazor etc

frank kayak
#

there was gopherjs which transpiled go to js. but the maintainer is now responsible for the wasm arch on the official go compiler

#

go with the embedded runtime is prob not the best choice for wasm but only because of the size atm

simple ravine
#

Just needs a lot of treeshaking work

frank kayak
#

most stuff i scrape isnt possible in the browser because of CORS

mortal bone
#

If mono runtime can be done in wasm, I have a feeling that the go runtime could be as well

frank kayak
#

it already works very good

mortal bone
#

I think the initial payload is like ~2.7mb or something

frank kayak
#

its just that a go program will always be larger

#

oh

#

go its prob also around 1 or 2 mb for the runtime

simple ravine
#

I don't think we'll see good enough treeshaking for Blazor until .NET 6

frank kayak
#

probably not the best idea that i wanted to put everything in tabs. but whats done is done

simple ravine
#

for internal applications, first load time isn't as critical as for public facing sites, so there are already some usecases

mortal bone
#

Also, browser caching helps a lot. If you use a common cdn, you don't have to download the mono.wasm everytime

simple ravine
#

are they really competing against coreclr.wasm?

frank kayak
#

its a single wasm for go

mortal bone
#

ideally, not everyone is publishing their own mono.wasm

#

they might have renamed mono.wasm to coreclr.wasm? I know blazor is built on mono

simple ravine
#

oh

#

hmm

mortal bone
#

Maybe was built on mono?

frank kayak
#

i put the 23mb wasm in a base64 encoded data-uri and embedded the wasm-loader js-script bloating it to 30mb...

simple ravine
#

yeah i have to say i haven't had the time and/or will to mess around with blazor yet

mortal bone
#

mono.wasm is like ~2mb, but you also need a lot of the common .dlls, so your first run payload is ~30mb

frank kayak
#

ouch

simple ravine
#

oh dang, still?

mortal bone
#

I haven't really touched blazor in 6 months or so

frank kayak
#

if im really careful and dont use "net" or other regularly used parts of the standard lib of go i can compile it with tinygo which uses llvm and thats below 1mb total

mortal bone
#

client-side blazor was release in may, so I could be very wrong about the current state

#

that is pretty good

frank kayak
#

tinygo is meant for microcontrollers but also has wasm as a target so there are some restrictions

fickle yew
#

Client side blazor performance is still pretty horrible.

mortal bone
#

that doesn't surprise me haha

fickle yew
mortal bone
#

I want to mess around with it a bit. Might be fun to make a skill tree in haha

fickle yew
#

It feels like a slightly clunky version of React wrapped in Razor.

simple ravine
#

Oh, I thought one of the selling points was performance, and that they even talk about that in their talks.

#

@fickle yew your incremental game doesnt seem to download any wasm

#

ah, in chrome it did

#

9.3 MB total

frank kayak
#

does anyone know about a non-Copyleft oodle decompression library?

dull laurel
#

why not add a copyright/reference to the author?

frank kayak
#

the gooz for pogo is quite a nice binding but i dont want to embed GPL code in go

worthy cape
#

Only two alternatives I know are Ooz (GPL/educational) or actual Oodle.

frank kayak
#

its gpl with that all my code is gpl...

#

its not educational

#

the original was gpl

#

the fork did mess with the license in a nonconform way

#

i want my tool to be mit licensed :/

worthy cape
#

Heh, didn't notice that the fork was different, thought it was just sorting out some GCC build failures.

frank kayak
#

its gpl licensed he cant just change it. only for his own additions and not in that way...

worthy cape
#

My plan is to use GPL Ooz as-is but keep the interface generic enough that it doesn't constitute a combined work.

frank kayak
#

thought about doing the same

#

but that stinks imo when i have a single binary without it

worthy cape
#

Or spend a year or two learning enough about compression to reimplement, but that's not happening ^_^

dull laurel
#

pls reimplment

worthy cape
#

I've got actual PoE projects I want to work on.

dull laurel
#

there are already 100$ and 2 beer in the price pool

frank kayak
#

i did other crap i shouldnt do jsut because of being annoyed...

grave wren
#

should throw in a copy of pratchett's small gods for the poor sod who does the task

frank kayak
#

i could just package that gpl binary in my own binary - that should be allowed i think

worthy cape
#

I'd expect the primary concern would be whether it can be replaced.

rapid pagoda
#

@frank kayak oh hey, more Go people, welcome ๐Ÿ™‚

frank kayak
#

hi!

#

that ggpk lib is quite nice!

dull laurel
#

which one?

frank kayak
#

were you perhaps active in 5055 with a char named Shattered...?

dull laurel
rapid pagoda
#

Not that I recall

frank kayak
#

then theres even 3 go person who like poe

worthy cape
#

Madness.

frank kayak
#

stick with your rust and wait for the compilation to end tommorow in the morning ๐Ÿ˜›

dull laurel
#

what?

frank kayak
#

rust compilation takes a bit

dull laurel
#

because it's proper ๐Ÿ˜„

frank kayak
#

i mean most compilers take a bit of time compared to go

dull laurel
#

not this JIT magic

frank kayak
#

go isnt jit

worthy cape
#

My Discord bot for rolling Civ6 drafts compiles in as little as 45 minutes on my Atom ๐Ÿ˜„

frank kayak
#

wow

#

a few seconds at most

#

for me

civic crane
#

btw does cgo guys work to make it work on windows?

frank kayak
#

stay away from cgo

dull laurel
#

sounds like go is the language. what are the drawbacks?

worthy cape
#

The Discord library in Rust is extremely over-engineered.

frank kayak
#

never tried cgo on windows if i remember correctly

worthy cape
#

@dull laurel The Go community and developers are right twats a lot of the time.

dull laurel
#

elitist language ๐Ÿ˜‰

worthy cape
#

I kind of prefer to not spend my efforts in such an ecosystem.

#

Been there, done that, no t-shirts.

simple ravine
#

Someone was telling me a benefit of go over .net was the compile time

#

and I was like... "ok, if that's a benefit worth mentioning over anything else, then i think i won't bother with go"

worthy cape
#

I ran into the most amazing software at work today, speaking of compiling.

#

They had vendored a subset of Boost to avoid bundling the whole thing.

simple ravine
worthy cape
#

How did they determine the subset to bundle, did they copy whole directories of the Boost tree that they needed?

#

No, they strace:d the compilation process and extracted exactly the source files that the build on their machine happened to touch.

#

A colleague found this out when trying to build for aarch64 today ๐Ÿ˜„

dull laurel
#

@simple ravine how does your prompt figure out the name of the directory to keep in the middle? is that the root of the git repo?

worthy cape
#

Turns out that slightly different sets of Boost headers get used then and they ended up with a mix of the system headers and the vendored ones ๐Ÿ˜„

simple ravine
#

it's some oh-my-posh magic, @dull laurel

frank kayak
#

the compile time is one of the smallest benefits but a very nice one

#

sry my computer just crashed again - io issues with the board

worthy cape
#

I have to look up how to build Singularity every single time I need it.

#

Not sure if their mconfig bullshit is standard Go or something someone invented.

rapid pagoda
#

pogo: go build 0.31s user 1.20s system 62% cpu 2.413 total and that's under WSL1 so I'm taking a huge hit on IO

#

oh, I guess that isn't a clean build so it's kind of cheating ๐Ÿ˜›

#

go build -a 18.70s user 8.84s system 407% cpu 6.761 total okay so it's a little slower

dull laurel
#

probably also not a clean build

frank kayak
#

why i love go is the ease of programming in it. the developers (Ken Thompson (Unix, UTF-8), Rob Pike (UTF-8, Plan 9), Robert Griesemer (Java)) did only take a very small of needed features. if you see go code from someone else it is easily understandable because of that (and a default formatter). second: it compiles to a statically linked binary without any runtime dependencies, i had a lot of trouble in the past modifying makefiles, build scripts for c or c++. and with rust it seems that one also have to meddle with those toml files of each dependency. that static binary thing is for me as an admin very lovely, i cant stand issues when deploying and stuff just doesnt want to work. 3rd the object model is a better take than what ive seen in c++ or java. 4th concurrency is easy to use. 5th a fast garbage collector which lets me focus on the task instead of memory management

#

sry not that well ordered mess of thoughts...

simple ravine
#

did a dotnet clean && dotnet build on PoeSharp.FileTypes...

#

Time Elapsed 00:00:00.87

#

ยฏ_(ใƒ„)_/ยฏ

#

not a huge amount of code though

frank kayak
#

oh and the cross compilation

#

was never so easy

#

GOOS=windows go build and i build for windows on linux or whatever

rapid pagoda
#

oh, lol, something like half that time is because pogo/river depends on net/http which pulls in crypto/tls, so I end up building a full TLS stack templarLul

#

it is kind of neat how everything builds from source in Go, so you can "jump to definition" on literally anything and see what it's doing internally

simple ravine
#

yeah thats nice for sure

worthy cape
#

The last time I interacted with them my use-case was not considered valid and was told to go heck myself, pretty much.

simple ravine
#

a non-framework-dependent .net console application is quite large

worthy cape
#

(was sending 12 KiB of acceptable CAs in a TLS handshake, Go's standard library had an arbitrary limit of like 8)

simple ravine
#

12 KB is quite a bit though

#

for some public keys

worthy cape
#

@simple ravine If you're using client certificates the server may send the list of acceptable issuers so the client may select a suitable certificate.

#

In the GRID world, there's a lot of CAs.

simple ravine
#

fair enough

worthy cape
#

Maintainers didn't want to understand the problem and let me know that my use case didn't exist in the real world.

#

It's been solved later when it wasn't relevant for our use case anymore, but you can bet that I'm salty as fuck since.

simple ravine
#

sounds like the standard 'say no the first time someone asks for something'

#

they could have done it in a nicer way though

worthy cape
#

I put forward some rather concrete evidence, traced the problem in the codebase, and pointed at the RFC.

#

Anyway, I'm happier without Go and I wish anyone using it the best of luck.

#

The TLS lib is under better management nowadays, had a chat with the maintainer the other year.

frank kayak
#

that Filo guy?

worthy cape
#

Filippo Valsorda, yeah

frank kayak
#

i just read the issues every now and then dont know whose exactly responsible for what arey

simple ravine
#

how's execution speed in go?

frank kayak
#

ah

#

sry

#

๐Ÿ˜›

#

speed is pretty good

#

still slower than rust or c++

#

but the garbage collector isnt much of a problem

simple ravine
#

what are the downsides of go, if i put it that way?

worthy cape
#

I kind of regret writing stash-snitch in Rust, but didn't have much choice in a language that compiled to standalone enough EXEs that had decent HTTP client, sqlite and JSON/CSV libraries.

frank kayak
#

GUI stuff isnt taht far yet and data science is still python area :/ - but that just needs a bit more time

dull laurel
#

@simple ravine had the same question earlier. seems there are none ๐Ÿ˜‰

frank kayak
#

how do i make a rust program i found compile statically? edit all the toml build descriptions?

simple ravine
#

oh wait, isn't it go that has a bunch of global functions like php

frank kayak
#

the if err != nil {... gets a bit repetive but we like our errors

rapid pagoda
simple ravine
#

I like my namespaces

frank kayak
#

i didnt quite understand lxn/walk when i wrote a windows gui

worthy cape
#

@frank kayak Not sure how bananas you can go, mine only depends on system libraries and the UCRT.

frank kayak
#

i think i didnt manage to start the second window on the main thread...

worthy cape
#

I've gotten over fully static binaries, breaks too much in hippieland with name resolution and TLS.

frank kayak
rapid pagoda
#

@simple ravine nah, the global namespace in go is pretty bare, just has a couple basics like make, copy, append, etc

dull laurel
#

like javascript you need to add everything? no STD lib?

worthy cape
#
[boo@baldur release]$ ldd boo-bot
        linux-vdso.so.1 (0x00007ffff5db2000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fca75f0e000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fca75eec000)
        libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fca75ed1000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fca75d07000)
        /lib64/ld-linux-x86-64.so.2 (0x00007fca7679e000)
        libm.so.6 => /lib64/libm.so.6 (0x00007fca75bc1000)
#

I find these deps acceptable.

frank kayak
#

gnu libc and gethostbyname and stuff ... yeah thats nice - love it - and then trying to recompile all system libraries in musl and noticing gnu quirks - no thanks

grave wren
#

but what about the color red dependency zao

#

i cant live without it

frank kayak
#

zao now put that binary on an old centos server with an old glibc ๐Ÿ™‚

worthy cape
#

If you're running a glibc of an older soversion, you get what you deserve.

frank kayak
#

i disable cgo always with CGO_ENABLED=0 on all my go tools i cant stand dynamically linked stuff anymore

simple ravine
#

r, err := os.Open(dataPath)

that := gives me Pascal PTSD

rapid pagoda
#

@simple ravine wrt. downsides of go, I'd point to lack of generics (for now), weird object model, kind of crude feeling exceptions

frank kayak
#

sometimes you dont have a choice in your company with that 1 old server...

dull laurel
#

@simple ravine math professors love this trick

frank kayak
#

a, b = b, a

simple ravine
#

yeah, fancy deconstructor

frank kayak
#

ah no constructors in go

worthy cape
#

@simple ravine destructuring

frank kayak
#

just write a NewObject() function like any other function

simple ravine
#

yes, sorry my bad

#

doesn't that get a bit messy?

frank kayak
#

not really

simple ravine
#

wait, so all objects are anemic?

frank kayak
#

we have more than the usual 5 lines per java file in a file - its mostly separated by topic or whatever

#

anemic?

simple ravine
#

i.e. anemic domain models, as in plain data without logic

frank kayak
#

objects can have methods

simple ravine
#

structs too?

rapid pagoda
#

non-objects can have methods too ๐Ÿ™‚ go's object model is "type + methods"

frank kayak
#

func (i *image) Draw() error {...}

#

anything that has methods is an object for me

simple ravine
#

I mean, declaration wise

frank kayak
#

the loose object model in go is quite nice

worthy cape
#
zao@mim:~$ cargo install --target x86_64-unknown-linux-musl exa
 ...
zao@mim:~$ ldd $(which exa)
        not a dynamic executable
frank kayak
#

you store data in the fields of structs. when you add the right methods to that struct it can implement an interface without declaring that it does so

#

oh

#

i got this

#

c /lib/x86_64-linux-gnu/libc.so.6
dl /lib/x86_64-linux-gnu/libdl.so.2
gcc_s /lib/x86_64-linux-gnu/libgcc_s.so.1
pthread /lib/x86_64-linux-gnu/libpthread.so.0
rt /lib/x86_64-linux-gnu/librt.so.1
z /lib/x86_64-linux-gnu/libz.so.1
linux-vdso.so.1

#

๐Ÿ˜ฆ

worthy cape
#

Yeah, those are the deps with the regular toolchain.

frank kayak
#

i do have that musl toolchain too

rapid pagoda
#

you can also declare a new type that's based around something that isn't a struct and put methods on that too ๐Ÿ™‚ it's not uncommon to have lightweight "objects" based around strings, arrays, ints, etc

worthy cape
#

I've got no idea but "worksforme" ๐Ÿ˜„

frank kayak
#

im running the command now

#

still indexing...

worthy cape
#

I remember being confused in my youth about Ruby code calling functions on integer literals.

frank kayak
#

yeah Stringer implementations on int based stuff is nice

#

what do i do with rust projects if a dependency doesnt play nice with static compilation?

worthy cape
#

Cry I guess.

frank kayak
#

and tehn?

rapid pagoda
worthy cape
#

I get the feeling that if you stray outside of the nice path you get a lot of own responsibility.

frank kayak
#

oh

#

zao your exa isnt statically linked

#

you used the glibc ldd?

#

use the musl-ldd

worthy cape
#

musl-ldd: /home/zao/.cargo/bin/exa: Not a valid dynamic program