I'm soon planning to release a free panther project. I don't mind if people make copies and redistribute it very much, but I would like to keep tabs on how many of my software (copies and direct downloads) there are, rather than only counting the direct downloads. The project can't save but I want to give each project an unique ID that it can send to my site the first time it is run, letting me count the number of different projects used, similar to IP traffic tracking.
The project cannot save so the ID needs to be stored in a file of some sort and I am unsure how to make it so that a copied version of the project will not have the same ID as the original.
idea 1:
when run, the project checks for a file. If it does not exist, it creates it with a unique, random ID number. this will then be the project's ID for life.
Problems:
if the file is copied along with the rest of the project the copy will have the same ID.
idea 2:
when run, the project checks for a file. If it does not exist it creates it with a unique, random ID number. The file is saved somewhere else on the users computer, nut in the main project folder.
Problems:
while the file will no longer be likely to be copied with the rest of the project, the file may be spotted by a user who is browsing, and, seeing no use for it, they delete it, giving themselves a new ID number even though it is the same copy (potentially many times).
idea 3:
when run, the project checks the "ID", OS or other unique info about the computer it is running on, then checks this against both a file containing its unique ID number and a file containing the "ID" of the computer it was last run on. If the latter has changed, it is running on a new machine and therefore quite likely a copy.
Problems:
I don't know if computers have a unique identifyer, nor how to get it read by a Panther project. I can get the OS but that can apply to many computers.
Can anyone suggest a solution?
Offline
Interesting problem!
I would go for some variant of option 3, simply because there are more cons than those you listed for having a stored file (options 1 and 2).
One thing I thought of was username, which could be used along with other info (such as # of drives) to determine the uniqueness of the computer. You'd have to somehow code all parameters together and send them through a web request.
Offline
LS97 wrote:
Interesting problem!
I would go for some variant of option 3, simply because there are more cons than those you listed for having a stored file (options 1 and 2).
One thing I thought of was username, which could be used along with other info (such as # of drives) to determine the uniqueness of the computer. You'd have to somehow code all parameters together and send them through a web request.
well it would simply be a GET request to a page on my site. gameInfo.php?id=423756436&PC=Win764
However, I don't know how to get system information read by Panther.
Offline
I don't know squeak, but I'm sure you could use some form of a custom block.
Offline
sparks wrote:
LS97 wrote:
Interesting problem!
I would go for some variant of option 3, simply because there are more cons than those you listed for having a stored file (options 1 and 2).
One thing I thought of was username, which could be used along with other info (such as # of drives) to determine the uniqueness of the computer. You'd have to somehow code all parameters together and send them through a web request.well it would simply be a GET request to a page on my site. gameInfo.php?id=423756436&PC=Win764
However, I don't know how to get system information read by Panther.
Yes, I figured as much as a GET request
As for the Panther issue, the two variables I mentioned are already a part of Scratch. They are used by the file open/save dialog to list the drives in computer, and to get an accurate "home" folder.
Offline
LS97 wrote:
sparks wrote:
LS97 wrote:
Interesting problem!
I would go for some variant of option 3, simply because there are more cons than those you listed for having a stored file (options 1 and 2).
One thing I thought of was username, which could be used along with other info (such as # of drives) to determine the uniqueness of the computer. You'd have to somehow code all parameters together and send them through a web request.well it would simply be a GET request to a page on my site. gameInfo.php?id=423756436&PC=Win764
However, I don't know how to get system information read by Panther.Yes, I figured as much as a GET request
![]()
As for the Panther issue, the two variables I mentioned are already a part of Scratch. They are used by the file open/save dialog to list the drives in computer, and to get an accurate "home" folder.
I'll see if I can find them, then! I feel it may be an invasion of privacy to send people's names to the site though... Panther and Scratch don't have methods of encryption like sha1 or md5 either. I suppose I could use Magnie's hashing though.
Offline
For option 3, there is the computer's MAC Address which is supposedly the most unique identifier for computers. Though I think this is something you'd definitely hash if you plan on sending it to your site.
I'm also thinking that you could use the GET requests and track the IP and the browser, but I'm not completely sure. IP changes happen often though, so it won't be an exact thing.
Another problem you might want to notice, is that the user may also play offline.
Offline
Magnie wrote:
For option 3, there is the computer's MAC Address which is supposedly the most unique identifier for computers. Though I think this is something you'd definitely hash if you plan on sending it to your site.
I'm also thinking that you could use the GET requests and track the IP and the browser, but I'm not completely sure. IP changes happen often though, so it won't be an exact thing.
Another problem you might want to notice, is that the user may also play offline.
If the user plays offline there is obviously nothing I can do, but the project will try to connect to my site at least the first time it is run, though it can be turned of after that from the settings page. Any idea how to access the MAC Address? I am thinking I would use your hashing system since it would add privacy and I don't need to know the actual info, just check it hasn't changed. You have stated the exact reason why I don't want to use IP addresses.
Offline
sparks wrote:
If the user plays offline there is obviously nothing I can do, but the project will try to connect to my site at least the first time it is run, though it can be turned of after that from the settings page. Any idea how to access the MAC Address? I am thinking I would use your hashing system since it would add privacy and I don't need to know the actual info, just check it hasn't changed. You have stated the exact reason why I don't want to use IP addresses.
I'm not sure how to access the MAC address, sadly. Also, my hashing system is very slow and it doesn't add much security since it's probably really easy to break.
I'm thinking that the file will probably be the best way. You could have it look for the username and then hash it then send it to your site. So when the project starts up, it checks if the file exists (like in the user/docuements directory) and if it doesn't, it gets the username and hashes it then sends it to your site, then creates a file somewhere other than where the project is located (AppData is a place for saving Application Data stuff on Windows) then if it ever is deleted, the site can just check the hash against the database -or wherever you decide to store the hashes- and if it's already there, it will ignore it.
So even if the user deletes the file, there won't be any problems. Theoretically.
Offline
Have it generate a random code and save it in the folder, and then send it to the database when it generates the code. If the first time it's opened on a differewnt machine, generate a new code and send.
Offline
roijac wrote:
registry?
...in Squeak
Unlikely...
Offline
roijac wrote:
trolololol ^^
http://forum.world.st/squeak-dev-Read-Windows-Registry-td85215.html
he he... never mind... good find!
Offline