#tooldev-general

1 messages ยท Page 89 of 1

chrome topaz
#

we can try both

simple ravine
#

would be an interesting comparison

#

I don't have your implementation though, @chrome topaz

#

would need something to compare with

golden yacht
#

So if I had 75 proxies I could scrape an entire ladder instantly correct? ||/S||

simple ravine
#

|| maybe ||

golden yacht
#

Just asking for a friend ๐Ÿ˜ฐ

#

Nah I don't have the bandwidth for that shit

#

Gotta chug away like a good honest boy

#

2 requests every 5 seconds ๐Ÿ˜Œ

cursive ferry
#

I'm in UK scotland, requests to the stash API have a Time To First Byte of 2.5 seconds ... ๐Ÿ˜ข thezensei as you said I need to be closer to the servers isnt it ? ๐Ÿ˜ข

simple ravine
#

TTFB is not much dependent on location.

#

That's just them being slow right now

cursive ferry
#

Oh ok

simple ravine
#

For throughput, distance to server matters.

cursive ferry
#

So that means no one can keep up with the fresh data with such high TTFB on the regular way (like 1 req / sec single threaded)

violet path
#

operation openarl is still possible

golden yacht
#

A rootkit but instead of being malicious it just extends the functionality of the api

chrome topaz
#

@simple ravine just use the example on github

simple ravine
#

infecting my computer with go?

chrome topaz
#

C++

simple ravine
#

oh

#

yeah, unsure if I can beat a C++ implementation

#

but I could come fairly close

#

the 25ms, on what hardware?

#

also, are you saturating fields/properties on an object with that, or is it just lazy-parsing?

chrome topaz
#

not sure what you mean by saturating

simple ravine
#

do you deserialize to a proper object

chrome topaz
#

not to my c++ object

#

it has it's own Document and I convert by hand from that

simple ravine
#

just so we're testing the same thing

#

so what is "included" in those 25 ms

chrome topaz
#

parsing into a dom tree

#

"document.Parse(json);" this part

simple ravine
#

ah ok

chrome topaz
#

the hardware is epyc 7401p

#

which is pretty slow single thread

simple ravine
#

37ms

#

initial tests

#

file size: 5,508 KB

chrome topaz
#

that's impressive

#

what library is that?

simple ravine
#

System.Text.Json
.NET Core 3.0 preview

#

built in

#

I got it down to 26.21ms

#

I could optimize further, probably

#

24.87ms...

#

haven't even added AOT stuff yet

chrome topaz
#

parsing the same document over and over again probably isn't very representative though, is it?

simple ravine
#

I could try to grab more json files later, but I think it's fairly representative

#

especially if I do AOT instead of JIT

chrome topaz
#

sure

cursive ferry
#

fastest for Go I had is 38217350 ns/op with jsoniter.ConfigFastest

simple ravine
#

but the golden goose in this is Span<T> which was introduced in .NET Core 2.1

#

mind you, also - at this point, I have a fully deserialized object

cursive ferry
chrome topaz
#

@simple ravine now what's your hardware?

simple ravine
#

Actually I was wrong. The fully deserialized to object got slower, 100ms

#

but the JsonDocument one still remains true at 37ms

#

i7 7700K - 4.2 Ghz, 32 GB DDR4 RAM

chrome topaz
#

but is it lazy?

#

yeah that's reasonably faster than my epyc, anyway we'd need to test both on same hw to be fair

simple ravine
#

the 100ms is not lazy, that's eager

#

but I'm also having a few apps running on this machine, on windows

#

I could compile it to a linux variant for you, but meh

cursive ferry
#

Well with go it'd be so easy ... :p

chrome topaz
#

I mean the 37ms one

simple ravine
#

not sure, this one's spanking new and haven't looked under the hood to be honest

wind garden
#

ya anything .Net Core 3 is blazing fast

#

it's crazy the performance they're getting out of it

#

some APIs are are literally 6 times faster than the older version they're replacing

simple ravine
#

yeah (some even faster than x6)

#

Tanner Gooding (and a couple of others) from Microsoft .net team is on the C# discord

#

he's crazy good with perf stuff... went down to hardware intrinsic stuff, and how the processor architecture work under the hood with uops etc

wind garden
#

good grief

#

actually more like 20

#

priced my helm when I woke up at the top of the hour

#

just not showed up

simple ravine
#

ooff

wind garden
#

I thought new servers were supposed to fix that

grave wren
#

We require more vespine gas

simple ravine
#

let's create our private place so the conspiracy theorists can have one right trollface

#

with api access and all

#

is the character window stuff also delayed? hmm

#

i have an idea

mortal bone
#

lol

#

still have to trade the items

simple ravine
#

sure, but what if I crated an indexer, for private access

mortal bone
#
x-rate-limit-account    45:60:60,240:240:900
x-rate-limit-account-state    1:60:0,1:240:0
simple ravine
#

sure

mortal bone
#

slow as shit

#

trust me

simple ravine
#

but what if I created an agent application that would send your stuff

#

to my server

#

based on what you've priced, using the character window data

#

you install it, and it's very clear what it'd do of course

mortal bone
#

can we make it decentralized?

simple ravine
#

block-chain it!

grave wren
#

wanted to make a thing like it for a group selffound so go ahead so i dont have to do it!

#

:p

#

then i realized official trading allows priv leagues

mortal bone
#

It shouldn't be too hard

grave wren
#

and i abandoned it

mortal bone
#

oh, that is cool

#

just shows the leagues you are in?

grave wren
#

yes

#

thats what made me think it doesnt exist

#

because i didnt have one back then

mortal bone
#

installing 2019 preview to see how fast the parser is haha

#

in .net core 2.1 parsing ~1.5mb with newtonsoft.json takes ~20ms

simple ravine
#

I pasted the file I used Emmitt if you wanna try and compare

#

I can also post the code I used, so you can baseline with your hardware

mortal bone
#

sure, if you want. I have a simple stash parser somewhere

simple ravine
#

yeah I was looking for mine that I made before, but I couldn't find it

#

I didn't look very hard

#

I made like 5 different iterations on the ggpk and dat parser stuff, and some other stuff inbetween

#

and I think it was like over a year ago if not more since i was dabbling with the stash data

#

or well, before the delay was introduced

mortal bone
#

Yeah, I have one from some time ago as well. There were a lot of fields added since then

#

Mostly bools, so it wasn't too bad

simple ravine
#

ugh yeah, but no breaking changes in the structure right?

mortal bone
#

Na

simple ravine
mortal bone
#

Just additions from what I could tell

#

Had to install the preview vs 2019

#

Didn't have it

simple ravine
#

yeah, it think u need to install .net core 3 separately iirc

mortal bone
#

Yep, I have preview 6

simple ravine
#

also, new stuff has wpf designer for .net core 3 ๐ŸŽ‰

mortal bone
#

oh god white visual studio

grave wren
#

emmitt saved my eyes

simple ravine
#

lol, I had a presentation at work, and was showing some code on the projector

#

white works best then.

#

then I closed my laptop and went home, opened visual studio

#

and got flashbanged.

#

apparently, it syncs.

mortal bone
#

Yeah

#

was also giving a presentation haha

#

was really confused why it was white all of the sudden

grave wren
#

i presentation mode myself in intellij because dumbass me thought ctrl+alt+p was a wise hotkey choice

#

it always is

#

according to reddit

#

competition blocked by xyz

#

heard the news here first

mortal bone
#

@simple ravine 42ms on average to parse that file

grave wren
#

