#tooldev-general

1 messages ยท Page 51 of 1

hushed relic
#

then it just sends an action and receives some deltas for each object

#

Yep

#

that's what I think, in lockstep it simply does it in sync

simple ravine
#

that's why when you have insane movespeed and, murdering a bunch of mobs in asynchronous mode, you'll see your character and monsters change position instantly sometimes.

hushed relic
#

I wonder why the calculations differ

simple ravine
#

i would assume packet drops?

hushed relic
#

Maybe it's somewhat affects by interrupts, such as stuns, knockbacks, movement skill and rounding

pseudo ocean
#

pretty sure in lockstep it sends 30 ticks per second

#

to the server

#

someone should pm Battle(non)sense on youtube and make a netcode video about PoE

#

๐Ÿ˜‚

simple ravine
#

reverse engineering network traffic is quite tedious, and possibly impossible if they use asymetric encryption

hushed relic
#

not without injecting into the process and doing things GGG might scold you for, yep

#

IF it's encrypted

#

they might not do it, if it's just validation, for the sake of clarity and speed

simple ravine
#

they would still send information that would be valuable for botting, which they'd want to prevent

#

map data etc

#

but it's super old. i'm sure it has changed since then, and it seems incomplete

hushed relic
#

well, I'm not sure if PoE bots run by using injection or packet tracing

#

interesting

simple ravine
#

Since then, according to some dubious forum posts, they've added encryption - at least to the sensitive data parts (login)

#

But that was 4+ years ago, and considering how much the game's grown since then, I'm just assuming that they've tightened up a bit since then.

chrome topaz
#

that thing supports encryption

#

see salsa20.opn

torpid mesa
#

latency alone can cause desync. an easy to visualize case is imagine a group of mobs with little space between them. on the client you run through very fast with 100ms latency. on the server the mobs are walking around. if the mobs block the location your client pathed through then you are desynced. lockstep helps but if you have higher latency and client side prediction then you will end up with desync no matter what. @hushed relic

#

now ggg might have a way to make the client know the behavior of the mobs so that doesnt happen as much but thats pretty complicated

#

and stuns like you said can throw that off since you wont know how much the mob hit you for until you already thought you ran past

hushed relic
#

Yep, the client seems to know the AI

#

at least to a certain simplified degree

#

and simulates it, though I guess some calculations need server side confirmation

#

can't let the client random things, otherwise it'll be able to predict too much

torpid mesa
#

yeah i imagine that they run a basic game sim locally and then the server sends updates. teleporting or sliding mobs around until they match

#

back in the day before lockstep walking through a pack of monsters was 100% certain desync and 90% chance of death

hushed relic
#

I think they use some sort of periodical confirmation

torpid mesa
#

because the client would path around and the server wouldnt

hushed relic
#

yeep

#

those were the times

#

/oos

#

When cyclone was balanced, because of desync ๐Ÿ˜„

torpid mesa
#

yeah you can tag events with a time and send them between the client and server. it can then use that history to figure out what actually happened and what might happen next

#

haha

#

i remember one technique ggg used was to animate monsters walking to their correct locations if they got desynced

#

that was the only time we saw vaal oversoul walking

#

ofc his desync was a bug since how does a monster that teleports get desynced in the first place

hushed relic
#

that's pretty interesting

torpid mesa
#

im playing with a library right now that abstracts that whole thing

#

it lets you fill a list with events at a certain time and then you can request ANY time

#

and it will [using your code] auto adjust the values for that time

#

predicting what it would have been or will be

#

but the predictions are easy to code since you can just extrapolate or use fancy averages for older times

#

then it syncs all that info between the client and server

#

i dont know how it will handle animations yet though

simple ravine
#

@torpid mesa you develop games?

torpid mesa
#

hobby but yea

simple ravine
#

the logic you described in your previous message sounds much like tweening

torpid mesa
#

basically is yea

simple ravine
#

keyframing with tweening, pretty much

torpid mesa
#

its the first networking library/paper i saw that treated it as tweening

#

most of the time they dont abstract it at all and talk about 'going back in time' and just keeping a history then cludging it all together

simple ravine
#

i mean no offense when i write the following, but...

game designers really should take more interest in system development, in general. they'd benefit from understanding the concepts that are developed for other things, to and take inspiration from them

#

(and vice versa of course)

torpid mesa
#

i agree

#

a lot of stuff is reinventing the wheel sadly

simple ravine
#

there are some games you can see how it's literally terrible design underneath

torpid mesa
#

you can tell that they dont have a real structure for their latency compenstion if two people shooting at the same time results in one dying and the other persons bullets/rockets disappearing

simple ravine
#

and yeah, reinventing serialization of data, in a much worse manner than what you get out of the box with existing solutions

torpid mesa
#

with this tweening library you can just check if they were alive when they shot

#

and if so shoot anyway

#

problem should take care of itself really

#

since you would always want to do that check anyway

simple ravine
#

one thing that game developers should look more closely at is actors

torpid mesa
#

literally just if status[timeofcommand].alive==true then docommand

#

though youd have to decide how to keyframe/interp boolean states

#

you wont go from alive to dead to alive again in the same frame though so its not a big deal

#

yeah some of those patterns i dont have a big grasp on yet

simple ravine
#

with an actor framework, what I'd do is treat the player as an actor (object), and the projectile generated by the player's weapon as another.

#

so no matter if they shoot at the same time, you'd both die

#

the beautiful thing is that you can horizontally distribute them, and they have failure tolerance built in

#

and each actor has its own logic, so the design of your application / system / game becomes quite good

torpid mesa
#

ah thats similar to the entity system that people do

#

not the fake one that unity has

#

but like an ECS

#

where everything is an entity which has basically zero behavior and all its properties added via composition

#

then to process them you have systems which are basically services

simple ravine
#

that becomes terribly messy

torpid mesa
#

so you have raw data that is grouped into an object and you can pass relevent ones or messages to the actual services that process them

#

but its way better than what they usually do

#

which is you have like a mobile class

#

then subclass it to monster, player

#

then subclass monster to each type of monster

#

etc

simple ravine
#

well that is basic inheritance and polymorphism, which can be used with actor models as well

torpid mesa
#

yeah but it has a lot of issues compared to the ecs way

#

with composition the behavior is inherited and then you have to reuse a ton of code in a way that has little logic

#

so if you make a monster thats also something else

#

you gotta subclass two things

#

or copypaste

simple ravine
#

suppose you have class Monster that have basic implementation of interface IMonster, and then you have class Porcupine : Monster (Inherits Monster)

torpid mesa
#

yeah but what happens when you want to reuse stats?

#

and is porcupine really its behavior?

#

because if its just stats you dont really need to inherit since itll have the same stats as any other monster

simple ravine
#

stats shouldn't be hardcoded into the class

torpid mesa
#

exactly the value shouldnt be

#

so why have a porcupine class at all

simple ravine
#

they should be derived from configuration and passed using a DI/IoC container

torpid mesa
#

vs behaviors you say that this monster will follow

#

so instead you break it up into the data your entity has. like positon, ai behaviors, stats like %inc hp and what not

#

then you have code that is NOT part of that entity that looks at that and does the work

simple ravine
#

because Porcupine have special domain logic that is unique, i.e. upon death, it has x% probability of shooting those goddamn spikes

torpid mesa
#

then you dont have to inherit anything for code reuse

#

your ai system knows what behaviors the monster has

#

and just does them

#

but any mosnter could ahve on death effects

#

instead of making a porcupine class

#

make a stat or behavior that any monster can have that does that

simple ravine
#

right, and that is how you end up with class files with 5,000 lines of code

torpid mesa
#

nah you can break out the actual behaviors into their own files

#

you only need the triggers in the main class

#

like on death, on hit on crit etc

simple ravine
#

take a look at the SOLID principles, they're quite useful

torpid mesa
#

then the behavior list on the entity says which ones it uses and what they do

#

ok so having a porcupine class breaks the s right off the bat

#

what resposiblities does a monster class that handles everything have?

