GDPR (EU) ,CCPA (Cal), SHIELD act (New York), PIPEDA (Canada), LGPD (Brazil), PDPA (Hong Kong), IT act (India), etc.
???
Security and Privacy - after the user ceases to be part of a service, by law, his traces must be deleted (PII data) or anonymized.
But why anon
out of everything? What about deletedxxxxxx
?
Oh, I see now! Whatâs pretty interesting is how they will update all mentions and quotes for deleted users but they donât do the same for editing usernames.
So it was on the old versions the newer ones do it.
My mentions and quotes didnât update when I changed my username.
If you didnât notice, quotes donât change if the quoted text changes either
Why not just delete it, then?
Probably not instant so as not to burden the forum unnecessarily and write through databases for a long time.
Can you give an example of where there is still the old way?
Imagine me leaving the forum
How many topics and all the posts would disappear and create confusion because there are holes in the distorted communication.
Data that can be deleted are deleted
and the forum is a public matter anywayâŚit is understood that what you write here is public
so just anon users are enough.
Somehow you have to name the one who is post something
not just to make it clearer and more readable to people
but also the database must have some ID and generate all that
This is my recent mention, I guess this should have updated first.
Or Search results for 'Technical.Legendz' - InfinityFree Forum
I donât really know - maybe itâs a bug that has been fixed in newer versions
but we are not using beta versions and should wait for the clean version to come.
I tried to rebuild HTML on the forum in a few posts where it happens but without success
maybe even the DOT is the problem in your ex name
if you want I can tell the admin so when he has free timeâŚ
Letâs say for example someone spreads something and then he deletes himself, if it was like what you said then we did not have proofs to collect and itâd turn into a critical security issue.
I got the âyou have reached your entry process limitâ message on my WP site (After I thought it was broken because it wasnât loading) a refresh fixed it, but the graph shows I have not hit the limit? What is going on?
No, thatâs how many times you hit the limit, not the limit itself (I think).
Graph is not a live view and it takes 24 hours to update
and then displays the status for the entire day
and you may have had a brief outburst that resulted in that message
(it can happen sometimes)
but the problem is if it happens to you for days
this means that your website is getting too much traffic or internal traffic.
const idCount = 1e+6;
let workerCount = 40;
const workers = [];
const results = [];
const times = [];
//Prevent distributions that leave workers with a "half job", in which the number of IDs equals the number of workers, not the idCount variable.
if(idCount < workerCount){
workerCount = Math.min(idCount, 100);
}
for(let i = 0;i < workerCount; ++i){
const workerFn = () => {
console.log("Worker started!");
self.addEventListener("error", e => (console.error(e.message), self.close()));
class IDs {
constructor(){
this.IDs = [];
this.IDsUnicode = [];
this.IDLength = 100;
this.tryLimit = 1000;
this.charset = "1234567890abcdef";
this.charsetUnicode = new TextEncoder().encode(this.charset);
}
generateID(){
let id = "";
let tries = 0;
let isFound = false;
while(!isFound){
if(tries > 1){
console.log("TRIED TWICE");
}
if(++tries <= this.tryLimit){
id = "";
for(let i = 0;i < this.IDLength;++i){
id += this.charset[Math.floor(Math.random() * this.charset.length)];
}
if(!this.IDs.includes(id)){
isFound = true;
}
}
else{
throw new RangeError(`Try limit of ${this.tryLimit} exceeded.`);
}
}
this.IDs.push(id);
return id;
}
generateIDUnicode(){
let id = new Uint8Array(0);
let tries = 0;
let isFound = false;
while(!isFound){
if(tries > 1){
console.log("TRIED TWICE");
}
if(++tries <= this.tryLimit){
id = new Uint8Array(this.IDLength);
for(let i = 0;i < this.IDLength;++i){
id.set([this.charsetUnicode[Math.floor(Math.random() * this.charsetUnicode.length)]], i);
}
if(!this.IDsUnicode.includes(id)){
isFound = true;
}
}
else{
throw new RangeError(`Try limit of ${this.tryLimit} exceeded.`);
}
}
this.IDsUnicode.push(id);
return id;
}
}
let iterNumber = 0;
self.addEventListener("message", e => {
const { data } = e;
if(data.messageType === "iter_number"){
iterNumber = data.data;
}
else if(data.messageType === "worker_activity_status"){
if(data.data === "start"){
const idGen = new IDs();
console.log("Processing starting...");
const start = performance.now();
for(let i = 0;i<iterNumber;++i){
idGen.generateIDUnicode();
// idGen.generateID();
}
const end = performance.now();
self.postMessage({messageType: "results", data: idGen.IDsUnicode, messageUnicode: true, time: end - start});
console.log("Worker done!");
self.close();
}
else if(data.data === "stop"){
self.close();
}
}
});
};
const blobURL = URL.createObjectURL(new Blob(["(" + workerFn.toString() + ")()"], { type:
"text/javascript" }));
const worker = new Worker(blobURL);
workers.push(worker);
worker.addEventListener("message", e => {
const { data } = e;
if(data.messageType === "results"){
times.push(data.time);
if(times.length === workerCount){
console.log(`Total time taken: ${times.reduce((a, b) => a + b) / times.length} milliseconds!`);
}
if(data.messageUnicode){
data.data.forEach(arr => {
results.push(new TextDecoder().decode(arr));
});
}
else{
results.push(data.data);
}
}
});
}
workers.forEach(worker => {
worker.postMessage({messageType: "iter_number", data: idCount / workerCount});
worker.postMessage({messageType: "worker_activity_status", data: "start"});
});
And that is how you generate 1 million 100 length hex IDs in 17 seconds on a 32 bit chromebook with 4 Gigabytes of RAM and numerous extensions taking up lots of space.