yes. its basically public knowledge now (memeing around :p)

simple ravine
#

that's pretty damn good

#

using newton or system.text.json?

mortal bone
#

System.Text.Json

simple ravine
#

JsonDocument.Parse(...)?

mortal bone
#

JsonSerializer

#

I will do document

#

also, ran at like 20mb of memory

simple ravine
#

right, what models did you use?

#

i'd like to try the same, but can't find mine

#

wanna share?

mortal bone
#

project is pretty shit haha

#

yeah, one sec

#

ok, so newtonsoft is at 250ms on average haha

simple ravine
mortal bone
#

although, it doesn't take in a span<byte>

wind garden
#

what version?

#

I thought newtonsoft did a new impl using span<T>

simple ravine
#

newtonsoft won't move to Span, according to himself

mortal bone
#

12.0.2

wind garden
#

aww

#

then it'll always suck

simple ravine
#

hence why they made the new System.Text.Json

wind garden
#

ya

#

installing VS2019 now!

simple ravine
#

hehe, i'm converting more and more people by the day

wind garden
#

meh, I'd been meaning to

#

just kept forgetting

simple ravine
#

i had a member in lifting discord who's also a dev, he was still on 2015

#

i threatened to demote his ass

wind garden
#

lol

simple ravine
#

blasphemy.

wind garden
#

the difference between 2015 and 2017 was huge

mortal bone
#

you want the types or the whole project?

#

I have been on 2019 for a while

wind garden
#

2017 was the major turnaround for the MS dev team

simple ravine
#

whatever is most convenient for u

#

2019's performance gains are also nice

wind garden
#

ya

#

just wish they'd make a new unit test executor

#

moreover, new UI

simple ravine
#

i think it works alright, tbh

#

they did some changes to it

wind garden
#

I'll look at it

simple ravine
#

but yeah, could need some more love

grave wren
#

wow not even programming in borland c++ builder 1999

wind garden
#

it's the reason I've used resharper all these years

grave wren
#

not even a real dev :^)

simple ravine
#

borland, makes me think of pascal back in the days

#

where you could inline asm directly

wind garden
#

installing 2019 on my home system marks the beginning of the end of 2017 at work

#

I'm going to get used to 2019 and make everyone else upgrade at work

mortal bone
simple ravine
#

thanks emmitt

mortal bone
#

ye

simple ravine
#

when i called and congratulated my father on his birthday the other day, i asked if he recalled when i started programming

#

we concluded it was about 25 years ago.

#

back then we didn't have visual studio ๐Ÿ˜‚

wind garden
#

I started when I was 10

#

using AppleScript

#

lollll

#

guess that was 22 years ago

simple ravine
#

thinking how far we've gotten, or how far we should've gotten perhaps

mortal bone
#

I start about 13 years ago

simple ravine
#

what did you start with emmitt?

#

mine was quickbasic in dos

mortal bone
#

haha I started on the web

#

DreamWeaver then moved to really website stuff php, js, mysql

simple ravine
#

ah

wind garden
#

ah DreamWeaver

hazy fog
#

I started with visual basic 6

mortal bone
#

I was making a very shitty online game haha

grave wren
#

brief look at jass and then c in school

#

\o/

mortal bone
#

let me see if I can't find some screenshots

hazy fog
#

then I made the church website in frontpage

wind garden
#

my dad is a ColdFusion web dev

hazy fog
#

dreamweaver pfft

wind garden
#

now it's so niche

simple ravine
#

i was interviewing someone a couple of years ago

#

said he was using dreamweaver

#

... he didn't get the job

wind garden
#

on windows ME?

#

yes, mostly legacy code

simple ravine
#

I think it is to some extent.. but hey, Java is also still used

#

runs and hides

wind garden
#

thankfully my dad got a job that's split between maintaining CF and new work using javascript/angular

grave wren
#

yeah lets turn off all java software and check how nice your stuff still runs :p

wind garden
#

so he's learning new stuff to go with his old stuff

simple ravine
#

@mortal bone did the serializer saturate the properties properly with your PascalCased names?

#

otherwise, you likely have misinformed numbers

mortal bone
#

oh shit

simple ravine
#

the more neutral one would likely be pasing a JObject and use JsonDocument

mortal bone
#

I didn't think about that

simple ravine
#

and compare

mortal bone
#

Yeah, rip

#

does system.text.json not have json property?

simple ravine
#

it has some namingconvention thing, but i dont think it has attributes yet... it's spanking fresh

#

going minimum viable product style with it

#
|          Method |      Mean |     Error |    StdDev |
|---------------- |----------:|----------:|----------:|
| UseJsonDocument |  37.73 ms | 0.5268 ms | 0.4928 ms |
|   UseNewtonSoft | 287.52 ms | 1.4175 ms | 1.3260 ms |
mortal bone
#

[JsonPropertyName()] instead of [JsonProperty()]

#

works

#

~263ms with JsonSerializer fully saturated

simple ravine
#

one-off?

mortal bone
#

100 iterations

#

a couple times now

simple ravine
#

damn thats not awesome

#

wonder if you can change the strings to Memory<byte> or Memory<char> and working

mortal bone
#

Yeah, it is the same. JsonDocument is fast as hell though

simple ravine
#

Do you have one that is smaller than 1MB?

mortal bone
#

No, I have skill trees though

simple ravine
#

I think you will see greater differences when it doesnt have to go outside of the ArrayPool which is 1MB

#

could try yea

mortal bone
#

I can. They are a bit of a pain because I had to write a serialize for them

#

not all the types in the object are the same

simple ravine
#

ooff

mortal bone
#

Actually, I can serialize them all with newton and dump the clean files out

fossil epoch
#

May be of interest here.. I did a little writeup of how PoB Item Tester works. It's an AutoHotKey script that drives Path of Building as if it were a headless program with a whole mock UI framework. Kinda crazy the amount of hackery, I'm impressed. https://nelsonslog.wordpress.com/2019/06/18/how-pob-item-tester-works/

#

(TIL all of Path of Building is in Lua. That is remarkable.)

ornate gale
#

holy crap

#

I thought about throwing something together like this, maybe even try to bundle it in a browser extension

#

now that I look at his repo.. glad I didnt even start. templarLul

fossil epoch
#

I admit if I were faced with the problem of "mock out the UI for Path of Building so you could run it headless and script it" I'd just turn my computer off and go for a walk into the sea.

simple ravine
#

I tried getting the headless thing to work that Openarl put in there, but I couldn't get it to work in the alotted time I gave it

#

I think rasmuskl did

fossil epoch
#

Oh does PoB have official support for this headless stuff? This mock UI thing looked pretty hacky

ornate gale
#

for the web version maybe ?

simple ravine
#

yeah, not documented when I looked though

#

@mortal bone trying to parse with ur model, im getting: System.Text.Json.JsonException: The JSON value could not be converted to System.String. Path: $.stashes[0].items[0].properties[0].values[0][1] | LineNumber: 0 | BytePositionInLine: 940.

#

did u get that too?

ornate gale
#

the DPS search blows my mind though shock

mortal bone
#

Yeah, because there system.text.json won't convert ints to strings or strings to ints

simple ravine
#

ffs

mortal bone
#

you will have to change it to object[][]

simple ravine
#

object it is

mortal bone
#

Yeah

#

Super annoying because newtonsoft will attempt type conversions

fossil epoch
#

Gimiz, you mean in PoB item tester? it reminds me of the old calculators we ran in World of Warcraft where you'd boil all the stats on an item down to one number. "DPS points" or "Tank points" or whatever.