#

vs an ai system that ONLY handles triggers

#

etc

simple ravine
#

you still have most of the useful logic in a Monster class, but any specialized logic can be overridden or appended to in the Porcupine class

torpid mesa
#

THAT seems like a huge class to me

#

youd still want to make the monster have plugin behaviors

simple ravine
#

well, in reality you will have sub-classes for different logic

torpid mesa
#

i feel ike youd only subclass if it makes sense that X is a Y

simple ravine
#

I guess we'll just agree to disagree ๐Ÿ˜‰

#

there are a million ways of achieving the same thing

torpid mesa
#

for example if you are making a UI you could have a BOX to hold other elements, and a VBOX to hold a collection of them etc

#

and subclassing since they are all an element of the ui could make sense

#

eg they have hieght width style etc

#

the only difference is how they hold their children

#

one would have an ordered index and the other freeform

#

but a monster isnt so direct

simple ravine
#

that's basic inheritance right there..

torpid mesa
#

yeah but a porcupine isnt a monster with different behavior, its a monster with a few stats changed. its an instance of monster

#

any monster could get a random mod that says explodes on death

#

like volitile

#

so it makes more sense to me to say that there is an on death event

#

and you can add to the list of stuff that happens when it dies

#

some are part of the porcupine template

#

some are random mods added

#

some are map mods even ifyou want to be cruel

simple ravine
#

right, which becomes very cluttered when your game evolves and you have hundreds of different things that can happen at different places

torpid mesa
#

but that clutter will happen in some form no matter what if you want that feature. so either you can organise it so that monster is more abstract and just a place to hold these stats. or you can hard code all these behaviors by subclassing every type of monster

simple ravine
#

I would rather subclass things.

torpid mesa
#

to me it seems way cleaner to do new monster. mosnter.addtrigger(OnDeath, ThrowSpines) and have a json file that determines which triggers each mosnter get

simple ravine
#

because I would imagine having to keep track of hundreds of different stats/triggers etc, and how they might also behave slightly differently in certain situations

torpid mesa
#

rather than actually ever hard code any monster getting anything in particular

#

so instead of having one code base for ondeath, you would prefer to have the explicit code for each monster have say an ondeath method that you override and write it in to

simple ravine
#

the problem with that though, is that your compiler won't optimize the IL code for that

#

how do you imagine .addtrigger(...), OnDeath, ThrowSpines look like?

torpid mesa
#

youd have like a json file with stuff like

simple ravine
#

yeah i get that part

torpid mesa
#
porcupine {
basehp:100, ondeath:spines} etc```
simple ravine
#

i mean, the actual code

torpid mesa
#

yeah

#

so youd have your behavior list or component. it would have a list potential triggers. then there is code you run every frame that iterates these lists. you basically already do that if you just have an update() function on a class anyway

#

except your monster.update() does everything for the monster

#

so instead you could run all your ai at once

#

it would visit each monster, see what its behavior is supposed to be now with a state table or whatever. then it checks to see if any behaviors should trigger

simple ravine
#

I think that would become a bit slow though

torpid mesa
#

for example the monster died

#

you trade iterating through each entity only once for instead doing it a few times but batching all of your similar behavior together

#

you also reuse code more

#

because you only write your on death code once. you even reuse your shoot projecile code

simple ravine
#

I think you're not seeing the entire picture of my proposed solution

torpid mesa
#

because your spines() method can just be a new attack

#

though i guess that works fine in an porcupine class too

simple ravine
#

I am trying to find a better way of explaining it

torpid mesa
#

what i am invisioning is the traditional messy way people do inheritence in games:

#
class porcupine:
update() {
if alve{
movetowardsplayer() // move how ever far we can this frame
attack() // would check if we are in an attack animation, if not see if we want to start one etc
} else if died { //some other monster killed us before this update but after the last one 
startattack(spines)
}```
#

etc

simple ravine
#

damnit, ok let me write something up

torpid mesa
#

i presume we would still load stuff like hp and damage values per instance

simple ravine
#

im gonna use c# but u'll get the gist

torpid mesa
#

what i wrote above is actually a very popualr way to make games

simple ravine
#

I'm not doubting that

torpid mesa
#

though porcupine would inherit from a monster type or interface

#

ill do a quick write up of the newer way people are doing it

#
e.addComponent<Motion>(new)
e.addComponent<Behavior>(new)

