These forums have been archived and are now read-only.

The new forums are live and can be found at https://forums.eveonline.com/

EVE Technology Lab

 
  • Topic is locked indefinitely.
 

Why are we not combining market data, player devs?

Author
Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#201 - 2012-04-16 19:03:26 UTC
Dragonaire wrote:
As Desmont McCallock pointed out it's all the same problem and your site is just going to have to do the duplicate detection. What I'm suggesting is a way to help find duplicates and keep from getting into forwarding loops in cases where you receive data from some site and also feed to it.


The forwarding loop should not be an issue. All sites currently feeding EMDR don't actually use it for their own data generation yet. The correct way for them to approach this would be to point their "upload" view at EMDR, then consume the EMDR feed like the rest of us. We're probably a good way away from having to worry about that, as I'm still working on establishing a track record of reliability, and getting everything battle-tested and documented.

Dragonaire wrote:

Would it maybe good for all the sites to come up with a system to make routing tables between themselves probably but that's separate from the data format. I'd be more than happy to help develop something along this line if everyone is interested in it.


It couldn't hurt to at least toss up a wiki page with details on who is consuming who, for now. Though, as I have pointed out, data duplication actually becomes less of a problem if we're sane about how data is consumed.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#202 - 2012-04-16 19:06:21 UTC
LifeHatesMe wrote:
thought this was discussed previously? And there was no concensous because of how it could be abused? Heck, if EVE could supply us with a accessible unique transaction ID (via Cache, or Market Export), that would be hugely helpful, will they though? Remains to be determined..


It may have been, there are a ton of pages in this discussion, and I have admittedly not committed it all to heart. The more I look at this, the less concerned I am about it. I think I may just have to provide some best practices for storing data with potential duplicate, or near-duplicate data points. This is something that doesn't just apply to EMDR, and may be a good exercise for us all to go through, perhaps on the wiki.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Dragonaire
Here there be Dragons
#203 - 2012-04-16 21:41:13 UTC
You are correct that something like this came up before and it was agreed there was no way that couldn't be abused and there are better ways to handle it.

IMHO some duplicate data is not a bad thing since it should help in spotting anyone trying to push bogus data into the system. It also help when sites go down due to bug/maintenance etc in that when they come back up they should be able to request fills from the other sites.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

LifeHatesMe
LifeHatesUsAll
#204 - 2012-04-17 00:21:33 UTC
So what should we do then? Push EVE devs to provide us with this information so we can extrapolate it, and provide it in tools?

I think they could provide us halfway with a unique transaction ID instead of having to provide us a full blown export of all the financial data. Where do we start? A petition? A thread asking devs directly if someone over there could bother to tag in a single database id on success when changing the market price, or submitting a market buy/sell on the market? I'd like to see a dev comment on this thread seeing as it's one of the most popular discussions in Eve Technology forum.

What say you!? :)
Dragonaire
Here there be Dragons
#205 - 2012-04-17 03:27:02 UTC  |  Edited by: Dragonaire
The developers at CCP have repeatedly said no to any kind of market data export to the point they generally won't even response any more when people bring it up so what we have now is as best we'll get. As for some kind of transactionID they are available to the person that makes the market order via the API so if all applications that have API information would add option to forward the market order API it would be added as the orderID in the existing format. Just to make it clear this is the same orderID you get from the cache export so everyone has access to the main ID you need to track the orders.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

Snarf Aldes
University of Caille
Gallente Federation
#206 - 2012-04-17 06:03:47 UTC
Hmm, should have read this thread sooner...

I posted a possible solution to the EMDR looping problem in this thread

Quote:
This can be resolved, but it requires a change in the json layout. If the uploading client software sends its destinations, for instance the urls it’s uploading to, then I as an endpoint can see if the data was already sent to me directly, and just discard it if it comes in again via emdr.