ornate gale
simple ravine
#

I think there is a way to make it do it in system.text.json too, but it's opt-in

#
|               Method |      Mean |     Error |    StdDev |
|--------------------- |----------:|----------:|----------:|
|   SimpleJsonDocument |  37.98 ms | 0.6291 ms | 0.5885 ms |
|     SimpleNewtonSoft | 244.70 ms | 2.4210 ms | 2.2646 ms |
| PropertiesNewtonSoft | 106.64 ms | 0.3844 ms | 0.3408 ms |
| PropertiesSystemJson | 140.83 ms | 1.3462 ms | 1.2593 ms |
#

wait what, system.text was slower on mine

fossil epoch
#

yeah that, Gimiz. it's great. I keep looking for ways to tell me if an item is good or crap, this kind of calculation is a big help in simplifying things.

simple ravine
#

I renamed the properties on mine though

mortal bone
#
JsonSerializer.Parse(bytes, typeof(Models.SkillTree))
3.7.0
    File Size    : 1568kb
    Parse Time   : 39.14
    Iterations   : 100

JsonConvert.DeserializeObject<Models.SkillTree>(bytes)
3.7.0
    File Size    : 1568kb
    Parse Time   : 63.8
    Iterations   : 100
simple ravine
#

I think it's slightly faster if you do JsonSerializer.Parse<TypeHere>(json);

mortal bone
#

36.95ms

#

with that change

simple ravine
#

im just annoyed that it's slower than newtonsoft for these big ones

mortal bone
#
JsonSerializer.Parse<Models.SkillTree>(bytes)
1.0.0
    File Size    : 952kb
    Parse Time   : 23.41
    Iterations   : 100

JsonConvert.DeserializeObject<Models.SkillTree>(bytes)
1.0.0
    File Size    : 952kb
    Parse Time   : 37.33
    Iterations   : 100
#

much faster on small files

simple ravine
#

I was expecting a little faster tbh

mortal bone
#

It could be the Attribute conversion tbh

#

don't really want to rip that out haha

simple ravine
#

hehe

simple ravine
#
|               Method |     Mean |     Error |    StdDev |
|--------------------- |---------:|----------:|----------:|
| PropertiesNewtonSoft | 35.42 ms | 0.2903 ms | 0.2715 ms |
| PropertiesSystemJson | 28.26 ms | 0.0773 ms | 0.0646 ms |
#

so if I remove the Items[] and just take the base stash stuff, that's the result

#

it's clear the reflections are the culprit.

worthy cape
#

Whoever designed .tsi files hates me. So many fields, starting to get a feeling they invent new ones out of spite ๐Ÿ˜ƒ

#

pets uncle HashMap

hazy fog
worthy cape
#

Was going through all the files, adding fields as I went. Flipped the table when I ran into Environment[1-7], at which point pretty much all the 33 fields were optional.

#

No point in having an actual struct when nothing's guaranteed.

mortal bone
#

That is pretty much everything in the data files

#

just so many extra fields

simple ravine
#

@chrome topaz currently all the stash grabs are at max size yeah?

cursive ferry
simple ravine
#

which file did you use?

cursive ferry
#

the stash-test.json

#

damn, i might be doing something wrong but .net is fast tho

simple ravine
#

wonder why I am getting like 100ms then

#

are you running your go thing in a debugger, perhaps?

cursive ferry
#

if you wanna try

#

just doing dotnet run at the base of the project (I installed .net sdk but not a fan (more like a noob) of VS BUT using VScode so far so good)

simple ravine
#

ah that's my code ๐Ÿ˜‚

cursive ferry
#

ha okok xD

simple ravine
#

but you have an issue

cursive ferry
#

please tell me sensei ๐Ÿ˜ต

simple ravine
#

you need to replace all the [JsonProperty(...)] with [JsonPropertyName(...)]

#

because now it won't fill the properties

#

you should get around ~100ms

cursive ferry
#

mhm do i need to import something ? just renaming rise an error 'JsonPropertyName' could not be found

#

^ that's why i need to use VS haha...

mortal bone
#

Yeah, you need the VS 2019 Preview to run .net core 3.0

#

shouldn't say need haha

cursive ferry
#

.NET Core SDK (3.0.100-preview6-012264) that's the famous preview7 I need isnt it ?

mortal bone
#

I was using preview6

#

preview7 you need to grab from repo

wind garden
#

what's new in preview 7 vs 6?

simple ravine
#

unsure

#

you can use preview6 as well

#

I was trying to get the tree shaking linker to work with preview6 and it borked for some reason, so installed 7

wind garden
#

I don't even see preview 7 on the github

#

did you just pull from the repo?

#

or is there an installer package

simple ravine
#

that's preview 7.. really small font

wind garden
#

ohhhh diff repo

#

core-sdk, not core

#

so it's just trunk, not an official release yet

simple ravine
#

correct

wind garden
#

i've never undrestood why wpf never included a NumericUpDown control

simple ravine
#

yeah, there are some things u wish they had built in

simple ravine
#

Anyone know why Item.Property.Values have List<List<Object>> and not a more specific type?

#

Looking at the JSON, I can only see similar to this:

#
{
    "name": "Level",
    "values": [
        [
            "75",
            0
        ]
    ],
    "displayMode": 0
}
#

I never see any Values with more than 1 element in them, and in turn 2 values, 1 string and 1 int

mortal bone
#

That is one of the most frustrating fields

#

I know how to do it in Newtonsoft haha

simple ravine
#

I mean, have you seen any values where it's 2 elements or more in the top level of .Values?

#

otherwise I could simplify it by hand

mortal bone
#

I haven't

#

Although, I don't mess with that stuff very often

simple ravine
#

and the inner-most seems to have a pair, always

mortal bone
#

Yeah, the inner pair is always a string int

simple ravine
#

@polar island / @chrome topaz, perhaps?

#

in the inner or the outer?

#

I'm seeing this:

{
    "name": "Elemental Damage",
    "values": [
        [
            "44-88",
            5
        ]
    ],
    "displayMode": 0,
    "type": 10
}
#

it's still just 1 element, and then 1 element

#

ah I found one

#
{
    "name": "Elemental Damage",
    "values": [
        [
            "40-68",
            4
        ],
        [
            "11-223",
            6
        ]
    ],
    "displayMode": 0,
    "type": 10
}
#

well, those numbers... would be nice to have some documentation on this *cough*

#

hmm, any idea of the "type" on the property itself? there don't seem to be any information on that one yet

#

I assume that has to do with the color you mentioned?

#

hm ok

cursive ferry
#

160ms with JsonConvert.DeserializeObject but these weird ["40-68", 4] things are working

#

before deserialisation 5593597 after serialisation 5573650 :/

golden yacht
#

Just pull the next one immediately?

mortal bone
#

Yeah, I would just read enough bytes to get the changeset id then start the next request.

simple ravine
#

160ms more or less, I mean... I think there are other bottlenecks

simple ravine
#
Custom                         39.606
System.Text                   129.984
#

got one that's a bit faster, so you can initially get the next_change_id quicker

#

trade-off being you process the actual items a little slower afterwards

worthy cape
#

@simple ravine Thread it off ๐Ÿ˜›

simple ravine
#

exactly

#

this was pure masochism to write

mortal bone
#

lol that thanks comment

#

they aren't even my models anymore

simple ravine
#

o well

#

your copy/paste

#

whatever lol

#

