From 10e393ac4152f0f7eaf59c5f87dd083e721cd5ee Mon Sep 17 00:00:00 2001 From: afshinamighi Date: Tue, 19 Jan 2021 11:20:45 +0100 Subject: [PATCH] The content for anonymization is initiataed --- .../DiningPhilosophers/Program.cs | 8 +-- .../DiningPhilosophers/Solution.cs | 6 +- DataAnonymization/pix/fig-taxonomy-01.png | Bin 0 -> 28128 bytes DataAnonymization/resources.md | 68 ++++++++++++++++++ 4 files changed, 75 insertions(+), 7 deletions(-) create mode 100644 DataAnonymization/pix/fig-taxonomy-01.png create mode 100644 DataAnonymization/resources.md diff --git a/ConcurrentCSharp/DiningPhilosophers/Program.cs b/ConcurrentCSharp/DiningPhilosophers/Program.cs index 9b5c1a0a..bcd9f38c 100644 --- a/ConcurrentCSharp/DiningPhilosophers/Program.cs +++ b/ConcurrentCSharp/DiningPhilosophers/Program.cs @@ -1,6 +1,6 @@ using System; -using Exercise; -//using Solution; // will be provided later +//using Exercise; +using Solution; // will be provided later namespace DiningPhilosophers { @@ -12,12 +12,12 @@ static void Main(string[] args) Table table = new Table(numPhilosphers); Console.WriteLine("[Dinining Philospher] Dining with one fork is going to start ..."); - table.startOneForkDining(iteration); + //table.startOneForkDining(iteration); //Console.WriteLine("[Dinining Philospher] Dining with two forks is going to start (press enter)..."); //Console.ReadLine(); //table.startTwoForksDining(iteration); - //table.startTwoForksDiningSafe(iteration); + table.startTwoForksDiningSafe(iteration); } } diff --git a/ConcurrentCSharp/DiningPhilosophers/Solution.cs b/ConcurrentCSharp/DiningPhilosophers/Solution.cs index a55567dc..5430bda8 100644 --- a/ConcurrentCSharp/DiningPhilosophers/Solution.cs +++ b/ConcurrentCSharp/DiningPhilosophers/Solution.cs @@ -41,7 +41,7 @@ public class Philosopher { public Fork rightFork { get; set; } public Fork leftFork { get; set; } - public int maxEatingTime = 100; + public int maxEatingTime = 10; public int number; public Philosopher(int n) { @@ -89,13 +89,13 @@ public void eatWithTwoForksSafe() Int32 timeout = 10; // todo: pass timeout as a parameter to the mutexes and check if deadlock happens Console.WriteLine("[{0} waiting for right fork ...]", number); - if (rightFork.forkMutex.WaitOne()) + if (rightFork.forkMutex.WaitOne(timeout)) { rightFork.pick(); Console.WriteLine("[{0} picked right fork {1}, waiting for left fork {2} ...]", number, rightFork.id, leftFork.id); - if (leftFork.forkMutex.WaitOne()) + if (leftFork.forkMutex.WaitOne(timeout)) { leftFork.pick(); this.eat(); diff --git a/DataAnonymization/pix/fig-taxonomy-01.png b/DataAnonymization/pix/fig-taxonomy-01.png new file mode 100644 index 0000000000000000000000000000000000000000..6085c695356f38fb7685e5f59e5ca73cb96ddff7 GIT binary patch literal 28128 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 literal 0 HcmV?d00001 diff --git a/DataAnonymization/resources.md b/DataAnonymization/resources.md new file mode 100644 index 00000000..329ba798 --- /dev/null +++ b/DataAnonymization/resources.md @@ -0,0 +1,68 @@ +# Introduction: + +This document will collect basics of data anonymization and helpful resources. + +# Background: + +In this section there will be essential definitions, concepts, examples and required algorithms to understand data anonymization. + + + +## Basic Concepts: + +### Data Anonymization: +Data anonymization (also known as de-identification) is a technique to be applied on datasets containing personal information in which sensitive information about individuals are stored. The main objective of anonymization is to weaken the link between the datasets' personal information and individuals. Anonymized data means that data which previously addressing individuals is processed and after the process the probability of uniquely identifying these individuals becomes less. + + + +### Fundamental Technqies: + +#### generalization: + +Data generalization is a simple technique by which an exact value of a sensitive attribute is replaced with a more general value. In order to choose a general value, a *taxonomy tree* is built by a (data) domain expert. The exact values must be found among the leaves. The most general value appears in the root. + +Figure: [An example of a taxonomy tree](./pix/fig-taxonomy-01.png) + +#### suppression: + + + +#### permutation: + + + +#### swapping: + + + +### Fundamental Algorithms: + + + +#### k-anonimity: + +[todo] + +#### l-diversity: + +[todo] + +# Resources: + +## Books: + +1. Book: ["Database Anonymization: Privacy Models, Data Utility, and Microaggregation-based Inter-model Connections"](https://www.researchgate.net/publication/290229262_Database_Anonymization_Privacy_Models_Data_Utility_and_Microaggregation-based_Inter-model_Connections) + +## Surveys: + +1. Privacy-preserving data publishing: A survey of recent development [[download here](https://dl-acm-org.ezproxy.hro.nl/doi/10.1145/1749603.1749605)] + +## Tools: + +1. Tool: [ARX as an anonymization tool and API](https://arx.deidentifier.org/) +2. Tool: [ARX as a Service](https://oslomet-arx-as-a-service.github.io/resources/Product_Specification.pdf) + +## Reports: + +1. A bachelor thesis: [Anonymization of health data](https://www.duo.uio.no/bitstream/handle/10852/79902/Anonymization-of-Health-Data.pdf?sequence=13&isAllowed=y) +