MotionSysystem.update(dt, entity) {
Motion m = e.get<motion> 
CalculateMovement(m.location, m.movementType, m.goal) //movementtype could simply be pathfind to
// calculatemovement would have a map of movementtype to the methods/other code that can make that monster move however movementype specifies
}
AISystem.update(dt, entity){
Behavior b = e.get<Behavior>()
// the behavior would be data that specifies what state machine states it has access too [likely a template for the state machine is stored some place
// and a list of triggers when the state machine reaches certain states
}```
simple ravine
#

In a truly asynchronous game such as PoE though, I'd imagine you don't really need an "Update" function.

torpid mesa
#

poe isnt really async though

#

it still has discrete server frames

#

though idk what the max actions per second would be

#

if you have an idea thats different from both im pretty interested

simple ravine
#

sorry, was preparing kid for bedtime

#

yea give me a couple of minutes to contemplate

torpid mesa
#

thats fine though in about 15 minutes ill be much slower to respond fora few hours

#

im still interested in talking about this

#

my main goal right now is to experiment with different ways to structure a game

simple ravine
#

to be completely honest, I didn't think about the discrete frames etc, but I feel that should be controlled by a separate logic - but then again, im no game developer. i have architected a few complex systems in my careeer though, please hold ๐Ÿ˜ƒ

torpid mesa
#

to give a reference to how frames tend to be done: there is a game loops, and you count the time since the last frame or tick (which is what you can call it when your game loop doesnt rely on frame time). you then run an update or other method in every system or on every entity/monster and pass them the time since last frame or 'delta time'. once this processing is done you figure out how long its been and then sleep until either the next frame or until a certain amount of time has passed since you started this tick

#

so in most modern games that are not locked to any particular frame rate the delta time is roughtly the same between ticks

simple ravine
#

Oh, I have a keynote for you if you're interested

#

On how they built Halo 4 with Orleans (actor framework)

torpid mesa
#

sounds fun

simple ravine
torpid mesa
#

k ill check it out some time this afternoon/evening

simple ravine
#

I'm confident you'll find the hour worth it

torpid mesa
#

:>

simple ravine
#

Even if you don't use .net/c#, the concept itself can be interesting and inspiring

torpid mesa
#

as far as a tick based game goes you need to pass the delta time to scale stuff like velocity

#

for example position = position + velocity * dt

#

since you only want to move them 1/10th of a second worth of movement

#

if you tick is 1/10th of a second long

#

i do use c# actually

simple ravine
#

That in my opinion should not be up to the entity class

torpid mesa
#

though i hate most of the frameworks i have been playing with for some reason or another

#

which part? the dt or scaling the velocity down?

simple ravine
#

Calculations based on ticks, throttling or however you'd call it

#

this got me intrigued, I'll post some code snippets here, and you can just @-me when you have time

torpid mesa
#

aight

simple ravine
#

I'll be here for about 6 more hours

torpid mesa
#

as a side note thats why i prefer ecs. all the code dependant on frame rate is grouped outside of the entity

#

though its grouped by what type of code it is like ai, physics etc

#

alright ill be responding less often now though ill check back in

simple ravine
#

all these things should be pluggable

#

Take Malachai fight for an example

#

that's vastly different than a Seawitch or whatever

torpid mesa
#

Yeah whatever system it needs to be pluggable and dynamic to some extent

torpid mesa
#

reading the docs on orleans is pretty interesting

#

and i guess most operations technically don need to sync on a tick

#

you just need to have some stuff like trading still be atomic

simple ravine
#

patch

compact isle
#

patch has finished

#

investigating

#

should work now

torpid mesa
#

@simple ravine i skimwatched that video. its pretty interesting but it looks like they used it for the presence server/lobby system. basically who is in what game and in general how are they doing. perhaps matchmaking too but they didnt reallymention that

simple ravine
#

TIL, HashAlgorithm (like SHA256) is not thread safe, and it's really intricate to see how the memorytearing behaves. fml, 300 GB of data transformed in vain

#

FML

pseudo ocean
#

soon you've done almost 1TB

#

๐Ÿค”

simple ravine
#

I just did

#

lol

#

1st iteration, murmur hash - apparently output is different from x86 and x64 processor architectures - and different steps in pipeline - messed things up
2nd iteration, sha256 hash, forgot to thread lock, didn't think it'll be any issues
3rd iteration, sha256 properly with a lock

pseudo ocean
#

๐Ÿ˜

simple ravine
#

Funny thing, it's 300 GB in sql server, but only 150GB in Document DB (cosmos)

#

and moving it from West US to West Europe takes about 2-3 hours

#

with the ETL transformation inbetween

#

so it's quite painful

#

Here's a fun phenomenon with Cosmos DB.

#

A timeline of number of documents in this collection over time.

... We never removed any documents ourselves, and we intended to insert 36.6M documents, which it will go down to again. Hmm?

pseudo ocean
#

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

#

magic

simple ravine
#

My conspiracy theory is that they do this when you insert in a rapid pace, to ensure there's space enough for whatever you're wanting to insert next, so they pre-allocate

#

When the system observes that rapid insertion has stopped, they optimize your storage (so you don't pay for something you don't use).

#

hmm

foggy vortex
#

POE trade shows wrong ES vlaues for legacy items.

#

Is there anything to be done about this?

#

For example, Shapers Touch, Stepan Ear come to mind. If you sort by ES, the top results have pre 3.0 values...

#

Who is poetrade dev?

simple ravine
#

Are you searching in Standard league?

#

@chrome topaz is developing it.

foggy vortex
#

Yes.

#

The item base ES values are wrong.

#

I knwo the mods can be legacy, but the actual base es is wrong.

#

This is impossible, I have perfect roll Steps and they dont have 343.

#

@simple ravine 343 uses old base, which NO ONE has.

#

aka if you buy these item from in in game, they dont actually have 343 es.

delicate ore
#

@gritty olive i just had a great idea for CurrencyCop

#

Live Server

#

so you can see the hourly/daily/weekly earnings of streamers

torpid mesa
#

it might be ggg reporting those values, i feel like the same issue happened with items that didnt get relisted after a mod was changed

#

last time

cosmic saffron
#

those are likely to be forum-indexed

torpid mesa
#

ah good idea

#

those will stay until the post is changed

chrome topaz
foggy vortex
#

This issue cost me like 10ex and I want to kill myself.

torpid mesa
#

rip

chrome topaz
#

if it has a "verify" link at the bottom, it's from forums

gritty olive
#

Live server @delicate ore ?

#

Going to need more from your brain to understand

delicate ore
#

basically a service to remotely see someone's earnings

pseudo ocean
#

that's a no no

hushed relic
#

That's quite a ton of work + lot's of logistics + streamers would have to allow this.

#

I think it'd be way easier to just have a mini plugin for streamers to show XP/hour and Earnings/Hour in their stream overlay

#

Though experience tells me that that'd evolve into a D-size-contest and would be equally useful as the tooltip DPS ingame.

pseudo ocean
#

He would need the accountkey from every streamer

#

which is the same as saying "give me ur stash info"

gritty olive
#

Wouldn't necessarily need to do that I could allow people to opt-in to a leaderboard through currency-cop that sends stats over

torpid mesa
#

what would you do to combat fake listings on a leaderboard

pseudo ocean
#

I dunno, make sure the md5 hash is correct so that the exe isn't modified?

gritty olive
#

@torpid mesa two options, opt in could be "I allow the server to use my token on my behalf to calculate" or "client sends objects, server does calculations, sends back a response to client and waits for confirmation"

torpid mesa
#

mm yeah doing it on the server would help a lot

simple ravine
#

lol

#

for people who want to be on a leaderboard, just use the public stash route

#

boom done.

#
  1. exe hash will solve nothing
  2. client sends objects will solve nothing, u just fake the object
#

OAuth would solve this though... cough @sudden tiger ๐Ÿ˜‰

gritty olive
#

Dual resolution is the issue @simple ravine

#

Public stash doesn't solve the issue since what currency-cop does is calculate private & public

#

OAuth would be a solution but I'm not going to badger them to do something that isn't ultimately required ๐Ÿ˜‰

simple ravine
#

He said "it was in the works"

gritty olive
#

The client sending object with verification would solve it, but having the server do it is the easiest route

simple ravine
#

but I've heard that one before

#

why would that solve it?

#

the faking part that is

gritty olive
#

The dual verification? Because they'd have to do the exact same on their side

#

So the server & client must come to the same conclusion

simple ravine
#

My assumption is that you'd extract the item data from their private stashes, and pass them on to your server-side

gritty olive
#

If they build a system that can in-real time do that verification then, I mean, well, shit, I don't really care at that point

#

I'd be impressed

simple ravine
#

Was my assumption wrong, or?

gritty olive
#

Yeah @simple ravine then it would ping back to the client, and get the client to do the same workflow it does and give a conclusion hash

#

use that hash to compare against the server

#

If everything works out, then yay it's accepted

simple ravine
#

Ok, so assume I make a rogue application

gritty olive
#

If they build a system that can in-real time do that verification then, I mean, well, shit, I don't really care at that point

#

Was me assuming that

simple ravine
#

that tells your server-side that hey, look what I found, 10000 exalts

gritty olive
#

Yeah, but you'd have to do the same mathematical equations and algorithms to come to an exact value with a hashing of steps

#

I would be impressed ๐Ÿ˜„

simple ravine
#

your application is an electron application, right?

gritty olive
#

Yeah

simple ravine
#

okeh.

gritty olive
#

If we are talking about the most secure way then passing session to server and having the server to do it

#

If we are talking about semi-secure ways of doing it then I can do client/server agreement protocols

simple ravine
#

assymetric encryption ร  la SSL/TLS

cosmic saffron
#

just tell them to send a postcard with their drops to update ratios manually

gritty olive
#

"mail me a usb with your session token"

#

Doing it on a server would be best though, and if people start feeling secure with sending stuff to a server I could move the whole app to the server <_<

simple ravine
#

yea, give a half-decent-scriptkiddie 30 minutes, and he'll be posting fake stuff to your leaduerboard.. sorry, but I've seen that happen so many times

gritty olive
#

I've built game engines, I am not discussing the most secure way to do it, thats why you can do fun lua stuff with WoW because it does server/client agreement

simple ravine
#

not sure what game engines has to do with this

gritty olive
#

But, then again, I don't really care about the legitimacy of the leaderboard, but I think users would

#

Because they are the best example of client<->server communication

simple ravine
#

that you can think of

#

I can come up with a few other things that come to mind

gritty olive
#

Not really, in my opinion, they are the best example

simple ravine
#

HFT, ad server tech, distributed consensus algorithm (raft, paxos) (like zookeeper)

gritty olive
#

Most widely used, and openly discussed as far as Defcon talks go

#

The majority use the things you're mentioning

#

I quite enjoy game client<->server communication it's a really good place to learn from, especially when you look at new games and their exploits and how they attempt to mitigate or the short circuit routes they attempt

#

when it comes to security

simple ravine
#

bring me one single legit defcon keynote that says gameserver communication is da best

gritty olive
#

That is not what I said, or implied

simple ravine
#

Because they are the best example of client<->server communication
So what do you mean with this?

gritty olive
#

That is not related to the Defcon statement

simple ravine
#

I'm lost

gritty olive
#

"Openly discussed as far as defcon talks" this refers to Game Engines and Exploits

simple ravine
#

yeah, im just lost in the conversation as a whole i guess

gritty olive
#

Which is to me a great insight and cause for being a best example because of the references

#

Well, no need continuing it then xD

#

If I create a leaderboard it would be done via session server-side

#

Opened an issue for thoughts on server side vs application

simple ravine
#

I wish I had time to hack on PoE stuff more.

gritty olive
#

Same, running two engineering teams leaves me little time for life stuff

simple ravine
#

Yea, running 4 companies is not recommended if you want to have a social life

#

at all

#

๐Ÿ˜‚ ๐Ÿ”ซ

gritty olive
#

I have two companies I could not imagine adding two more

simple ravine
#

but im intriguied enough about the discussion with rifflaute the other day, so i'll mess around with that a little

gritty olive
#

What was it around? I think I missed it

simple ravine
#

game engine loop stuff

#

abstraction, SOLID foundation etc

#

inheritance

#

his preference was plugging with configurations, and I can see some of his point of view, but, yeah, I need to think a bit more about the problem domain

gritty olive
#

Oh the actor system?

simple ravine
#

yea

#

that is the approach i would want to draw inspiration from

#

we've actually built an event sourced distributed system with orleans

#

it became pretty neat

hushed relic
#

This reminds me of something a prof I know keeps talking about a lot

#

"Agent Driven Programming"

#

Basically it's a merge of the Actor system that was brought up with some AI constructs

#

It's used to simulate complex environments, such as traffic etc

#

by arranging a set of entities, each with it's own motivations + rules and each hosting all the crosscutting concerns

#

over time they arrange themselves into an optimal "shape"

#

and it's way less costly than calculating the optimal criteria for the whole centralized swarm

#

Very swarm intelligence inspired

ebon oasis
#

that sounds intriguing

hushed relic
#

Yep!

simple ravine
#

hmm

#

that sounds like a dsitributed actor system

hushed relic
#

on a different topic, yesterday we've implemented a prototype to store and share "Filter Variations" on the filterblade server!

#

This was linked more than once

simple ravine
#

hehe nice!

#

u should add upvotes to that

simple ravine
#

best joke of today ๐Ÿ˜‚

hushed relic
#

Yeah we intend to make a small "subversion table", with description, versions, upvote system

simple ravine
#

i read subversion, and instantly was like "why not git?" until I re-read that. omg in braindead today

hushed relic
#

๐Ÿ˜„

#

nono, only GIT, let's call them spinoffs then!

simple ravine
#

feature branches!

hushed relic
#

it's actually the first Serverside code of FilterBlade

#

previously it was 100% JS

simple ravine
#

aww ๐Ÿ˜

hushed relic
#

what?

#

๐Ÿ˜ฎ

simple ravine
#

nah, i mean it's cool

#

but it was also kinda cool that it was purely client side logic

hushed relic
#

Well, you can't store things in a DB without serverside logic :[

simple ravine
#

Firebase!

hushed relic
#

we could've used node.js instead of php I guess

#

but I've heard about OVH conflicting with some modules

simple ravine
hushed relic
#

I'm ashamed to admit, that I know nothing about asp.net ๐Ÿ˜„

simple ravine
#

wat!

#

i strongly suggest.. yeah.. you know the rest

#

it's amazing

hushed relic
#

Never got to try it yet

#

Sounds interesting though

simple ravine
#

one of my devops/dev guys who was hating c# and asp.net so bad, is liking it now, and impressed by what they did with asp.net core 2.0

#

and i have to admit that this is 100x better than any other stuff they've come up with in the past

hushed relic
#

Interesting, I'll be sure to check it out during the next months

#

It seems like I'll be forced ot do so, if I'll come to an agreement regarding the job offer I've been talking about during the last weeks

simple ravine
#

hehe, u got the 2nd interview yet?

hushed relic
#

It'll be in november

#

so far, everything was phone only, excited to meet those guys

#

it seems both sides have a lot of questions

#

though, these news happened just ~2 weeks ago

#

so, it's all fresh still

simple ravine
#

well, i'm sure you're going to have an offer from them

#

unless they require you to know something very specific that's far from expertise

hushed relic
#

my friend told them about my endeavours as "NeverSink" (on top of my academic/job history). Apparently that's a huge selling point to them

#

This is kind of funny on several levels for me (hard to explain)

simple ravine
#

lol

ebon oasis
#

a bit delayed, but i used to like php when i was younger

hushed relic
#

My dad is in love with the language

ebon oasis
#

its quick and easy to make it do something visible

hushed relic
#

He asked me to write the JS parts for him here and there

simple ravine
#

I can write a 400 page book about how and why I hate PHP so badly

ebon oasis
#

well i hate js, i have no objective reason though, it just does not sit with me right

hushed relic
#

Well.. some people like certain logic types (I've spent some time studying Monads lately and am totally inspired by it and most of my colleagues cringe when the just hear the word)

simple ravine
#

Fun with functors!

ebon oasis
#

i have no clue wha tthat is

simple ravine
#

functional programming stuff

hushed relic
#

Basically a way of dealing with side effects in functional languages, by "expanding" objects

#

LINQ, Nullable types are very much inspired by them

#

and provide a more OOP-eye friendly implementation

simple ravine
#

I wouldn't use the terminology side effect with this

ebon oasis
#

maybe i should look at that, never managed to figure out oop

hushed relic
#

Cross Cutting Concerns? Additional Functions?

simple ravine
#
type ParserResult<'a> =
    | Success of 'a * list<char>
    | Failure

type Parser<'a> = list<char> -> ParserResult<'a>
#

that's a monad.

hushed relic
#

Encoding Additional Information into Parameter/Return types

#

I think that's fitting

simple ravine
#

As someone put it:
It is said that thereโ€™s a curse with Monads.. When you finally understand it, youโ€™ll lose the ability to explain it to others. This curse is made worse by the fact that after you understand it, youโ€™ll begin to see it everywhere

hushed relic
#

๐Ÿ˜„

#

I think it's more about their goal

#

what made it "click" for me, is understanding referential transparency

ebon oasis
#

okay, what i'm getting here is that i need to take a step back

#

theres definitely some stuff between my current level of programming and monads that i need to figure out first :D

simple ravine
#

the thing is, programming can happen on so many different levels, veritcally, horizontally so to speak

#

the space is deep man

hushed relic
#

It's really about being able to "think in a different pattern"

simple ravine
#

in 2017, you don't necessarily have to go that deep into space to achieve something

#

.. but you can!

ebon oasis
#

i know, i've been around programming for a while, i just stayed mostly on the simple scripting level, stuff like simple python, vba, autohotkey..

#

enough to make my life easier, but not much more

simple ravine
#

that's where 90%+ settle - and that's totally OK

#

but if you get into functional programming, you'll get to see hamburgers

#

that could be seen as a ... added benefit ๐Ÿ˜‚

#

omg, my humor is terrible today too

ebon oasis
#

but i'm definitely at least very advanced excel user, because of the vba stuff i can do there :P

#

average excel user knows there is an =average formula, but is not sure if he ever used it

simple ravine
#

and you know there's so much more, like ARIMA and STDEV

ebon oasis
#

totally

#

my biggest coding achievement is that i had an excel sheet that used riots rest api to download games history to make nice stats from it. cos i found league of legends stats tracking insufficient

simple ravine
#

GGG should definitely go get inspired by how Riot did their APIs

hushed relic
#

( the trading interaction experience seems quite inspired )

#

._.

#

ok, I'll stop

simple ravine
#

hahah

ebon oasis
#

totally inspired by trading in lol ?

simple ravine
#

the poe trading experience - inspired by riot's API structure (sarcasm)

#

or sure, what you said @ebon oasis, equally true ๐Ÿ˜‚

ebon oasis
#

anyway, i should get back to being a productive member of society and do my job :D

simple ravine
#

I worked too much already this week. My brain's completely burnt out for the week

#

I'm just going to sit here and make terrible jokes rest of the week, I think

ebon oasis
#

we got some hot deadlines atm..

hazy fog
#

@chrome topaz rip

simple ravine
#

hah what a rip-off

hushed relic
#

@chrome topaz May I ask, were you involved/informed about the development of the new trade site?

cosmic saffron
#

didn't they already clone it for the tencent version?

hushed relic
#

@polar island were you involved? ๐Ÿ˜„

gritty olive
#

@polar island were you involved? &

#

Ahahaahahahah

hushed relic
#

๐Ÿ˜„

#

Also, idk, it might be confidential or he can just choose not to reaveal it

gritty olive
#

I'm not a fan of it

hushed relic
#

I can see logic behind either

gritty olive
#

It is like a stunted form of .... neither existing ones

hushed relic
#

I like the one or other aspect about it

gritty olive
#

I like the "AFK" part

hushed relic
#

Disabling mods, without removing it is nice

#

That's great indeed

#

though price fixers will just adapt and use scripts and auto-reply now

#

at least the ones who actively play will get spammed to oblivion

cosmic saffron
#

doesn't have url though so your saved searches might get lost

delicate ore
#

the live search seems pretty instant

gritty olive
#

That's kind of spooky, so they didn't involve the community who build these tools in the process of theirs, kind of makes me hesistant to build stuff

#

Just personal thoughts

hazy fog
#

I know of some people involved

cosmic saffron
#

did you search for fire res in that query?

hazy fog
#

but until they say I can name them I can't say who

gritty olive
#

Well, until I know all I have is what I don't know ๐Ÿ˜‰

tacit mango
hushed relic
#

@gritty olive Well, there's ofc. lways the risk that they'll adapt or even take ideas, 3rd party development was never a profitable hobby

delicate ore
#

ah

hushed relic
#

but it is kinda strange that poeapp wasn't asked, then again - background, privacy, strategy etc.

#

there may be a lot of aspects to this

hazy fog
#

[โ€“]VaalOrbThatShit [score hidden] 32 minutes ago
I assume this will scan forum posts as well (for new players who don't have premium tabs)?
[โ€“]Novynn Web Dev [score hidden] 15 minutes ago
Yup!

#

ok I didn't expect this

gritty olive
#

Never done it for profit, but, the idea that they would somewhat stealthily build their own without informing which could save us personal time :/

#

Kind of puts a bad taste in the mouth

hazy fog
#

our very own viperesque was part of testing this. he says I can tell you ๐Ÿ˜‰

gritty olive
#

That's just initial thoughts, certainly there is a lot of stuff I don't know, that can change those thoughts but thats the initial thought

delicate ore
#

ew no affix tiers

#

you think they would expose hybrids too

#

since they can

gritty olive
#

That said, few issues with the new trade site, never-ending scroll with a small amount of items kind of sucks, I like how poe.trade has a larger list at first

hushed relic
#

I'm pretty confident they don't want to show you the tiers

hazy fog
#

oh I know one neither site has I'd like to search by

#

I want to search by listed in the last N days

cosmic saffron
#

oh yeah the sort by on the official site is super fast

gritty olive
#

there is a sort by?

#

The UI is somewhat confusing for me to grok

hazy fog
#

click stuf to sort by it

gritty olive
#

It looks like poe.trade but with a different ui

hazy fog
#

ha I ran into an error

cosmic saffron
#

yeah click on the the affixes to sort up/down

hazy fog
#

do a search on everything then try to sort it

#

๐Ÿ˜†

hushed relic
#

I have a complain: when you click search the creepy masked leather hooded which doctor nazi thing face is flashing

#

o.o

#

On a UW screen, it's right in the middle of the screen

#

for just a split second

cosmic saffron
#

that's a feature, not a bug

pseudo ocean
gritty olive
#

woah

#

it's built in vue

pseudo ocean
#

I just find the font they used to be crap

gritty olive
#

I miss the colored output from poe.trade

#

๐Ÿ˜ฆ

cosmic saffron
#

yeah I don't mind the item names and type being in-game font

hushed relic
#

it looks very comic-y

#

and the A has a different height

cosmic saffron
#

but I prefer sanserif for affixes

pseudo ocean
#

I think i'll stay with poeapp's โค

#
<!--[if lt IE 7]><script type="text/javascript" src="http://ie7-js.googlecode.com/svn/version/2.1(beta4)/IE7.js"></script><![endif]-->

๐Ÿค”

hushed relic
#

Now, I'm somewhat scared they'll copy filterblast/filterblade, but I think the community demand is much lower here

#

besides, as long as it's just the site nad not a ingame UI, I think poe.trade/poeapp will still dominate

gritty olive
#

I'm somewhat scared that currency cop will be copied

#

Cause I can see it being integrated with trade

cosmic saffron
#

how did they go about consulting you for adding the filter on xbox?

hushed relic
#

they emailed me and asked my permission

gritty olive
#

That's fine but when you have limited time it's nice to know if you're just wasting your time or not

hushed relic
#

I allowed them, as long as they don't change the file content and will update it periodically as long as they want it to be part of the package

#

It was pretty straightforward, I guess I could've tried negotiating some payment in return, but shrugs

#

not my goal/motivation (+german tax system, no thanks)

#

kinda disgusting and unfair towards other filter makers

gritty olive
#

Yeah, I am worried less about money, than time because it's more important than money

#

True, then again humblebundle tried to do that with JWT tokens and logins but I got around that <_<

pseudo ocean
#
define("trade",["PoE/Trade/App"]
#

app? ๐Ÿค”

gritty olive
#

{"query":{"status":{"option":"online"},"name":"Atziri's Disfavour","type":"Vaal Axe","stats":[{"type":"and","filters":[]}]},"sort":{"price":"asc"}}

#

Then you make a secondary request for the IDs returned

#

https://www.pathofexile.com/api/trade/fetch/f6187ed9795954eab76bb8d99edd37dbbc405bbfdbfb26e5ab2852d004612ae7,93d849f8af0c2848568d72780bc284930d1c4c7a06d8f840671c40b3596ddce9,dd00892be7837cf95b10128b756b5a8405f9df196a3ef96df043999df3440215,6f2a1e89913e1fc7bb30935dba3dcd78b854a59f67a1b7e840cb4e2e2c6bcf01,0d004cadca8af069993bb8ef6f6a489b9ee476b1b6bd92fd8bf93f3ae44ffbc1,b8e87a5a42176c7d3723e49e7f10d41c114b3b1f60a0af2c808bcacc654bad20,f25e0ce0442226d332fde6ed4f87b73d9c21a7a846eddf0c607691dd67e75fca,34be4c6f337ed4054e838db4ccef006689f2387dc1003fc35f3fe90b2a53d772,5b562262f98778851986c23f7b35710bcb460f3dcffa2f8a1bfd0fd5828a5632,973279e857bc8337f07c03b442b996eec7df38a5fd0d2ee7b29d396dde8c0d04?query=awmnfx

#

the ?query= is the trade_search.response.body.id

pseudo ocean
#

vuex v2.3.0

#

dang

gritty olive
#

Yeah, Vue is nice

compact isle
#

^

gritty olive
#

If someone wanted they could just copy the JS + the X-Templates and have their own Trade Site

#

Just saying

hazy fog
#

Hey Nov

gritty olive
#

The API is pretty straight forward

hazy fog
#

can you ytell someone to add a link to /trade somewhere

hushed relic
#

That'd be pretty ironic

hazy fog
#

after this announcement is old news there won't be a reference anywhere on the main site to /trade

gritty olive
#

I need something that explains the UI

compact isle
#

yeah we'll be doing that once we're certain it can handle the load

hazy fog
#

kk cool

gritty olive
#

Why are some values colored and others not

#

DPS is white on one, Purple on another

hazy fog
#

q?

gritty olive
#

What does it mean ๐Ÿค”

hazy fog
#

20q maybe

hushed relic
#

blue = quality enhanced

gritty olive
#

the white one is qualitied

hushed relic
#

I think

compact isle
#

if you hover over it it should say (at 20% quantity)

gritty olive
#

Ah, it's a long hover not a short hover

#

Uses the alt / title hover attr

#

Takes like 2-3 seconds to show up

cosmic saffron
#

that's how it works in-game

gritty olive
#

Hm?

chrome topaz
#

@hushed relic nope didn't know until today

#

the search is pretty fast i wonder what they use

#

i mean normal search haven't checked live search

#

on a second check it seems about the same

fervent pine
#

theres a video out already that its slower, but idk obv latency issues today

chrome topaz
#

yeah i think it's because it's not using websockets, it does a request every 5 seconds

fervent pine
#

ah makes sense

gritty olive
#

Well then

#

That's awkward..

hushed relic
#

@chrome topaz thanks, good to know

golden hawk
#

Erm... Excuse me if I am in the wrong place, but I notice something strange with one of the specter. It is the one Shavronne's vision or the futuristic machine. The game doesn't allow to create corps of it with desecration... Is it normal or it is a bug? Cause I really like these specters...

bright ruin
#

you could say there's DISCORD... amongst them...

tacit mango
#

is there like json or similar of all uniques, where both the name and the item type are seperated?

obtuse citrus
#

you can query the wiki to get such a list

deft jolt
#

icon url has item type

potent galleon
#

finally back

#

yasss

idle imp
#

kinda new at this, so far got to getting All the idenfied and priced items in a certain league out of the public tabs api

potent galleon
#

@idle imp currencycop is pretty good code to look at for reference

idle imp
#

heh, will look at it

#

my problem so far has been debugging why my filtering of the json is wrong cause i cant search the object in postman manually

#

so i kinda have to guess at whats wrong sometimes

potent galleon
#

tbh

#

see if you can pull it out

#

in dev tools

#

and just examine the json object manually

idle imp
#

ye thats how i figured out that the "ghost" uniques i was pulling out where actually unid uniques

#

oooh currency cop is also in JS

#

this should be useful

#

will probably post more tommorow since i dont plan to work too hard on this, just a thing to throw brain power at in the free time

gritty olive
#

@potent galleon I'm building a web version of it

#

I probably annoyed novynn on saturday debugging username / password login <_<

potent galleon
#

rip

#

i'm finally back at work

gritty olive
#

I have a working API for U/P and Session

potent galleon
#

my boss told me they reverted my last commit cuz of a bug, but i just rebased to tip of master and it works fine

gritty olive
#

Backend is in lua

potent galleon
#

so i'm confused as f

gritty olive
#

What kind of bug

#

I'm at work right meow

deft jolt
#

what items have variants

#

ie vessel of vinktar or yriels forstering

hazy fog
#

atzoobi shirt

#

doryani's belt

#

I think those are the only 4

tropic shuttle
#

depending on your implementation, ventor's

#

not technically a variant but the mods will change between increased and reduced

grand prawn
#

volkuurs guidance is a variant too

#

Some unique maps too I suppose. Poorjoys, hallowed ground

deft jolt
#

hmm i suppose

delicate ore
#

@gritty olive can you value 6sockets at 7 jewelers?

#

it would be more convenient than having to vendor them all then placing them in some tab

#

like, for pricing at a glance

fickle yew
#

@compact isle Are the league ids (trade api) for Turmoil and Mayhem available yet? They're not on the league api yet.

#

The the ajax request from refreshing one of the ladders would suggest 10 Day Turmoil (ORE001) for Turmoil.

idle imp
#

is there a way to id what type of vinktars it is besides parsing the properties?

idle imp
#

ye figured out a easy way since JS has the includes method on strings

gritty olive
#

@delicate ore it would be nice to have a vendor value huh

#

whether it's higher or lower

#

@idle imp building your own currency cop?

idle imp
#

nah making an item sniper

#

mostly to add to my github

gritty olive
#

oh nice

idle imp
#

but ill see how usable i can make it by the time the next league comes around

#

i also had this stupid idea of making a website that just displays a stream of underpriced items put up for sale with a counter of how much currency you couldve gained from flipping all of it

#

but im bad at front end so idk

simple ravine
#

i think reality is a bit more complicated

#

a) you have price fixers who don't intend to sell,
b) you have people who make a mistake when pricing an item
when it comes to the underpriced items, i suspect a decent share of these items will be due to one of the two aforementioned.

idle imp
#

well people that misprice are technically the target for sniping anyway

#

and fixers shouldnt relist items in theory so shouldnt be a problem that comes up too often

simple ravine
#

people who are new to the game, and by mistake sell the item, yes.

#

people who are just typoing are probably more likely

#

I might be wrong...

idle imp
#

we'll see, for now i just need to get this to actually get me the mispriced items

compact isle
#

the league ids for the trade site are the same as the ladder ids, I'll see if I can find out what they are

compact isle
#

I've added them to the dropdown menu there now

gritty olive
#

@compact isle was thinking about using the new Trade Currency API, to do some Machine Learning โ„ข

compact isle
#

machine learning is always interesting ๐Ÿ˜„

gritty olive
#

In the sense that any algorithm is machine learning?

simple ravine
#

oh the hype

gritty olive
#

"We do sentiment analysis"... So basically you brute force the text against a rainbow table of happy words? Oh okay got it

simple ravine
#

could be a decision tree based on context too

gritty olive
#

Ah yes, depth first search trees right

#

"We do image analysis" Ah okay, so basically you have a machine turk task where humans label images and you have a huge sample size to compare against

#

Google ReCaptcha anyone

compact isle
#

^ lol'd

simple ravine
#

turkish people should be upset

gritty olive
#

@compact isle I'm surprised the new site was done with Vue and not jQuery like the forum code, what inspired you?

simple ravine
#

jQuery being terrible? ๐Ÿ˜ƒ

compact isle
#

having the ability to use something new instead of what we already had ๐Ÿ˜„

gritty olive
#

jQuery isn't that bad to be honest

#

People abuse it is the real issue

simple ravine
#

well, jQuery is a library for dom manipulation and such, meanwhile Vue is a full-fledged mvvm framework

gritty olive
#

Vue is just a View framework

#

Vuex + Vue is a mvvm framework

compact isle
#

wouldn't you need the router to call it a mvvm framework?

simple ravine
#

no

#

Model, View, ViewModel

compact isle
#

eh I suppose just having one view still counts

gritty olive
#

VVRMM

#

Just because you can make a sound with it

simple ravine
#

popular frameworks include it though

gritty olive
#

View View Route Model Model

simple ravine
#

lol

gritty olive
#

I introduced Vue at my work about 4 months ago

#

Engineers love it

simple ravine
#

we looked at Vue, and decided we're going with React

gritty olive
#

I used React for CC to see whether it was something I'd rather do instead of Vue

#

I regret every decision in that

#

New CC is done in Vue

simple ravine
#

it's a different way of thinking

#

it's like event sourcing vs crud

gritty olive
#

Not really, they are very similar, Vue is just ahead of the curve

simple ravine
#

thats a bold statement

gritty olive
#

React focuses on programmatic and lower level bullshit that doesn't need to be focused on

#

It's still figuring out basic integration of languages

#

Or leaves that to you

simple ravine
#

uhm

#

Did you use mobx or redux?

gritty olive
#

Vue instead gives you a rigid guideline on how to do it

#

I'm talking less about the data modelling layer since that is effectively pointless to argue about

#

They all model Windows 3.1 so who gives a shit about it those are solved problems

#

The issue is the Display Layer

#

Integrating Style + Template + Code

#

In an easily developable fashion

simple ravine
#

heh...

gritty olive
#

Which is where React fails miserably when it comes to components

#

Polymer is about to leap ahead though

simple ravine
#

you do whatever makes you happy

gritty olive
#

Native components directly in the browser without including any libraries is Polymers bet

#

Google is backing it so they could add support to chrome and push onto other browsers by effect of user outrage

simple ravine
#

mobx or redux doesn't tell you how to model your data

gritty olive
#

It tells you how to manage passing, fetching, reacting to data and data changes

simple ravine
#

it tells you how state management across your application is being done

gritty olive
#

So effectively it models your data as a byproduct within the app the "state"

simple ravine
#

once you create something more complex, redux makes more sense

gritty olive
#

That's less of a concern for me than everything else

#

Redux works with Vue

simple ravine
#

then that's because you've not gotten to that threshold yet

#

which is fine, everything has its use

gritty olive
#

I don't see why you would say that since I haven't said anything about my use of it

simple ravine
#

but you're essentially telling me I am wrong, and telling me what's true

#

so I'll leave you to it, bud

gritty olive
#

I'm not saying you are wrong, I am saying, that doesn't matter because that's not what I am talking about the major differences lie

#

Representation of the View and it's relation to styling and code, are where the major differences in Vue and React are

#

Vue is ahead of that curve

#

Polymer is betting on native browser support and might jump ahead on that curve

#

That's the real area for innovation

#

Data management
State management

Already a solved problem

#

It's just which solution to apply to the innovative view application

simple ravine
#

Most bugs in an application has to do with state, so I don't agree with you

gritty olive
#

That's not the ground that Vue / React argue on though, if they did, Redux / Vuex would be built in

#

You use an external tool

#

Redux works with Vue, and React, that's not their primary concern and shouldn't be the reason for choosing the library

#

If you want to argue about Vuex (Redux) vs Redux, we can do that

simple ravine
#

hehe

idle imp
#

front end :rooBooli:

gritty olive
#

Front-end has become a back-end

simple ravine
#

React focuses on programmatic and lower level bullshit that doesn't need to be focused on

I lost interest in arguing this, when you stated that. No offense, it's just you've made up your mind that React is shit, and won't even admit that you might have used it wrong

gritty olive
#

Nobody does HTML + CSS anymore except for mom & pop shops

#

I came to a conclusion by using them both @simple ravine, using React, you get a subset of what you get when you use Vue

idle imp
#

man JS has so many options its stupid

gritty olive
#

Every language is the same way honestly

#

What PHP framework do you like?

idle imp
#

i dont know PHP, im relativley new to this

gritty olive
#

What Python server do you use?

simple ravine
#

Don't get me started on PHP... I could write a 400 page book about why I hate PHP and its community

gritty olive
#

What Go http request library or web framework, they all are like this

idle imp
#

also never did servers with python

#

tbh this parser is my first project working with an api and stuff

gritty olive
#

The older I get, the less I care about hype or new, and more about "What does X offer that Y doesn't?"

simple ravine
#

For the past 15 years, I've stuck with .NET, and I'm happy dandy

gritty olive
#

Then, "Where will X be in Y years?" / "What audience does X attract?"

simple ravine
#

well, drifted off to other languages like Python, Erlang etc too - but

gritty olive
#

For a framework "Can I hire someone who can do X quickly?"

simple ravine
#

I don't hire people on that sentiment, do you?

gritty olive
#

Depends on what I am hiring for, we hire for a multitude of reasons

#

I like hiring smart people above someone who can do X

simple ravine
#

exactly

gritty olive
#

It is always great to know whether those who know Y can do X easily however

simple ravine
#

people who are smart, can figure things out easily

gritty olive
#

Which in the case of React / Vue, the answer is "Yes"

simple ravine
#

if 'Framework X' is too complicated for a smart person to figure out, you're either in a very specialized niche, or that framework needs to be ditched

gritty olive
#

Depends on the type of "smart person" too

simple ravine
#

ok, 'very competent developer'

#

๐Ÿ™

gritty olive
#

Builder, Maintainer, Hacker type vs competency

#

checks whether build script finished

simple ravine
#

vs? those are different competency

gritty olive
#

Yes, but that flips the table around in my opinion

#

You can have someone who is very competent but the problem space isn't in their domain

simple ravine
#

such as?

gritty olive
#

Someone who maintains software versus someone who architects it

#

I don't expect them both to understand the exact same things, which is why they work together to solve the issue

simple ravine
#

well, an architect should be able to maintain software

gritty olive
#

I completely agree, but I wouldn't want them doing that (all the time at least)

simple ravine
#

you have your junior devs, your senior devs, system designer and architect

#

sure, but that's just the level of competency

#

if you're hiring an architect that never built serious software, you've got the wrong dude

gritty olive
#

I don't know if I follow the paradigm of "Junior / Senior" yet, mostly because I've seen Juniors be good at things that the Senior isn't and vice versa

simple ravine
#

that's the true 'problem space' you've mentioned

gritty olive
#

I would apply that more to someone who is familiar to the existing stack

simple ravine
#

you can have a sernior backend developer who knows nothing about Vue.js

gritty olive
#

I get that, we were just talking about throwing someone into a new problem space

simple ravine
#

and a junior frontend who digs it

#

problem space is a super abstract and wide term

gritty olive
#

That's my point, it's a different problem space, so I don't fully expect them to understand it yet

simple ravine
#

it can mean anything

gritty olive
#

Ah, you're looking for a more granular verbage, I don't think I have one when it comes to an idea like this

simple ravine
#

ok, so we hired a guy, smart backend developer

gritty olive
#

Taking someone who is a "very competent developer" in one thing, and giving them something different and expecting great results right off the bat

simple ravine
#

and it turned out he's very good with transaction and accounting systems

gritty olive
#

It can happen, but that is only if they are already good at that domain, and language already

simple ravine
#

which we found interesting, as the transaction system the company we acquired had, was less than ideal

#

so we wanted to investigate in developing a new transaction system

gritty olive
#

I'd also just like to point out, #ceoproblems

simple ravine
#

#ctoproblems, but sure

gritty olive
#

True, less about vision more about application

simple ravine
#

to be clear, I didn't shit on Vue.js, I just merely said we chose React over Vue.js

#

Vue.js is good in it's usecases too

gritty olive
#

Not taken like that in the slightest, I am shitting on React if anything

#

Just from personal experience building out applications using it

#

Using that experience compared to Vue

simple ravine
#

We've spend 1+ year with React, made a huge amount of mistakes with the backend, went back to "v1" of our system

#

which used Knockout

#

and now we re-evaluated Vue.js, Knockout, React, Angular etc

#

to where they all are at right now

gritty olive
#

I'd love to make the mistake of using GraphQL, but the update mechanism prevents me from doing so

simple ravine
#

what update mechanism?

gritty olive
#

Updating documents

simple ravine
#

documents is a wide term nowadays :trollface:

gritty olive
simple ravine
#

So I am assuming you're using a document datastore, such as Mongo, DocDB, OrientDB

#

stored procedures, @gritty olive

#

can be useful in these situations, if my assumption is right

#

GraphQL and event sourcing should work well together

gritty olive
#

I went to go get food, one second

#

Yeah but the more I use those kinds of systems the more I end up hating myself in the long run, document stores that is

simple ravine
#

I was so mad at Entity Framework (ORM for .NET), so I just ripped it out and moved everything to DocumentDB (or.. Cosmos DB as they renamed it to)

#

and i'm not super happy

#

but it's pretty damn cool in some cases

gritty olive
#

Yeah, it makes development easy and has some swift features, but you lose a bunch of things from a relational database that save time in the long run or during periods of change

#

Honestly, just get the job done has become a large thing to me rather than ^ that

#

Good case in point is this

simple ravine
#

yea, it depends

#

you creating an internal application for 10 people, or something that'll be used by millions?

#

and if so, how intricate is the application

#

It All Depends โ„ข

potent galleon
#

@gritty olive I'm thinking about ML too actually

#

thinking about tracking the trend of either currency or top 20 highly valued items of each category (like poe.ninja)

#

so every day, simply take the top 20 that you pull; and check them against a hash

#

if they're in there, then skip, otherwise add them to it

#

then separately, every day, iterate over all the keys in your map and add price and date

simple ravine
#

some simple linear regression or ARIMA model can do that for you

potent galleon
#

and then do data analysis on that later

#

well you need to get the data out first

#

there's 3 parts.

simple ravine
#

yeah im talking about ML vs simpler methods

#

it's super easy to start using an ML library, but getting it right is a different thing

potent galleon
#
  1. continues monitoring trends and adds interesting ones to the ones you're tracking
  2. updates the ones your monitoring daily
  3. figure out the ML part with the data
simple ravine
#

I am just concerned about your step 3

#

because your ML library won't tell you if you're doing it right/sane

potent galleon
#

well yeah, that'll take time to figure out

#

but tbh at that point you have all the data

#

so even if you just plot it yourself it'll be pretty interesting

gritty olive
#

You only find out the sanity when it is applied to some scenario or real-world test

delicate ore
#

hmm, two small things, nijiko

gritty olive
#

I like the idea of that @potent galleon especially since the server approach will effectively be reducing API requests since its centralized

delicate ore
#

can you add a refresh-all reports button, and can you add an ignore currency-type feature?

#

also, can you add logging?

gritty olive
#

Logging in what manner?

potent galleon
#

you can add it yourself dude, the code's right there

gritty olive
#

History of changes?

delicate ore
#

logging the report to a text file after every refresh

gritty olive
#

@potent galleon it's going to change a lot soon I wouldn't focus too much on it

potent galleon
#

huge refactor?

gritty olive
#

I already know I'm going to move it to being a web app

delicate ore
#

im working on ChaosHelper right now, else i would add it

gritty olive
#

Especially since I learned about -app=

potent galleon
#

oic

#

LOL

delicate ore
#

-app=?

gritty olive
#

It's a chrome binary feature

#

You can run chrome with a flag that specifies a url and it launches it standalone as an application

simple ravine
#

the native apps that they're deprecating?

gritty olive
#

Luckily it's not a part of that

#

It's a part of chromium, haven't heard about chromium removing it

potent galleon
#

they usually don't remove stuff

#

they're very hesitant to remove stuff

#

even when they refactor or reimplement, they first reimplement, and then remove the redundant stuff a week or two later with another commit

#

I actually used to work on that codebase at my old job

#

open source chrome ftw

simple ravine
#

the whole "Let's make HTML apps into desktop apps" is an interesting thing to watch

delicate ore
#

yeah its sweet

#

electron, react native

#

what other frameworks are there?

#

i just know those two mainly

simple ravine
#

in the html-as-desktop-app? no idea

#

to me, it's just a testiment of something missing, so you bend shit into something that's probably not a good idea.

#

and people make interesting things with it

delicate ore
#

well in practice the results often look better than the native desktop frameworks imo

simple ravine
#

which native desktop frameworks are you referring to?

delicate ore
#

qt, gtk, etc

simple ravine
#

those are terrible indeed

delicate ore
#

qt at least has the qml/js engine thing going for it for when you want to use web code to make apps too

simple ravine
#

that's the whole thing I cringe at

#

I jsut don't like how you're forced to do single threaded desktop applications

#

that's insane.

#

(to me)

delicate ore
#

in what

#

qt has multithreading

simple ravine
#

javascript

delicate ore
#

oh

#

uh, doesn't it have coroutines now?

#

and technically couldn't you do some hacks with an external library?

simple ravine
#

it's like saying "php can do asynchronous stuff, just fork(...)"

#

no offense, but that's so far from ideal

#

the worker threads that you can do nowadays, require you to serialize and deserialize when communicating between the "threads"

#

so essentially, it's pretty limited to what you can do with it

#

gpu.js and asm.js is pretty interesting though

#

still, moving things between gpu over the PCIe lane and back, is far from ideal in most cases

delicate ore
#

i knew about asm.js, but not gpu.js

#

people port desktop apps to web and mobile using asm.js and emscripten

simple ravine
#

people build mission critical applications in PHP using anti-patterns like ActiveRecord too

#

:trollface:

waxen ridge
#

You can spawn processes in Node

simple ravine
#

yeah. i addressed that too

simple ravine
#

what I mean, is.. try attempt something nearly as efficient in javascript:

    public class Foo
    {
        public event EventHandler<NewItemFoundArguments> NewItemFound;

        private readonly IStashFetcher _stashFetcher;
        private readonly IItemFilter _itemFilter;

        public Foo(IStashFetcher stashFetcher, IItemFilter filter)
        {
            _stashFetcher = stashFetcher;
            _itemFilter = filter;
        }

        public void Monitor(CancellationToken cancellationToken) => 
            Task.Run(async () => { await MonitorImpl(cancellationToken); });

        private async Task MonitorImpl(CancellationToken cancellationToken)
        {
            while (!cancellationToken.IsCancellationRequested)
            {
                var newItems = await _stashFetcher.FetchNextAsync();
                newItems
                    .AsParallel()
                    .Where(c => _itemFilter.Match(c))
                    .ToList()
                    .ForEach(c => NewItemFound?.Invoke(this, new NewItemFoundArguments(c)));
            }
        }
    }
#

(just a non-thought-out crude example)

gritty olive
#

Depends on your problem space ๐Ÿ˜‰

chrome topaz
#

@compact isle did you see my skype msg?

compact isle
#

yep

mortal bone
#

woah, people still use skype?

simple ravine
#

lol of course

#

what else that is not tied to a team/organization/"server"?

mortal bone
#

very few apps that is for sure, but skype is an ad ridden mess right now

gritty olive
#

secret skype messages marauderthinking

simple ravine
#

i see no ads in my skype

gritty olive
#

can only mean one thing

#

premium pathofexile trade accounts enlightenedchaosthinking

waxen ridge
#

Insider access??? ๐Ÿ˜„

#

premium = no ads right

gritty olive
#

how weird would it be if people paid for more ads

simple ravine
#

isn't ggg notorious for that?

waxen ridge
#

eh

mortal bone
#

huh?

simple ravine
gritty olive
#

Too many pixels for me

simple ravine
#

perfect for inter-organizational communication

gritty olive
#

I thought that's what Slack is for

simple ravine
#

that's intra-organizational communication

chrome topaz
#

I hate new skype

simple ravine
#

sure enough they have shared channels now

mortal bone
#

I generally just use email...

chrome topaz
#

it constantly stops sending messages and I have to restart it

#

sometimes randomly it doesn't receive messages if the window is minimized

mortal bone
#

also mobile skype is aweful

chrome topaz
#

and the new design on mobile is just gross

simple ravine
#

u try it recently? it was terrible sometime ago, but became better and more stabile

mortal bone
#

it will say you have message unread from years ago

simple ravine
#

i made the switch a few week back

chrome topaz
#

yeah I'm using it right now and had to restart it 5 minutes ago for it to send my message

#

it just displays "sending..." forever

simple ravine
#

oh yeah, mobile new is most likely made by some designer on too much LSD

cosmic saffron
#

I don't know anybody that actually likes skype on phones

mortal bone
#

there is an ad lol

#

I assume you have skype for business? which doesn't have ads

simple ravine
#

what a perfect targeting

mortal bone
#

yeah 10/10 need fab eye makeup

gritty olive
#

I haven't used Skype since I played FFXIV

simple ravine
#

Skype for Business is its own thing, but I do have some premum thing now that I think of it

cosmic saffron
#

ใค โ—•โ—• เผฝใค EMMITT TAKE OUR fab eye makeup เผผ ใค โ—•โ—• เผฝใค

gritty olive
#

eye makeup... o_O

mortal bone
#

Skype for Business is also a nightmare for the phone industry

simple ravine
#

Skype is more for business rather than for gamers tho, indeed

mortal bone
#

they make analog to voip a shit show

simple ravine
#

so this audience will likely hate it more than other groups

chrome topaz
#

the skype for windows 10 doesn't have ads

cosmic saffron
#

plenty of alternatives to skype for voip

mortal bone
#

edited to say analog to voip

cosmic saffron
#

the windows store version?

simple ravine
#

sure, but it depends on who you're talking with

chrome topaz
#

yeah

simple ravine
#

if you're talking with some freelancer, or a service vendor, u dont want to invite them to some random Discord / Slack thing most of the cases

#

and have them download and install that app, when they already have Skype

mortal bone
#

goto meeting/picking up the phone works pretty well

#

conference bridges as well