and then just

        private static void ParseCustom(string str)
        {
            var d = JsonDocument.Parse(str);
            JsonElement r = d.RootElement;
            
            var s = new N.StashTabChangeset(in r);
        }
#

I wouldn't bother though, too much code to maintain

mortal bone
#

Yeah, that is pretty gross

#

That is way more complicated than Newtonsofts custom parsing stuff

simple ravine
#

well, depends if you want to transform it into something more usable than the stored stuff immediately or offload it to something else later

#

I'm gonna try Jil

golden yacht
#

isn't c# PascalCase for public and camelCase for private ๐Ÿ‘€

#

im getting triggered

simple ravine
#

yeah it is, I just tried to optimize the attribute usage away

#

weren't much gain there either

#

I would clean that up again

golden yacht
#

its okay im a filthy nodejser anyway

simple ravine
#

eww

golden yacht
#

๐Ÿ˜Œ

mortal bone
#

Yeah, that is why I can JsonProperty tags on the one I sent here

#

although, I tend to prefix privates with _ because work

golden yacht
#

are there any command line parameters for running pob?

#

I want to generate a pob build string from a character url

mortal bone
#

There is a headless version

golden yacht
#

Yeah I saw that I was just making sure I wasn't missing an easy solution before I went spelunking through a bunch of lua code

mortal bone
simple ravine
golden yacht
#

Oooo thanks these look helpful

mortal bone
#

same guy

simple ravine
#

oh

#

which this guy didn't use I think

fathom spruce
#

hrm, using that with a browser extension would be nifty. embed the results for each item in the trade page. possibly add some sort features

mortal bone
#

I need to implemented the picking of what nodes are what under when in the timeless radius, but you can atleast share some information about jewels

#

I need to work on the URLs because they are a tad bit large

#

Regular1 are replaced for Templar/Eternal and Regular2 are replaced for Eternal as well as the keystones

fossil epoch
#

FWIW both versions of headless POB code we're talking about seem to be the same code origin. They both work by invoking POB Lua directly, ie they assume you're already running in a Lua VM. No reason you couldn't make a standalone program do that though and the interface to it externally from your favorite web server scripting language, etc.

simple ravine
#

Emmitt, you're a smart guy. Figure out how to use PoB from C#!

#

using HeadlessWrapper.lua

mortal bone
#

Nlua

#

I do belive

simple ravine
#

yeah, i found that as well... but i have no idea how that'd work

#

i tried before, with no luck

mortal bone
#

I think you would write a wrapper for the wrapper and use that

#

implement the functions straight across

#

no idea

#

I haven't ever used lua in c#

golden yacht
#

yeah ill probably just write some lua

#

its such a nice language anyway~

mortal bone
#

anyone know of a good way to shorten urls with a db?

fathom spruce
mortal bone
#

damn, I mistyped that so hard haha

#

meant without a db

fathom spruce
#

welp

mortal bone
#

good read though

#

I will probably just use tinyurl or something

#

a big ass url

#

that is what they currently look like

#

Yeah, it is a lot of data

#

rip

#

I use FF

#

the website is very fast lol

fossil epoch
#

fwiw @mortal bone that data is literally base 64 encoded JSON. if you decode it, gzip, and re-encode it base 64 it gets to about 1000 bytes. that will fit as a URL in most modern systems but it's kinda awkward.

mortal bone
#

Yeah, it is just a straight encoding

#

I could also stripe out a lot of data

#

probably

fossil epoch
mortal bone
#

Yeah, I am going to end up using lz-string I think

#

I could always try and minify the object that I am encoding

golden yacht
#

dont click on that it makes mustard gas

mortal bone
#

flatten it out I mean

#

yeah, for skill tree urls you can to replace + with - and \ with _ when encoding

worthy cape
#

@polar island I like how your URL spells out "NEWLAD" in the middle.

golden yacht
#

damn poeapp looks great

mortal bone
#

it is a special string in every url lol

#

you talking like that?

#

oh, I see

#

nvm

#

I don't think they are hosted

#

I would use pypoe

#

It reads from a ggpk in a local directory as far as I know

#

Ah, I don't know then.

worthy cape
#

Can't help you there, I just traverse the GGPK offline.

mortal bone
#

lz-string is ugly as hell, but a lot better than 2.5k characters lol down to ~800

#

Yeah

#

~175 characters lol

#

~1k with a full build. The major problem is I have to store the tree url

compact isle
#

wow this is a lot of discussion to scroll through to find my mentions

#

@distant rock our OAuth only supports the /api/profile API at the moment so it still won't be of use to you guys. I'm looking into extending it but it's not high priority atm

#

@velvet fog challenges information probably not, depth and depth solo sure

#

@fickle yew I'd have to test to make sure including that information doesn't slow it down too much, currently we don't hit the web DB when caching the ladder

golden yacht
#

Good morning Novynn

#

๐Ÿ˜Š

compact isle
#

hi synnro

golden yacht
#

It is very cold this morning.

mortal bone
#

Like it has been like 27c here

#

Good luck with your winter

simple ravine
#

This one's pretty handy, Novynn

mortal bone
#

Should have pinged him haha

simple ravine
#

I've been cruel enough with pings today ๐Ÿ˜‚

compact isle
#

oh wow I always just type in "mentions:Novynn#0001" into the search bar ๐Ÿคฆ

#

haha there's a button for it of course!

#

I want to get back into C# with all this cool C# discussion

simple ravine
#

hehe, we learn something new everyday

#

It's certainly a good time to pick it up, with all the good things happening to .NET Core (and with .NET 5 consolidating them both soon-ish)

compact isle
#

it might be a good candidate for multithreading the stash API pull for the trade site

#

currently that stuff is a single threaded PHP script ๐Ÿ˜…

simple ravine
#

certainly

mortal bone
#

Yeah, definitely

simple ravine
#

C# makes threading much easier than most languages/frameworks

compact isle
#

if you target linux does it have to pull in a bunch of libraries to function? Or can you bundle them into a single executable

mortal bone
simple ravine
#

you do dotnet publish -r linux-x64 -c Release --self-contained

#

this way, you get a larger publish, but you don't need any prerequisites (afaik)

mortal bone
#

Yeah, it rolls all the prereqs in

compact isle
#

looks perfect

simple ravine
#

I would also look at doing .NET core 3, rather than 2, as it'll be stable this fall

#

for a bit more heavy-duty data ETL stuff, I would recommend looking a bit into .NET TPL stuff, an unsung hero for these kind of things

golden yacht
#

I wish there were webhooks for stuff like accounts joining a guild ๐Ÿ˜ฉ

simple ravine
#

I wish there were better officer role stuff. Hopefully that's something coming one day

#

Today, an officer is only capable of inviting people, that's it.

golden yacht
#

well yeah, but that's off-topic wishful thinking ๐Ÿ˜‚

worthy cape
#

@simple ravine Move to NZ, solve all GGG's problems.

simple ravine
#

I don't think that's an option with work visas etc

#

but I could do it remote, for sure

worthy cape
#

Aren't they easier to set up if it's for a specialized role that can't be sourced domestically much?

simple ravine
#

hmm, maybe

#

what about fiance and kid?

mortal bone
#

I asked about working remote, and bex said they don't allow it :(

simple ravine
#

uh, it's 2019, not 1989

worthy cape
#

I could see having kids and roots kind of being a hamper.

mortal bone
#

Was going to apply for the web dev job, but I can't move

fathom spruce
#

working remote is how leaks happen tbh

mortal bone
#

Erm

#

What

simple ravine
#

I don't think I agree with that

