#tooldev-general
1 messages ยท Page 116 of 1
i only know python with type hints
and tbh i really dislike people who script without any typehints
especially in groovy/kotlin
The scripting language we use is called gosu and is very similar to kotlin/typescript. I am glad it is strongly typed haha
https://en.wikipedia.org/wiki/Gosu_(programming_language)
Now I can feel your pain ๐
Gosu is a statically-typed general-purpose programming language that runs on the Java Virtual Machine. Its influences include Java, C#, and ECMAScript. Development of Gosu began in 2002 internally for Guidewire Software, and the language saw its first community release in 201...
had the pleasure of extending a groovy script a bit ago
i still dont know why you'd choose groovy at all
the omitting of parantheses and dots make me angry
dots = semicolon?
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
no you can write take(coffee).with(sugar, milk).and(liquor) as take coffee with sugar, milk and liquor
Oh. That is gross
i have a question
I don't like that
and the script mixed traditional typing and this new typing
and its so hard to figure out what the fuck is going on
Time to make a style guide lol
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?
tabs > spaces. </style>
what does the question have to do with tool development?
seems it fits more into #other-games
oh sorry i read the chat wrong
I don't honestly know if I use tabs or spaces because my ide does that for me
i like people to pick their width. Or actually I just want my 3 spaces per tab and don't want to bother others.
Configure your formatter to 3 spaces on checkout and 4 spaces on pre-commit, easy
Oh, that is an interesting solution. Never thought about that
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
Or use a language like Go that has Opinions about formatting ๐
is struct files_t {} files has same order as unpacked paths from path_rep_bundle ?
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.
got interesting numbers: _.index.bin WASM decompression 100ms, but then reading & parsing in JS world takes 3.2s
oof
๐
0.3 seconds for me to read index bin and hash all fnv1a etc
most of the time is used on hashing
javascript?
nono, .net 5
in the browser?
no?
ah, I mixed you up with Snosme, he was the one talking about that
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?
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"
Do you have a character I can import that on @grave wren ?
https://pastebin.com/Xjyfrhwb for example
We'll probs release an update tonight but not sure if it fixes that
maybe its also an issue from poe ninja, not sure which system was it
Yeah, I need a character to import from to be able to test it
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 ๐
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
yes just asking if parsing imported gem names for anomalous etc is in
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
๐
think i also found the place to do it, i'll see if i can do it
Anyone has Emmitt's tree comparer link?
https://poeskilltree.com this?
grazi
well i have it working but it ain't pretty :>
what did you change?
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
Would anyone happen to have a list of all the dialogue lines for the new Heist NPCs? Particularly interested in the "mission complete" ones
@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.
@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.
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?
This is a poor-quality recording of a talk that our lead programmer Jonathan Rogers gave at the Auckland Game Developers' Meetup on June 1. Our terrain programmer Rhys Abraham is controlling the demo machine.
The presentation discusses the indoors and outdoors level generatio...
Pretty sure there was a talk about it from ExileCon too
You probably want to see https://zao.github.io/poe-doc/arm.html and https://zao.github.io/poe-doc/area-generation.html too.
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.
Here's A10 Kitava's arena, all a single room with several smaller tiles - https://i.imgur.com/Qc90zP8.png
You can't (anymore) tell which layout you're in from client logs, people used that to cheat the Lab in the dark ages.
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 ๐
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
I think I've clicked the right thing now.
Got it, thanks!
Can I join?
https://github.com/aianlinb/LibBundle
Windows defender keeps stealing it... saying its a trojan
@vestal pond You've misspelled BundleExporter btw ๐
I know, but i don't know how to change ๐
Solution and project files are textual and are safe to edit for C++, but don't know about C#.
Yeah... latest release keeps being nabbed by windows though
What I mean is changing folder name on GitHub
@rugged night Odd, ran all the contents through VirusTotal and they're happy.
My Windows Defender is cool with it too.
Dunno... https://github.com/aianlinb/LibBundle/releases/download/Beta1.4/LibBundle_Beta1.4.zip keeps being nabbed by my defender. Maybe different definitions or its acting up
Any reason why you're still on .NET Framework @vestal pond
Dunno... https://github.com/aianlinb/LibBundle/releases/download/Beta1.4/LibBundle_Beta1.4.zip keeps being nabbed by my defender. Maybe different definitions or its acting up
@rugged night You can try to compile it yourself, it is open source ๐
Any reason why you're still on .NET Framework @vestal pond
@simple ravine I am better at using it
@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 ๐
@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.
Okay, I will try it~ ^^
.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
@vestal pond how did you figure out the compression encodings and levels? https://github.com/aianlinb/LibBundle/blob/master/LibBundle/BundleContainer.cs
@dull laurel from here https://github.com/OmegaK2/PyPoE/blob/dev/PyPoE/poe/file/bundle.py
ah the omega did. interesting
i like the word "record" for those entries. gonna steal that ๐
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
how do you know all that?
there's a ton of discussion about Oodle on https://encode.su/, as well as some posts by the original developer at http://cbloomrants.blogspot.com/
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.
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
crazy, they implemented kraken in hardware
It's what powers the PS5 storage tech and why all authorized developers for the platform have a license for Oodle Texture.
incidentally, https://encode.su/threads/2577-Open-source-Kraken-Mermaid-Selkie-LZNA-BitKnit-decompression?p=49927&viewfull=1#post49927 has an explanation of why ooz is GPLv3:
The reason why I picked GPL was actually to support you. GPL means that no game companies (i.e. your customers) would be able to use the code, as that would require their whole game to be open source. So you wouldn't lose any business. If I had picked BSD/MIT/Public Domain or whatever, it would have been worse for you.
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.
Well, that was an interesting read. Even though I'm still no smarter about the algorithm itself
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
what kind of doors?
in terms of understanding other more advanced compression algorithms
(assuming that's something you're interested in ๐ )
I have to prioritize somehow, too many topics I'm interested in ๐
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
๐
in other news: I've got loading from bundles working, still got a bit of work before I can enumerate them though
in which language?
Go
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
I think I capped out at around six gigabytes during dev ๐
hey yall, I'm trying to send API requests at http://www.pathofexile.com/api/trade/exchange/Heist of the following format:
POST /api/trade/exchange/Abyss
{
"exchange": {
"want": [
"chaos"
],
"have": [
"exa"
],
"status": "online"
}
}
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"
i was able to find this list in an old reddit post - https://www.reddit.com/r/pathofexiledev/comments/9fbxkb/price_currency_amount_of_publish_stash_tab_api/e65t43h/ - but it's not a full list
1 vote and 2 comments so far on Reddit
thanks mate
jq '.result[] | select(.id | contains("Currency")).entries[] | .id' to query the identifiers out ๐
man I love jq
I've got to relearn it every time I try to use it, and still don't know how the programs work.
so why do golems have a cooldown timer anyways?
They'd take over tooldev otherwise, put us out of our jobs.
shit, whoops wrong channel, my bad
@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
xD
@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.
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.
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.
I went the full-bundle approach in Bun, where I first resolve and group and then extract on a per-bundle basis: https://github.com/zao/ooz/blob/master/bun_extract_file.cpp#L172-L205
and then dispose the finished bundle?
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)
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
I guess that is for version 2 then ๐
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.
same happened here when i did an extract all. 32gb full, swapping, everything stopped
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.
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
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
}
Neato. Do you handle/care about renamed ones and ones that change format?
how does that work in the parser?
@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
ah, that's go. should have noticed, thought it's c#
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
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.
that take_until is a cool function. I miss that in other languages.
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
I could of course be misremembering some bug with the at-the-end ones.
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
I made a dat parser a couple of years ago. I cant recall too much shenanigans
wonder if something changed since then
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
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. ๐
remember how I was wondered that
Debug.Assert doesnt work in prod (side-effects) and I have been looking for bug all day ๐
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 ๐
@civic crane thanks. that really helped. now it works ๐
The two primary causes of Configuration-related problems - not having DLLs/assets deployed into build dir; and asserts.
Also launch options ๐
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
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
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/
ooz uses it
and the webapp itself is written in which language? also c# with blazor or js?
all typescript except wasm compiled ooz
any framework like angular or so?
https://github.com/SnosMe/poe-dat-viewer/blob/master/package.json
just looking at dependencies sometimes answers all the questions ๐
true. sorry, overlooked the link for the repo
@civic crane looks very cool
I'm getting the following error though
both on chrome and edge chromium
ah nvm
reading is hard today for us ๐
@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
poe.watch used to go super high, new management might have kept that feature
@lusty musk The count is not exposed in the ui and isn't actually a total count, so ๐
I'll put it on my list of stuff to look at ๐
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?
Haven't heard about anything like that. Only "recent" change was that Kakao accounts (Korean) chat isn't logged.
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.
hello, I'm trying to do something with request https://www.pathofexile.com/api/trade/search/Heist Is there any list with filters I can use in query ?
F12
Hi, has anyone managed to extract obtain the BaseItemTypes table for 3.12 yet?
Or is that entirely blocked by the new archive format?
@paper thistle All files are completely accessible.
@worthy cape Oh, dang. Where can I find out more?
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
use https://github.com/brather1ng/RePoE/tree/poe-3.12 if you can't get .dat
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.
yes. it includes the unmanaged dll as well. and I didn't realize and looked for hours for solutions how to do that.
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
what does "daily" mean?
I would think cards listed per day measured over some period
but the numbers seem too high for that
how often you saw that card in the last 24h, like a "daily counter"
define 'saw'
How often people put that card in a public stash
but does it only count new, previously unseen occurrences?
or any time that item pops up in the river?
the latter - it's just a silly counter
even as is, it's a rough measure of drop frequency x saleability maybe?
@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
Mm, yeah, fair point
pob can't calculate the elementalist notable for increased buff effect per golem? at least it seems like it
@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.
is there a documentation for the dat files somewhere? i thought someone said in the pypoe repo but can't find it there
edit: found it https://github.com/OmegaK2/PyPoE/blob/dev/PyPoE/poe/file/specification/data/stable.py
https://github.com/MuxaJIbI4/libggpk/blob/beta/LibDat/DatDefinitions.xml
this is also an interesting way to describe them without creating a separate class / type for each of them.
Cool kids export the spec to JSON.
mine
@worthy cape you mean the xml / python descriptions?
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.
I tried code-genning back in 2017-2018. It became messy
ah you mean the file contents not the spec itself
No.
the xml spec is pretty readable though
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.
with all those nulls in that file you can save a lot lines by using the default values
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.
i was just thinking how lightweight json is
ugh when i press play button the game crashes on poe client help!!!!
@earnest hull I recommend you email techsupport or skim the forums for assistance with the game client.
@worthy cape cxck
@earnest hull what has this to do with tool-development?
zao already gave you the options, now stop cluttering this space.
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.
TDRs?
Timeout Detection & Recovery.
yo chillax dude i said sorry
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.
ah yeah
Quite the improvement over the graphics-related BSODs of before.
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
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.
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
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.
PCIe is hotpluggable with the right firmware and device support.
you're saying i wont blow up my peripherals by yanking out my graphics card during operations?
nifty.
Might require motherboard awareness too ๐
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
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.
Ah, IDEA for C#?
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.
I've used Clion a fair bit, but couldn't make it my daily driver for the debugging reasons.
but they have some alluring nifty features
Also, the keyboard bindings are all wrong, my debugging muscle memory is hosed ^_^
yes!
Feel like techno grandpa here, having to hover the stepping icons and second-guessing whether it was F7 or F8 to step into/over.
hehe. how old are u?
Have to count backwards... 36 now.
ah, im an 85er
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.
the hype nowadays are those coding fonts with ligatures. my brain cant deal with that
Especially for C++ template errors, seeing more columns is good ๐
Took a few days to get used to it, now it feels normal.
the JetBrains mono looks fairly nice actually
are you using that as a system-wide font?
but im not picky
yeah also very fond of the new default font for intellij
JetBrains Mono it seems
I'm using Iosevka Term as my console font and Iosevka for IDEs.
ohhh
they swapped in 2020 versions
There's a style set for Iosevka where it pretends to be more like JetBrains Mono too ๐
I can't do ligatures
unsure if its the same in the console and supports zshell
Completely optional, I kind of like them as long as they don't go super bananas.
it breaks my brain
If you let the Haskell people too close, you get mangling of pretty much any combination of swear words.
wtf
yeah wtf
is ## a ligature? why?
what do u think about https://github.com/microsoft/cascadia-code
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)
ttf or otf, what's better?
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.
They apparently recommend TTF for quality
mono is a lot wider than consolas haha I don't know if I can get used to this
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?
its a tool used to trade in game
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
i love cascadia code. I think there is even a version that includes powerline symbols to pimp your shell/terminal
Cascadia PL yeah
yes and this one https://github.com/JanDeDobbeleer/oh-my-posh
Hanselman had some hack before it was a thing
yeah, just not a fan of powershell
wonder if powershell core is better
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.
Just installed v7 preview
Gotta love Windows Terminal magically understands that I have it installed and adds it as a dropdown.
reminds me that i wanted to clean/setup my prompt and profile
indeed. just a litte lack of constrast with the blue on dark
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
I am happy with my environment currently and I'd appreciate it if I wasn't tempted to modify it ๐
@simple ravine --noLogo
sweet, it works
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 ๐
@fickle yew received a user report about weird currency prices... https://cdn.discordapp.com/attachments/508053487184117771/760689067162861568/unknown.png
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)
Yeah that makes sense. I'll take a look.
He should definitely sell those jewellers orbs though ๐ต
@broken cloud That change is going live now ๐
Awesome, thanks 


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?
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
Probably something like https://github.com/dotnet/SignService
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
what do you mean with officially?
not self-signed basically
I guess you have to buy a certificate from an authority
Yeah
Wonder if you can use LetsEncrypt for that.
or did you have to buy a special kind of certificate?
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.
poe-lurker uses Signpath
@simple ravine Code signing is a completely different Purpose/Key Usage.
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
Certum advertises their EV certificates as "deleting the SmartScreen message" ๐
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
Microsoft's code signing is an extortion scheme
My solution to it is fuck-it-all.
@timber path You could still sign your app with GPG to verify correctness of download/authorship. Doesn't do anything about SmartScreen though :/
I've got a buddy that does executable packers. You think you have bad days? ๐
Writing code in NSIS for PoB's installer was certainly interesting
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
@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
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
From poe lurker :-D
The goal is to have a slick and performant overlay (No Electron allowed).
i cant stand electron apps...
@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
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...
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.
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
https://about.signpath.io/open-source - "Under the umbrella of the SignPath Foundation, open source projects can apply for a free code signing certificate." (on the right side under "Challenges of code signing") - Vim seems to also use this
SignPath.io - Automated, repeatable and secure code signing processes
as a service and on-premise
@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.
@worthy cape ๐ I'll take a look
@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".
was it wrong? @civic crane
trade secrets! ๐ ๐
oof
https://www.pathofexile.com/trade/search/Heist/DmJMzEdi5 is better since it works for all languages looks like that part is busted ๐ฆ
term is raw text so depends on what site subdomain you use
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.
So who's all doing Hacktoberfest this time around? https://hacktoberfest.digitalocean.com/
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?"
like.. yeah, no
that sounds really negative
It's a neat initiative but the quality of the PRs coming into more popular single-maintainer repositories is an extreme burden.
so it generates more work than it benefits them?
they've been struggling to moderate which PRs are meaningful enough to count
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.
Oh wow, I was wondering what was with all the nonsensical issues and low-effort pull requests today. 'Hacktoberfest' has started, and "corporate-sponsored distributed denial of service attack" describes the effect well. Not helping, @digitalocean
Just see the image here: https://twitter.com/Brunty/status/1311404791986257924
Okay that's extreme for what looks like a new project
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 ๐
As long as the maintainer is aware of this.
"improved docs" ... mh how much effort is 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)
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
Not really in the original spirit of the idea though, I'd say
I mean they are helping with open source stuff
It's not really "Changing the world through open source" as they market it as
maybe they should exclude doc PRs or at least the ones that don't add value (like fixing typos)
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
Game the system for a T-shirt by bothering the world \o/
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
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
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
@golden bane @gilded tree The problem is that a lot of those commits aren't trying to "improve" the project, even slightly. They're creating pull requests that would never, ever get merged, like https://github.com/whatwg/html/pull/5972/files or https://github.com/letsencrypt/website/pull/1118/files
Okay, those are quite weird/bad ones :/ Imagine being so desperate for a shirt that doesn't really mean anything to you ๐ค
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
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 ๐ฆฅ
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.
@worthy cape There's now support for all your divergent skill gem search needs.
What about my phantasmal search needs (sic)
That sounds pretty anomalous.
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.
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.
https://pastebin.com/2kxn9BFb
Looks okay-ish now.
Pastebin.com is the number one paste tool since 2002. Pastebin is a website where you can store text online for a set period of time.
lol
ouch
i mean wtf
i mean one PR for all the existing typos would be okay. but 1 PR per letter is ridiculous
they want t-shirts
@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.
India?
Among others, guessing wildly based on the account names seen.
Nice!
(after breaking something there earlier, everything according to plan)
oh the conspiracies
pob is written in c# and lua. right?
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#
i always wanted to have a web version of PoB that uses PoBs calculation engine plus the optimization engine from PoESkillTree
because what PoB currently lacks is the option to optimize a skill tree based on certain parameters.
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
lua unit tests? go for it! ๐ I'd rather rewrite the whole thing in typescript then touch lua ๐
okay, better start small. first my poetool ๐ because everyone likes their own implementation of that
que?
Rewrite It In Rust
Ah
It is either rust or go to learn in the future. go has obviously won the hipster award thanks to google and docker.
i was very confused by this sentence rn
So, PoESkillTree does have a game engine
@woeful sphinx spent a lot of time on it haha
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
It's my ambition to still go through the PoeSkillTree.Engine
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.
It was just a bit of a threshold to get over, as there seems to be a lot of abstractions etc
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
It is still a little coupled to the PoeSkillTree use-case I can guess by looking at ComputationInitializer.cs
With observables and timeout etc
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
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
Oh, if I'd start from scratch now, it'd probably also look much different (at least on a structural level)
how does one write a calculation engine 101? ๐
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'
Let's say I think I've learned a lot since I started the engine ๐
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'
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.
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.
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 ๐
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
ah, there are 2 other 101s I can suggest. giving constructive feedback and non-violent communication. helped me a lot in the past.
@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.
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
-
Life, should be one of the most straight forward things to get right.
-
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.
-
Critical chance (without mind-wrangling about effective crit chance, which I would consider an auxiliary stat)
oh right, TDD could be a good approach for this. and then you also have unit tests in place for other developers
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
unit tests in place for other developers
a unicorn!
For me, in this particular case, it's more about being able to iterate quickly over something with live unit testing
This is also a solid case for BDD
tbh i find editing pob very stressful because the only tests you can do is manually editing stuff and check if it breaks
@mortal bone can you give an example? (the B is for behavior, right?)
Ah Gherkin
it isn't perfect, but something to that effect. You can describe the behavior you are looking for and implement to that
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.
@digital parrot because the overlay can't appear in fullscreen mode technically
change to fullscreen window mode, but stuff like that is probably better in #1โendgame-help
oh boi. thanks.
you "can't" draw on top of a full screen program.
wheres the difference to tdd emmitt, seems like just a way to express tests
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.
To my understanding BDD --> TDD --> Actual code
Streaming it out with say shutil.copyfileobj works, of course.
first you define the behavior, which kind of turns into tests that you satisfy with code.
hm i never recognized the first step as its own thing, that was just a thing you do when testing imo
I should probably not indulge in trying to explain BDD, as I am probably half-wrong anyway.
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
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.
Right.
Because I focus on larger things, we indulge in domain story telling and/or event storming to define requirements/expectations.
We are using BDD and TDD in our current upgrade project. Also, BDD is nice because your requirements are in your feature files.
I suppose they are not mutually exclusive
makes more sense, BDD language should basically withstand technical changes that might break lower level tests then?
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
I just googled around, and found https://specflow.org/. Anyone tried it?
I don't know what cucumber is
JS bdd framework?
Is it something for the other side?
it is what reads the gherkin syntax and attaches it to the "glue code"
โ side of things
time to join any java discord just to have appropriate emojis
Gurka in swedish ๐
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
Instead of being clever, I like to name things descriptive to what they do, most of the time
try apollo something
And all the Apache foundation software heh
Apollo the GraphQL Framework
yep not only that, lots of apollos around
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
i love codenames for each project.
Which tool was for parsing the logs again, Homer or Bart?
Apache - where projects come to stagnate.
No it was Lisa.
El Barto
like kubernetes. there is some helm and then something with T on the other end. and I don't know what else
@simple ravine Rate my imagination - https://github.com/zao/stash-snitch
@dull laurel Try administering an OpenStack cloud.
Infinite number of components.
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
Hehe, nice zao
Terraform?
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
our uni admin had a knack for some chocolate so that was the server name for one of them
Our infra machines are all name series and they compete in having the most obscure names for machines.
how else would you name them? database-01, database-02, appserver-01?
highlander-01
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 ๐
had to google that one
My fellow coadmins have a crude sense of humor at times.
I know of a company which named their servers after energy bars
at my last company, the mailing server was named frodo lol
youre the author of the poeskilltree?
I am one of them, yea
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?
Yeah, wpf has limited support. I think at some point someone was able to
prob with wine then but WPF did cause some headaches for me
It is currently .net core 3.1
but wpf on .net core isn't cross platform, which is annoying
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...
@frank kayak go supports platform independent GUI? or they just have something connected to each platforms native library?
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
Ooh, it does look nice. Small changes, but I like.
I did make it display correctly yesterday on Android. did take a bit...
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!
Lorem Ipsum ๐
@lean spindle Scrolling jumps in miniscule steps here on Firefox.
I can't find Gorge ๐ฆ
Gorge is glacier now I think
Ah, darn it firefox
Edge Chromium is "fine".
who is using Edge?...
@frank kayak People who want to see how things fare on Chromium without suffering the UI design of freestanding Chromium or actual Google Chrome.
Unless you were meming in which case, Whoops, I'm slow :P
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 ๐
Thats impressive, honestly
welp, now to figure out why firefox hates me
ty for the heads up peeps
i use a dozen different firefox profiles
I start it with firefox -new-instance -P
i think theres also no-remote
oh, this is interesting
the parameter meaning did change over time
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?
no experience in building a browser... or an OS
Ah, its almost definitely smooth scrolling
If you debug the code on Firefox you will see that deltaY is being adjusted only by -3 each time a scroll event occurs. This is different to chrome which has a very large deltaY adjustment on scroll.
I love web development
./s
heres my PST drawing in the terminal (it seems i have destroyed the GUI version again...)
that is actually funny
how?
seeing the tree drawn in a terminal
ah
thats sixel
i think i even did run PoE with an X11 server with a sixel-sdl backend (https://github.com/saitoha/xserver-SIXEL) in the terminal...
mintty can do that too on windows
and i think that crappy conhost does get sixel capabilities too
my circles on the tree are still wrong :/
you can see it in the shadow area
Yeah
Slightly fancier than https://twitter.com/lunasorcery/status/1307832672270594052
so I may have done a thing... https://t.co/VNYJzHnHsg https://t.co/UiGuhjzKKm
259
i did that late night early morning through iteration without thought...
dont bring rickrolling into the terminal please...
with a patched ffmpeg you could view that in better res https://www.youtube.com/watch?v=mLQbAYJGZMA
vte-sixel: https://github.com/saitoha/vte-sixel
FFmpeg-SIXEL: https://github.com/saitoha/FFmpeg-SIXEL
This DEMO uses 16 color DECSIXEL sequence(http://www.vt100.net/docs/vt3xx-gp/ch...).
ooh funky
when you work with sixel the biggest difficulties is getting the pixel dimensions of the character box
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
This is slight bloated with PIXI, but the basic algorithm is there for drawing arcs: https://github.com/EmmittJ/SkillTree_TypeScript/blob/master/models/PIXISkillNodeRenderer.ts#L289
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
I am intrigued where you will take this ๐
I wonder if WASM will drive javascript/typescript away, if it offers superior performance
There is already a few cross compilers lol typescript to wasm
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
Just needs a lot of treeshaking work
this is the current tab bar webui and native - still a ton to do
most stuff i scrape isnt possible in the browser because of CORS
If mono runtime can be done in wasm, I have a feeling that the go runtime could be as well
it already works very good
I think the initial payload is like ~2.7mb or something
its just that a go program will always be larger
oh
go its prob also around 1 or 2 mb for the runtime
I don't think we'll see good enough treeshaking for Blazor until .NET 6
probably not the best idea that i wanted to put everything in tabs. but whats done is done
for internal applications, first load time isn't as critical as for public facing sites, so there are already some usecases
Also, browser caching helps a lot. If you use a common cdn, you don't have to download the mono.wasm everytime
are they really competing against coreclr.wasm?
its a single wasm for go
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
Maybe was built on mono?
i put the 23mb wasm in a base64 encoded data-uri and embedded the wasm-loader js-script bloating it to 30mb...
yeah i have to say i haven't had the time and/or will to mess around with blazor yet
mono.wasm is like ~2mb, but you also need a lot of the common .dlls, so your first run payload is ~30mb
ouch
oh dang, still?
I haven't really touched blazor in 6 months or so
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
client-side blazor was release in may, so I could be very wrong about the current state
that is pretty good
tinygo is meant for microcontrollers but also has wasm as a target so there are some restrictions
Client side blazor performance is still pretty horrible.
that doesn't surprise me haha
But it is usable. I made a small incremental game with it.. This is pure blazor, no js: https://inc-game.rasmuskl.dk/
I want to mess around with it a bit. Might be fun to make a skill tree in haha
It feels like a slightly clunky version of React wrapped in Razor.
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
does anyone know about a non-Copyleft oodle decompression library?
why not add a copyright/reference to the author?
the gooz for pogo is quite a nice binding but i dont want to embed GPL code in go
Only two alternatives I know are Ooz (GPL/educational) or actual Oodle.
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 :/
Heh, didn't notice that the fork was different, thought it was just sorting out some GCC build failures.
that header "// This file is not GPL. It may be used for educational purposes only." in https://github.com/rarten/ooz/blob/master/compr_tans.cpp violates the gpl
its gpl licensed he cant just change it. only for his own additions and not in that way...
My plan is to use GPL Ooz as-is but keep the interface generic enough that it doesn't constitute a combined work.
thought about doing the same
but that stinks imo when i have a single binary without it
Or spend a year or two learning enough about compression to reimplement, but that's not happening ^_^
pls reimplment
I've got actual PoE projects I want to work on.
there are already 100$ and 2 beer in the price pool
i did other crap i shouldnt do jsut because of being annoyed...
should throw in a copy of pratchett's small gods for the poor sod who does the task
i could just package that gpl binary in my own binary - that should be allowed i think
I'd expect the primary concern would be whether it can be replaced.
@frank kayak oh hey, more Go people, welcome ๐
which one?
haha, oriath.net org.
Not that I recall
then theres even 3 go person who like poe
Madness.
stick with your rust and wait for the compilation to end tommorow in the morning ๐
what?
rust compilation takes a bit
because it's proper ๐
i mean most compilers take a bit of time compared to go
not this JIT magic
go isnt jit
My Discord bot for rolling Civ6 drafts compiles in as little as 45 minutes on my Atom ๐
btw does cgo guys work to make it work on windows?
stay away from cgo
sounds like go is the language. what are the drawbacks?
The Discord library in Rust is extremely over-engineered.
never tried cgo on windows if i remember correctly
@dull laurel The Go community and developers are right twats a lot of the time.
elitist language ๐
I kind of prefer to not spend my efforts in such an ecosystem.
Been there, done that, no t-shirts.
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"
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.
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 ๐
@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?
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 ๐
it's some oh-my-posh magic, @dull laurel
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
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.
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
probably also not a clean build
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...
did a dotnet clean && dotnet build on PoeSharp.FileTypes...
Time Elapsed 00:00:00.87
ยฏ_(ใ)_/ยฏ
not a huge amount of code though
oh and the cross compilation
was never so easy
GOOS=windows go build and i build for windows on linux or whatever
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 
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
yeah thats nice for sure
The last time I interacted with them my use-case was not considered valid and was told to go heck myself, pretty much.
a non-framework-dependent .net console application is quite large
(was sending 12 KiB of acceptable CAs in a TLS handshake, Go's standard library had an arbitrary limit of like 8)
@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.
fair enough
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.
sounds like the standard 'say no the first time someone asks for something'
they could have done it in a nicer way though
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.
that Filo guy?
Filippo Valsorda, yeah
i just read the issues every now and then dont know whose exactly responsible for what arey
how's execution speed in go?
i meant that one https://github.com/FiloSottile
ah
sry
๐
speed is pretty good
still slower than rust or c++
but the garbage collector isnt much of a problem
what are the downsides of go, if i put it that way?
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.
GUI stuff isnt taht far yet and data science is still python area :/ - but that just needs a bit more time
@simple ravine had the same question earlier. seems there are none ๐
how do i make a rust program i found compile statically? edit all the toml build descriptions?
oh wait, isn't it go that has a bunch of global functions like php
the if err != nil {... gets a bit repetive but we like our errors
@frank kayak a while back I was experimenting a bit with github.com/lxn/walk for Windows UI, cf. https://github.com/oriath-net/pogo-ui
I like my namespaces
i didnt quite understand lxn/walk when i wrote a windows gui
@frank kayak Not sure how bananas you can go, mine only depends on system libraries and the UCRT.
i think i didnt manage to start the second window on the main thread...
I've gotten over fully static binaries, breaks too much in hippieland with name resolution and TLS.
for example this one https://github.com/ogham/exa
@simple ravine nah, the global namespace in go is pretty bare, just has a couple basics like make, copy, append, etc
like javascript you need to add everything? no STD lib?
[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.
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
zao now put that binary on an old centos server with an old glibc ๐
If you're running a glibc of an older soversion, you get what you deserve.
i disable cgo always with CGO_ENABLED=0 on all my go tools i cant stand dynamically linked stuff anymore
r, err := os.Open(dataPath)
that := gives me Pascal PTSD
@simple ravine wrt. downsides of go, I'd point to lack of generics (for now), weird object model, kind of crude feeling exceptions
sometimes you dont have a choice in your company with that 1 old server...
@simple ravine math professors love this trick
a, b = b, a
yeah, fancy deconstructor
ah no constructors in go
@simple ravine destructuring
just write a NewObject() function like any other function
not really
wait, so all objects are anemic?
we have more than the usual 5 lines per java file in a file - its mostly separated by topic or whatever
anemic?
i.e. anemic domain models, as in plain data without logic
objects can have methods
structs too?
non-objects can have methods too ๐ go's object model is "type + methods"
I mean, declaration wise
the loose object model in go is quite nice
zao@mim:~$ cargo install --target x86_64-unknown-linux-musl exa
...
zao@mim:~$ ldd $(which exa)
not a dynamic executable
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
๐ฆ
Yeah, those are the deps with the regular toolchain.
i do have that musl toolchain too
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
I've got no idea but "worksforme" ๐
I remember being confused in my youth about Ruby code calling functions on integer literals.
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?
Cry I guess.
and tehn?
so you can do something like type MyInt int; func (i *MyInt) Increment() { *i += 1 } -- https://play.golang.org/p/5onHQjn2V0X
I get the feeling that if you stray outside of the nice path you get a lot of own responsibility.
musl-ldd: /home/zao/.cargo/bin/exa: Not a valid dynamic program