For example:
“destinations” : [
{“url”:”http://eve.addicts.nl/api/upload.php”}
{“url”:”http://www.evemarketeer.com/api/upload”}
{“url”:”http://master.eve-emdr.com/upload/eve_marketeer/”}
{“url”:”http://eve-central.com/datainput.py/inputdata”}
]

Destinations should not be deleted, only added to by intermediate sites if they upload it somewhere else.
If I would see that emdr is in the list, I don’t have to push it into the relay system, if it’s not I can decide to upload it after adding the url for emdr to the list.

This would ofcource only work for uploaders using the unified format.


It would prevent a lot of duplicates, and users could decide to keep uploading to only one (or multiple) of the market data sites (for instance because they want to be on the stats page or something like that).

I never got the 'uploadKeys' field in the specs. Is it supposed to be used for the upload keys that sites like mine and eve marketeer use now?
Because that won't work very well. The reason i can use the key as a form of authentication is that it is only known by the user and by me, it doesn't get sent anywhere else. If it end up in the relay system, it would be in the open, and anyone can steal any identity.

Creator of Eve Addicts

Dragonaire
Here there be Dragons
#207 - 2012-04-17 06:33:38 UTC
First you have to ask yourself why you think it's important you know who is sending you the data? If it's just for some kind of credit system what does it matter if someone else want to give one of your users some extra credit? If you are trying to use it for anything else it's a mistake as you'll never know for sure who is sending something to you especially if you allow normal HTTP connections and don't limit the connections to HTTPS which probably doesn't really add any value. If you were using something in your key that is used to authenticate the user that's just asking for trouble anyway and shouldn't have been done to start with.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

Snarf Aldes
University of Caille
Gallente Federation
#208 - 2012-04-17 14:01:20 UTC
Dragonaire wrote:
First you have to ask yourself why you think it's important you know who is sending you the data? If it's just for some kind of credit system what does it matter if someone else want to give one of your users some extra credit? If you are trying to use it for anything else it's a mistake as you'll never know for sure who is sending something to you especially if you allow normal HTTP connections and don't limit the connections to HTTPS which probably doesn't really add any value. If you were using something in your key that is used to authenticate the user that's just asking for trouble anyway and shouldn't have been done to start with.

I agree, for my site i just use it to make the top uploaders stats.

I would like all of your opinions about the 'destinations' info in the json format. Even without the EMDR system it should be useful, for instance if 2 sites decide to collaborate and just relay between each other. It would also prevent duplicate data in that case.

Creator of Eve Addicts

Desmont McCallock
#209 - 2012-04-17 14:05:11 UTC  |  Edited by: Desmont McCallock
As far as I understand it, looking at the data of a market related cached file, it includes the orderID for each order. So even if multi-clients upload the same info (cause clients are viewing the same market region and same item), cross-referencing the orderID, when processing the data at the server side, would be more than enough to identify duplicate uploaded data.

Do I get this right or am I missing something?

Edit: Some will say that between two uploads an order could have been changed (although the ID remains the same), which may lead in rejecting the updated data. Now, we at EVEMon do an 'IsModified' check when ever we update the market order monitor. This check compares the 'price', 'issueDate' and 'volRemaining' of an order with the same ID. Couldn't this be the checking function at the server also?
Dragonaire
Here there be Dragons
#210 - 2012-04-17 16:42:46 UTC
issueDate has to be checked or you risk overwriting new data with older data and the other checks I'm not so sure are needed. I believe if you change the price it gets a new orderID from what I remember from working with the marketOrder API. The issueDate would also change in that case which if I remember right is what happens in game when I've made changes to sell and buy orders. The volRemaining could be changed do to the low res of the date-time used where one scan sees a transaction and another doesn't but that should be a rare case and can be simply resolve by always using the smaller amount.

Quote:
I would like all of your opinions about the 'destinations' info in the json format.
You should be tracking where the data comes from internally and know not to send it back to where you got it. As posted above this is about route between sites which is outside of what the format is about which is a common format to exchange the data. There could be a separate route discovery process between sites that could use JSON as well but it shouldn't be a part of the data. You can always add your own uploadKey to the data to help detect loops but it'll be of limited use as pointed out above in the last couple of pages. As Desmont McCallock pointed out in https://forums.eveonline.com/default.aspx?g=posts&m=1140194#post1140194 it's really just a duplicate uploader problem that you have to deal with anyway and doesn't need to be handled differently.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

Desmont McCallock
#211 - 2012-04-17 16:58:32 UTC
Whenever you modify an order the 'price' and 'issueDate' change but order doesn't get a new ID.
Whenever an order gets a transaction then the 'volRemaning' changes. When 'volRemaining' reaches "0" order is deprecated.
At least that's how the API works and API is an extension of the DB.
Dragonaire
Here there be Dragons
#212 - 2012-04-17 17:20:11 UTC
I thought it did on changes to price but I could be wrong on that or CCP made a change so it doesn't anymore without telling anyone Blink but either way it can be handled simply by the receiver when processing the data.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

Snarf Aldes
University of Caille
Gallente Federation
#213 - 2012-04-17 18:45:39 UTC
Dragonaire wrote:
You should be tracking where the data comes from internally and know not to send it back to where you got it. As posted above this is about route between sites which is outside of what the format is about which is a common format to exchange the data. There could be a separate route discovery process between sites that could use JSON as well but it shouldn't be a part of the data. You can always add your own uploadKey to the data to help detect loops but it'll be of limited use as pointed out above in the last couple of pages. As Desmont McCallock pointed out in https://forums.eveonline.com/default.aspx?g=posts&m=1140194#post1140194 it's really just a duplicate uploader problem that you have to deal with anyway and doesn't need to be handled differently.

Not sending it back to where you got it is of course obvious.

The destinations json section would just be a very convenient way of detecting a duplicate without having to do any database calls and with very little other processing.
Adding a key to uploadKeys would let me identify stuff I send into the relay, but it won't help me detect stuff already sent to me directly.

In your reasoning, isn't the uploadKeys section also beyond the scope of the format, since it hasn't got anything to do with the actual data?

The way I see it, routing info has a lot to do with the exchange of data, it tells you where data is going, and where it has been.

Creator of Eve Addicts

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#214 - 2012-04-17 21:53:56 UTC
If we can devise a way to rule out obvious relay/inter-change related dupes, I don't see a reason not to. We need to be sharing data, and anything to make that easier is a win. Whether it be via uploadKeys, an addition to the spec, etc.

The "destinations" field seems like a good idea, though, if uploadKeys was meant for this, that would be fine too. I'm just not entirely sure what uploadKeys is for.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Dragonaire
Here there be Dragons
#215 - 2012-04-17 23:26:47 UTC
http://dev.eve-central.com/unifieduploader/start If you haven't read completely through that you should. uploadKey isn't made to really be used for what you think is needed but it can be used to detect message looping and all sites should have checks in place for them if they both send and receive data.

As pointed out by Desmont McCallock wither the duplicate data happens because you have 1000 users all doing market scans in say Jita or least people uploading to multiple sites which are cross feeding each other doesn't matter you still have to deal with dups in some way and truthfully both cases can be handled the same. I think part of the thought behind wanting some kind of tracking history like you are asking for is that you view the dups as a waste of resources vs where I and others see it as an chance to receive fills when my site might be down or confirming the data I've already receive from other source hasn't been tampered with. By the nature of how the data is provided you are always going to have to deal with dups so it's much better to design you system so it doesn't matter from the start then trying to have something added on that itself could just as easily be faked and worthless. I also don't see this being a big problem as there really isn't much need for more then 3-4 upload sites to begin with and them cross feeding each other.

On a relate thing I do think all upload sites should have some kind of uploaderID which they include in the uploadKeys so sites can try to be smart about which other sites they might forward to first. So for example if they notice an EMK key they might delay upload there until they've uploaded to Eve Central which isn't listed. I can even see having a system where by default you don't do pushes to other sites listed as receivers in the data but they can request the data even if they might already have it as a pull. Being able even to request filtered vs unfilter updates would probably be a very useful thing.

Anyway that my thoughts on making any changes.

Finds camping stations from the inside much easier. Designer of Yapeal for the Eve API. Check out the Yapeal PHP API Library thread.

Snarf Aldes
University of Caille
Gallente Federation
#216 - 2012-04-18 05:44:39 UTC
You are right about the fact that we do get duplicates right now, but with a system such as EMDR the duplicates can increase significantly. If there is so much opposition to changing the specs, then i'll just have to live with it and process the duplicates.

What I am going to do with Eve Addicts is feed all uploads I get into EMDR, and I'll add 'EveAddicts' to the uploadKeys section.
We'll see how that works, and if there are big issues, we can look at solutions at a later stage.

Creator of Eve Addicts

Ilyk Halibut
Deep Core Mining Inc.
Caldari State
#217 - 2012-04-18 15:53:49 UTC
Snarf Aldes wrote:
You are right about the fact that we do get duplicates right now, but with a system such as EMDR the duplicates can increase significantly. If there is so much opposition to changing the specs, then i'll just have to live with it and process the duplicates.

What I am going to do with Eve Addicts is feed all uploads I get into EMDR, and I'll add 'EveAddicts' to the uploadKeys section.
We'll see how that works, and if there are big issues, we can look at solutions at a later stage.


Let me know how that goes. If this ends up being a bad problem, EMDR will just add what it needs to the JSON to prevent issues, and consumers can discard the added bits.

EVE Market Data Relay - A real-time feed of EVE Market data http://www.eve-emdr.com

Syn Fatelyng
Redanni
#218 - 2012-04-18 16:38:22 UTC
And my axe!
Desmont McCallock
#219 - 2012-04-18 16:46:58 UTC
And my bow... lol
Desmont McCallock
#220 - 2012-04-20 19:58:13 UTC  |  Edited by: Desmont McCallock
Here is the JSON format that the EVEMon Market Unified Uploader will generate.
I merely posting this so anyone can point out any errors can as I may be blinded (Dragonaire, have a thorough look please).

Notice that some values in 'uploadKeys' and 'generator' are placeholders.

Thanks in advance.

PS: Spaces where added manually to make it more readable.
Edit: !Important Question! .NET generates an ISO 8601 DateTime without the "+00:00" suffix. Is that mandatory?
According to wiki the correct ISO 8601 format for UTC DateTime is "YYYY-MM-DDTHH:mm:ssZ".


Quote:
{
"resultType":"orders",
"version":"0.1alpha",
"uploadKeys":[
{"name":"endpoint1","key":"0"},
{"name":"endpoint2","key":"0"}
],
"generator":{"name":"EVEMon.MarketUnifiedUploader","version":"1.7.0.xxxx"},
"currentTime":"2012-04-20T19:45:59",
"columns":["price","volRemaining","range","orderID","volEntered","minVolume","bid","issueDate","duration","stationID","solarSystemID"],
"rowsets":[
{
"generatedAt":"2012-04-20T19:01:22",
"regionID":"10000052",
"typeID":"16275",
"rows":[
[424,187,32767,2475356908,387,1,false,"2012-03-18T15:47:53",90,60006244,30004082],
[400,391,32767,2485609092,891,1,false,"2012-03-28T14:02:41",90,60006817,30004098],
[400,792,32767,2491228181,792,1,false,"2012-04-02T09:56:48",90,60006817,30004098],
[325,34,32767,2497268026,34,1,false,"2012-04-07T17:40:54",90,60008017,30004103],
[400.01,115,32767,2453822955,115,1,false,"2012-02-27T08:45:45",90,60008962,30004103],
[400,3897,32767,2489907980,3897,1,false,"2012-04-01T09:25:02",90,60001243,30004106],
[460,13517,32767,2511607778,13517,1,false,"2012-04-20T09:51:27",30,60008860,30004113],
[450,8593,32767,2502129735,8593,1,false,"2012-04-11T19:00:28",30,60008857,30004115],
[100,681,32767,2511340908,1185,1,false,"2012-04-20T01:46:09",1,60007234,30004124],
[400,188,32767,2497805390,188,1,false,"2012-04-08T02:47:38",30,60010645,30004126],
[456.44,2,32767,2490683028,2,1,false,"2012-04-01T21:07:53",30,60008647,30004147],
[425.13,18,32767,2501060139,18,1,false,"2012-04-10T19:03:51",30,60008647,30004147],
[445.87,3,32767,2506097794,3,1,false,"2012-04-15T06:30:59",30,60008809,30004147],
[107.11,995237,5,2471174575,1000000,1,true,"2012-03-14T16:40:53",90,60005092,30004078],
[76.99,145260,32767,2396369161,150000,1,true,"2012-02-07T10:46:54",90,60005938,30004080],
[96,99959,32767,2508486465,100000,1,true,"2012-04-17T07:46:43",90,60008860,30004113],
[301,29494,1,2477151042,50000,1,true,"2012-04-11T19:01:08",30,60008857,30004115]
]
}
]
}