mortal bone
#

I don't agree with that at all

fathom spruce
#

I am not saying it's guaranteed to happen but it does open a huge area of attack

mortal bone
#

I work remote a lot, and I have no work data on my personal pc

#

2FA VPN + Remote Desktop

fathom spruce
#

yeah there's proper ways of doing it

simple ravine
#

I don't want to RDP from Sweden to NZ LUL

#

aint gonna happen

chrome topaz
#

but if you work remote and leak stuff they can't personally beat you up

mortal bone
#

Yeah, I rdp a very small distance, and I don't really notice it much

golden yacht
#

tfw live in nz but don't want to live in auckland

mortal bone
#

Commute?

simple ravine
#

I wouldn't want to 'step down' to being a regular dev again though.

#

that sounded condesending now that i read it

fathom spruce
#

the longest RDP I've done for work is MA to TX, it worked pretty well

compact isle
#

I RDP from home and it lags

#

I need fibre :(

golden yacht
#

wtf how do you not have fibre

mortal bone
#

I have fiber

#

It is nice

simple ravine
#

it would hurt to lose my connection for sure

#

it's like when u move from 60hz to something better

compact isle
#

dealing with home owners is painful

golden yacht
#

oh right

#

that's bizzare though

#

isn't it literally free to install?

mortal bone
#

" I don't want to pay for something 10x better because I don't use it"

compact isle
#

yup

golden yacht
#

like chorus just rock up to your house and shove it in

fathom spruce
#

HOA... I am sorry

compact isle
#

also raises your property value

mortal bone
#

Oh, wait wut

golden yacht
#

yep

mortal bone
#

It is free to have installed?

compact isle
#

in NZ yeah

simple ravine
#

oh wow

#

(โ•ฏยฐโ–กยฐ๏ผ‰โ•ฏ๏ธต โ”ปโ”โ”ป

mortal bone
#

Damn, we are still paying on a bond they passed for it

frigid nova
#

Where you based out of Emmitt?

mortal bone
#

Oregon

#

United States

frigid nova
#

oh nice, most of the tech is concentrated in portland?

golden yacht
#

I dunno I'm also not a great programmer so that's the real reason ๐Ÿ˜‚

mortal bone
#

Yeah, all the tech is in Portland

#

Which sucks because I am a good 1hr-1.5hrs away with traffic

fathom spruce
#

didn't portland do municipal fiber? or was that just something they were looking at

mortal bone
#

My current road trip to work, if I go in, is 104 miles

frigid nova
#

hotdamn

gilded herald
#

about the same here

#

I feel your pain.

mortal bone
#

I dont think Portland passed the bill

fathom spruce
#

that's a shame

simple ravine
#

I have 5 minutes to the office, but I still work from home a couple of days a week

gilded herald
#

luckily im fully remote, 5 mins away sounds a bit too close

mortal bone
#

Yeah, I work mostly remote now

#

Go in like once or twice a month

simple ravine
#

I go to customer meetings, gather requirements and crap, then I go home and draw boxes with lines between them, and write things. Sometimes I write some code.

fathom spruce
#

I don't know how you do it. I worked remotely for 4-5 years and hated it

simple ravine
#

No need for RDP or things like that fortunately

golden yacht
#

See this is why I'm a bad programmer. I draw circles with lines between them ๐Ÿ˜ 

frigid nova
#

๐Ÿคฃ

simple ravine
#

Squares are easier to get right, for sure

mortal bone
#

Working remote is nice. I don't have to put in 40hrs if I don't have the work

#

In the office you have to look busy

fathom spruce
#

I always had a problem with separating work from home. even a dedicated office didn't really help

simple ravine
#

At home I have bigger screen estate, it's quiet and I get things done easier

#

No colleagues asking questions how to do things ๐Ÿ˜‚

fathom spruce
#

just lol if you're not hounded on slack with questions

cosmic saffron
#

some people even rent dedicated working spaces

simple ravine
#

I was nagged by a dev today about Azure KeyVault

#

but it was a little trickier one, because he couldn't add the app he added Managed Identity Service, but he couldn't find it when adding to the Security Principles as he didn't have read rights to Azure AD

#

had to show him to do it through CLI instead

wind garden
#

can you programmatically write to a .net core appsettings.json?

#

or is it meant to be read-only?

mortal bone
#

I know you can can add a json file to the config builder and do your configs that way

fathom spruce
#

with the built in JsonConfigurationProvider? no

#

you can write your own that implements saving tho

mortal bone
#

Yeah, the default won't write if you update the config

fathom spruce
#

copy that and override Set(string key, string value)

#

alternatively add your own saving functionality and call it whenever /shrug

simple ravine
#

Is it for a desktop app?

wind garden
#

I just wrote a Save/SaveAsync method that writes to the appsettings.json

#

using the shiny new JsonSerializer

simple ravine
#

If it's a desktop app, you should probably separate user settings and app config, and store the information in C:\Users\username\AppData...

wind garden
#

nice I'll try that

#

since .net core 3 supports wpf

#

what do you do if you want to write a wpf library?

#

.net standard doesn't support wpf right?

simple ravine
#

.net standard is agnostic, so yeah

wind garden
#

is it possible to make a .net core library?

simple ravine
#

yes

wind garden
#

oh sweet, output type library

#

lol

#

so simple

#

popular wpf framework libraries haven't been build yet for .net core 3

#

gotta download them from source and rebuild them targeting .net core

chrome topaz
#

so when wpf comes to .net core does that mean it's gonna work on linux?

wind garden
#

no

#

you sacrifice portability when you use wpf in .net core 3

#

but you gain all of the performance improvements of .net core

chrome topaz
#

that's unfortunate

simple ravine
#

there's Avalonia though

wind garden
#

that's basically a meme at this point

#

idk how many times I've heard, "There's Avalonia...."

simple ravine
#

linux desktop is a meme

wind garden
#

only thing Avalonia has in common with wpf is xaml

#

different framework, different beast

chrome topaz
#

2019 is the year of linux desktop

rapid pagoda
#

$(( $(date +%Y) + 1 )) is the year of the linux desktop

chrome topaz
#

even windows runs linux today

#

what more do you need

rapid pagoda
#

WSL: Linux on the desktop, but not the way anybody expected it to happen

chrome topaz
#

I like how one of the videos has an anime picture in the background

#

they know their target audience well

fossil epoch
#

Ya know, this is a pretty good little Discord channel community. TY>

wind garden
#

yessss.....just about finished converting my WPF app to .Net Core 3

#

most of the work is converting from WCF to...not....WCF

fathom spruce
#

rip WCF

rapid pagoda
#

you .NET people will probably all explode when you hear what language my GGPK toolchain is written in ๐Ÿ˜›

fathom spruce
#

php?

rapid pagoda
#

close. Perl

fathom spruce
#

(the worst I could think of)

#

oh wow

#

Perl isn't that bad, it just requires several master level degrees to understand

mortal bone
#

Lol hope you commented that code ;)

#

The only thing worse than writing Perl is reading it...

grave wren
rapid pagoda
#

there are some legitimate questions to be asked about buyers who seem to be unnaturally quick to whisper offers. this, however, is not one of those questions

grave wren
#

You give some too much credit with the understand statement

mortal bone
#

Well, your delay is only as long as you can aggregate the 3 trade sites

#

I don't think it would take much to write a program or a script to connect and aggregate from all the trade services

#

All web sockets as far as I know

fathom spruce
#

would explain why some people get items first, different parsing speeds on the trade sites

#

not going to lie, I end up going back to poeapp from the official site this league

mortal bone
#

I don't trade too often

#

I tend to use the official site

fathom spruce
#

yeah me too. I don't have any concrete evidence but it's felt super slow vs 3rd party ones this league

mortal bone
#

The mod separation is really nice and it sucks everyone can't have that

#

I sent a cake once lol

#

There is a lot more people in the office now though, so rip you

rose sapphire
#

@simple ravine for 15 years it's not a meme, but a pleasure ๐Ÿ˜‰ (linux desktop)

golden yacht
#

That thread is a gem @grave wren

fickle yew
#

@compact isle That makes sense. It's was also to save you from all my lame private requests... Also can confirm that a c# multithreaded fetcher works wonders. It's what ninja uses. Json parsing doesn't matter that much though.. I just throw it on a queue the second I fetch so it can keep on going.

#

That 1 second rate limit makes it a bit more complicated though. Would be great if it was a bit longer ๐Ÿ˜‰

distant rock
#

@compact isle Thanks for the response!

#

Anyone here with any experience in setting the POESESSID cookie locally for .pathofexile.com? Trying to create a web-based login for Exilence but not sure how to go about it right now.

#

Can't seem to set cookies in chrome this way since it violates the security

wind garden
#

does anyone know how you deserialize category?

#
{
    "verified": false,
    "w": 1,
    "h": 1,
    "ilvl": 0,
    "icon": "https:\/\/web.poecdn.com\/image\/Art\/2DItems\/Currency\/CurrencyModValues.png?scale=1&w=1&h=1&v=0ad99d4a2b0356a60fa8194910d80f6b",
    "league": "Legion",
    "id": "77ae4e43f5083113234fd14eaaac36d2014c2fe0cdea69d28910153af7bb77f3",
    "name": "",
    "typeLine": "Divine Orb",
    "identified": true,
    "note": "~skip ",
    "properties": [{
        "name": "Stack Size",
        "values": [["8\/10",
        0]],
        "displayMode": 0
    }],
    "explicitMods": ["Randomises the numeric values of the random modifiers on an item"],
    "descrText": "Right click this item then left click a magic, rare or unique item to apply it.",
    "frameType": 5,
    "stackSize": 8,
    "maxStackSize": 5000,
    "category": {
        "currency": []
    },
    "x": 20,
    "y": 0,
    "inventoryId": "Stash1"
}]
#

I've tried this

public partial class Category
    {
        [JsonProperty("currency")]
        public object[] Currency { get; set; }
    }
#

ah got it

fathom spruce
#
    internal class Category : ICategory
    {
        [JsonProperty("maps")]
        public IEnumerable<string> Maps { get; private set; }

        [JsonProperty("gems")]
        public IEnumerable<string> Gems { get; private set; }

        [JsonProperty("flasks")]
        public IEnumerable<string> Flasks { get; private set; }

        [JsonProperty("Cards")]
        public IEnumerable<string> Cards { get; private set; }

        [JsonProperty("currency")]
        public IEnumerable<string> Currency { get; private set; }

        [JsonProperty("accessories")]
        public IEnumerable<string> Accessories { get; private set; }

        [JsonProperty("jewels")]
        public IEnumerable<string> Jewels { get; private set; }

        [JsonProperty("armour")]
        public IEnumerable<string> Armour { get; private set; }

        [JsonProperty("weapons")]
        public IEnumerable<string> Weapons { get; private set; }
    }
#

there's a ton of categories

wind garden
#

but they never have anything in them

fathom spruce
#

unpack it as an object

wind garden
#

this is what i needed

public Dictionary<string, object[]> category { get; set; }
fathom spruce
#
        [JsonProperty("category")]
        public ICategory Category { get; private set; }
#

or that :v

wind garden
#

then I can query the dictionary to see what key exists

golden yacht
#

SHOULDA USED JS

wind garden
#

@simple ravine System.Text.Json doesn't appear to be able to serialize enums as strings...

#

and there's no custom converters

fathom spruce
#

write your own?

#

wait

#

no as in System.Text.Json doesn't have that feature?

#

oh my

wind garden
#

ya...

grave wren
#

@hazy fog

hazy fog
gray glade
#

hi, did PoE integrated a OAuth system to login with a third-party service?

hazy fog
#

I believe so but the connection information isn't public afaik. you'd need to contact Novynn for access I believe.

#

@polar island am I right

gray glade
#

because I remember using a service (I think poemap.live) and was redirected to poe's website with some sort of oauth

hazy fog
#

I was just thinking that poeapp

gray glade
#

also @polar island , do you know if they can authorize upcoming third-party services for oauth?

#

or did they close/restrict the oauth api for live and production ready services only?

hazy fog
#

if you desire access to the oauth login please send your requirement and usage to roryv@grindinggear.com He is handling oauth2

#

now we do

gray glade
#

thanks @hazy fog , all what I needed!

hazy fog
#

LUL but poeapp is the one who linked it

gray glade
#

๐Ÿ˜„

fathom spruce
#
F:\Development\LibPob\Playground\bin\Debug\netcoreapp2.2\PathOfBuilding\Modules/Common.lua:(277,1-278,83): pattern too complex
#

so far, only to be stopped by jsonToLua

golden yacht
#

F

simple ravine
#

what you do @fathom spruce

fathom spruce
#

C# bindings for PoB

#

there's so many work around and hacks...

simple ravine
#

if you get it to work, please enlighten me

fathom spruce
#
    -- Hack to replace jsonToLua, MoonSharp can't handle the supplied pattern
    if fileName == "Modules/Common" and PatchJsonToLua ~=nil then
        PatchJsonToLua()
    end
#

:\

simple ravine
#

u using the HeadlessWrapper.lua thing?

fathom spruce
#

kind of?

#

there's quite a bit more to add in

#
            _script.Globals["bit"] = _script.DoFile("Assets/bitops_lua/funcs.lua");
            _script.Globals["curl_shim"] = _script.DoFile("Assets/curl_shim.lua");
            _script.Globals["PatchJsonToLua"] = (Action) PatchJsonToLua;

            _script.DoFile("Assets/PreLaunch.lua");
            _script.DoFile("Launch.lua");

            _script.Globals.Get("launch").Table["CheckForUpdate"] = (Action<bool>) CheckForUpdateHook;
            _script.Globals.Get("launch").Table["DownloadPage"] = (Action<string, Closure, string>) DownloadPageHook;

            _script.DoString("RunCallback(\"OnInit\")");
            _script.DoString("RunCallback(\"OnFrame\")");

            _script.DoFile("Assets/PostLaunch.lua");
#

that's my launch sequence so far

simple ravine
#

oh, I thought you just "used" HeadlessWrapper.lua and called it a day

fathom spruce
#

load in bitops compatible library, stick in a curl lua shim, patch json to lua, do headless pre & post launch.lua

#

also hook check for update and download page, since those don't work and need to

simple ravine
#

are you able to hook them to C# methods?

fathom spruce
#

yeah

#

using MoonSharp, it's a mostly complete 5.2 lua implantation completely written in .net

simple ravine
#

ooh

fathom spruce
#

working my way through patching all the little problems that come up

#

so far it loads all the modules and downloads the passive tree. after I fix jsonToLua not sure what else will break

simple ravine
#

that feeling is quite familiar yeah

fathom spruce
#

it's real rough so far. just trying to get the bugs worked out before cleaning it up

simple ravine
#

Yeah, this is what I got stuck at before, when trying:

#
MoonSharp.Interpreter.SyntaxErrorException: 'unexpected symbol near '#''
fathom spruce
#

remove #@ SimpleGraphic from the top of launch.lua

#

I'll eventually strip it out via the script loader. it's the only instance though

#

btw, anyone familiar with lua know wtf that's supposed to do? I've literally never used the language before now

simple ravine
#

hehe me neither ๐Ÿ˜„

golden yacht
#

what what is supposed to do?

fathom spruce
#
#@ SimpleGraphic

at the top of a lua file, for luajit

golden yacht
#

Oh, I haven't used luajit just lua ๐Ÿ˜…

simple ravine
#

Nice, it's running

#

Unfortunately a bit stressed for time at the moment, so I can't help with the given problem right now

golden yacht
#

in terms of lua # is the length operator. Don't think @ is used iirc

fathom spruce
#

naw, that's for jsonToLua

#

moonsharp doesn't like the complexity of the gsub

#

maybe you could help with this, trying to figure out how to patch the function but it's not showing up in the global table

simple ravine
#

so it's these patterns that it's complaining about, I guess:

return json:gsub("%[","{"):gsub("%]","}"):gsub('"(%d[%d%.]*)":','[%1]='):gsub('"([^"]+)":','["%1"]='):gsub("\\/","/"):gsub("{(%w+)}","{[0]=%1}")
fathom spruce
#

yeah

#

my plan was to patch jsonToLua to something in .net but I can't get a function to patch

simple ravine
#

there's also something called NLua, not sure if that'd be easier or not

fathom spruce
#

you'd have to use an older version of NLua, it's currently at 5.3

simple ravine
#

breaking changes?

fathom spruce
#

lots

simple ravine
#

this boggles me

#

breaking changes in minor versions

fathom spruce
#

there's a post some where from the author of luajit talking about how awful 5.3 is

chrome topaz
#

lua has breaking changes in every version

fathom spruce
golden yacht
#

wait

#

l assume you're executing the file after you load it ๐Ÿ˜ฐ

fathom spruce
#

wat? :v

golden yacht
#

loadfile returns the file as a function

#

you have to execute the function to populate the global table

fathom spruce
#

:V

golden yacht
#

local func, err = loadfile(fileName); func() jsonToLua()

#

sorry if its a dumb question

#

just making sure ๐Ÿ˜‚

fathom spruce
#

no

#

you're right

#

I am an idiot

golden yacht
#

oh LOL

fathom spruce
#
    local func, err = loadfile(fileName)

    if func then
        ConPrintf("EXECUTE THE FUNCTION YOU IDIOT")
    end
#

oopsie

golden yacht
#

its okay I've done it before

#

I thinkg dofile executes immediately

fathom spruce
#

thanks for the help

#

just saved me from a further 20 minutes of searching

golden yacht
#

hehe

#

no problem!

fathom spruce
#

there we go

#

@simple ravine want to write me some fancy json to lua C#? ๐Ÿ˜„

simple ravine
#

it still borks?

fathom spruce
#

I got the function, need to replace it with something in .net so MoonSharp doesn't error out

#

although, maybe this off the shelf lua json encoder/decode lib will work

simple ravine
#

check out codePointToUTF8

#

if you can translate that lol

fathom spruce
#

oh god

chrome topaz
#

does moonsharp have bitops?

fathom spruce
#

pure lua replacement

chrome topaz
#

that's gotta be pretty slow

fathom spruce
#

I mean, optimization can come later. there's plenty to do to speed it up

chrome topaz
#

hard to beat luajit

fathom spruce
#

no C# bindings for luajit

simple ravine
#

I know rasmuskl got it to work

#

unsure if he used luajit, but i know he did it in c# for poe.ninja/builds

fathom spruce
#

I mean, MoonSharp is alright for performance. it's not as fast as NLua but it does faster .net calls

chrome topaz
#

it's probably not a big issue if you're not running the ui

simple ravine
#

If I recall correctly, the 5.1 or 5.2 version had was not for .net core or something, the library I was testing last time

#

and I had a bunch of issues with the bit stuff, and first tried to patch it by editing the lua code, but there were so many places

fathom spruce
#

yeah, the best way to do that is to load a bitops replacement library or patch in functions from .net

#

I might do the latter once I get it working and perf it out

frigid nova
#

Does anyone know if there are any official posts from GGG about how curse priority works in party play? In my testing the description on the wiki is wrong.

wind garden
#

Nooooo

#

my NumericalUpDown control isn't working on .net core

#

after all the work of rebuilding the library ๐Ÿ˜ฆ

simple ravine
#

why not?

wind garden
#

not sure, just doesn't show up

#

regular textbox shows up

#

but this custom control doesn't

#

I decided I didn't actually need the up/down arrows

#

so I'm using a regular textbox with a behavior attached to only allow numbers

burnt hornet
#

anyone know how to enable original sounds in filterblade?

rose sapphire
#

@compact isle Hi, Is there any way to use oauth2 for Korean users or any alternative ways?

golden yacht
#

check the pin!!!!

fickle yew
#

@simple ravine Have you encountered Connection id "0HLNKU2MREIDA", Request id "0HLNKU2MREIDA:00000001": the connection was closed because the response was not read by the client at the specified minimum data rate. with .NET Core?

#

I've seen it quite frequently on ninja after Legion launched..

#

It'll 504 for a minute or so

#

Mostly when requests are > 1500 / minute

simple ravine
#

Hmm

fickle yew
#

Looks like it might be an issue with JsonResult

#

writing synchronously

#

and causing starvation

simple ravine
#

Are you reusing HttpClient?

fickle yew
#

The error itself makes little sense as I have nginx in front that should handle spoon feeding

#

This is on incoming requests

#

Controller actions

simple ravine
#

What on earth...

fickle yew
#

I've upgraded to .NET Core 2.2 now, let's see if that helps.

#

Anyway.. "Too much load for .NET Core" internet achievement unlocked ๐Ÿ˜ƒ Thanks Legion!

simple ravine
#

Was just gonna mention, try 2.2.5 runtime

#

On your server

fickle yew
#

Yeah just did

fathom spruce
#

I thought the point of kestrel was to make it extremely scalable

#

that's kind of impressive

simple ravine
#

Rasmuskl can you share some insight on Lua thing with pob

fickle yew
#

Well if this is JsonResult doing silly things it's not really Kestrels fault

#

I have to take my daugther to daycare now, but I'll check once I get back.

simple ravine
#

You could also try 3.0 preview 6 with the new json serializer

fickle yew
#

Nah I'll skip the previews for now ๐Ÿ˜ƒ

simple ravine
#

Alright, going to office, will be online there

fickle yew
#

Right. I can probably answer some pob questions.

golden yacht
#

how you doing the autopob stuff?

#

Well, I guess I sort of know how. I'm mostly looking for the ability to take a account and character name and generate a pastebin from that.

#

How hard is that going to be ๐Ÿ˜…

fathom spruce
#

Classes/ImportTab.lua DownloadPassiveTree & DownloadItems

fickle yew
#

Yeah pretty much. There's some code already in the headless wrapper.

golden yacht
#

oh

#

cheers

fickle yew
#

Hm. Is there any way to actually link Legion to 3.7... The major patch version isn't in any of the apis afaik?

simple ravine
#

@fickle yew Did you use MoonSharp as well, or did you use something else?

fickle yew
#

I don't use MoonSharp no.

#

I just use luajit

simple ravine
#

Ah, so you don't integrate it with C# at all?

#

or how does that work?

grave wren
#

luajit microservice blobhyperthinkfast

fickle yew
#

http

#

wrapped it in a tiny web server

simple ravine
#

ohh

fathom spruce
#

Welp

#

Guess it will be the first if I ever get the bugs worked out

fickle yew
#

approaching 5 megapobs.. so it seems to work ok ๐Ÿ˜ƒ

simple ravine
#

If you move it to github, @fathom spruce, I'll try to get some time on it

fathom spruce
#

Yeah will do later

fickle yew
#

What are you working on @fathom spruce ?

fathom spruce
#

I've got a bunch of ideas for optimization and what not once it's working

#

Pob c# bindings

#

Using moonsharp (Lua interpreter fully written in c#)

fickle yew
#

Ah cool. I'd definitely take a look at those

simple ravine
#

And if I get drunk enough sometime, I'll rewrite MoonSharp with .net core 2/3 optimizations ๐Ÿ˜‚

fathom spruce
#

Yeah, the main issue right now is with the recursion limit baked into moonsharp. They added a Lua bugfix that luajit doesn't have

#

Makes all the gsub and find methods not work

#

@simple ravine you're a braver man than I am

simple ravine
#

I am just extremely stupid with my choices where to put my energy

fathom spruce
#

Although that parser using Span would be fantastic

simple ravine
#

yeah, parsing is a prime example where it would shine

fickle yew
#

How's the performance difference between luajit and MoonSharp?

simple ravine
#

no idea yet

#

there are still some kinks to make it load properly

fickle yew
#

well could be that there were some general perf metrics ๐Ÿ˜ƒ

#

I spend about 1 sec per build calc atm

simple ravine
#

ooff

#

@woeful sphinx said he were down to less than 250ms and there were further optimizations to be made,

#

Would be interesting to see if there were some collaboration possibilities soon there, and potentially some feature parity

fickle yew
#

Well I'm recalculating multiple times during that second

#

In pob you're advancing the gui frames to force calculations often

#

It's not really built for bulk processing

#

My server has only spent about ~58 days of cpu time calculating builds so far ๐Ÿ˜„

simple ravine
#

hehe snap!

#

I really want to have a community collaboration on a C# library that does similar things to what PoB does, but without the GUI - that would be up to separate projects to deliver.

#

This way, we can start providing cool things with a unified way of calculating things

fickle yew
#

I've scrapped most of my code after integrating pob

#

My calculation engine

#

It wasn't nearly as abstract as the one brather1ng is working on, but it was fast and made for bulk ๐Ÿ˜ƒ I only got around 80-90% done though.

#

and a few patches behind now

simple ravine
#

Yeah, I think the best idea is to not be alone in that struggle

#

Perhaps we can take a look at yours. If you'd like, put it in some repo as-is with a couple of bullet-points, and I could take a look

#

In a couple of weeks, I have 4 weeks of paid vacation ๐ŸŽ‰ for the first time in like 6 years

fickle yew
#

Oh ๐Ÿ˜ƒ

simple ravine
#

And I am not gonna do 1 minute of normal work

fickle yew
#

I'm on paternity leave

#

got up at 4.30 today, yay ๐Ÿ˜ƒ

simple ravine
#

Oh, you're allowed to be on paternity leave and also use daycare in Finland? that's pretty awesome

fickle yew
#

Denmark... not Finland ๐Ÿ˜ƒ

simple ravine
#

Why did I think you were Finnish?

#

For all this time

fickle yew
#

She's just starting now, so spending some paternity leave to get her used to it

#

just short days

simple ravine
#

ah ok

#

It feels like it was just a couple of months ago your baby was born ๐Ÿ˜‚

#

Time flies, geez

fickle yew
#

11 months. Time does fly.

grave wren
#

hm 20pto sounds super meager, here 30 every years it he standard

simple ravine
#

yeah we have 25, or can opt for 30 without overtime extra pay

#

but I save a few days for fall/winter

grave wren
#

oic

simple ravine
#

USA has like 10?

grave wren
#

some not even that

simple ravine
#

Where you at Faust?

grave wren
#

ger

simple ravine
#

achso

ornate gale
#

gesundheit

fickle yew
#

what are you doing with your fto then?

simple ravine
#

fto?

#

oh

#

well, vacation, not sure - haven't decided

#

but I'm sure there will be some time for poe things

fickle yew
#

poe (tool) dev hackathon in Malmรถ ๐Ÿ˜„

simple ravine
#

Malmรถ is like 5+ hours away for me heh

#

But tempting

#

Would be fun to go down to Denmark too, pop in and visit Lifting as well

fickle yew
#

๐Ÿ˜ƒ

#

he's far away from Copenhagen though afaik?

simple ravine
#

Yeah let me check, he sent me his new address

#

Hadsund

fickle yew
#

about as far as you can get from Copenhagen ๐Ÿ˜„

simple ravine
#

What are your plans for the summer?

#

Not sure if my family appreciates me taking my first real vacation in years to go down by myself somewhere, hehe. Would be fun though.

fickle yew
#

not having any vacation now.. waiting till fall

golden yacht
#

can we do it in nodejs instead

#

javascript is the language of the future ๐Ÿ˜Œ โ˜

#

||kill me||

simple ravine
#

|| it is tempting /s ||

ornate gale
#

one would suggest a lifetime ban to wraeclast for this heresy

simple ravine
#

Let's do it in C, and we can create binders to different other high-level languages /s

#

Now that I think about it... It's not a terrible idea

ornate gale
#

Now we're talking. templarLul

simple ravine
#

If there's enough interest

grave wren
#

amateurs, we clearly need a sap backend and should code in abap

simple ravine
#

But I'm getting the feeling, after a few years of indoctrination, .NET seems to be the most used language by the people active in here

#

I will have you slapped with a trout for mentioning ABAP

#

fucking SAP

ornate gale
#

< filthy ruby dev here >

golden yacht
#

I'd rather C than ||C++|| ๐Ÿ˜ฐ

grave wren
#

feeling like it might be py

simple ravine
#

Faust, you do c# no?

grave wren
#

nah

#

java/typescript/js at work, py at home

fickle yew
#

I do ruby as well for work

simple ravine
#

Retik, me, rasmus, emmitt, brathering, notoats, etc

golden yacht
#

c# is a nice language when people follow the conventions set my microsoft

ornate gale
#

depends if the question is personal pref or work 'obligations'

golden yacht
#

which is why I hate unity

simple ravine
#

I mean, you could say the same thing about javascript too

#

if you travel 15 year back in time, and apply the same coding standards today

golden yacht
#

Oh I hate javascript too I just use it cause I'm lazy and node just werks โ„ข

simple ravine
#

Rasmus, if we were a few to collaborate, do you think we could make something in c#?

grave wren
#

i dont really care which language i use tbh

fickle yew
#

C# for sure.

grave wren
#

if i were to get into a c# project i'd not mind

#

i'd mind if i get into a sap project tho

fickle yew
#

For me anyway ๐Ÿ˜ƒ

grave wren
#

would be my main reason to hand in my notice :p

simple ravine
#

haha

#

I have a project with a minor integration to SAP, and I hate it

grave wren
#

i have to use their ui5 js frontend tech sometimes

#

not a fan but bearable

#

anything more and i'll be gone or want a way higher salary

ornate gale
#

from Charybdis into Scylla, you could always get an alternative between SAP and SalesForce's "Apex" crap

#

which is basically gimped Java

simple ravine
#

Mine's RFC with BAPI / ABAP functions